MDX Components für moderne Content-Systeme
Eine technische Übersicht über wiederverwendbare React Components in MDX. Mit Implementierungsbeispielen für interaktive Inhalte.
MDX erweitert Markdown um React Components und ermöglicht damit die nahtlose Integration interaktiver Elemente in statische Inhalte. Diese Architektur verbindet die Einfachheit von Markdown mit der Flexibilität moderner Frontend-Frameworks.
Inhaltsverzeichnis
Teil 1: Markdown Basics
Headings
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Text Formatting
Ein Paragraph mit kursivem Text, fettem Text und inline Code.
Dies ist ein neuer Paragraph mit kombiniertem fetten und kursiven Text.
Abbreviations
Abkürzungen mit Tooltip-Erklärung für bessere Accessibility.
Die HTML-Spezifikation wird vom W3C gepflegt. Moderne Websites nutzen CSS für Styling und JS für Interaktivität.
Für SEO ist semantisches HTML wichtig. Die API kommuniziert via REST oder GraphQL.
<abbr title="Hypertext Markup Language">HTML</abbr>
<abbr title="World Wide Web Consortium">W3C</abbr>
<abbr title="Cascading Style Sheets">CSS</abbr>
<abbr title="Application Programming Interface">API</abbr>Tipp: Hover über die Abkürzungen zeigt die vollständige Bedeutung.
Language Spans
Fremdsprachige Begriffe korrekt auszeichnen für Screenreader und Suchmaschinen.
Das User Interface sollte eine gute User Experience bieten. Wir folgen dem Don't Repeat Yourself-Prinzip (DRY).
Der Pull Request wurde nach dem Code Review gemerged. Das Deployment erfolgt via Continuous Integration.
Im Café gibt es Cappuccino und Croissants.
<!-- Englische Begriffe -->
<span lang="en">User Experience</span>
<span lang="en">Pull Request</span>
<span lang="en">Code Review</span>
<!-- Andere Sprachen -->
<span lang="fr">Café</span>
<span lang="it">Cappuccino</span>
<span lang="de">Gemütlichkeit</span>Vorteile: Screenreader können die korrekte Aussprache wählen, Suchmaschinen verstehen den Sprachkontext.
Listen
Unordered List:
- Erstes Element
- Zweites Element
- Verschachteltes Element
- Noch ein verschachteltes Element
Ordered List:
- Erster Schritt
- Zweiter Schritt
- Verschachtelter Schritt
- Noch ein verschachtelter Schritt
Links und Bilder
Ein Link zu unserer Website und ein Link mit Title.
Blockquotes
Block Quotes eignen sich ideal für Zitate, wichtige Aussagen oder hervorgehobene Informationen.
Beispiel 1: Einfaches Zitat
Dies ist ein Block Quote. Er kann verwendet werden für Zitate, wichtige Hinweise oder hervorgehobene Aussagen.
Block Quotes können mehrere Paragraphs enthalten.
Beispiel 2: Experten-Zitat
"The best way to predict the future is to invent it."
— Alan Kay, Computer Scientist
Beispiel 3: Wichtiger Hinweis
Wichtig: Server Components in Next.js 15 erfordern eine strikte Trennung zwischen Server- und Client-Code. Achten Sie darauf, dass keine Browser-APIs in Server Components verwendet werden.
Code Blocks
Code-Blöcke mit Syntax-Highlighting für verschiedene Programmiersprachen.
Inline Code: const x = 42 oder npm install react
Beispiel 1: TypeScript
Beispiel 2: React Component (JSX)
Beispiel 3: CSS Styling
Beispiel 4: Shell Commands
Beispiel 5: JSON Configuration
Markdown Syntax:
Teil 2: Interaktive UI Components
Tabs
Tabs strukturieren verwandte Inhalte und reduzieren die initiale Page-Komplexität.
<Tabs>
<Tab label="TypeScript">
```typescript
async function fetchData<T>(url: string): Promise<T> {
const response = await fetch(url)
if (!response.ok) throw new Error('Request failed')
return response.json()
}
```
</Tab>
<Tab label="JavaScript">
```javascript
async function fetchData(url) {
const response = await fetch(url)
if (!response.ok) throw new Error('Request failed')Accordion
Accordion-Pattern für FAQ-Sections und strukturierte Informationsarchitektur.
Progress Bars
Skill-Levels, Prozessfortschritt oder Performance-Metriken visuell darstellen.
Timeline
Projekt-Milestones, Release-History oder Entwicklungs-Roadmaps strukturiert präsentieren.
Next.js 15 Migration
Component Library Launch
MDX Integration
Card Grid
Cards für Features, Services oder strukturierte Informationen.
Performance
Server Components reduzieren JavaScript-Bundle-Size um bis zu 40%.
Type Safety
Vollständige TypeScript-Integration mit automatischer Type-Inference.
Developer Experience
Hot Module Replacement, ESLint und Prettier-Support.
<CardGrid columns={3}>
<Card title="Performance" variant="elevated">
Server Components reduzieren JavaScript-Bundle-Size um bis zu 40%.
</Card>
<Card title="Type Safety" variant="elevated">
Vollständige TypeScript-Integration mit automatischer Type-Inference.
</Card>
<Card title="Developer Experience" variant="elevated">
Hot Module Replacement, ESLint und Prettier-Support.
</Card>
</CardGrid>Tooltip
Tooltips bieten kontextuelle Informationen ohne den Lesefluss zu unterbrechen.
Tooltips sind besonders nützlich für technische Abkürzungen oder Fachbegriffe.
{/* Inline Tooltip */}
<Tooltip content="TYPO3 ist ein Enterprise Content Management System" side="bottom">
technische Abkürzungen
</Tooltip>
{/* Button Tooltips */}
<div className="flex flex-wrap gap-4 my-8">
<Tooltip content="Tooltip oben" side="top">
<button className="px-4 py-2 bg-neutral-100 rounded hover:bg-neutral-200">Top</button>
</Tooltip>
<Tooltip content="Tooltip unten" side="bottom">
<button className="px-4 py-2 bg-neutral-100 rounded hover:bg-neutral-200">Bottom</button>
</Tooltip>
<Tooltip content="Tooltip links" side="left">
<button className="px-4 py-2 bg-neutral-100 rounded hover:bg-neutral-200">Left</button>Features: WCAG 2.1 AA konform, Keyboard Navigation, Touch-Support für Mobile, Smart Positioning
Teil 3: Datenvisualisierung
Charts
Interaktive Diagramme basierend auf der Recharts-Library.
Line Chart
// Daten
const salesData = [
{ month: 'Jan', revenue: 45000, profit: 12000 },
{ month: 'Feb', revenue: 52000, profit: 15800 },
{ month: 'Mar', revenue: 48000, profit: 14200 },
{ month: 'Apr', revenue: 61000, profit: 19500 },
{ month: 'Mai', revenue: 58000, profit: 17800 },
{ month: 'Jun', revenue: 69000, profit: 22100 },
]
// Component
<Chart
data={salesData}
type="line"
xAxisKey="month" Bar Chart
// Daten
const performanceData = [
{ week: 'W1', lcp: 2.4, fcp: 1.8, tti: 3.2 },
{ week: 'W2', lcp: 2.1, fcp: 1.5, tti: 2.8 },
{ week: 'W3', lcp: 1.8, fcp: 1.2, tti: 2.4 },
{ week: 'W4', lcp: 1.5, fcp: 0.9, tti: 2.0 },
]
// Component
<Chart
data={performanceData}
type="bar"
xAxisKey="week"
bars={['lcp', 'fcp', 'tti']}
height={300}Area Chart
// Daten
const trafficData = [
{ day: 'Mo', visitors: 3200, pageviews: 8500, conversions: 145 },
{ day: 'Di', visitors: 4100, pageviews: 10200, conversions: 189 },
{ day: 'Mi', visitors: 3800, pageviews: 9400, conversions: 165 },
{ day: 'Do', visitors: 4500, pageviews: 11800, conversions: 210 },
{ day: 'Fr', visitors: 5200, pageviews: 14200, conversions: 245 },
]
// Component
<Chart
data={trafficData}
type="area"
xAxisKey="day"
areas={['visitors', 'pageviews', 'conversions']} Pie Chart
// Daten
const marketShareData = [
{ name: 'TYPO3', value: 35 },
{ name: 'WordPress', value: 28 },
{ name: 'Drupal', value: 20 },
{ name: 'Andere', value: 17 },
]
// Component
<Chart
data={marketShareData}
type="pie"
dataKey="value"
xAxisKey="name"
height={300}Props:
type: 'line' | 'bar' | 'area' | 'pie'data: Array von DatenobjektenxAxisKey: Key für X-Achselines/bars/areas: Array von Data-KeysdotShapes: Custom Punkt-Formen ('circle', 'cross', 'diamond', 'square', 'star', 'triangle')colors: Custom Color-Arrayheight,showGrid,showLegend,yAxisUnit
Data Tables
Formatierte Tabellen mit verschiedenen Varianten.
Standard Markdown Table
| Framework | Type | Rendering | Performance |
|---|---|---|---|
| Next.js | React | SSR/SSG/ISR | |
| Nuxt 3 | Vue | SSR/SSG | |
| SvelteKit | Svelte | SSR/SSG |
<StarRating rating={5} size="sm" />
<StarRating rating={4} size="md" color="teal" />
<StarRating rating={3} max={5} size="lg" />DataTable Component
| Metric | Before | After | Improvement |
|---|---|---|---|
| First Contentful Paint | 2.4s | 0.8s | +67% |
| Largest Contentful Paint | 4.2s | 1.2s | +71% |
| Time to Interactive | 5.8s | 2.1s | +64% |
Variants: default, striped, bordered, minimal
Comparison Tables
Spezialisierte Tabellen für Feature-Vergleiche mit Boolean-Support.
| Feature | TYPO3 | WordPress | Drupal |
|---|---|---|---|
| Enterprise-Ready | ✓ | ✕ | ✓ |
| Multi-Site Support | ✓ | ✓ | ✓ |
| Fine-grained Permissions | ✓ | ✕ | ✓ |
| Built-in Versioning | ✓ | ✕ | ✓ |
| Learning Curve | Steep | Easy | Moderate |
Teil 4: Mermaid Diagramme
Technische Diagramme direkt in MDX mit Lightbox-Funktion und WCAG-konformen Farben.
Mermaid.js unterstützt 15+ Diagrammtypen. Hier sind alle wichtigen mit Beispielen dokumentiert.
Flowchart
Prozess- und Entscheidungsflüsse visualisieren.
flowchart TD
A[Client Request] --> B{Cached?}
B -->|Yes| C[Return Cache]
B -->|No| D[Server Render]
D --> E[Generate HTML]
E --> F[Cache Result]
F --> C
C --> G[Send Response]
style A fill:#0d9488,stroke:#1a1a1a,stroke-width:2px,color:#ffffff
style G fill:#14b8a6,stroke:#1a1a1a,stroke-width:2px,color:#ffffff
style B fill:#0d9488,stroke:#1a1a1a,stroke-width:2px,color:#ffffffRichtungen: TD (Top-Down), LR (Left-Right), BT (Bottom-Top), RL (Right-Left)
Sequence Diagram
API-Interaktionen und Request-Flows darstellen.
sequenceDiagram
participant U as User
participant B as Browser
participant S as Server
participant D as Database
U->>B: Enter URL
B->>S: HTTP Request
activate S
S->>D: Query Data
activate D
D-->>S: Return Data
deactivate D
S->>S: Render HTML
S-->>B: HTTP ResponseSyntax: ->> (solid arrow), -->> (dashed), activate/deactivate für Lebenslinien
Class Diagram
UML-Klassendiagramme für Software-Architektur.
classDiagram
class User {
+int id
+string name
+string email
+login()
+logout()
}
class Post {
+int id
+string title
+string content
+publish()
+unpublish()Beziehungen: --> (Association), --|> (Inheritance), ..> (Dependency), --* (Composition)
State Diagram
Workflow-Management und State-Machine-Modellierung.
stateDiagram-v2
[*] --> Draft
Draft --> InReview : Submit
Draft --> Archived : Cancel
InReview --> Approved : Approve
InReview --> Draft : Request Changes
InReview --> Rejected : Reject
Approved --> Published : Publish
Published --> Unpublished : Unpublish
Published --> Archived : Archive
Unpublished --> Published : Re-publishSyntax: [*] für Start/End, --> für Übergänge mit Label nach :
Entity Relationship Diagram
Datenbank-Schemas und Datenmodelle dokumentieren.
erDiagram
USER ||--o{ POST : creates
USER ||--o{ COMMENT : writes
POST ||--o{ COMMENT : contains
POST }o--|| CATEGORY : belongs_to
USER {
int id PK
string name
string email
datetime created_at
}
POST {
int id PKKardinalitäten: || (one), o{ (many), |{ (one or more), o| (zero or one)
User Journey
Customer Experience und Conversion-Funnels abbilden.
journey
title User Journey: Website-Besucher zu Kunde
section Awareness
Google-Suche: 5: User
Blog-Artikel lesen: 4: User
section Interest
Leistungen ansehen: 5: User
Referenzen prüfen: 4: User
section Decision
Kontakt-Formular: 3: User
Erstgespräch vereinbaren: 4: User, Team
section Action
Meeting durchführen: 5: User, Team
Vertrag unterschreiben: 5: User, TeamSyntax: section für Phasen, Score (1-5) nach Task, Actors nach Score
Gantt Chart
Projekt-Zeitpläne und Milestones planen.
gantt
title TYPO3 Migration Timeline
dateFormat YYYY-MM-DD
section Planning
Requirements Analysis :done, req, 2024-01-01, 2024-01-15
Architecture Design :done, arch, 2024-01-16, 2024-01-31
section Development
Backend Migration :active, back, 2024-02-01, 2024-03-15
Frontend Implementation :front, 2024-02-15, 2024-04-01
section Testing
QA Testing :qa, 2024-03-20, 2024-04-15
User Acceptance :uat, 2024-04-10, 2024-04-25
section Deployment
Go-Live :milestone, prod, 2024-05-01, 1dStatus: done, active, crit (critical), milestone
Pie Chart (Mermaid)
Prozentuale Verteilungen und Statistiken visualisieren.
%%{init: {'theme': 'base', 'themeVariables': {
'pie1': '#0e7490',
'pie2': '#f59e0b',
'pie3': '#10b981',
'pie4': '#8b5cf6',
'pie5': '#fb7185'
}}}%%
pie showData
title Browser-Statistiken 2025
"Chrome" : 65.2
"Safari" : 18.4
"Firefox" : 8.9
"Edge" : 5.1
"Andere" : 2.4Option: showData zeigt Prozentwerte an, %%{init}%% für Custom-Farben
Git Graph
Branching-Strategien und Release-Flows visualisieren.
gitGraph
commit id: "Initial Setup"
commit id: "Add Base Components"
branch feature/authentication
checkout feature/authentication
commit id: "Add Login Page"
commit id: "Add JWT Auth"
checkout main
branch feature/dashboard
checkout feature/dashboard
commit id: "Create Dashboard"
commit id: "Add Widgets"
checkout main
merge feature/authentication tag: "v1.1.0"
checkout feature/dashboardKeywords: branch, checkout, commit, merge, tag, type: HIGHLIGHT
Mindmap
Wissensstrukturen, Brainstorming und Hierarchien darstellen.
mindmap
root[Webentwicklung]
Frontend
React
Next.js
Remix
Vue
Nuxt 3
Svelte
SvelteKit
Backend
Node.js
Express
Fastify
PHPSyntax: Einrückung definiert Hierarchie, root((Text)) für zentralen Knoten
Timeline (Mermaid)
Chronologische Darstellung von Ereignissen.
timeline
title Geschichte des World Wide Web
section 1990er
1991 : Erste Website geht online
1993 : Mosaic Browser veröffentlicht
1995 : JavaScript erfunden
1996 : CSS 1.0 Standard
section 2000er
2004 : Web 2.0 Ära beginnt
2006 : jQuery revolutioniert Frontend
2008 : Chrome Browser Launch
section 2010er
2013 : React von Facebook
2014 : Vue.js veröffentlicht
2016 : Next.js 1.0Syntax: section für Zeitabschnitte, Jahr : Event für Einträge
Quadrant Chart
Vier-Felder-Analysen und Priorisierungs-Matrizen.
quadrantChart
title Technology Adoption Matrix
x-axis Low Impact --> High Impact
y-axis Low Effort --> High Effort
quadrant-1 Plan Carefully
quadrant-2 Quick Wins
quadrant-3 Avoid
quadrant-4 Major Projects
TypeScript: [0.8, 0.3]
Next.js: [0.9, 0.5]
GraphQL: [0.6, 0.7]
Microservices: [0.7, 0.9]
ESLint: [0.5, 0.1]
Docker: [0.75, 0.6]Syntax: Achsen mit x-axis/y-axis, Quadranten 1-4 benennen, Punkte als [x, y] (0-1)
Sankey Diagram
Flussverteilungen und Ressourcen-Allokation visualisieren.
sankey-beta
Budget,Design,25
Budget,Development,45
Budget,Testing,15
Budget,Launch,15
Design,UX,15
Design,UI,10
Development,Frontend,25
Development,Backend,20
Testing,QA,10
Testing,UAT,5Syntax: Source,Target,Value – definiert Flüsse zwischen Knoten
Sankey Diagrams sind in Mermaid als Beta markiert. Syntax kann sich ändern.
Architecture Diagram
Systemarchitekturen als Flowchart visualisieren.
flowchart TB
subgraph Client
Browser[Browser]
Mobile[Mobile App]
end
subgraph Edge
CDN[CDN / Edge Cache]
end
subgraph Backend
API[API Gateway]
Auth[Auth Service]
Cache[(Redis Cache)]
App[Application Server]Syntax: subgraph für Gruppen, TB (Top-Bottom), [()] für Datenbanken/Zylinder
XY Chart
Datenbeziehungen als Linien- oder Balkendiagramm.
xychart-beta
title "Website Performance"
x-axis [Jan, Feb, Mar, Apr, Mai, Jun]
y-axis "Ladezeit (s)" 0 --> 5
bar [3.2, 2.8, 2.4, 2.0, 1.8, 1.5]
line [3.2, 2.8, 2.4, 2.0, 1.8, 1.5]Syntax: x-axis, y-axis mit Bereichen, bar und line für Datenserien
C4 Diagram
Software-Architektur auf verschiedenen Abstraktionsebenen (Context, Container, Component).
C4Context
title System Context Diagram - E-Commerce Platform
Person(customer, "Kunde", "Ein Benutzer der E-Commerce Plattform")
Person(admin, "Administrator", "Verwaltet Produkte und Bestellungen")
System(ecommerce, "E-Commerce System", "Ermöglicht Kunden, Produkte zu kaufen")
System_Ext(payment, "Payment Provider", "Verarbeitet Zahlungen")
System_Ext(shipping, "Shipping Service", "Versendet Bestellungen")
System_Ext(email, "E-Mail Service", "Sendet Benachrichtigungen")
Rel(customer, ecommerce, "Verwendet")
Rel(admin, ecommerce, "Verwaltet")
Rel(ecommerce, payment, "Nutzt", "HTTPS/API")Elemente: Person, System, System_Ext, Container, Component, Rel für Beziehungen
Requirement Diagram
Anforderungen und deren Beziehungen visualisieren.
flowchart TB
subgraph Requirements["Security Requirements"]
REQ001["REQ-001: User Authentication<br/>Risk: High | Verify: Test"]
REQ002["REQ-002: Session Security<br/>Risk: Medium | Verify: Inspection"]
REQ003["REQ-003: Password Policy 12+ chars<br/>Risk: Low | Verify: Test"]
end
subgraph Implementation["Implementation"]
AUTH[("Auth Service")]
end
AUTH -->|satisfies| REQ001
AUTH -->|satisfies| REQ002
REQ003 -.->|derives from| REQ001Note: Requirement diagrams use flowchart syntax for better MDX compatibility. Use subgraphs to group requirements and elements, with arrows showing relationships like satisfies, derives, etc.
Mermaid Zusammenfassung
| Diagrammtyp | Use Case |
|---|---|
| Flowchart | Prozesse, Algorithmen, Entscheidungsbäume |
| Sequence | API-Flows, Service-Kommunikation |
| Class | OOP-Strukturen, Domain Models |
| State | Workflows, State Machines |
| ER | Datenbank-Schemas |
| User Journey | UX-Flows, Customer Journey |
| Gantt | Projektplanung, Timelines |
| Pie | Prozentuale Verteilungen |
| Git Graph | Branching-Strategien |
| Mindmap | Brainstorming, Hierarchien |
| Timeline | Chronologische Events |
| Quadrant | Priorisierungs-Matrizen |
| Sankey | Fluss-Visualisierungen |
| Block | System-Architekturen |
| XY Chart | Daten-Visualisierung |
| C4 | Software-Architektur |
| Requirement | Requirements Engineering |
Teil 5: Media & Embeds
Video Player
HTML5-Video für lokale Videodateien – ideal für Demos und Tutorials.
Props: controls, poster, autoplay, loop, muted, preload
Image Gallery
Klickbare Bildgalerien mit Lightbox-Funktionalität via React Context.
St Martin-in-the-Fields, London
Covent Garden Market
Covent Garden Sunset
National Gallery, Trafalgar Square
Nelson's Column
Trafalgar Square Fountain
TYPO3 Camp London Session
London Underground
import { MDXGallery, MDXImage } from '@/components/MDXGallery'
<MDXGallery>
<MDXImage
src="/images/photo-01.jpg"
alt="Beschreibung für Screenreader"
caption="Bildunterschrift"
/>
<MDXImage
src="/images/photo-02.jpg"
alt="Zweites Bild"
caption="Caption Text"
/>
</MDXGallery>Features: Click-to-Open Lightbox, Keyboard Navigation (Arrow Keys, ESC), Swipe auf Mobile, Lazy Loading, Thumbnail-Support
YouTube Embed
GDPR-konforme Video-Integration ohne Cookie-Tracking vor User-Interaktion.
Klick lädt YouTube (Datenschutz)
Features: react-lite-youtube-embed, youtube-nocookie.com Domain, Hover-Overlay mit Cookie-Warnung
Twitter/X Quote
Statische Tweet-Darstellung ohne Tracking oder Cookies.
I charge $200/hour to fix broken AI agents. Every client has the same problem: poorly structured JSON prompts. Here are the patterns I use to fix them in under 30 minutes:
Statisch gerendert - keine Cookies, kein Tracking
Features: 100% statisches HTML, Zero Cookies, Sofortiges Rendering, Link zum Original
GitHub Repository Card
Server-Side Repo-Informationen ohne Client-Side API-Calls.
Features: Server Component, Revalidierung alle 60 Minuten, Zero Client-JavaScript, ISR Support
Audio & Music Embeds
Einfache Einbettung von Spotify und YouTube Audio/Video-Inhalten.
Stellen Sie sicher, dass Sie die Rechte zur Einbettung der Inhalte besitzen.
Spotify Embed
Spotify Tracks, Alben, Playlists und Podcasts direkt einbetten:
<SpotifyEmbed uri="4cOdK2wGLETKBW3PvgPWqT" type="track" />Weitere Beispiele:
Props:
uri: Spotify ID (aus der Spotify URL)type:'track'|'album'|'playlist'|'episode'|'show'height: Höhe in Pixel (optional)compact: Kompakter Modus mit 80px Höhe
YouTube Embed
Für Video- und Audio-Inhalte von YouTube verwenden Sie den YouTubeEmbed Component (siehe Video Player oben).
Teil 6: Content-Strukturierung
Callout Components
Hinweise und Markierungen in 5 Varianten.
Neutrale Informationen und technische Details.
Positive Bestätigungen und erfolgreiche Operationen.
Warnungen und potenzielle Issues.
Kritische Fehler und Breaking Changes.
Best Practices und Optimierungs-Empfehlungen.
Types: info, success, warning, error, tip
PDF Download
Einheitliche Darstellung für PDF-Downloads in drei Varianten.
Default
Saferinternet.at Unterrichtsmaterial
Compact (Inline)
Für inline-Verwendung: Material als PDF(2.3 MB) – ideal für Fließtext.
Card
Alle 17 Themen mit Übungen und Hintergrundinformationen.
Subpage Navigator
Strukturierte Navigation zu verwandten Unterseiten.
Teil 7: Referenzen & Quellen
Für wissenschaftliche Artikel und umfangreiche Blog-Posts bieten wir ein System zur Verwaltung von Quellenangaben und Referenzen – mit automatischer Nummerierung und Zwischenüberschriften nach Kapiteln.
Es gibt zwei Ansätze für Referenzen: Inline-Definition (Sources) und Datenbank-basiert (AllReferencesFlat). Beide können mit Zwischenüberschriften nach Kapiteln gruppiert werden.
Sources (Inline)
Die Sources-Komponente definiert Quellen direkt im MDX-Content. Ideal für Artikel mit wenigen Quellen pro Kapitel.
<Sources
chapterId="1.1"
items={[
{ text: 'Vaswani et al. (2017) – "Attention Is All You Need"', url: 'https://arxiv.org/abs/1706.03762' },
{ text: 'Stanford HAI (2024) – "AI Index Report 2024"', url: 'https://aiindex.stanford.edu/report/' },
]}
/>Props:
| Prop | Type | Default | Beschreibung |
|---|---|---|---|
chapterId | string | - | Kapitel-ID (z.B. "1.1", "2.3") – bestimmt die Sortierung |
items | Array<{text, url?}> | - | Liste der Quellen mit Text und optionaler URL |
title | string | "Quellenangaben" | Titel der Callout-Box |
className | string | - | Zusätzliche CSS-Klassen |
AllSourcesFlat
Zeigt alle registrierten Sources am Ende des Artikels – gruppiert nach Kapiteln mit Zwischenüberschriften. Unterstützt Kapitel-Navigation, Filterung und kollabierbare Kapitel.
Basis-Verwendung
<AllSourcesFlat
title="Referenzen & Quellen"
description="Diese Analyse basiert auf Quellen aus akademischer Forschung:"
/>Mit Kapitel-Features
<AllSourcesFlat
title="Referenzen & Quellen"
description="Alle zitierten Quellen nach Kapiteln geordnet:"
showChapterNav={true} // Kapitel-Navigationsleiste anzeigen
collapsible={true} // Kapitel ein-/ausklappbar
filterable={true} // Nach Kapitel filtern
initiallyCollapsed={false} // Initial alle Kapitel offen
/>Mit benutzerdefinierten Kapitelnamen
{/* Kapitelnamen werden pro Artikel definiert */}
<AllSourcesFlat
title="Referenzen & Quellen"
chapterNames={{
'1': 'Primärquellen & Artikel',
'2': 'Video-Aufzeichnungen',
'3': 'Technische Dokumentation',
}}
chapterShortNames={{
'1': 'Artikel',
'2': 'Videos',
'3': 'Docs',
}}
/>Vordefinierte Kapitelnamen (ki-kompendium)
{/* Für ki-kompendium: Vordefinierte Kapitelnamen verwenden */}
<AllSourcesFlat
useGenericNames={false} // Verwendet vordefinierte Namen
/>Features
Kapitel-Navigation
Klickbare Pills für jeden Kapitel – mit Quellenanzahl-Badges. Schnelles Navigieren oder Filtern.
Kollabierbare Kapitel
Jedes Kapitel kann ein-/ausgeklappt werden. "Alle öffnen" / "Alle schließen" Buttons.
Kapitel-Filter
Klick auf Kapitel-Pill zeigt nur dieses Kapitel an. Filter-Badge mit X zum Zurücksetzen.
Darstellung mit Zwischenüberschriften:
Die Komponente gruppiert alle Quellen automatisch nach dem Kapitel-Präfix (z.B. "1.1" → "Kapitel 1"):
Props:
| Prop | Type | Default | Beschreibung |
|---|---|---|---|
title | string | "Referenzen & Quellen" | Überschrift der Sektion |
description | string | - | Optionaler Einleitungstext |
showChapterNav | boolean | true | Kapitel-Navigationsleiste anzeigen |
collapsible | boolean | true | Kapitel ein-/ausklappbar machen |
initiallyCollapsed | boolean | false | Initial alle Kapitel eingeklappt |
filterable | boolean | true | Kapitel-Filter aktivieren |
chapterNames | Record<string, string> | - | Benutzerdefinierte vollständige Kapitelnamen (z.B. {'1': 'Primärquellen'}) |
chapterShortNames | Record<string, string> | - | Benutzerdefinierte Kurznamen für Navigation Pills |
useGenericNames | boolean | true | Generische Namen ("Abschnitt 1") statt vordefinierter ki-kompendium Namen |
className | string | - | Zusätzliche CSS-Klassen |
Perfekt für umfangreiche Artikel mit vielen Quellen (50+). Die Kapitel-Navigation ermöglicht schnelles Auffinden, das Collapse-Feature reduziert die visuelle Überforderung.
AllReferencesFlat
Die Datenbank-basierte Variante – lädt Referenzen aus der PostgreSQL-Datenbank und zeigt sie mit Zwischenüberschriften.
<AllReferencesFlat
title="Referenzen & Quellen"
description="Alle zitierten Quellen nach Kapiteln geordnet:"
pageFilter="/blog/ki-kompendium-business-bildung-2025"
/>Props:
| Prop | Type | Default | Beschreibung |
|---|---|---|---|
title | string | "Referenzen & Quellen" | Überschrift der Sektion |
description | string | - | Optionaler Einleitungstext |
pageFilter | string | - | Filtert nach Seiten-Pfad (optional) |
className | string | - | Zusätzliche CSS-Klassen |
Vorteile der Datenbank-Variante:
- Zentrale Verwaltung aller Referenzen
- Suche und Filterung via API
- Mehrfachverwendung von Quellen über Artikel hinweg
- BibLaTeX-kompatibles Schema
ReferencesSearch
Interaktive Suchoberfläche für alle Referenzen in der Datenbank.
<ReferencesSearch
compact={true}
variant="light"
lang="de"
showStats={false}
/>Props:
| Prop | Type | Default | Beschreibung |
|---|---|---|---|
lang | 'de' | 'en' | 'de' | Sprache der UI-Texte |
showStats | boolean | false | Statistik-Panel anzeigen |
compact | boolean | false | Kompakter Modus für Blog-Einbettung |
variant | 'dark' | 'light' | 'dark' | Farbschema |
className | string | - | Zusätzliche CSS-Klassen |
Features:
- Volltextsuche über Beschreibungen und URLs
- Filterung nach Kategorien (12 Kategorien)
- Filterung nach Artikeln/Seiten
- Sortierung (Nummer, Beschreibung, Kategorie)
- Pagination
Datenbank-Import
Für die Datenbank-basierten Komponenten müssen Referenzen in die PostgreSQL-Datenbank importiert werden.
Datenformat (BibLaTeX-Schema)
interface CreateReferenceInput {
link: string // URL der Quelle
description: string // Formatierter Zitationstext
category?: string // Kategorie (siehe unten)
}
// Verwendung mit Segment
interface ReferenceWithUsage {
link: string
description: string
category?: string
page: string // z.B. "/blog/ki-kompendium-2025"
segment_id: string // z.B. "1.1", "2.3"
}12 Kategorien
| ID | Name | Beschreibung |
|---|---|---|
| official | Offizielle Quellen | Regierungsdokumente, Behörden, internationale Organisationen |
| academic | Akademisch | Universitäten, Bildungseinrichtungen, akademische Publikationen |
| research | Forschung | Forschungsrepositorien, Preprints, Konferenzen |
| technical | Technische Dokumentation | API-Dokumentationen, technische Spezifikationen |
| tool | Tools & Software | Software-Tools, Plattformen, Code-Repositories |
| commercial | Unternehmen & Produkte | Firmenwebsites, Produktseiten, Business-Ressourcen |
| standards | Standards & Spezifikationen | Technische Standards, Richtlinien, Best Practices |
| news | Nachrichten & Medien | Nachrichtenartikel, Pressemitteilungen |
| blog | Blogs & Meinungen | Blogbeiträge, Expertenmeinungen, persönliche Websites |
| video | Video & Multimedia | YouTube, Podcasts, Webinare, Video-Plattformen |
| community | Community & Organisationen | Community-Organisationen, Verbände, gemeinnützige Einrichtungen |
| other | Sonstige | Andere Quellen, die keiner Kategorie zugeordnet sind |
Import-Befehle
# 1. Datenbank initialisieren (Tabellen erstellen)
npx tsx scripts/init-references-db.ts
# 2. Import-Vorschau (Dry-Run)
npx tsx scripts/migrate-references-to-db.ts --dry-run
# 3. Tatsächlicher Import aus MDX-Dateien
npx tsx scripts/migrate-references-to-db.ts
# 4. Statistiken anzeigen
npx tsx scripts/init-references-db.tsAPI-Zugriff
Referenzen können auch über die REST-API abgefragt und erstellt werden:
# Alle Referenzen abrufen
curl "https://example.com/api/references?limit=20"
# Nach Seite filtern
curl "https://example.com/api/references?page_filter=/blog/ki-kompendium-2025"
# Nach Kategorie filtern
curl "https://example.com/api/references?category=academic"
# Volltextsuche
curl "https://example.com/api/references?query=transformer"Wann welche Komponente?
| Szenario | Komponente |
|---|---|
| Wenige Quellen, einfacher Artikel | Sources + AllSourcesFlat |
| Viele Quellen, wissenschaftlicher Artikel | Sources + AllSourcesFlat oder Datenbank |
| Zentrale Quellenverwaltung | AllReferencesFlat (Datenbank) |
| Interaktive Quellensuche | ReferencesSearch |
| API-Integration für externe Tools | /api/references |
Teil 8: Installation & Best Practices
Dependencies
Component-Registrierung
GDPR-Compliance
| Embed | Strategie |
|---|---|
| YouTube | Keine Cookies ohne User-Consent, youtube-nocookie.com |
| Statisches Rendering ohne Tracking | |
| GitHub | Server-Side Fetching, keine Browser-Requests |
| Podcast | Zwei-Klick-Lösung mit Consent Dialog |
Technische Vorteile
- Server-First Architecture: Minimale Client-JavaScript-Last
- Type Safety: Vollständige TypeScript-Integration
- Performance: Optimiert für Core Web Vitals
- Accessibility: WCAG 2.1 AA konform
- GDPR: Privacy-by-Design Approach
- Responsive: Mobile-First Design
- Theming: Brand-Colors integriert
LLM-Anleitung: Blog-Content erstellen
Diese Sektion richtet sich an LLMs und AI-Assistenten, die Blog-Artikel für webconsulting.at erstellen. Befolge diese Richtlinien für konsistente, hochwertige Inhalte.
Schreibstil & Tonalität
Rolle: Agiere als Senior Copywriter für ein führendes, innovatives IT-Unternehmen.
Guter Stil
"Server Components reduzieren die Bundle-Size um bis zu 40% – messbar in Lighthouse-Scores."
Zu vermeiden
"Man könnte eventuell die Performance verbessern, indem man verschiedene Optimierungen durchführt."
Content-Struktur
Einleitung
2-3 Sätze, Problem/Lösung skizzieren, Neugier wecken
Hauptteil
Logisch strukturiert, H2/H3-Hierarchie, Code-Beispiele
Fazit
Key Takeaways, nächste Schritte, Call-to-Action
Visualisierung
Diagramme, Charts, Screenshots wo sinnvoll
Wann welche Komponente?
| Komponente | Verwenden für | Nicht verwenden für | Beispiel |
|---|---|---|---|
| Callout | Wichtige Hinweise, Warnungen, Tipps | Normale Textabsätze, optionale Infos | GDPR-Hinweis, Deprecation Warning |
| Tooltip | Kurze Definitionen, Abkürzungen | Lange Erklärungen, wichtige Infos | Fachbegriffe, Akronyme |
| Blockquote | Zitate, externe Aussagen | Eigene Meinungen, Code | Experten-Zitate, Studienergebnisse |
| Abbreviation | Technische Abkürzungen | Allgemein bekannte Begriffe | HTML, CSS, API, REST |
| CodeBlock | Syntax-highlighted Code mit Titel | Inline-Code, Pseudo-Code | API-Beispiele, Config-Dateien |
| DataTable | Strukturierte Daten, API-Referenzen | Einfache Listen | Feature-Matrix, Props-Dokumentation |
| ComparisonTable | Feature-Vergleiche, Pro/Contra | Sequenzielle Daten | CMS-Vergleich, Framework-Auswahl |
| Chart | Trends, Verteilungen, Metriken | Wenige Datenpunkte | Performance-Verlauf, Traffic-Statistiken |
| Tabs | Parallele Alternativen, Varianten | Sequenzielle Schritte | TypeScript vs JavaScript, OS-spezifisch |
| Accordion | FAQ, optionale Details, lange Listen | Wichtige Infos, kurzer Content | Troubleshooting, erweiterte Optionen |
| Timeline | Chronologische Abläufe, Roadmaps | Ungeordnete Ereignisse | Projekt-Phasen, Release-History |
| CardGrid | Feature-Übersichten, Kategorien | Fließtext, sequenzielle Inhalte | Produkt-Features, Service-Übersicht |
| MermaidDiagram | Prozesse, Architekturen, Flows | Einfache Listen | CI/CD Pipeline, System-Architektur |
| YouTubeEmbed | Video-Tutorials, Konferenz-Talks | Kurze Clips, Audio-only | Tech-Talks, Produkt-Demos |
| SpotifyEmbed | Podcasts, Musik-Referenzen | Video-Content | Tech-Podcasts, Hintergrundmusik |
| GitHubRepoCard | Open-Source-Referenzen, Tools | Private Repos, Code-Snippets | Framework-Empfehlungen |
| StaticTweet | Social Proof, Ankündigungen | Eigene Aussagen | Community-Feedback, Release-News |
| ImageGallery | Mehrere zusammenhängende Bilder | Einzelbilder, Screenshots | Event-Fotos, Design-Varianten |
| Sources | Inline-Quellenangaben pro Kapitel | Zentrale Quellenverwaltung | Kapitel-Referenzen, wissenschaftliche Artikel |
| AllSourcesFlat | Gesamtliste aller Quellen mit Zwischenüberschriften | Wenige Quellen | Umfangreiche Artikel mit vielen Kapiteln |
| ReferencesSearch | Interaktive Quellensuche | Einfache Artikel | Tool-Seiten, Quellenverzeichnisse |
Entscheidungshilfe: Häufige Szenarien
Artikel-Template
Komponenten-Beispiele für häufige Szenarien
Oder als CardGrid:
Checkliste vor Veröffentlichung
Ressourcen
- MDX Documentation
- Next.js MDX Guide
- React Components
- Mermaid.js Documentation – Alle Diagrammtypen
- Recharts Documentation – Chart Library
Für Fragen zur Implementation: office@webconsulting.at
Kontaktieren Sie uns für ein unverbindliches Gespräch.
E-Mail: office@webconsulting.at