Event-Aggregator Konstanz/Kreuzlingen (Bodensee, DE+CH). Aggregator-App des mana e.V.
Find a file
Till JS c5346458fe
Some checks failed
CI / validate (push) Has been cancelled
chore(deploy): Build-Retry + up --wait, echte Fehler-Propagation
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>
2026-06-06 21:28:05 +02:00
.claude/skills echte Lösung: iCal/RSS-Feed-First-Pattern (Apollo nun 14 Events mit exakten Zeiten) 2026-05-15 22:32:03 +02:00
.github/workflows seepuls α-0: Repo-Skelett + Aggregator-Schema 2026-05-15 14:14:15 +02:00
apps Kuratiere drei Konstanz-Venues + fixe Grey-eventSource + Konstanz-city-Runbook 2026-06-05 22:02:15 +02:00
devlog/2026-05-15 skill polish + 31 weitere Events (Multi-Step + Aggregator-Fallback) 2026-05-15 18:44:14 +02:00
docs Kuratiere drei Konstanz-Venues + fixe Grey-eventSource + Konstanz-city-Runbook 2026-06-05 22:02:15 +02:00
infrastructure infra: DB/MinIO restart=always — verhindert Orphaning nach Docker-Daemon-Neustart 2026-06-06 18:48:31 +02:00
.env.example feat: echte Suche, Amenities/Region ausgespielt, Folgen→Web-Push 2026-06-02 15:51:50 +02:00
.fallowrc.json chore: .fallowrc.json — FP-Suppressions (shared-share-protocol script-dep) 2026-06-04 20:04:10 +02:00
.gitignore feat(landing): Deploy-Stack + Cutover auf seepuls.com LIVE 2026-05-20 21:39:18 +02:00
.npmrc fix(.npmrc): pkg.mana.how → npm.mana.how 2026-05-20 19:21:26 +02:00
.sops.yaml feat(secrets): SOPS+age — verschlüsselte Secrets in Git + deploy.sh 2026-05-30 17:20:33 +02:00
app-manifest.json fix(seepuls): Manifest takedown-Endpoint + base_url auf API-Host 2026-05-29 16:49:40 +02:00
CLAUDE.md seepuls α-0: Repo-Skelett + Aggregator-Schema 2026-05-15 14:14:15 +02:00
deploy.sh chore(deploy): Build-Retry + up --wait, echte Fehler-Propagation 2026-06-06 21:28:05 +02:00
docker-compose.yml seepuls α-0: Repo-Skelett + Aggregator-Schema 2026-05-15 14:14:15 +02:00
package.json fix(deploy): harter Web-Healthcheck + Manifest-Validation-Dep 2026-05-29 14:54:02 +02:00
pnpm-lock.yaml chore: @mana/shared-feedback ^0.3.3 (Aura-Soft-Anerkennung) 2026-06-03 16:32:29 +02:00
pnpm-workspace.yaml seepuls α-0: Repo-Skelett + Aggregator-Schema 2026-05-15 14:14:15 +02:00
README.md seepuls α-0: Repo-Skelett + Aggregator-Schema 2026-05-15 14:14:15 +02:00
STATUS.md docs(status): UI/UX-Feinschliff (Filter/Karten/Wärme/Flaggen) dokumentiert 2026-06-03 14:05:17 +02:00
tsconfig.base.json seepuls α-0: Repo-Skelett + Aggregator-Schema 2026-05-15 14:14:15 +02:00
turbo.json seepuls α-0: Repo-Skelett + Aggregator-Schema 2026-05-15 14:14:15 +02:00
VISION.md VISION.md: interner Nordstern (Wofür) + Verweis auf öffentliche Landing-Fassung 2026-05-31 20:52:38 +02:00

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.md als 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.