Event-Aggregator Konstanz/Kreuzlingen (Bodensee, DE+CH). Aggregator-App des mana e.V.
|
Some checks failed
CI / validate (push) Has been cancelled
Build bei transienten Registry-/Netz-Timeouts bis 3x wiederholen; build und up getrennt (up erst nach erfolgreichem Build, ohne --build); up -d --wait --wait-timeout 150 gated auf Container-Bereitschaft statt stillem "fertig"; fail()/ERR-Trap. Compose-Flags/Services/--no-deps unveraendert. Muster aus audioguide/deploy.sh. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .claude/skills | ||
| .github/workflows | ||
| apps | ||
| devlog/2026-05-15 | ||
| docs | ||
| infrastructure | ||
| .env.example | ||
| .fallowrc.json | ||
| .gitignore | ||
| .npmrc | ||
| .sops.yaml | ||
| app-manifest.json | ||
| CLAUDE.md | ||
| deploy.sh | ||
| docker-compose.yml | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| STATUS.md | ||
| tsconfig.base.json | ||
| turbo.json | ||
| VISION.md | ||
Seepuls
Veranstaltungen am Bodensee, beidseits der Grenze. Konstanz, Kreuzlingen und Umgebung — Deutschland und Schweiz auf einer Plattform.
Föderierte mana-Vereins-App. Aggregiert Event-Daten von Drittseiten (Kulturhäuser, Clubs, Bars, Vereine) und stellt sie länder- übergreifend dar. Spricht das mana-Föderations-Protokoll, gilt
AGGREGATOR_POLICY.mdals nicht-verhandelbares Regelwerk für das Crawlen fremder Inhalte.
Quick Start
# Verdaccio-Token holen (einmalig pro Maschine)
ssh mana-server "cat ~/.npm_token" > /tmp/t
echo "//pkg.mana.how/:_authToken=$(cat /tmp/t)" >> ~/.npmrc
chmod 600 ~/.npmrc && rm /tmp/t
# Datenbank starten (Postgres auf :5441)
docker compose up -d
# Dependencies + Boot
NPM_AUTH_TOKEN=$(awk -F= '/_authToken=/{print $2}' ~/.npmrc) pnpm install
pnpm --filter ./apps/api dev
API läuft auf http://localhost:3095. Web (Astro) folgt in Phase α-4.
Architektur (kurz)
| Komponente | Stack | Port |
|---|---|---|
| API | Hono + Bun + Drizzle | 3095 |
| Web | Astro (Node-Adapter, SSR + Islands) — folgt α-4 | 3096 |
| Postgres | docker-compose, lokal | 5441 |
| Crawler | konsumiert mana-research :3068 (Firecrawl/Jina) |
|
| Geo | konsumiert mana-geocoding :3075 (Photon Europe) |
|
| Bilder | konsumiert mana-media :3065 (nur App-eigene, gecrawlte → Hot-Link) |
Phasen (Plan)
- α-0 (jetzt): Repo-Skelett ✅
- α-1: Venue-Add-Flow (URL → mana-research → mana-llm → Reviewer-Stop)
- α-2: Event-Source-Add + Probe-Crawl
- α-3: node-cron Re-Crawl mit Diff/Dedupe/Politeness
- α-4: Astro-Web Listenansicht + Filter
- α-5: Karten-Ansicht (Leaflet + mana-geocoding)
- β-1: AGGREGATOR_POLICY anwaltliche Review (Pre-Live-Gate)
- β-2: Claim + Take-Down-Endpoints (Pre-Live-Gate)
- β-3: Notifications via mana-notify (Lieblings-Venue-Abo)
- β-4: Deploy auf mana-server + Live-Smokes
Endpoints (im MVP, public)
| Method | Path | Beschreibung |
|---|---|---|
GET |
/healthz |
Liveness |
GET |
/.well-known/mana-app.json |
Manifest |
GET |
/api/v1/search?q= |
Event/Venue-Suche, public |
GET |
/api/v1/dsgvo/export?user_id= |
DSGVO-Auskunft auf takedown_requests (Service-Key) |
Crawler-Disziplin
robots.txt + ≥1s Crawl-Delay + User-Agent mit Kontakt-Mail. Volle
Pflichten in AGGREGATOR_POLICY.md.
Verstöße gegen die Policy sind kein akzeptabler Speed-Trade-off.
Pre-Live-Veto durch mana-compliance-Subagent.
Validierung
pnpm validate-manifest
pnpm type-check
pnpm test
CI führt alle drei in .github/workflows/ci.yml aus.