Initial commit: RustyAstro + OpenAPI-Typen aus RustyCMS

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Peter Meier
2026-02-13 15:58:36 +01:00
commit 054b5719e5
21 changed files with 12756 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
# 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