diff --git a/.gitignore b/.gitignore index 5ef6a52..1c8e076 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies -/node_modules +node_modules/ +**/node_modules/ /.pnp .pnp.* .yarn/* @@ -20,6 +21,16 @@ # production /build +# Separate package projects (they are published from their own repositories) +/chrome-decision-kit/ +/decision-kit/ +/python-decision-kit/ +/vscode-decision-kit/ + +# Package build artefacts +**/*.egg-info/ +*.vsix + # misc .DS_Store *.pem @@ -39,3 +50,10 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +.impeccable +.codex +.claude +.agent +.agents +.claudeignore diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 0000000..a5262fa --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,209 @@ +--- +name: Entscheidomat +description: Deutschsprachige Zufalls-Tools mit warmem Porzellan-Papier-Design und Smaragd-Akzenten +colors: + paper: "#faf8f3" + surface: "#ffffff" + ink: "#111412" + ink-soft: "#45504a" + line: "#e0eae4" + emerald: "#0d7a57" + emerald-strong: "#095c41" + emerald-soft: "#e6f7f0" + emerald-line: "#b2e5d1" + clay: "#b4633f" + clay-soft: "#f6eae2" +typography: + display: + fontFamily: "Cormorant Garamond, Georgia, serif" + fontSize: "clamp(2.5rem, 6vw, 4.5rem)" + fontWeight: 600 + lineHeight: "1.1" + letterSpacing: "-0.01em" + headline: + fontFamily: "Inter, system-ui, sans-serif" + fontSize: "1.875rem" + fontWeight: 700 + lineHeight: "1.2" + letterSpacing: "-0.02em" + title: + fontFamily: "Inter, system-ui, sans-serif" + fontSize: "1.25rem" + fontWeight: 600 + lineHeight: "1.3" + body: + fontFamily: "Inter, system-ui, sans-serif" + fontSize: "1rem" + fontWeight: 400 + lineHeight: "1.6" + label: + fontFamily: "Inter, system-ui, sans-serif" + fontSize: "0.75rem" + fontWeight: 600 + lineHeight: "1" + letterSpacing: "0.15em" +rounded: + sm: "8px" + md: "16px" + lg: "24px" + full: "9999px" +spacing: + xs: "4px" + sm: "8px" + md: "16px" + lg: "24px" + xl: "32px" + 2xl: "48px" + 3xl: "64px" +components: + button-primary: + backgroundColor: "{colors.emerald}" + textColor: "{colors.surface}" + rounded: "{rounded.full}" + padding: "12px 28px" + button-primary-hover: + backgroundColor: "{colors.emerald-strong}" + button-secondary: + backgroundColor: "{colors.surface}" + textColor: "{colors.ink}" + rounded: "{rounded.full}" + padding: "12px 24px" + card: + backgroundColor: "{colors.surface}" + rounded: "{rounded.lg}" + padding: "24px" + input: + backgroundColor: "{colors.surface}" + textColor: "{colors.ink}" + rounded: "{rounded.md}" + padding: "12px 16px" +--- + +# Design System: Entscheidomat + +## Overview + +**Creative North Star: "Das analoge Porzellan-Labor"** + +Entscheidomat vereint die visuelle Wärme von tactilem Porzellan-Papier (`#faf8f3`) mit der Präzision eines modernen digitalen Werkzeugs. Statt lauter Kitsch-Visuals oder kalter SaaS-Gradients basiert das Design-System auf organischen, edlen Smaragd-Tönen (`#0d7a57`), feinen Begrenzungslinien (`#e0eae4`) und subtilen 3D-Zufallselementen (gebürstetes Messing für Münzen, mattes Anthrazit für Magic 8-Ball). + +Das System legt höchsten Wert auf flüssiges visuelles Feedback, taktile Reaktion bei Klicks/Touches und eine ruhige, haptische Atmosphäre. Serifenstarke Akzente in *Cormorant Garamond* setzen spielerische Highlights im Markennamen und in Überschriften, während *Inter* für perfekte Lesbarkeit in Formularen, Tabellen und Interaktionsflächen sorgt. + +**Key Characteristics:** +- **Tactile Paper Canvas:** Warmes Porzellan-Papier (`#faf8f3`) als ruhiger, angenehmer Hintergrund für alle Seiten. +- **Smaragd-Präzision:** Gezielter Einsatz von tiefem Smaragdgrün (`#0d7a57`) für primäre Aktionen, Erfolgszustände und Markenakzente. +- **Typografischer Kontrast:** Zusammenspiel aus sachlicher Sans-Serif (*Inter*) und eleganter Display-Serif (*Cormorant Garamond*). +- **Abgerundete Taktilität:** Vollabgerundete Pill-Buttons (`9999px`) für Aktionen und weiche Container-Ecken (`24px`). +- **Subtile Tiefe:** Sanfte mehrschichtige Schatten statt schwerer Schlagschatten; Interaktionen erzeugen sanftes Anheben (*Lift*). + +## Colors + +Die Farbpalette ist warm, natürlich und fokussiert. Ein einzelner Hauptakzent in Smaragdgrün leitet den Blick, ergänzt durch einen warmen Terracotta-Farbton für seltene Sekundärakzente. + +### Primary +- **Porcelain Paper** (`#faf8f3`): Globaler Seitenhintergrund; schafft eine warme, papierartige Grundstimmung. +- **Deep Ink** (`#111412`): Primäre Textfarbe und dunkle Bedienelemente für maximalen Kontrast. + +### Accent +- **Emerald Accent** (`#0d7a57`): Primärer Markenakzent; wird für CTA-Buttons, aktive Zustände und Markenhighlights verwendet. +- **Emerald Strong** (`#095c41`): Hover- und Active-Zustand für Smaragd-Elemente. +- **Emerald Soft Tint** (`#e6f7f0`): Sanfter Hintergrund-Tint für Tooltips, ausgewählte Elemente und Badges. +- **Emerald Line** (`#b2e5d1`): Zarter Rahmen für Smaragd-Badges und Hover-Zustände. + +### Secondary +- **Terracotta Clay** (`#b4633f`): Warmer Sekundärakzent für ausgewählte Hervorhebungen und spielerische Akzente. +- **Terracotta Soft Tint** (`#f6eae2`): Tint-Hintergrund für sekundäre Badges. + +### Neutral +- **Clean Surface** (`#ffffff`): Container-, Karten- und Modal-Hintergründe für klare Abhebung vom Paper-Background. +- **Soft Ink** (`#45504a`): Sekundäre Textfarbe für Erklärungen, Untertitel und Metadaten. +- **Warm Line** (`#e0eae4`): Subtile Trennlinien und Kartenränder. + +### Named Rules +**The Emerald Sparsensity Rule.** Der Smaragd-Akzent darf auf keiner Seite mehr als 10% der visuellen Fläche einnehmen. Seine Seltenheit verleiht ihm Wertigkeit und Leuchtkraft. + +**The No-Pure-Black Rule.** Reines Schwarz (`#000000`) ist für Text und Flächen verboten. Stattdessen wird stets das warme Deep Ink (`#111412`) verwendet. + +## Typography + +Die Typografie basiert auf dem Kontrast zwischen der funktionalen Sans-Serif *Inter* und der charakterstarken Serif *Cormorant Garamond*. + +**Display Font:** Cormorant Garamond, Georgia, serif +**Body Font:** Inter, system-ui, -apple-system, sans-serif + +### Hierarchy +- **Display** (Semibold 600 / Italic, `clamp(2.5rem, 6vw, 4.5rem)`, Line-Height `1.1`): Hero-Überschriften und charakteristische Markenwörter (z. B. *omat* in *Entscheidomat*). +- **Headline** (Bold 700, `1.875rem` / `30px`, Line-Height `1.2`, Letter-Spacing `-0.02em`): Sektionsüberschriften und Tool-Titel. +- **Title** (Semibold 600, `1.25rem` / `20px`, Line-Height `1.3`): Kartenüberschriften und Dialog-Titel. +- **Body** (Regular 400, `1rem` / `16px`, Line-Height `1.6`, max. Zeilenlänge 65–75ch): Fließtext, Beschreibungen und Anleitungen. +- **Label** (Semibold 600, `0.75rem` / `12px`, Letter-Spacing `0.15em`, Uppercase): Eyebrows, Kategorie-Tags und Tabellenköpfe. + +### Named Rules +**The Dual-Type Rule.** *Cormorant Garamond* wird ausschließlich für Display-Akzente und dekorative Wort-Highlights verwendet; Fließtext, Buttons, Inputs und Navigations-Links verbleiben stets in *Inter*. + +## Layout + +Das Layout folgt einem großzügigen, zentrierten Rastersystem mit klaren Abständen und responsiver Skalierung. + +- **Container:** Maximale Breite von `1152px` (`max-w-6xl`) mit horizontalem Padding (`px-5` mobil, `px-8` ab Desktop). +- **Spatial Grid:** 8px-Rhythmus (`8px`, `16px`, `24px`, `32px`, `48px`, `64px`). +- **Responsive Layout:** 1-spaltig auf Mobilgeräten, 2- bis 3-spaltige Grid-Layouts ab `md` (`768px`) und `lg` (`1024px`). +- **Header:** Fixierte Navigation (`64px` Höhe) mit `backdrop-blur-xl` und fließendem Übergang beim Scrollen. + +## Elevation & Depth + +Entscheidomat verwendet tonal geschichtetes Paper-on-Surface Design anstelle von schweren Schlagschatten. Tiefe entsteht primär durch den Kontrast zwischen Porzellan-Hintergrund (`#faf8f3`) und weißen Oberflächen (`#ffffff`), ergänzt durch sanfte, diffuse Umgebungsschatten. + +### Shadow Vocabulary +- **Soft Ambient** (`0 2px 4px rgb(17 20 18 / 0.03), 0 12px 36px rgb(17 20 18 / 0.06)`): Standard-Schatten für ruhende Karten und interaktive Container. +- **Lifted Elevation** (`0 4px 12px rgb(17 20 18 / 0.06), 0 24px 52px rgb(17 20 18 / 0.10)`): Hover-Zustand für Karten und aktive Tool-Elemente. +- **CTA Focus Glow** (`0 12px 28px rgb(17 20 18 / 0.22)`): Hervorhebung für primäre Aktionsbuttons. + +### Named Rules +**The Flat-at-Rest Rule.** Elemente ruhen flach mit minimalem Umgebungsleuchten (`Soft Ambient`). Tiefe entsteht dynamisch erst bei Benutzer-Interaktion (Hover/Focus). + +## Shapes + +Das Formensystem kombiniert organisch gerundete Ecken mit präzisen Kanten. + +- **Buttons & Pills:** Vollabgerundet (`9999px`) für haptisches, freundliches Aussehen. +- **Karten & Container:** `24px` Radius (`rounded-3xl` / `rounded-2xl`) für moderne Softness. +- **Inputs & Formulare:** `16px` Radius (`rounded-xl`) mit feiner `1px` Umrandung (`#e0eae4`). +- **Focus Rings:** `2px` durchgezogene Smaragd-/Ink-Linie mit `2px` Offset und `6px` Radius. + +## Components + +### Buttons +- **Shape:** Full Pill (`border-radius: 9999px`) +- **Primary:** Background `#0d7a57`, Text `#ffffff`, Padding `12px 28px`, Font Weight 600. +- **Primary Hover:** Background `#095c41`, Scale-up Transition `scale(1.02)`. +- **Secondary:** Background `#ffffff`, Text `#111412`, Border `1px solid #e0eae4`, Shadow `Soft Ambient`. +- **Sound/Icon Button:** Kreisförmig (`40px x 40px`), Background `#ffffff`, Border `#e0eae4`, Icon `#45504a`. + +### Cards & Tool-Container +- **Corner Style:** `24px` (`rounded-3xl`) +- **Background:** `#ffffff` (`bg-surface`) +- **Border:** `1px solid #e0eae4` +- **Internal Padding:** `24px` bis `32px` +- **Shadow:** `Soft Ambient` in Ruhe, transformiert zu `Lifted Elevation` bei Hover. + +### Inputs / Text Fields +- **Style:** Background `#ffffff`, Text `#111412`, Border `1px solid #e0eae4`, Radius `16px`. +- **Focus:** Border-Color `#0d7a57`, Focus-Ring `2px solid #0d7a57` mit `2px` Offset. + +### Navigation +- **Style:** Fixierte Leiste (`h-16`), Transparent im Ruhezustand an der Spitze, wechselt beim Scrollen zu `bg-paper/95` mit `backdrop-blur-xl` und zartem unteren Rand (`#e0eae4`). + +## Do's and Don'ts + +### Do: +- **Do** immer das warme Porzellan-Papier (`#faf8f3`) als Seitenhintergrund verwenden. +- **Do** Smaragdgrün (`#0d7a57`) gezielt für die wichtigsten primären Interaktionen einsetzen. +- **Do** Buttons stets als Abgerundete Pills (`rounded-full`) gestalten. +- **Do** flüssige Framer-Motion / GSAP Übergänge bei Zufalls-Auslosungen anbieten. + +### Don't: +- **Don't** kühle bläuliche Grautöne oder schrill-leuchtende Gradienten verwenden. +- **Don't** reines Schwarz (`#000000`) für Text oder Flächen nutzen. +- **Don't** Gedankenstriche oder Bindestrich-Separaten in Eyebrows oder Titeln verwenden. +- **Don't** harte Schlagschatten oder knallige Neonfarben einbauen. diff --git a/PRODUCT.md b/PRODUCT.md new file mode 100644 index 0000000..042158d --- /dev/null +++ b/PRODUCT.md @@ -0,0 +1,46 @@ +# Product + + + +## Platform + +web + +## Users +Alltags- & Freizeitnutzer in spontanen Entscheidungssituationen (z. B. schnelle Ja/Nein-Entscheidungen, Spieleabende, Auswahl von Essen oder Freizeitaktivitäten) sowie kleinere Gruppen und Teams. + +## Product Purpose +Entscheidomat bietet eine Sammlung deutschsprachiger, kostenloser und intuitiver Zufalls-Tools (Ja/Nein-Generator, Münzwurf, Glücksrad, Würfel, Zufallszahl-Generator, Magic 8-Ball, Namen-Auslosung). Das Produkt nimmt Nutzenden spielerisch den Entscheidungsdruck ab und bringt Leichtigkeit in spontane Alltagssituationen. + +## Positioning +Maximale Flexibilität & Anpassbarkeit der einzelnen Zufalls-Tools kombiniert mit schnellen Ladezeiten, modernem visuellen Feedback und hoher Nutzerfreundlichkeit ohne Barrieren. + +## Operating Context +Spontane Nutzung auf Smartphone, Tablet oder Desktop-Browser im Alltagsgeschehen, bei Treffen mit Freunden, in der Freizeit oder bei der Tagesplanung. + +## Capabilities and Constraints +- **Funktionalität:** 7 Kern-Tools (Ja/Nein-Generator, Münze, Glücksrad, Würfel, Zufallszahl, Magic 8-Ball, Namen-Auslosung). +- **Technischer Stack:** Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS v4, Framer Motion & GSAP. +- **Datenhaltung:** Keine Server-Datenbank; Einstellungsdaten und Anpassungen werden lokal im Browser (LocalStorage) gespeichert. +- **Infrastructure:** Docker Multi-Stage Build, Caddy Reverse Proxy, Umami Cloud (EU-Region, anonyme Statistiken). +- **Sprache:** Deutschsprachig. + +## Brand Commitments +- **Markenname:** Entscheidomat (`entscheidomat.com`) +- **Tonalität & Voice:** Locker, sympathisch, klar & intuitiv. +- **Qualitätsanspruch:** Kostenlos, schnell und barrierefrei nutzbar. + +## Evidence on Hand +- Funktionsfähige Web-App mit 7 integrierten Tool-Komponenten unter `components/tools/` +- SEO-Vorbereitungen mit Open-Graph Previews, `sitemap.xml` und `robots.txt` +- Vorhandene Dokumentation und Deployment-Guides (`README.md`, `ZUKUNFTSPLAN.md`) + +## Product Principles +1. **Sofortige Nutzbarkeit:** Keine Registrierung, keine Hürden – das gewählte Tool steht sofort zur Interaktion bereit. +2. **Maximale Anpassbarkeit:** Hohe Flexibilität bei Eingaben, Namen, Listen und Einstellungen für unterschiedliche Einsatzzwecke. +3. **Visuelle Leichtigkeit & Feedback:** Ansprechende Animationen und deutliches haptisches/visuelles Feedback machen das Auslosen unterhaltsam. +4. **Datenschutz durch Design:** Keine Speicherung personenbezogener Daten; Einstellungen bleiben vollständig im Browser des Nutzers. + +## Accessibility & Inclusion +- Vollständige Tastatur- und Screenreader-Bedienbarkeit aller Tools. +- WCAG AA Kontrastwerte und deutliche Fokus-Zustände. diff --git a/SEO-AUDIT-2026-07-25.md b/SEO-AUDIT-2026-07-25.md new file mode 100644 index 0000000..3666210 --- /dev/null +++ b/SEO-AUDIT-2026-07-25.md @@ -0,0 +1,119 @@ +# SEO-Audit Entscheidomat – 25.07.2026 + +Basis: 10 Keyword-Planner-Exporte (25.07.), Codebase-Review `app/`, `components/`, `lib/`, Live-Abruf `entscheidomat.com`. + +--- + +## 1. Bewertung der Keyword-Recherche + +### Datenqualität + +| Befund | Bedeutung | +|---|---| +| Volumina nur in Buckets: 50 / 500 / 5.000 / 50.000 / 500.000 | Keyword Planner ohne aktive Ad-Spend. "500.000" heißt real 100k–1M. Für Priorisierung zwischen zwei Keywords im selben Bucket unbrauchbar. | +| Monats-Spalten (Jul 25 – Jun 26) komplett leer | Keine Saisonalität ableitbar – ausgerechnet für Wichteln/Adventskalender/Gewinnspiel kritisch. | +| "Änderung 3 Monate / YoY" nur 0 % / 900 % / −90 % / −100 % / ∞ | Reine Bucket-Sprünge, kein echtes Trendsignal. Ignorieren. | +| 518 Keywords gesamt, davon **148 komplett irrelevant** | Der Seed "münze werfen" ist in den Münzhandel abgedriftet: *münzen kaufen, münzankauf, numismatik shop, reppa, künker, 2 Euro Fehlprägung*. 29 % Müll. | +| 370 brauchbar, davon **208 im 50er-Bucket** | Extremer Long-Tail-Überhang. Nur 36 Keywords ab 5.000. | +| Starke Dubletten-Cluster | *ja nein generator / ja oder nein generator / generator ja nein / nein oder ja* = 1 Intent, 6 Zeilen. Gilt für fast alle Gruppen. | + +### Fazit + +Als **Themen-Landkarte gut**, als **Priorisierungsgrundlage schwach**. Die Recherche bestätigt, dass die 7 gebauten Tools die richtigen Themen treffen – sie kann aber nicht beantworten, welches Tool zuerst Traffic bringt. + +**Konkret nachziehen:** + +1. Ad-Spend aktivieren oder Ahrefs/Semrush für exakte Volumina + Saisonalität (Ahrefs-MCP ist im Setup vorhanden, nur nicht autorisiert). +2. Münzhandel-Cluster (148 KWs) aus dem Datensatz löschen – verzerrt jede Aggregation. +3. Nach **Intent-Cluster** gruppieren statt nach Keyword, sonst wird ein Intent zu 6 Seiten (Duplicate-Content-Risiko). +4. SERP-Realität prüfen: `zufallsgenerator`, `glücksrad`, `würfel online` sind Tool-SERPs, die von etablierten Domains (google.com Spinner, wheelofnames.com, random.org, blindtextgenerator) besetzt sind. Für eine neue Domain sind das 12–24-Monats-Ziele, keine Quick Wins. + +### Wo die Recherche echte Lücken zeigt (nach Priorität) + +| Cluster | Bucket | Status auf der Site | Bewertung | +|---|---|---|---| +| **Würfel-Varianten** (w20/w10/d100, dnd/rpg, kniffel, mehrere Würfel) | ~35 KWs à 50–500 | Tool kann **nur 1× W6** | Größte Lücke: Produkt- *und* SEO-Gap. FAQ gibt aktuell offen zu "aktuell ein Würfel pro Wurf". | +| **Lotto / Quicktipp** (6 aus 49, Eurojackpot, Keno, 6 aus 45) | 5.000 + ~25 Long-Tail | Keine Seite | Klarer eigener Intent, hohe kommerzielle Nähe (gut für AdSense-RPM). | +| **Teams / Gruppen einteilen** | ~8 KWs à 50 | Nur Nebensatz in `namen-auslosen` | Eigene Seite `/gruppen-einteilen` sinnvoll – anderer Intent als "Gewinner ziehen". | +| **Gewinner auslosen (Instagram/Gewinnspiel)** | 500 + Long-Tail | Nur Feature-Erwähnung | Eigene Seite `/gewinner-auslosen`, hohe Conversion-Nähe. | +| **Wichteln Namen ziehen** | ~10 KWs à 50–500 | Nicht adressiert | Saisonal (Nov/Dez) – jetzt bauen, damit es bis November indexiert ist. | +| **Glücksrad selbst erstellen / eigenes Glücksrad** | ~12 KWs à 50–500 | Feature vorhanden, kein Targeting | Als H2-Sektion auf `/gluecksrad`, keine eigene Seite. | +| **Entscheidungsrad / Zufallsrad** | 5.000 (2 KWs) | Nur im Title von `/gluecksrad` | Synonym-Cluster – als H2 + FAQ auf `/gluecksrad` abdecken, **nicht** als eigene Seite (Kannibalisierung). | +| **Orakel / Wahrsagen / "soll ich oder soll ich nicht"** | 5.000 + 500 | `/magic-8-ball` deckt es implizit | H2-Sektion ergänzen, Wording "Orakel ja oder nein kostenlos" aufnehmen. | + +--- + +## 2. SEO-Analyse des Projekts + +### Was solide ist + +- Saubere Next-App-Router-Struktur, sprechende deutsche Slugs (`/ja-nein-generator`, `/gluecksrad`, `/wuerfel-online`). +- Metadata-Template + eigene Title/Description/Canonical pro Seite, alle unique und intent-nah. +- JSON-LD durchgängig: `WebSite` + `Organization` (Layout), `WebApplication` + `FAQPage` + `BreadcrumbList` (Tool-Seiten), `Offer price: 0`. +- `sitemap.ts` / `robots.ts` generiert, aus `TOOL_PAGES` gespeist – keine Drift. +- `public/llms.txt` vorhanden und wirklich brauchbar formuliert (AEO/GEO-Vorsprung gegenüber fast allen Wettbewerbern). +- Internes Linking über `RelatedTools` von jeder Tool-Seite zu allen anderen. +- 640–870 Wörter Content pro Tool-Seite mit HowTo-Schritten, Beispielen, Abgrenzung zu Nachbar-Tools, 5–7 FAQs. Für Tool-Seiten überdurchschnittlich. +- Sichtbarer Breadcrumb + `lang="de"` + `locale: de_DE` korrekt. + +### Probleme – nach Härte sortiert + +**P0 – AdSense-Script mit `strategy="beforeInteractive"`** (`app/layout.tsx`) +Blockiert das Rendering vor Hydration auf **jeder** Seite. Bei einem Tool, dessen einziger USP "sofort nutzbar" ist, kostet das direkt LCP/INP und damit Ranking *und* Conversion. Zusätzlich behauptet die Homepage-FAQ "Aktuell zeigt Entscheidomat keine Werbung" – während AdSense schon eingebunden ist. Das ist datenschutzrechtlich (Einwilligung nach TDDDG/DSGVO) das größere Problem als das SEO. +→ Auf `afterInteractive` bzw. `lazyOnload` umstellen und erst nach Consent laden. **Ohne Consent-Banner darf AdSense in DE gar nicht laden.** + +**P0 – Kein Consent-Management sichtbar** +AdSense + Umami Cloud. Umami ohne Cookies ist vertretbar, AdSense nicht. + +**P1 – Preloader auf Desktop** +Eine Intro-Animation vor dem Content ist bei einem "In 2 Sekunden entschieden"-Tool ein LCP- und Bounce-Killer. Auf Mobile bereits deaktiviert – konsequent auch auf Desktop abschalten oder auf den allerersten Besuch pro Session begrenzen (ist es teilweise schon, aber der Blocking-Inline-Script läuft trotzdem `beforeInteractive`). + +**P1 – Fonts mit `display: "optional"`** +Zwei Google-Font-Familien (Inter + Cormorant in 5 Weights × 2 Styles). `optional` vermeidet CLS, sorgt aber dafür, dass die Display-Font beim Erstbesuch oft gar nicht erscheint – die Marke sieht beim wichtigsten Besuch anders aus. Cormorant auf 2–3 tatsächlich genutzte Weights reduzieren. + +**P1 – Homepage adressiert das Money-Keyword nicht im H1** +H1 lautet "Kostenloser Zufallsgenerator für schnelle Entscheidungen" – gut. Aber die Homepage konkurriert mit den Tool-Seiten um `zufallsgenerator` *und* alle Tool-Begriffe gleichzeitig. Klarer trennen: Homepage = Hub/Marke + "Zufallsgenerator", Tool-Seiten = jeweils exakt ein Intent. + +**P2 – Würfel-Seite verspricht weniger, als das Keyword-Set verlangt** +Title/H1 sagen explizit "6-seitiger Würfel", die Homepage-Card behauptet aber "6er, 10er oder benutzerdefinierte 3D-Würfel" und "einen oder mehrere". Widerspruch zwischen Homepage-Text und Tool-Realität – schadet Trust und Snippet-Genauigkeit. + +**P2 – `FAQPage`-Schema auf allen Seiten** +Google zeigt FAQ-Rich-Results seit 2023 fast nur noch für Behörden-/Gesundheitsdomains. Das Markup schadet nicht und hilft AEO/LLM-Extraktion, sollte aber nicht als Traffic-Hebel eingeplant werden. Wichtiger: das `HowTo`-Schema fehlt – die `STEPS`-Arrays sind bereits vorhanden und werden nicht ausgezeichnet. + +**P2 – `meta keywords`** +Wirkungslos seit ~2009. Kein Schaden, aber Signal für Reviewer, dass die Meta-Strategie alt ist. Entfernen. + +**P3 – Sitemap `lastModified` hart codiert auf 2026-07-23** +Bei jedem Content-Update manuell mitpflegen oder aus Git-Timestamp ableiten. + +**P3 – Kein Blog / keine Ratgeber-Ebene** +Alle 7 Seiten sind transaktional. Es fehlt jeglicher informationaler Content, der Backlinks anzieht ("Wie treffe ich Entscheidungen schneller", "Warum Zufall bei Entscheidungen hilft", "Entscheidungsparalyse"). Für eine neue Domain ohne Backlinks ist genau das der einzig realistische Autoritäts-Hebel. + +**P3 – Backlink-Profil vermutlich bei null** +Nicht messbar ohne Ahrefs-Zugang, aber bei einer im Juli 2026 gelaunchten Domain praktisch sicher. Ohne Referring Domains sind `zufallsgenerator` (100k–1M) und `glücksrad` (100k–1M) nicht erreichbar – unabhängig von der Onpage-Qualität. + +--- + +## 3. Empfohlene Reihenfolge + +**Woche 1 – Blocker** +1. AdSense auf `afterInteractive` + Consent-Gate, oder bis zum Consent-Banner ganz raus. +2. Consent-Management einbauen. +3. Preloader-Inline-Script aus `beforeInteractive` lösen. +4. Widerspruch Homepage-Card ↔ Würfel-Tool auflösen. +5. `meta keywords` entfernen, `HowTo`-Schema aus `STEPS` ergänzen. + +**Woche 2–3 – Produkt schließt SEO-Lücke** +6. Würfel-Tool: W4/W6/W8/W10/W12/W20/W100 + mehrere Würfel gleichzeitig. Danach `/wuerfel-online` neu texten und `/wuerfel-online/w20`, `/wuerfel-online/dnd` nur bauen, wenn jede Seite eigenständigen Inhalt hat (Würfel-Notation, Wahrscheinlichkeitstabelle) – sonst Thin Content. +7. `/lotto-zufallsgenerator` als eigene Seite (6 aus 49, Eurojackpot, Keno als Presets). + +**Woche 4–6 – Cluster ausbauen** +8. `/gewinner-auslosen` und `/gruppen-einteilen` als eigene Seiten. +9. Wichteln-Sektion auf `/namen-auslosen` (bis Ende September live, damit sie zur Saison rankt). +10. H2-Sektionen: "Glücksrad selbst erstellen" auf `/gluecksrad`, "Orakel ja oder nein" auf `/magic-8-ball`. +11. `llms.txt` nach jedem neuen Page-Launch aktualisieren. + +**Laufend** +12. Search Console: Indexierungsstatus aller 9 URLs prüfen, danach wöchentlich Impressions je Cluster. +13. 3–5 informationale Artikel für Backlink-Akquise. +14. Keyword-Recherche mit echten Volumina wiederholen, sobald Ahrefs oder Ad-Spend verfügbar ist. diff --git a/SEO-KEYWORD-PLAN-2026-08-03.md b/SEO-KEYWORD-PLAN-2026-08-03.md new file mode 100644 index 0000000..31d74dd --- /dev/null +++ b/SEO-KEYWORD-PLAN-2026-08-03.md @@ -0,0 +1,114 @@ +# Keyword- & Blogplan (Basis: GSC letzte 3 Monate, Stand 03.08.2026) + +## Ausgangslage + +371 Impressionen, 5 Klicks in 3 Monaten. Die Seite ist noch kaum sichtbar – +alle Tool-Seiten außer `/magic-8-ball` (Pos. 6) ranken auf Position 19–52. +Das heißt: Es geht **nicht** um Feintuning, sondern darum, für die +Haupt-Keywords überhaupt genug Inhalt zu haben. + +| Seite | Impr. | Ø Pos. | Bewertung | +|---|---|---|---| +| `/ja-nein-generator` | 151 | 22,8 | Größtes Potenzial, knapp vor Seite 2 | +| `/namen-auslosen` | 81 | 28,4 | Gutes Potenzial | +| `/zufallszahl-generator` | 80 | 51,2 | Viel Nachfrage, schlechtestes Ranking | +| `/muenze-werfen` | 51 | 52,2 | Nachfrage da, Ranking schwach | +| `/` (Startseite) | 38 | 19,6 | Rankt für "entscheidungshilfe online" | +| `/gluecksrad` | 23 | 26,4 | ok | +| `/magic-8-ball` | 20 | 6,0 | Bestes Ranking, kaum Volumen | +| `/wuerfel-online` | 0 | – | Wird gar nicht ausgespielt | + +--- + +## Die 6 wichtigsten Keyword-Cluster + +### 1. Ja/Nein (80 Impr.) — höchste Priorität +`ja oder nein` (50.000/Mon, Pos. 15,8) · `ja nein generator` (50.000, Pos. 40,9) · +`ja nein zufall` · `zufallsgenerator ja nein` · `entscheidungsfinder ja nein` + +Riesiges Volumen, Seite steht kurz vor Seite 1. **Hier zuerst investieren.** + +### 2. Zufallszahlen (72 Impr.) — größte Ranking-Lücke +`zahlengenerator` (Pos. 65) · `zufallsgenerator zahl` (50.000, Pos. 82) · +`zufallszahlengenerator` (5.000, Pos. 64) · `randomizer zahlen` · +**Longtail-Gold:** `zufallszahl zwischen 1 und 10`, `nenne mir eine zahl zwischen 1 und 5`, +`zahl von 1-5`, `zufallsgenerator zahlen ohne wiederholung` + +Diese „Zahl zwischen X und Y"-Anfragen sind konkret, wenig umkämpft und +tauchen bereits organisch auf. Perfekt für Blogposts + Anker-Links. + +### 3. Namen / Losen (63 Impr.) +`losen online` (19 Impr., Pos. 46!) · `auslosen namen` (Pos. 12,6) · +`zufallsgenerator namen` (50.000, Pos. 38,6) · `auslosungstool` · +`lose ziehen online kostenlos` · `zettel ziehen online` + +Auffällig: **`losen online` und `lose ziehen online`** werden gar nicht bedient – +das ist ein eigenes Suchbedürfnis („Lose ziehen", nicht „Namen auslosen"). + +### 4. Münzwurf (37 Impr.) — schlechteste Rankings +`münze werfen` (17 Impr., Pos. 78) · `münzwurf online` (5.000) · `kopf oder zahl` · +`digitaler münzwurf` · `münzwurf mit beschriftung` (Pos. 5 – schon stark!) + +### 5. Entscheidungshilfe generisch (36 Impr.) — Startseite/Ratgeber +`entscheidungshilfe online` (Pos. 19,1, einziger Klick!) · `entscheidungshilfe generator` · +`entscheidungshelfer online` · `entscheidungsfinder` · `entscheidungsgenerator` · `entscheider online` + +### 6. Fehlende Tool-Seite: „Entweder-oder" (15 Impr., Pos. 9,1) +`entweder oder generator` rankt auf Pos. 9 **ohne eigene Seite**. +Dazu passend: `entscheidungsrad online` (Pos. 9,5), `entscheidung rad`, `online drehscheibe`. + +--- + +## Neue Blogposts (Priorität von oben nach unten) + +1. **„Ja oder Nein? 7 Situationen, in denen ein Ja-Nein-Generator wirklich hilft"** + → Ziel-KWs: `ja oder nein`, `ja nein generator`, `ja nein zufall`, `zufallsgenerator ja nein` + → verlinkt auf `/ja-nein-generator` + +2. **„Zufallszahl zwischen 1 und 10 – so funktioniert echter Zufall am Computer"** + → Ziel-KWs: `zufallszahl zwischen 1 und 10`, `zahl von 1-5`, `nenne mir eine zahl zwischen 1 und 20`, + `zufallsgenerator zahlen ohne wiederholung` + → Abschnitte pro Bereich (1–5, 1–10, 1–20, 1–100), erklärt Pseudo- vs. echter Zufall + → verlinkt auf `/zufallszahl-generator` + +3. **„Lose ziehen online: Verlosung ohne Zettel und Hut organisieren"** + → Ziel-KWs: `losen online`, `lose ziehen online kostenlos`, `zettel ziehen online`, + `auslosungstool`, `verlosung` + → Eigenes Bedürfnis, aktuell nur Pos. 46 → verlinkt auf `/namen-auslosen` + +4. **„Kopf oder Zahl: Münzwurf online statt echter Münze"** + → Ziel-KWs: `münze werfen`, `kopf oder zahl`, `digitaler münzwurf`, `münzwurf online` + → verlinkt auf `/muenze-werfen` + +5. **„Entweder oder: Wie du dich zwischen zwei Optionen entscheidest"** + → Ziel-KWs: `entweder oder generator`, `entscheidungsrad online`, `entscheidung rad` + → **Zusätzlich: eigene Tool-Seite `/entweder-oder` anlegen** (rankt schon Pos. 9 ohne Seite!) + +6. **„Namen fair auslosen: Teams, Gewinner und Aufgaben verteilen"** + → Ziel-KWs: `zufallsgenerator namen`, `namen ziehen online`, `namen losen`, `auslosen` + +--- + +## Bestehende Ratgeber verbessern + +| Guide | Was fehlt | +|---|---| +| `entscheidung-treffen-wenn-zwei-optionen-gleich-gut-sind` | Keyword `entweder oder` / `entscheidungshilfe online` nicht im Title. → Title erweitern um „Entscheidungshilfe", FAQ-Block mit `ja oder nein`, `entweder oder generator` | +| `faire-auslosung-namen-liste` | Begriff **„losen"/„Lose ziehen"** kommt nicht vor – genau dafür gibt es Nachfrage (19 Impr.). Abschnitt „Lose ziehen online" ergänzen | +| `zufallsgenerator-richtig-nutzen` | Zahlenbereiche („zwischen 1 und 10/100") fehlen komplett, obwohl das die meisten Longtails sind. Abschnitt + FAQ ergänzen | + +**Alle drei Guides zusätzlich:** +- FAQ-Schema (`FAQPage` JSON-LD) mit den echten Suchanfragen als Fragen +- Interne Links zu den passenden Tool-Seiten in jedem Abschnitt +- `updated`-Datum pflegen + +--- + +## Schnellmaßnahmen neben dem Blog + +- `/wuerfel-online` bekommt 0 Impressionen → Indexierung prüfen (Sitemap, Meta-Title) +- `/zufallszahl-generator` und `/muenze-werfen` ranken auf Pos. 50–80 bei + vorhandener Nachfrage → Titles/H1 auf exakte Suchbegriffe ausrichten + (`Zufallszahl-Generator: Zufallszahl zwischen 1 und 100 erzeugen`, + `Münze werfen online – Kopf oder Zahl`) +- Neue Tool-Seite `/entweder-oder` (bestes Aufwand-Nutzen-Verhältnis im ganzen Set) diff --git a/UMSETZUNGSPLAN-4-WOCHEN-2026-08-03.md b/UMSETZUNGSPLAN-4-WOCHEN-2026-08-03.md new file mode 100644 index 0000000..1810c3c --- /dev/null +++ b/UMSETZUNGSPLAN-4-WOCHEN-2026-08-03.md @@ -0,0 +1,131 @@ +# Entscheidomat – Umsetzungsplan 4 Wochen + +Stand: 3. August 2026 · Datenbasis: GSC letzte 3 Monate (371 Impressionen, 5 Klicks) + +--- + +## Zwei Korrekturen vorweg + +Ich habe in diesem Chat zweimal etwas empfohlen, ohne vorher im Code +nachzusehen. Beides war schon erledigt: + +- **Titles/Descriptions optimieren** → sind bereits sauber auf die Keywords + ausgerichtet. Kein Handlungsbedarf. +- **FAQ-Schema ergänzen** → alle sieben Tool-Seiten haben bereits + `FAQPage` + `BreadcrumbList` + `WebApplication` als JSON-LD. + Die Ratgeber-Detailseiten haben `Article` mit benanntem Autor. + +Das verkleinert die To-do-Liste erheblich. Was übrig bleibt, steht unten. + +## Die ehrliche Ausgangslage + +Die Seite ist neu (`UPDATED: 23. Juli 2026`), technisch sauber und +thematisch komplett geschlossen. Positionen 20–80 sind bei diesem Alter +normal und in vier Wochen **nicht** grundlegend zu ändern. + +Der Plan optimiert deshalb nicht auf Rankings, sondern auf zwei Dinge, die +man kontrollieren kann: **dass alles im Index ist** und **dass in 8–12 Wochen +verwertbare Daten vorliegen**. + +Realistisches Ziel nach 4 Wochen: 9 Ratgeber + 8 Tool-Seiten indexiert, +Impressionen im Bereich 800–1.500. Nicht mehr. Wer dir für diesen Zeitraum +Klickwachstum verspricht, rät. + +--- + +## Woche 1 — Ausliefern und indexieren + +Ohne diesen Schritt ist der Rest wirkungslos: Die sechs neuen Blogposts +existieren bisher nur im Code. + +| # | Aufgabe | Wer | +|---|---|---| +| 1.1 | `npm run build` lokal durchlaufen lassen, dann deployen (Docker) | Timo | +| 1.2 | Live prüfen: alle 6 neuen `/ratgeber/...`-URLs erreichbar | Timo | +| 1.3 | `sitemap.xml` live aufrufen – enthält sie 9 Ratgeber-Einträge? | Timo | +| 1.4 | In der GSC alle 6 neuen URLs einzeln über „URL-Prüfung → Indexierung beantragen" einreichen | Timo | +| 1.5 | `/wuerfel-online` per URL-Prüfung testen – 0 Impressionen bei sauberem Title deutet auf fehlende Indexierung | Timo | +| 1.6 | Sitemap in der GSC neu einreichen | Timo | + +**Checkpoint Ende Woche 1:** Jede der 17 URLs ist in der GSC als +„indexiert" oder „Indexierung beantragt" bestätigt. + +--- + +## Woche 2 — `/entweder-oder` als Tool-Seite + +Der einzige Punkt mit echtem kurzfristigem Hebel. `entweder oder generator` +steht auf **Position 9,1** – ohne dass es die Seite gibt. Dazu passen +`entscheidungsrad online` (Pos. 9,5), `entscheidung rad`, `online drehscheibe`. + +| # | Aufgabe | Wer | +|---|---|---| +| 2.1 | `app/entweder-oder/page.tsx` nach dem Muster von `/muenze-werfen` anlegen: zwei frei beschriftbare Optionen, eine Ziehung | Claude | +| 2.2 | Title: `Entweder oder Generator – zwischen zwei Optionen entscheiden` | Claude | +| 2.3 | JSON-LD analog zu den anderen Tool-Seiten (Breadcrumb + WebApplication + FAQPage) | Claude | +| 2.4 | In `sitemap.ts` und Navigation aufnehmen | Claude | +| 2.5 | Deployen, indexieren lassen | Timo | + +**Warum das und nicht mehr Content:** Position 9 ohne Seite heißt, Google +ordnet die Domain dem Thema bereits zu. Eine passende Seite ist hier +deutlich wahrscheinlicher wirksam als ein neuer Artikel zu einem Thema, +für das noch gar nichts rankt. + +--- + +## Woche 3 — Interne Verlinkung + +Aktuell zeigt jede Ratgeber-Seite dieselben drei Links im Fuß +(`muenze-werfen`, `gluecksrad`, `namen-auslosen`) – unabhängig vom Thema. +Der Ja-Nein-Artikel verlinkt also nicht auf den Ja-Nein-Generator. + +| # | Aufgabe | Wer | +|---|---|---| +| 3.1 | `Guide`-Typ um `relatedTools: string[]` erweitern | Claude | +| 3.2 | Pro Guide die 2–3 thematisch passenden Tools eintragen | Claude | +| 3.3 | `ratgeber/[slug]/page.tsx` auf `relatedTools` umstellen statt fester Liste | Claude | +| 3.4 | Umgekehrte Richtung: auf jeder Tool-Seite 1–2 passende Ratgeber verlinken | Claude | +| 3.5 | Kontextlinks im Fließtext der 6 neuen Artikel setzen (nicht nur im Fuß) | Claude | + +**Zuordnung:** + +| Ratgeber | Tools | +|---|---| +| `ja-oder-nein-entscheiden` | ja-nein-generator, muenze-werfen | +| `zufallszahl-zwischen-1-und-10` | zufallszahl-generator, wuerfel-online | +| `lose-ziehen-online` | namen-auslosen, gluecksrad | +| `kopf-oder-zahl-muenzwurf-online` | muenze-werfen, ja-nein-generator | +| `entweder-oder-entscheiden` | entweder-oder, muenze-werfen, gluecksrad | +| `namen-fair-auslosen-teams-gewinner` | namen-auslosen, gluecksrad | + +--- + +## Woche 4 — Messpunkte setzen, nicht optimieren + +Nach vier Wochen liegen noch keine belastbaren Zahlen vor. Diese Woche +dient dazu, die spätere Auswertung vorzubereiten. + +| # | Aufgabe | Wer | +|---|---|---| +| 4.1 | GSC-Export ziehen und mit dem Stand vom 3. August vergleichen | Timo | +| 4.2 | Prüfen: Ziehen die 6 neuen Ratgeber überhaupt Impressionen? Welche? | Timo | +| 4.3 | `/entweder-oder` – Position beobachten, aber noch nicht bewerten | Timo | +| 4.4 | Kalendereintrag für die echte Auswertung in **Woche 12** setzen | Timo | +| 4.5 | Keine neuen Artikel schreiben | – | + +--- + +## Was in diesem Plan bewusst fehlt + +- **CTR-Optimierung.** Bei 371 Impressionen und 5 Klicks ist jede CTR + statistisches Rauschen. Sinnvoll ab etwa 2.000–3.000 Impressionen pro Seite. +- **Weitere Blogposts.** Erst auswerten, welche der sechs neuen ziehen. +- **`siteFocusScore`-Aufräumen.** Es gibt nichts zu löschen – die Seite + behandelt ausschließlich Zufall und Entscheidungen. +- **Linkbuilding-Kampagne.** Für ein Projekt dieser Größe in vier Wochen + nicht sinnvoll planbar. + +## Aufwandsverteilung + +- **Timo:** ca. 3–4 Stunden gesamt, überwiegend Woche 1 (GSC-Klickarbeit) +- **Claude:** Woche 2 und 3, in je einer Sitzung erledigbar diff --git a/app/datenschutz/page.tsx b/app/datenschutz/page.tsx index 190e55c..1b58124 100644 --- a/app/datenschutz/page.tsx +++ b/app/datenschutz/page.tsx @@ -91,14 +91,15 @@ export default function DatenschutzPage() {
-

5. Cookies und Werbung

+

5. Werbung mit Google AdSense

- Entscheidomat setzt aktuell keine Cookies und keine Werbedienste - ein. Sollte künftig Werbung (z. B. Google AdSense) - hinzukommen, wird diese Datenschutzerklärung vorher aktualisiert - und eine Einwilligungslösung (Consent-Banner) für Nutzerinnen und - Nutzer aus der EU, dem UK und der Schweiz eingebaut, bevor der - Dienst aktiv geschaltet wird. + Entscheidomat ist für die Nutzung von Google AdSense vorbereitet. + Sobald personalisierte oder nicht-personalisierte Anzeigen an + Besucherinnen und Besucher im Europäischen Wirtschaftsraum, im + Vereinigten Königreich oder in der Schweiz ausgeliefert werden, + setzen wir eine geeignete Einwilligungslösung ein und aktualisieren + diese Datenschutzerklärung um die dann konkret verwendeten + Einstellungen und Empfänger.

diff --git a/app/developer/page.tsx b/app/developer/page.tsx new file mode 100644 index 0000000..6fbb6c5 --- /dev/null +++ b/app/developer/page.tsx @@ -0,0 +1,190 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { ArrowUpRight, Box, Check, Code2, Puzzle, Terminal } from "lucide-react"; +import Nav from "@/components/nav"; +import Footer from "@/components/footer"; + +function GithubIcon({ className }: { className?: string }) { + return ( + + ); +} + +export const metadata: Metadata = { + title: "Decision Kit – Developer Suite", + description: "Open-Source-Tools von Entscheidomat: Repository, VS Code Extension, Chrome Extension, npm-Paket, Python SDK und GitHub Action.", + openGraph: { + title: "Decision Kit – Developer Suite | Entscheidomat", + description: "Zufalls-Entscheidungstools für VS Code, Chrome, Node.js, Python und GitHub Actions.", + url: "https://entscheidomat.com/developer", + }, +}; + +type Asset = { + title: string; + eyebrow: string; + description: string; + icon: typeof Puzzle; + action?: string; + href?: string; + snippet?: string; + status: string; +}; + +const assets: Asset[] = [ + { + title: "GitHub Repository", + eyebrow: "Open Source · MIT", + description: "Der vollständige Decision-Kit-Quellcode mit Releases, Issues und Contribution Guide – die zentrale Anlaufstelle für Entwickler.", + icon: Code2, + action: "Repository öffnen", + href: "https://github.com/knuthtimo-lab/decision-kit", + snippet: "git clone https://github.com/knuthtimo-lab/decision-kit.git", + status: "knuthtimo-lab/decision-kit", + }, + { + title: "Decision Kit für VS Code", + eyebrow: "Extension · v1.0.0", + description: "Ziehe einen Gewinner aus markiertem Text, würfle mit Notation wie 2d6+3 und öffne das Glücksrad direkt in deiner IDE.", + icon: Puzzle, + action: "Im VS Code Store öffnen", + href: "https://marketplace.visualstudio.com/items?itemName=TimoKnuth.decisionkit-vscode", + status: "Visual Studio Marketplace", + }, + { + title: "Decision Kit für Chrome", + eyebrow: "Browser-Erweiterung · Manifest V3", + description: "Random Picker, Glücksrad, Würfel, Münzwurf und praktische Kontextmenü-Kürzel für schnelle Entscheidungen im Browser.", + icon: Puzzle, + action: "Im Chrome Web Store ansehen", + href: "https://chromewebstore.google.com/detail/decision-kit-random-picke/ehnieppgcoaapbgnilajkcjhakjedlgo", + status: "Chrome Web Store · Live", + }, + { + title: "Decision Kit für Firefox", + eyebrow: "Firefox Add-on · v1.1.5", + description: "Random Picker, Glücksrad, Würfel, Münzwurf und Kontextmenü-Kürzel direkt im Firefox-Browser nutzen.", + icon: Puzzle, + action: "Auf Firefox Add-ons ansehen", + href: "https://addons.mozilla.org/addon/decision-kit-picker-rad-w%C3%BCrfel/", + status: "Mozilla Add-ons · Live", + }, + { + title: "TypeScript Library", + eyebrow: "npm · v1.0.0", + description: "Zufallsalgorithmen, Würfel-Parser, Glücksrad-Logik und React Hooks als wiederverwendbare Bausteine.", + icon: Box, + action: "npm-Paket ansehen", + href: "https://www.npmjs.com/package/decision-kit", + snippet: "npm install decision-kit", + status: "Node.js & React", + }, + { + title: "Python SDK & CLI", + eyebrow: "PyPI · v1.0.0", + description: "Decision-Kit für Python-Skripte, Automatisierungen und die Kommandozeile.", + icon: Terminal, + action: "PyPI-Projekt ansehen", + href: "https://pypi.org/project/decision-kit/", + snippet: "pip install decision-kit", + status: "Python Package Index", + }, + { + title: "GitHub Action", + eyebrow: "GitHub Marketplace", + description: "Nutze Auslosungen, Teamaufteilungen und Zufallsentscheidungen direkt in deinen CI/CD-Workflows.", + icon: Code2, + action: "Action ansehen", + href: "https://github.com/marketplace/actions/decision-kit-action", + snippet: "uses: knuthtimo-lab/decision-kit@v1.0.0", + status: "Für GitHub Actions", + }, +]; + +export default function DeveloperPage() { + const jsonLd = { + "@context": "https://schema.org", + "@type": "SoftwareApplication", + name: "Decision Kit", + operatingSystem: "All", + applicationCategory: "DeveloperApplication", + author: { "@type": "Organization", name: "Entscheidomat" }, + codeRepository: "https://github.com/knuthtimo-lab/decision-kit", + }; + + return ( + <> + +