Astro Frontend Editing Quickstart Speedrun
Dieses Dokument beschreibt die konkreten, praxisnahen Schritte zur Implementierung von Front End Editing für den Astro-basierten Prototyp von dev.chrswndrs.de. Ziel ist es, nicht-technischen Mitgliedern des Freundeskreis Großkarlbach e.V. ein direktes, visuelles Bearbeiten von Texten und Inhalten im Browser zu ermöglichen, während die performante und sichere Git-gestützte Static-Site-Architektur gewahrt bleibt.
1. Architekturentscheidung: TinaCMS
Für ein Astro-Projekt, das standardmäßig keine dynamische PHP/Datenbank-Umgebung wie TYPO3 besitzt, ist TinaCMS die optimale Wahl.
- Git-Backed Workflow: Änderungen, die Redakteure im Frontend vornehmen, werden als Git-Commits (Markdown/MDX-Dateien) direkt in das GitHub-Repository zurückgeschrieben.
- Echtzeit-Vorschau (Visual Editing): Redakteure sehen eine WYSIWYG-Oberfläche direkt auf der Website und bearbeiten Texte per Klick im Kontext.
- Zero-JS im Production-Build: Der visual Editor läuft über eine separate Route (
/admin) und lädt Preview-JS nur für authentifizierte Redakteure. Die öffentliche Seite bleibt schlank und schnell.
2. Schritt-für-Schritt-Implementierung
Schritt 1: Initialisierung & Installation
Führe folgenden Befehl im Hauptverzeichnis des Astro-Projekts aus:
npx @tinacms/cli@latest initDieser Assistent installiert die benötigten Pakete (@tinacms/cli, tinacms) und erstellt die Verzeichnisstruktur unter tina/.
Schritt 2: Schema definieren (tina/config.ts)
Passe das Schema so an, dass es die vorhandene src/content/ Struktur spiegelt (z.B. für Feste, den Verein und allgemeine Seiten).
Datei: tina/config.ts
import { defineConfig } from "tinacms";
export default defineConfig({
branch: "main",
clientId: process.env.NEXT_PUBLIC_TINA_CLIENT_ID, // Aus Umgebungsvariablen geladen
token: process.env.TINA_TOKEN, // Aus Umgebungsvariablen geladen
build: {
outputFolder: "admin",
publicFolder: "public",
},
media: {
tina: {
mediaRoot: "images",
publicFolder: "public",
},
},
schema: {
collections: [
{
name: "page",
label: "Seiten",
path: "src/content/pages",
format: "mdx",
fields: [
{
type: "string",
name: "title",
label: "Titel",
isTitle: true,
required: true,
},
{
type: "rich-text",
name: "body",
label: "Inhalt",
isBody: true,
},
],
},
{
name: "feste",
label: "Feste & Veranstaltungen",
path: "src/content/feste",
format: "md",
fields: [
{
type: "string",
name: "title",
label: "Veranstaltung",
isTitle: true,
required: true,
},
{
type: "datetime",
name: "date",
label: "Datum",
},
{
type: "string",
name: "location",
label: "Ort",
},
{
type: "rich-text",
name: "body",
label: "Details",
isBody: true,
},
],
},
],
},
});Schritt 3: Visual Editing im Frontend verkabeln
Damit TinaCMS weiß, welches DOM-Element zu welchem Markdown-Feld gehört, müssen im Astro-Layout bzw. den Seiten entsprechende data-tina-field-Attribute hinterlegt werden.
Beispiel für Daten-Query & Rendering:
---
// src/pages/[slug].astro
import { client } from "../../tina/__generated__/client";
const { slug } = Astro.params;
const response = await client.queries.page({ relativePath: `${slug}.mdx` });
---
<Layout title={response.data.page.title}>
<!-- Das Attribut data-tina-field markiert das Element als editierbar -->
<h1 data-tina-field={tinaField(response.data.page, 'title')}>
{response.data.page.title}
</h1>
<div data-tina-field={tinaField(response.data.page, 'body')}>
<TinaMarkdown content={response.data.page.body} />
</div>
</Layout>Schritt 4: Hybrid-Rendering & Live-Preview konfigurieren
Da Astro standardmäßig voll-statisch generiert, muss für den Preview-Modus (Live-Editor) serverseitiges Rendering (SSR) oder Hybrid-Rendering konfiguriert werden.
Datei: astro.config.mjs
import { defineConfig } from 'astro/config';
import react from '@astrojs/react'; // Benötigt für den TinaCMS-Editor-Wrapper
export default defineConfig({
output: 'hybrid', // Ermöglicht SSR für Preview-Routen
integrations: [react()],
});Schritt 5: Cloud-Anbindung & Authentifizierung
- Registriere das Projekt auf Tina Cloud.
- Erstelle eine neue App und verknüpfe sie mit dem GitHub-Repository von
grosskarlbach.com. - Trage die generierte
NEXT_PUBLIC_TINA_CLIENT_IDund dasTINA_TOKENin die Environment-Secrets deines Hosting-Anbieters (z.B. Netlify) ein. - Lade berechtigte Redakteure in der Tina Cloud ein. Diese können sich nun über
/adminauf der Website anmelden und visuelle Änderungen direkt in Git committen.
3. Verifikation
Lokaler Funktionstest
- Starte die lokale Entwicklungsumgebung mit
npm run dev. - Öffne
http://localhost:4321/adminim Browser. - Klicke auf eine Seite, wähle einen Text aus und verändere ihn visuelle.
- Klicke auf “Save”.
- Erwartetes Ergebnis: Der Text ändert sich lokal in Echtzeit. Prüfe via
git diff, ob die Datei (z.B.src/content/pages/home.mdx) mit der Änderung beschrieben wurde.
4. Annahmen & Risiken
- Voraussetzung: Inhalte müssen sauber in Markdown/MDX ausgelagert sein. Liegen Texte hardcoded in
.astro-Dateien, können diese nicht von TinaCMS erfasst werden und müssen vorher in Content-Collections refaktoriert werden. - Build-Zeiten: Jede Änderung löst einen GitHub/GitLab-Webhook aus, der ein neues Deployment auf dem Webserver (z. B. Hetzner) anstößt. Bei häufigen, kleinen Änderungen kann dies zu Warteschlangen führen.