AFTER — Friends & Events Platform
  • Role:

    Founder & Full-Stack Engineer

  • Period:

    06/2025 — 01/2026

  • Stack:

    Go, PostgreSQL / PostGIS, Flutter (iOS, Android, Web), Next.js, WebSocket, Docker, Hetzner

  • URL:

    api.after.zone

AFTER — Friends & Events Platform

Founder and sole engineer of AFTER: find what's on near you, make a plan with your people and meet up. A Go backend aggregates events from licence-free sources worldwide, and Flutter clients for iOS, Android and Web add group chat and live location sharing between friends. Built since June 2026, 350+ commits, running on Hetzner.

Highlights

  • Multi-source ingestion: Go scrapers for Eventbrite, Songkick, Luma, viralagenda, Goabase, Psytrance Portal and Shotgun, mapping seven source data models into one schema with TTL stale-while-revalidate caching in SQLite or PostgreSQL / PostGIS — 58,000+ events across 3,100+ cities.
  • Public API: JSON and GeoJSON endpoints at api.after.zone with city, category, source, date-range and full-text filters, geo queries, user event submission with cover uploads and a CORS-friendly image proxy.
  • Real-time layer: WebSocket hub for per-event public rooms, private invite-code groups, presence and live-location sharing that is never persisted — in-memory with a 2-minute staleness sweep and a 3-hour cap; anonymous token identity, no tracking cookies.
  • Flutter app (iOS / Android / Web): feed, MapLibre map and groups tabs, filters, event detail, deep-link invite landing pages and an in-app update banner tied to each release.
  • Ops & AI tooling: Next.js ops console, live scrape-run dashboards, chat admin, a kepler.gl map of the whole feed, and an MCP server (scrape_status) so Claude monitors ingestion directly.
  • Delivery: test-gated pipeline (go build + go test) producing linux/amd64 Docker images shipped to Hetzner behind nginx, with health-check smoke tests after every deploy.

Stack: Go, SQLite, PostgreSQL / PostGIS, WebSocket, Flutter / Dart, MapLibre, Next.js, kepler.gl, Docker, nginx, Hetzner, MCP.