Somm Scribe: Wine Journal & AI Recommendations
Architecting and shipping a full-stack SaaS product from concept to production with React, TypeScript, Go, PostgreSQL, Stripe billing, and AI recommendation workflows.
At a Glance
Wine enthusiasts lack a frictionless way to record tasting memories, decode sensory profiles, and receive accurate bottle recommendations without tedious manual form data entry.
Building a consumer SaaS as a solo engineer requires balancing fluid mobile-responsive UX, secure tier-gated subscriptions, resilient data pipelines, and production infrastructure on a lean operational budget.
Engineered an end-to-end architecture: React/TypeScript frontend with zero UI bloat, Go REST microservice on Cloud Run, OpenAI integration for personalized wine recommendations based on tasting history, and hardened Stripe webhook lifecycle handlers.
Shipped a live production product operating reliably with real paying customers, sub-150ms API response times, automated database migrations, and zero infrastructure downtime.

Context
Somm Scribe is a live wine tasting journal I founded and built end-to-end: React/TypeScript frontend, Go REST API, PostgreSQL, Stripe billing, OpenAI recommendations, and Cloud Run deployment. The goal was a fast, mobile-friendly way to log tastings and get personalized bottle suggestions from real tasting history—not social noise or cellar inventory software.
The Problem
As a solo founder, the hard part was shipping a full product lifecycle without drowning in operational complexity:
- Capture structured sensory data without a heavyweight UI kit
- Gate features by Stripe subscription tier with reliable webhook handling
- Generate useful AI recommendations without sending raw tasting history as expensive prompts
What I Built


Production Stack
Solo Founder- Frontend: React, TypeScript, CSS Modules—no heavy UI library
- API: Go REST service on Cloud Run (fast cold starts, small memory footprint)
- Data: PostgreSQL with normalized sensory tags and migrations
- Billing: Stripe Checkout, Customer Portal, idempotent webhooks
- AI: OpenAI recommendations from aggregated tasting profiles
Key decisions
- Normalized sensory data: body, acidity, tannins, and flavor tags live in relational tables so collection filters and taste-profile aggregates stay fast and queryable.
- AI pipeline: aggregate top-rated wines into a compact sensory profile, prompt OpenAI for recommendations with rationale, then schema-validate the response before it reaches the UI (~80% fewer prompt tokens than raw tasting dumps).
- Stripe entitlements: verify webhook signatures, store processed
event_ids for idempotency, and enforce tier limits server-side on tasting creation.
Outcome
- Live SaaS with real users and Stripe subscription billing.
- Sub-150ms API responses from the Go service on Cloud Run.
- Full solo ownership across product, UI, API, data, billing, and deployment.
Interested in discussing this architecture?
I'm currently open to Senior Frontend, Product Engineering, and Tech Lead opportunities. Let's talk about technical planning, high-concurrency systems, or frontend craftsmanship.