Ein wartungsfreier Blog mit MDX und Next.js 15
Wie man einen git-basierten Blog mit MDX, gray-matter und dem Next.js App Router baut — ganz ohne Datenbank.

Moderne Portfolio-Seiten überkonstruieren ihren Blog oft. Man richtet ein CMS ein, konfiguriert Webhooks, stellt eine Datenbank bereit — und verbringt mehr Zeit mit Infrastruktur als mit dem Schreiben. MDX mit dem Next.js App Router macht all das überflüssig: Ihre Inhalte liegen im Repository, versioniert neben Ihrem Code, mit null Laufzeit-Abhängigkeiten.
Warum MDX statt Headless-CMS
Ein Headless-CMS wie Sanity oder Contentful ist die richtige Wahl, wenn ein nicht-technisches Team Inhalte veröffentlichen muss. Für den persönlichen Blog eines Entwicklers bringt es unnötige Kopplung mit sich:
- Cold-Start-Latenz — jeder Seitenaufbau ruft eine externe API auf
- Verfügbarkeits-Abhängigkeit — fällt Ihr CMS aus, fällt Ihr Blog mit
- Kontextwechsel — Schreiben in einem Browser-Editor statt in Ihrer IDE
MDX dreht das um. Ein Inhalt ist eine .mdx-Datei. Das Deployment ist ein git push. Es gibt kein CMS zu warten.
Projektstruktur
content/
blog/
nextjs-15-architecture.mdx
trading-bot-design.mdx
lib/
mdx.ts ← Frontmatter + Inhalt parsen
app/[locale]/blog/
page.tsx ← Übersicht
[slug]/page.tsx ← Detail
MDX-Dateien mit gray-matter parsen
Das Herzstück des Systems ist eine einzige Utility, die .mdx-Dateien von der Festplatte liest und auf Ihr Datenmodell abbildet:
ts
gray-matter trennt das YAML-Frontmatter vom Textkörper. Der Rest ist reines TypeScript — in dieser Phase wird keine spezielle MDX-Laufzeit benötigt.
MDX im App Router rendern
Für die Detailseite empfiehlt Next.js @next/mdx oder das leichtere next-mdx-remote. Da wir Dateien zur Laufzeit laden (nicht statisch importieren), passt next-mdx-remote besser:
ts
MDXRemote aus dem /rsc-Export ist eine React Server Component — es kompiliert und rendert MDX auf dem Server, mit null Client-JavaScript.
Frontmatter-Schema
Eine konsistente Frontmatter-Struktur verhindert Sonderfälle auf der Übersichtsseite:
yaml
Lassen Sie bei Entwürfen published: false — der getMdxPosts-Filter schließt sie aus, ohne das Routing zu berühren.
Statische Generierung mit generateStaticParams
Für maximale Performance rendern Sie alle Beiträge zur Build-Zeit vor:
ts
Zusammen mit next/image für die Titelbilder und einem CDN vor Vercel sinkt die Time to First Byte auf einstellige Millisekunden.
Eigene MDX-Komponenten hinzufügen
Einer der größten Vorteile von MDX ist das Einbetten von React-Komponenten in den Fließtext. Bilden Sie Komponentennamen an einer Stelle auf Implementierungen ab:
ts
Jetzt kann jede .mdx-Datei <Callout> oder <CodeBlock> inline verwenden.
Abwägungen
Was Sie gewinnen:
- Keine Datenbank, keine CMS-API, keine Webhooks
- Inhalte in git versioniert — Entwürfe sind Branches, Reviews sind PRs
- Volles IDE-Tooling: Autovervollständigung, Rechtschreibprüfung, Refactoring
Worauf Sie verzichten:
- Kein visueller Editor für nicht-technische Mitarbeitende
- Keine integrierte Medienverwaltung (nutzen Sie Cloudinary oder
public/) - Erneutes Deployment zum Veröffentlichen nötig (für Solo-Portfolios akzeptabel)
Fazit
Für ein Entwickler-Portfolio ist ein MDX-basierter Blog genau das richtige Maß an Komplexität. Das Setup passt in zwei Dateien, skaliert ohne Datenbank auf Hunderte Beiträge und hält das Schreiberlebnis in den Werkzeugen, die Sie ohnehin nutzen. Der einzige Wartungsaufwand ist ein gelegentliches npm update für gray-matter und next-mdx-remote.
Ähnliche Artikel
Restaurant-Website mit digitaler Speisekarte: Best Practices 2026
Wie Restaurants mit einer schnellen Website, digitaler Speisekarte und Online-Reservierung mehr Gäste gewinnen — mobil-optimiert, auffindbar und appetitlich.
Artikel lesenZahnarzt-Website 2026: Online-Terminbuchung, Datenschutz, Patientenvertrauen
Worauf es bei einer modernen Zahnarzt-Website ankommt: Online-Terminbuchung, DSGVO-konformer Umgang mit Patientendaten und Vertrauen, das neue Patienten gewinnt.
Artikel lesen