Files
einundzwanzig.space/.github/copilot-instructions.md
2025-09-23 11:45:46 +02:00

56 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
```