How josefanderberg/vadkul works
Vadkul is a Swedish event-discovery platform. Its principal workflow is: collect events from many external publishers, normalize and enrich them, aggregate them into Firebase, then let visitors browse city lists, maps, and event details. Users can also create, save, share, and receive reminders for events. Administrators operate outreach workflows that generate promotion drafts with Claude, while marketing routes render event-based social images. The sampled code strongly confirms Firebase-backed delivery, image hosting, outreach drafting, and map-image generation; some scraper wiring remains inferred from module names.
Components 25
Event Ingestion
- Source Registry
apps/scraper/src/sources/registry.ts - Source Runner
apps/scraper/src/sources/runner.ts - Scraper Adapters
apps/scraper/src/scrapers - Event Normalizer
apps/scraper/src/utils/normalizeEvent.ts - Venue Enrichment
apps/scraper/src/utils/venueCoordinates.ts
Data Platform
- Event Aggregator
apps/scraper/src/scripts/aggregate-events.ts - Image Hosting
apps/scraper/src/utils/storageHelper.ts
Visitor Experience
- Event APIs
apps/web/src/app/api/events/[layer]/route.ts - Event Detail API
apps/web/src/app/api/event/route.ts - City Event Pages
apps/web/src/app/(v1)/evenemang
User Engagement
- Event Features
apps/web/src/services - Cloud Functions
apps/functions/src/index.ts
Outreach And Marketing
- Outreach Console
apps/web/src/app/(v1)/admin/outreach - Outreach Routes
apps/web/src/app/api/admin/outreach - Draft Generator
apps/web/src/app/api/admin/outreach/draft/route.ts - Outreach Log
apps/web/src/app/api/admin/outreach/log/route.ts - Marketing Images
apps/web/src/app/api/marketing
Other components
- Event Visitor
- Administrator
- Event Source Sites
- Firebase Firestore
- Firebase Storage
- Firebase Notifications
- Anthropic Claude
- OpenStreetMap Tiles
Connections 25
- Source Registry → Source Runner: configures
- Source Runner → Scraper Adapters: dispatches
- Event Source Sites → Scraper Adapters: serve events
- Scraper Adapters → Event Normalizer: produces events
- Event Normalizer → Venue Enrichment: enriches venues
- Event Aggregator → Firebase Firestore: writes aggregates
- Image Hosting → Firebase Storage: uploads images
- City Event Pages → Event APIs: requests layers
- City Event Pages → Event Detail API: requests details
- Event APIs → Firebase Firestore: reads layers
- Event Detail API → Firebase Firestore: reads events
- Event Visitor → City Event Pages: browses events
- Event Visitor → Event Features: uses features
- Event Features → Firebase Firestore: stores preferences
- Cloud Functions → Firebase Firestore: reads state
- Cloud Functions → Firebase Notifications: sends notifications
- Administrator → Outreach Console: operates
- Outreach Console → Outreach Routes: calls
- Outreach Routes → Draft Generator: generates drafts
- Outreach Routes → Outreach Log: records outcomes
- Draft Generator → Firebase Firestore: reads contacts
- Draft Generator → Anthropic Claude: generates copy
- Outreach Log → Firebase Firestore: reads and writes
- Marketing Images → OpenStreetMap Tiles: fetches tiles
- Marketing Images → Event APIs: uses event data