Jan Mátl

Beerhub

Beerhub

FlutterFlutter
FirebaseFirebase
FirestoreFirestore
Google OAuth 2.0
Google Places API
DartDart

App for tracking beers, reviewing beers, and managing meetups with friends.

Screenshots

Active development: Sep 2023 – Nov 2023 · Removed from Play Store: 12 Jul 2025 (no longer maintained after full-time at Class)

Idea

I wanted a single place to track beers I had tried, rate them, and coordinate meetups with friends — without juggling notes apps and group chats. The idea grew into a beer-focused social app: reviews and rankings, friends, meetup planning with chat, a map of places that serve beer, and simple consumption stats over time. The goal was personal automation first, then enough social structure that the experience still felt useful with other people in it.

Implementation

I started with a Flutter project wired to Firebase and Firestore, then built UI pages against mock data so the product shape was clear before committing to every feature. Once a first version existed — pages, a mock graph, and a few core components — it was easier to cut scope and decide what to keep. The features I shipped included: - Google OAuth for simple sign-in - Creating a beer dynamically with a photo and details - Reviewing a beer with a rating and comment - A ranked list of beers and their standings - A user page with personal stats - Adding and managing friends - Randomly generated avatars - Meetup chat - A map of places that serve beer, with location ratings - Tracking beers consumed with a graph of consumption over time Scope ballooned quickly. What began as a personal tracker became a full social portal — a lot for a one-person project with no external backing. User-generated beer photos were an early risk. I looked at automated SafeSearch-style moderation, but without a proper backend it was awkward and I did not want sensitive checks running only on-device. Instead I added manual moderation through a small second admin app where I could approve or reject new beers. The places map was another hard problem. On open, the app checks whether that map radius was already fetched recently; if not, it queries Google Places with beer-related keywords, stores results in Firestore, and indexes them with geohashes so nearby places can be queried by radius. Meetup chat was simpler: stream messages from a collection keyed by meetup id for real-time updates, plus accept/decline so attendees know who is joining. I also added a short welcome animation to introduce new users to the main flows. The project taught me that even “add a beer with an image” is never just one request — auth, moderation, geo queries, and live chat all have their own edge cases. Active development slowed after I started full-time at Class and no longer had the energy to keep pushing a large side project after work. I later removed it from the Play Store for the same reason — I was not maintaining it.