# 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
