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.