Public beta
Changelog
Dated notes. One static page — no CMS. For contact, use /contact.
Storefront visual bar
- Three storefront-first styles on /studio/new-store: Clean (Dawn-level restraint), Atelier (serif, earth), Street (heavy type). Each recipe is a full shop anatomy — announcement → sticky header → one-message hero → numbered collection on a contrast band → editorial → trust → newsletter → footer.
- Product cards are 4:5 with hover, formatMoney, 01/02/03 indexes, and a left/right detail panel. Fake ★★★★★ reviews, SALE spam, and hero carousels are banned.
- Contrast band is copy-paste classes: store-contrast w-full bg-zinc-950 (clean) / bg-[#1C1917] (atelier) / bg-black (street) plus py-20 md:py-28, inner store-contrast-inner mx-auto max-w-7xl px-6.
- Preview merge drops leftover .formatMoney tails per file without rebalancing JSX (rebalance was closing functions early → return outside of function). Typed const PRODUCTS: T[] = is extracted so merchant SKUs replace the Northline default catalog.
- Cheapest real-photo path is the existing Grok Imagine tool (generate_image) — no third-party API. Until a still returns, one coherent inline-SVG language in reserved 4:5 slots.
- QA score is static+live: an empty/black preview or a compile error cannot grade Good. Chat score updates when the iframe reports mount/fail. Bare `"sku": <svg>` object entries are rewritten per file (not global brace-depth) and fail static QA. Eject catalog.ts uses the merchant PRODUCTS, not Northline $28. Fix-from-QA must not claim the preview compiles — Babel is the gate.
- Design-quality warnings in the QA pass: timid hero type (no text-5xl+ on a storefront), low-contrast muted text, fixed ≥400px widths (375px scroll risk), <img> without aspect-ratio boxes, hover-less buttons, and 3+ typefaces. Warnings only — they flag the bar, never block a save.
Start a store
- Guided rail at /studio/new-store: name, products, vibe. Lands in the studio with v1 generating — merchant SKUs, not placeholder SVGs.
- Preview iframe installs formatMoney / getProduct / createCheckoutSession on window before user code runs (wizard ProductGrid calls window.formatMoney).
- Toolbar Preview blocked / Publish-disabled clears on a successful iframe paint — stale compile errors no longer stick after the storefront renders.
- ACP/MCP/UCP and durable store_orders still attach on eject. The general chat builder is unchanged.
Compiler, not a template grid
- One golden path: Agent-ready store. Admin / Auth / Kanban are ordinary chips.
- Ejected stores write store_orders to Postgres when DATABASE_URL is set (same shape as Northline). Memory fallback only without it.
- Canonical origin is shipboard.ca. shipboard.netlify.app 308s there.
Store preview: one PRODUCTS binding
- Platform catalog is injected once. Generated const PRODUCTS / lib/catalog.ts copies are stripped so Babel no longer throws “already been declared”.
- Eject-only files (ACP / MCP / UCP routes) stay out of the iframe merge and the iterate prompt, so body.line_items cannot truncate Component.tsx.
- Ready-to-ship goes red when the iframe fails to compile. Continue is a no-op unless the stream was actually truncated.
Golden path: store that actually renders
- Agent-ready store no longer crashes on first paint: PRODUCTS is injected when the model forgets the catalog.
- QA fails Ready-to-ship on runtime exceptions. A store that throws never ships.
- Generated v1 now includes the agent stack (catalog, /.well-known/ucp, MCP tools, Stripe, ACP stub, channel=).
- The golden-path card fills the prompt — hit Send. No silent project burn.
Agent-ready store
- Studio prompt Agent-ready store. Same Ready-to-ship gate.
- Eject includes a typed catalog, /.well-known/ucp (dev.ucp.shopping over REST + MCP), four MCP tools (search_products, get_product, create_checkout_session, get_order), Stripe Checkout for humans, ACP stub, and orders.channel = chatgpt | gemini | copilot | human.
- Proof-of-concept store is live at northline-supply.netlify.app — not a real brand. Admin shows the last 20 orders.
Public log
- This page. Dated entries, listed in the sitemap and the footer. Static — no CMS.
P0 / P1 hygiene
- Dead discord.gg link removed from studio. Contact is /contact. No public Discord.
- Eject target is Netlify. Vercel stays a secondary import in the deploy dialog only.
- BYOB schema map is browser localStorage (Shipboard.studio.settings.v1). Connection string is request-scoped.
- Ollama is labeled as your machine, not hosted. Gallery titles no longer truncate mid-word. Promo → Pro already existed. Max priority support: hello@shipboard.ca.
- /about and /contact added.