bodega-bartender
- Next.js
- TypeScript
- PostgreSQL
- Auth.js
- Leaflet
tl;dr: I built this because I wanted a drink generator that’s actually tied to things you can buy, not an AI making up a plausible-sounding cocktail.
The idea is mobile-first and a little silly on purpose — generate me a drink — but I didn’t want it hallucinating a product that doesn’t exist. So every generation starts from a real, researched catalog (200+ products), gets checked against deterministic safety rules, and only suggests substitutions that are actually in the data. DeepSeek proposes a few grounded candidates from a seeded inspiration pack, they get ranked for variety and novelty against recent recipes, and one gets picked with some weighted randomness — the seed and scores are stored with the recipe, so a generation is reproducible.
Getting new products into the catalog is its own small pipeline. There’s a private admin crawler that reads structured commerce data, honors robots.txt, and stays on the retailer’s own domain, plus a Walmart Marketplace API adapter for retailers that support it. Nothing reaches the public catalog without going through review first — I didn’t want the ingestion side able to publish anything on its own.
catalog (200+ products)
|
v
seed + inspiration pack --> DeepSeek (4 candidates)
|
v
rank (variety, novelty)
|
v
weighted pick --> recipe (seed + scores saved)
admin crawler --> review queue --> catalog
(nothing publishes without review)
Community features stay deliberately light: an anonymous per-session rating, and human recipe submissions run through the same validation as generated ones. Admin access has no public link at all — sign-in is allowlisted to a single email via a magic link, and the app and its background worker deploy as the same image, split across a web process and a k3s worker.