Add copilot instructions

This commit is contained in:
Dennis Reimann
2025-09-23 11:45:38 +02:00
parent 0f9753a3fd
commit cf02b037ca

55
.github/copilot-instructions.md vendored Normal file
View File

@@ -0,0 +1,55 @@
Ziel: Kurze, handlungsorientierte Hinweise, damit ein AI-Copilot sofort produktiv an diesem Node.js/Pug-basierten Static-Site-Generator arbeiten kann.
- Architektur-Überblick
- Static-Site-Build: Node.js-Skripte in `tasks/` erzeugen JSON- und HTML-Artefakte.
- Eingabe: `content/*.json`, Pug-Templates in `src/` und statische Assets in `static/`.
- Zwischenausgaben: `generated/*.json` (z.B. `episodes.json`, `site-data.json`).
- Ausgabe: `dist/` enthält die fertige Website (kopiert aus `static/` + gerenderte Pug-Seiten + gebaute Assets).
- Zentrale Hilfsfunktionen in `helpers.js` (z.B. `write`, `writeJSON`, `assetUrl`, `slugify`, `markdown`). `pug.config.js` importiert diese Helpers in die Pug-Umgebung.
- Wichtige Tasks / Reihenfolge
- `tasks/fetch_feed.js` — lädt den Podcast-Feed, parsed Episoden, generiert `generated/episodes.json` und `dist/feed`-Artefakte (auch Kapitel, Personen-Metadaten).
- `tasks/fetch_episodes.js` — lädt mp3s und Bilder anhand von `generated/episodes.json` (verwendet `EPISODES_DIR`).
- `tasks/generate_site_data.js` — lädt externe APIs (z.B. mempool.observer, Meetups) und schreibt `generated/site-data.json`.
- `tasks/generate_pages.js` — rendert Pug-Templates (`src/*.pug`) mit `generated/*` und schreibt HTML nach `dist/`.
- `tasks/generate_sitemap.js` — baut `dist/sitemap.xml` aus `dist/**/*.html`.
- Wichtige npm-Skripte (häufig gebraucht)
- Lokales Setup: `npm install`
- Dev-Workflow (Watcher + BrowserSync): `npm start` (führt `init` aus, startet parallel watcher-Tasks)
- Komplett bauen: `npm run build` (`init` + `build:*`)
- Produktions-Build (minify + rev + sitemap): `npm run prod`
- Nur Seiten neu rendern (unterstützt ein optionales argv für `changedFile`):
```bash
node tasks/generate_pages.js src/member.pug
```
- Alle Episoden herunterladen: `EPISODES_DIR=./episodes npm run episodes`
- Konventionen & Eigenheiten (wichtig für Änderungen)
- Tasks verwenden `sync-request` (synchrone HTTP-Aufrufe). Änderungen an Netzwerkcode sollten robust gegen Timeouts/Fehler sein; viele Tasks haben lokale Fallbacks (`content/*.json`).
- `helpers.js` kapselt URL-/Asset-Logik. Verwende `assetUrl` / `assetPath` statt händischem Pfadbau, damit `HOST`/`NODE_ENV` korrekt angewendet wird.
- Kategorie- und Teilnehmernormierung geschieht in `tasks/fetch_feed.js` (z.B. Mapping `Der-Weg` → `Der Weg`, Alias-Auflösung via `participantsWithAliases`). Änderungen an Kategorien müssen dort gespiegelt werden.
- `generated/` ist build-artifact; verändere primär `content/` und `tasks/` nicht `generated/` dauerhaft.
- Pug-Mixins in `src/includes/mixins.pug` werden pro Projekt häufig wiederverwendet (z.B. `+episodeItem`, `+episodePlayer`).
- Integrationen & externe Abhängigkeiten
- Podcast-Feed: `content/meta.json` enthält `masterFeedUrl`/`publicFeedUrl` — `tasks/fetch_feed.js` referenziert diese.
- Mempool-API: `https://mempool.observer/api/recentBlocks` in `generate_site_data.js` (block height in site-data).
- Meetup-Portal: `https://portal.einundzwanzig.space/...` (Falling back to `content/meetups-do-not-edit.json`).
- Nostr: `tasks/generate_nostr.js` nutzt `@nostr-dev-kit/ndk` (erzeugt mapping/relays für `content/participants.json`).
- Fehlerszenarien & Debug-Hinweise
- Viele Tasks loggen Fehler und fallen auf lokale JSONs zurück; bei Netzwerkfehlern zuerst `npm run build:data` manuell testen.
- Für Debugging: setze `NODE_ENV=development` (dev host/asset-Pfade) oder `CI=true` um `fetch_feed.js` in den Debug-Modus zu versetzen.
- Sitemap/URLs: `tasks/generate_sitemap.js` nutzt `DEPLOY_PRIME_URL`/`URL` env vars — beim lokalen Test ggf. setzen.
- Schnellbeispiele, die AI-Agenten oft ausführen sollten
- Rendern & lokaler Server (ganzer Dev-Loop):
```bash
npm install
npm start
```
- Schnell Seiten neu bauen nach Template-Änderung:
```bash
node tasks/generate_pages.js src/includes/mixins.pug
```