Intro
Aisle is a Next.js desk for a one-person retail marketing company — seed brand Lane & Co. You write a brief. Four seats (trend, creative, compliance, media) plus a founder log move a campaign through research, posters, a revision loop, channels, and a schedule.
It looks like an ads platform. It is a local campaign simulator with a real HITL state machine. ELEC5620 is the course context; the string does not appear in the repo.
Method
Zustand persist key aisle-draft-v2. No database. Agent slots: Trend Analyser, Image Generation, Compliance Checker, Media Manager. The model catalogue lists Local, OpenAI, Anthropic, and Cursor; only the local OpenAI-compatible endpoint actually fetches. Cloud adapters throw a not-wired error and fall through to stubs.
The engine does not parse model JSON into the campaign. After a backend note it runs TypeScript: buildResearch, makeCreatives, reviewCreatives, adapt. v1 copy is written to hit banned terms; v2 is the cleaned rewrite. Compliance is string match on brand.bannedTerms, then revise / escalate / pass. One automatic creative retry, then the founder. Publish numbers are formulae, not ad-network data.
Demo
npm run dev, open localhost:3000. Overview is the founder desk: awaiting-you, agents running, scheduled, synthetic impressions. Watch a live agent run creates a Trail Parka brief and launches the bench.
Walk a campaign: brief, research, studio, compliance, channels, log. Seed data includes a published campus parka and a Week 34 stone-fruit catalogue that still needs judgement. Themes: Simple, Desk, Dev.
Conclusion
Show the banned-claim loop, not a claim that GPT is filling the catalogue. The interesting design is human approval, cost visible before a local call, and compliance that can send work back.
Limits: image/video providers are stubs, metrics are synthetic, and persistence is the browser.
