Community and events app
Community-App
A privacy-first community and events app for iOS, Android and web from one codebase.
Pre-launch, built as a duo with Tim
Hallo Sam
A recreation with made-up events. Change the trust level under Konto, Einstellungen.
Core skills
- Security and privacy
- Mobile and native
- Backend and APIs
- Infrastructure and ops
- Testing and verification
- AI-assisted engineering
Tech stack
- Expo
- React Native
- Expo Router
- NativeWind
- TanStack Query
- MapLibre GL
- NestJS 11
- Prisma 7
- PostgreSQL 18
- CASL 7
- Passport
- otplib
- TypeScript 6
- Zod 4
- OpenAPI
- pnpm
- Turborepo
- Coolify
- Docker
- Grafana
- Loki
- GitHub Actions
The hardest part
The meeting point the search has to know
Security rules belong in one place that can't be bypassed.
The whole story
What it looked like
“Events near me” needs the exact location. But someone with little trust may only see the rough area. And with about 137 routes, one forgotten spot is enough to reveal the meeting point.
What was really going on
Write the rule into every endpoint and the copies eventually drift apart. Store the location rounded and the radius search is no longer right.
The fix
A single mapper on the server decides who sees what. Internally the location stays exact, and it's only rounded as it leaves the server.
- 2,215
- commits in 9 weeks, from both developers combined
- ~7,650
- automated tests, about 1,600 of them against the real server
- 32
- database models, about 137 HTTP routes
In plain words
People find events nearby, but not everyone sees everything. How exactly you see the meeting point depends on how much the community trusts you. The name stays private on purpose until launch.
In many communities, who knows where people meet and when is a real safety issue. That shouldn't depend on a setting. It should be built into the architecture.
How it works
Step 1 of 4
Request
The app asks for nearby events. Search uses a bounding box and Haversine, with a hard cap.
What was built
- Events with series, capacity limits, attendee lists, comments and share links
- Location search with a bounding box and Haversine, sorted by distance, plus an event map
- Trust-based visibility, enforced in one place on the server
- QR tickets that also open offline behind a biometric lock, plus a door scanner with single-use scans
- Refresh token rotation with reuse detection, TOTP step-up, rate limiting that stores no addresses
- A feed, push, moderation and an LLM moderation worker that runs with no tools
How those skills were used
- Security and privacy
- Token rotation with reuse detection, recovery, account deletion, data export and trust-based visibility
- Mobile and native
- iOS, Android and web from one Expo codebase, with offline persistence, MapLibre and biometrics
- Backend and APIs
- About 137 HTTP routes, 32 database models, Zod schemas and CASL rules in one shared package
- Infrastructure and ops
- Coolify, Docker, nginx, systemd timers, GitHub Actions, Grafana, Loki and Alloy
- Testing and verification
- About 7,650 tests, end-to-end against a running API and a real Postgres
- AI-assisted engineering
- A claim system for two developers and their agents on one trunk, plus repo gates for raw SQL, API coverage and OpenAPI
My role
One of two developers, each with their own agents on one trunk. Using my multi-dev agent workflow, based on Context Observer.
See the Context Observer project