Skip to content

Repository files navigation

Taste Machine

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.

Quick start

pnpm install
pnpm --filter @taste-machine/web dev        # http://localhost:3000

No .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 app

The three lanes (why the seams matter)

This 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).

Monorepo layout

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

State management (apps/web)

  • 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).

What works today (on mocks)

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.

Next milestones

M1 train→publish polish · M2 playground + wedge depth · M3 Chrome extension (apps/extension) · M4 marketplace · then the real engine-claude + Supabase.

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages