- Next.js and React 19 website with Redux, Tailwind, and shadcn.
- Local-first calculator with browser-side simulation and optional cloud sync.
- Multiple interactive widgets without requiring the MCP layer for core UX.
Case Study 01
Snapshot: March 2026
Daily Libations, from customer product to MCP-native backend.
One system spans a local-first website, a Python FastMCP server, a shared Supabase data layer, and a separate Express-based Drink Pipeline. The point is not just cocktail data. The point is a product surface, an AI surface, and a simulation engine grounded in real dilution math, batch formulation logic, and service-time physics.
System Surface
Four connected layers, one product.
The customer-facing site stays fast and local. The MCP surface stays accurate and tool-rich. Both touch the same domain model without collapsing into one tangled runtime.
- Python FastMCP server exposing 45 tools across 9 modules.
- Shared Supabase state plus extra MCP-only tables for scenarios, clusters, venues, and trends.
- Separate Express-based Drink Pipeline for scraping, parsing, and normalization.
- Time-stepped physics simulation for dilution and service scenarios.
- Remote MCP exposure through Cloudflare Tunnel and custom remote MCP integration.
- Kubernetes and Docker deploy path for the Python service.
The browser uses a fast TypeScript simulation engine for interactivity while the MCP layer uses a Python engine for accuracy. That split is deliberate. The site stays responsive and the agent surface stays faithful.
This is a useful example of how to separate product UI from agent infrastructure without duplicating the entire system or forcing every user interaction through an AI boundary.
Stack
Chosen for behavior, not fashion.
- Next.js
- React 19
- Redux
- Tailwind
- shadcn
- Supabase
- Python
- FastMCP
- Express
- Docker
- Kubernetes
- Cloudflare Tunnel
Need a product surface and an AI surface to coexist cleanly?
That is a systems problem, not a copy problem.