Capture your visual/web-design taste — including what you reject — into a living, portable taste-spec that your AI coding agent (Claude Code / Cursor / Codex) pulls fresh on every project, and that keeps upgrading itself as you flag things you like in the wild.
See docs/PRD.md and docs/DESIGN.md for the product and
engineering specs, and APPROACHES.md for the taste-engine core bet.
pnpm install
pnpm --filter @taste-machine/web dev # http://localhost:3000No .env is required for local dev (defaults: TASTE_ENGINE=mock, DB=memory). Copy
.env.example → .env.local to wire the real engine / Supabase later.
pnpm -r typecheck # typecheck every package + the appThis repo is structured so three workstreams develop in parallel without colliding:
| Lane | Owns | Lives in |
|---|---|---|
| Taste engine (founder) | images/captures → taste-spec + refinement | packages/engine-claude (stub) |
| Experience (designer + PE) | polished, prop-driven components | packages/ui |
| Scaffolding | routes, data, API, endpoint, extension | apps/web, packages/db, packages/core |
The contract everything shares is packages/core: the TasteSpec
artifact and the TasteEngine interface. Swapping the real engine in is one env var
(TASTE_ENGINE=claude) and never touches a route, component, or table. Same discipline
for data via the Repository interface (DB=memory|supabase).
apps/
web/ Next.js (App Router) — the product + the public taste API
packages/
core/ ⭐ THE SEAM: TasteSpec + TasteEngine + API/capture contracts
engine-mock/ deterministic fixtures — the app runs on this today
engine-claude/ the real engine (stub; founder's workstream)
ui/ presentational components + design tokens (designer's lane)
db/ Repository interface + in-memory impl + Drizzle/Supabase schema
spike/ de-risking spike for the core bet (GREEN — see spike/RESULTS.md)
docs/ PRD.md, DESIGN.md
- TanStack Query — all server state + background-job polling.
- Zustand — ephemeral per-flow UI state (train deck buffer, playground session).
- Context — low-frequency DI (session, env config, theme).
Login (dev mock user) · Train (like/dislike + cluster-gate) · Synthesize · Playground
(generate → sandboxed preview → self-review critique → refine) · Publish + API keys +
install snippets · Public endpoint /u/:slug/taste.{md,skill.md,agents.md,mdc,json} ·
Chrome-capture → bounded-merge upgrade · Marketplace browse + fork.
M1 train→publish polish · M2 playground + wedge depth · M3 Chrome extension
(apps/extension) · M4 marketplace · then the real engine-claude + Supabase.