# RustyAstro Astro-Frontend für [RustyCMS](https://github.com/…): nutzt die REST-API und die OpenAPI-Spezifikation. **Page**-Content (Listen- und Einzelseiten) ist angebunden. ## Voraussetzungen - **RustyCMS** läuft (z.B. `cargo run` im Nachbarordner `rustycms`) unter `http://localhost:3000`. - Node.js 18+ ## Setup ```bash cd rustyastro cp .env.example .env # Optional: .env anpassen (PUBLIC_CMS_URL) npm install ``` ## Entwicklung ```bash # Terminal 1: CMS starten cd rustycms && cargo run # Terminal 2: Astro starten cd rustyastro && npm run dev ``` Astro läuft standardmäßig auf `http://localhost:4321`. Die Startseite listet alle **Pages** aus dem CMS; Klick auf einen Eintrag öffnet die Einzelseite unter `/:slug` (z.B. `/home`, `/about`). ## Konfiguration | Variable | Beschreibung | |--------------------|---------------------------------------------------| | `PUBLIC_CMS_URL` | Basis-URL des RustyCMS (ohne Slash), z.B. `http://localhost:3000` | Die OpenAPI-Spec wird von `{PUBLIC_CMS_URL}/api-docs/openapi.json` geladen (u.a. für die Anzeige auf der Startseite). Page-Daten kommen von `GET /api/content/page` und `GET /api/content/page/:slug`. **TypeScript-Typen** für die API (z.B. `PageEntry`) werden aus dieser Spec generiert. Nach Schema-Änderungen im CMS: ```bash # RustyCMS muss laufen yarn generate:api-types ``` Die generierte Datei ist `src/lib/cms-api.generated.ts` (wird von `cms.ts` importiert). ## Build ```bash npm run build ``` Beim Build müssen die CMS-Endpunkte erreichbar sein (für `getStaticPaths` und die Daten der Seiten). Für Produktion `PUBLIC_CMS_URL` auf die echte CMS-URL setzen. ## Struktur - `src/lib/cms.ts` – CMS-Client (OpenAPI, Pages, Slug-Liste) - `src/lib/cms-api.generated.ts` – aus OpenAPI generierte Typen (mit `yarn generate:api-types` erzeugen) - `src/pages/index.astro` – Startseite mit Page-Liste - `src/pages/[slug].astro` – Einzelseite pro Page-Slug - `src/layouts/Layout.astro` – Layout inkl. Tailwind