Skip to content

foolish-bandit/Firewater

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Firewater

Every bottle has a story. Find yours.

Live App GPL-2.0 Stars

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.


Features

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.


Try It

Live at firewater.app

Or run locally:

git clone https://github.com/foolish-bandit/Firewater.git
cd Firewater
npm install
npm run dev

Browsing the catalog works out of the box. Social features and AI search require API keys — see .env.example.


Tech Stack

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)

Data

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.


Architecture

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.


Contributing

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 catalogs

PRs 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.


License

GPL-2.0

Built by Zack Brenner

About

Every bottle has a story. Search, review, and explore 2,000+ spirits with AI-powered search, flavor radar charts, barcode scanning, and social features. React + Gemini + Capacitor iOS.

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Sponsor this project

Contributors