managarten/services/mana-events/src
Till JS b5d55fdb21 feat(events): add Event Discovery — Phase 1 + 2
Phase 1: Manual iCal feeds + Discovery tab
- 5 new DB tables in event_discovery schema (regions, interests,
  sources, discovered_events, user_actions)
- iCal parser (node-ical) with deduplication (SHA-256 hash)
- Crawl scheduler (15-min interval, auto-deactivate after 5 errors)
- CRUD routes for regions, interests, sources + paginated feed endpoint
- Frontend: "Meine Events" / "Entdecken" tab navigation in ListView
- Discovery setup wizard (regions via mana-geocoding + interests)
- DiscoveredEventCard with save/dismiss, SourceManager for iCal feeds
- "Merken" creates a local socialEvent from discovered event

Phase 2: Auto source discovery + LLM extraction + relevance scoring
- Source discoverer: web search via mana-research to auto-find iCal
  feeds and venue websites for a region
- Website extractor: crawl via mana-research /extract, then LLM-based
  event extraction via mana-llm with structured JSON output
- Flexible date parsing (ISO, DD.MM.YYYY), markdown fence stripping
- Relevance scorer: category match, freetext match, haversine distance,
  time proximity, weekend bonus (0-100 clamped)
- Routes: POST regions/:id/discover-sources, PUT/DELETE sources/:id/activate|reject
- Frontend: "Automatisch finden" button, suggested vs active sources UI

107 tests (all passing), no regressions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 15:30:46 +02:00
..
__tests__ feat(events): add Event Discovery — Phase 1 + 2 2026-04-18 15:30:46 +02:00
db feat(events): add Event Discovery — Phase 1 + 2 2026-04-18 15:30:46 +02:00
discovery feat(events): add Event Discovery — Phase 1 + 2 2026-04-18 15:30:46 +02:00
lib fix(events): production wiring + polling resilience (quick wins) 2026-04-07 18:53:29 +02:00
middleware feat(events): add mana-events service + public RSVP flow (Phase 1b) 2026-04-07 14:27:48 +02:00
routes feat(events): add Event Discovery — Phase 1 + 2 2026-04-18 15:30:46 +02:00
app.ts feat(events): add Event Discovery — Phase 1 + 2 2026-04-18 15:30:46 +02:00
config.ts feat(events): add Event Discovery — Phase 1 + 2 2026-04-18 15:30:46 +02:00
index.ts feat(events): add Event Discovery — Phase 1 + 2 2026-04-18 15:30:46 +02:00