Back

Cafecina

A two-sided ordering app for the coffee shop parties I host at home — guests order off an AI-generated vibe menu, a barista dashboard keeps me from losing track of whose oat-milk-no-foam is up.

Role

Solo-built

Tools

Lovable
Supabase

Timeline

July 2025

Highlights

  • Built a fully functional, two-sided web app (guest ordering and barista dashboard) to test the limits of "vibe coding" using Lovable and Supabase.
  • Integrated an LLM for dynamic, vibe-based menu generation and learned a crucial lesson in product-market fit: sometimes an analog clipboard is better for the user experience than a QR code.

Why I built it

Coffee shop parties are the best kind of party — daylight hours, no dress code, everyone has a prop to hold. I'd been hosting them long enough that my sharpie-on-cups system was starting to crack, and I'd been looking for a meaty first Lovable project to see what vibe-coding could actually do. Two birds, one scone.

Problem

The system was me, a sharpie, and a stack of cups. It works for four orders — by twelve, it stops working. I'd forget who was already on their second cortado and pull it ahead of someone who'd just walked in and didn't have a drink yet. The order things came in wasn't the order they should've gone out in, and I had no way to see that without stopping mid-pour to think about it. (Which, with a queue behind you and a kettle going, is not really an option.)

Solution

I used Lovable and Supabase to build a two-sided solution:

Guest Side. Guests scan a QR code or open a personalized cafe-front link. They can browse a menu that an LLM dynamically generates based on whatever "vibe" I set for the night, and place their order. For guests who want something hyper-specific, the LLM spins up a custom drink recipe on the fly.

Barista Side. A dashboard queues tickets with rich context—first drink vs. refill, who just walked in, and how long someone's been waiting. I can see queue fairness at a glance instead of trying to hold the entire party's status in my head.

What I learned

In AI-assisted dev, clarity is the compiler. Lovable can carry significantly more weight than I thought it could. Per-guest URLs, QR generation, real-time order state, the LLM brainstorm integrations—all of it held up. The ceiling isn't the tool; it's how clearly I can describe what I want. The only places I got stuck were places where I hadn't actually decided how the product should behave yet.

The best UX is sometimes no UX at all. The biggest lesson came from not actually using the app. During a planning session for the next party, I had the software fully ready to deploy. But before I pitched it, my friend suggested taking orders by hand using classic paper guest checks. Seeing how genuinely excited they were about the analog vibe, I scrapped the app launch right there. We all work in tech all day; these parties are the part of life that isn't that. It turns out a clipboard and a pen are simply more "party" than scanning a QR code. I built a great tool, but the planning session made me realize it was the wrong context. It left me wondering whether I built it for the parties at all, or just to see if I could. As a product manager, recognizing when your software would actively degrade the human experience—and having the restraint to just let people use paper—is just as valuable as knowing how to build it.