Kontext
Ziel war es, einen KI-gestützten, dateibasierten Blog aufzusetzen – bewusst ohne WordPress und ohne modernes Cloud-Hosting wie Vercel oder Netlify.
Stattdessen:
- Astro als Static Site Generator
- Markdown + Content Collections
- klassisches cPanel-Hosting
Was simpel klang, hatte einige sehr lehrreiche Fallstricke.
Setup: Was gut funktioniert hat
Astro als Basis
Astro ist für diesen Use Case nahezu ideal:
- Markdown-first
- Content Collections erzwingen Struktur
- Static Output → perfekt für klassisches Hosting
- sehr gut mit KI kombinierbar
Klare Projektentscheidung
export default defineConfig({
site: "https://martin-hesse.info",
output: "static",
});
Learning:
Wenn man weiß, dass man statisch deployt, sollte man es auch explizit sagen.
Fail #1: Content Collections sind gnadenlos
Symptom
- Blogliste leer
Posts gefunden: 0- keine sichtbare Fehlermeldung im Browser
Ursache
Eine einzige ungültige Datei (_TEMPLATE.md) im src/content/posts/-Ordner hat die gesamte Collection invalidiert.
Learning
Content Collections sind alles-oder-nichts.
Regel daraus:
- In Collection-Ordnern liegt nur echter Content
- Templates gehören woanders hin
Fail #2: Dynamic Routes + Static Build
Symptom
[GetStaticPathsRequired] getStaticPaths() function is required
Ursache
Astro braucht bei statischem Build für jede dynamische Route explizit getStaticPaths().
Betroffen:
/blog/[slug].astro/serie/[series].astro
Lösung (bewusst simpel)
export async function getStaticPaths() {
return posts.map((post) => ({
params: { slug: post.slug },
props: { post },
}));
}
Learning:
Statisches Hosting = kein Ratespiel. Alles muss vorab bekannt sein.
Fail #3: Scope-Fehler in Astro Frontmatter
Symptom
titles is not defined
Ursache
getStaticPaths() griff auf eine Variable zu, die darunter definiert war.
Learning
Astro-Frontmatter ist JavaScript – Scope-Regeln gelten ganz normal.
Faustregel:
Alles, was getStaticPaths() nutzt, muss darüber stehen.
Deployment auf cPanel (statisch)
Ablauf
npm run build
↓
dist/ zippen
↓
Upload nach public_html
↓
Entpacken
↓
fertig
Wichtig: .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ $1.html [L]
Ohne das:
/blog/postname→ 404
KI-Workflow: So wurde gearbeitet
Typischer Prompt (vereinfacht)
Du bist mein technischer Sparringspartner.
Ziel: dateibasiertes Blog mit Astro, statisch deployt auf cPanel.
Erkläre mir:
- sinnvolle Struktur
- typische Fails
- robuste Lösungen
Kurz, ehrlich, praxisnah.
Wichtige Erkenntnis
KI beschleunigt Setup – aber ersetzt kein Verständnis.
Die kritischsten Fehler:
- Scope
- Build-Regeln
- Hosting-Eigenheiten
… mussten selbst verstanden werden.
Fazit
Astro + cPanel ist:
- kein moderner Hype-Stack
- aber extrem stabil
- sehr gut kontrollierbar
- ideal für KI-basierte Workflows
Aber nur, wenn man akzeptiert:
- Static Builds sind streng
- Content-Struktur ist heilig
- kleine Details entscheiden über Live oder Totalausfall
Nächster Schritt
Als Nächstes:
- Redaktions-Workflow weiter vereinfachen
- Social Repurposing automatisieren
- bewusst nicht überoptimieren
Kontrolle schlägt Komfort.