Case study · Closed beta
Hoppers
Collect the city, one bar at a time.
iPhoneFlutterMapboxTypeScriptFastifySupabase




The problem
A good night out leaves little behind. A month later you can’t remember the name of the bar by the canal, and most lists of places are written for tourists.
The idea
Check in at a bar and it becomes a Hop in your own collection of the city. The map fills in neighbourhood by neighbourhood, and the places you haven’t been to yet are easy to find.
What I built
An iPhone app in Flutter with a Mapbox map, a TypeScript API on Fastify, and Supabase for the data. Behind it is a catalogue of 7,199 Dutch venues, gathered and checked by its own data pipeline.
The work is spread over four private repositories: the app, the API, the platform and the data.
My role
I build it end to end, from the venue data to the app, and run the TestFlight beta. 742 commits since 14 September; 48 app tests and 205 API tests pass.
Facts
- Status
- Closed beta on TestFlight
- Catalogue
- 7,199 venues
- Commits
- 742
- Tests
- 48 app, 205 API
- Source
- Private, so commit messages never appear here
Stack
- Flutter: the iPhone app
- Mapbox: the dark city map and the venue pins
- TypeScript, Fastify: the API
- Supabase (Postgres): accounts, Hops and the venue catalogue
- A data pipeline: 7,199 venues, gathered and checked