Every bottle has a story. Find yours.
Search, review, and explore 2,000+ spirits — bourbon, scotch, rye, gin, tequila, vodka, rum, mezcal, cognac, amaro, and more.
AI-powered search. Flavor radar charts. Barcode scanner. Social. Runs everywhere.
|
Discover 2,000+ spirits with category filters, price/proof sliders, and sorting. AI semantic search — ask for "smoky bourbon under $50" and get real answers. |
Taste 12-dimension flavor profiles with radar charts. Detailed tasting notes — nose, palate, finish. Star ratings. Review tags. Compare spirits side-by-side. |
Collect "Want to Try" and "Tried" lists. Barcode scanner to ID bottles instantly. Photo uploads. Export your collection to Excel or text. |
|
Social Follow other enthusiasts. Public profiles with top shelf display. Community activity feed. Follow what your friends are drinking. |
Contribute Submit new spirits to the catalog with AI-powered data generation. Community submissions go through an approval workflow. Weekly data ingestion from public sources. |
Everywhere PWA-ready for mobile install. iOS app via Capacitor. Dark and light themes. Offline support with graceful degradation. |
Live at firewater.app
Or run locally:
git clone https://github.com/foolish-bandit/Firewater.git
cd Firewater
npm install
npm run devBrowsing the catalog works out of the box. Social features and AI search require API keys — see .env.example.
| Layer | Tech |
|---|---|
| Frontend | React 19, TypeScript, Tailwind CSS 4, Vite 6 |
| AI | Google Gemini 2.5 Flash (semantic search + submission generation) |
| Auth | Clerk (Google OAuth + email/phone) |
| Database | Vercel Postgres (reviews, profiles, social, lists) |
| Storage | Vercel Blob (photos) + Upstash Redis (rate limiting) |
| Mobile | Capacitor 8 (iOS) + html5-qrcode (barcode scanner) |
| Deployment | Vercel (serverless functions + static frontend) |
The catalog spans 117 data files covering every major spirit category:
bourbon, scotch, rye, vodka, gin, rum, tequila, brandy, cognac, armagnac, Irish whiskey, Japanese whisky, Canadian whisky, mezcal, amaro, liqueurs, genever, and more.
A GitHub Actions workflow runs weekly to pull new spirits from public sources (Iowa SODA API, Pennsylvania PLCB catalog), deduplicate, normalize, and open PRs with additions.
src/
components/ React UI — catalog, detail, lists, profiles, feed, compare, admin
hooks/ Custom hooks — auth, catalog, lists, reviews, photos, social
data/ 117 static spirit data files (~37K lines, auto-generated)
services/ Gemini AI client
utils/ String matching, flavor stories, liquor utilities
api/
catalog.ts Search, filter, paginate spirits
social.ts Reviews, lists, follows, profiles
photos/ Upload + admin moderation
auth/ Clerk OAuth + session management
_auth.ts Shared auth middleware
_rateLimit.ts Per-instance + global (Redis) rate limiting
State lives in custom hooks passed as props from App.tsx. TanStack Query handles server state. localStorage provides offline persistence. No Redux.
npm run dev # dev server (Express + Vite HMR)
npm run build # production build
npm test # Vitest suite
npm run ingest # pull new spirits from public catalogsPRs welcome — especially new spirit data, flavor profiles, and UI improvements. Don't edit files in src/data/ directly — those are auto-generated by the ingest script.
GPL-2.0
Built by Zack Brenner
