All projects08 / 08

București Bites & Vibes

A mobile-first app to discover Bucharest venues.

archived2026

08archived

  • venue states, to-try to visited4
  • activity event kinds in the feed7
  • Google APIs: Maps, Places, Geo3

01 / Problem

Restaurants, cafes and bars, tracked in one place

Good places in Bucharest end up scattered across saved map pins, chats and memory. I built a self-hosted, mobile-first app to collect venues, mark whether I have been, and find them again on a map.

02 / How it works

Venues, lists and an activity feed

Each venue stores its type, tags, price level, neighbourhood and sector, coordinates, opening hours and my own rating and notes. It can be synced with Google Places data. Venues go into lists and move between four states, and every change is written to an activity feed.

03 / The hard part

Sign-in and hosting without a cloud bill

Login uses Google OAuth through NextAuth, and the map uses Google Maps keys. The whole thing runs as a Docker Compose stack behind nginx and a Cloudflare Tunnel, so nothing needs an open port at home. The README walks through every setup step, from OAuth credentials to the first database migration and seed.

How it works

Sign in, save a place, find it again

A self-hosted, mobile-first app. Nothing needs an open port at home.

The same flow as a list, in order.

  1. Phone: Mobile browser. Mobile-first interface. Goes to Tunnel and web server.
  2. Edge: Tunnel and web server. No open port at home. Goes to Next.js app.
  3. App: Next.js app. Route handlers; Google sign-in through NextAuth. Goes to PostgreSQL, Google Places (venue sync).
  4. Data: PostgreSQL. Venues, lists, four states, notes and ratings. Goes to Activity feed, Venue map.
  5. Data: Google Places. Optional venue sync. End of the path.
  6. Use: Activity feed. Every change is logged. End of the path.
  7. Use: Venue map. Google Maps. End of the path.

Stack, by layer

Frontend
Next.js 14Tailwind CSSFramer Motion
Backend
Next.js route handlersPostgreSQLPrismaNextAuth (Google OAuth)
Integrations
Google Maps JavaScript APIPlaces APIGeocoding API
Delivery
DockernginxCloudflare Tunnel

Live from the București Bites & Vibes repoOffline, last known values

Last commit
n/a
Service
Archived