Store Strategy (Strategy Approval)
Role
For each approved trend without a store, create the preview-only strategy
package and persist a stores record in status strategy_review. Everything
here is preview-only: LOW-RES assets, no Printful sync, no routed storefront
path, no live payments.
Package contents
- Branding — exactly 3 brand variants per trend
(
branding.variants[], one per tone conservative / catchy /
aggressive). Each: {name, slug, logo (preview), colors[], tone, design_md} — the DESIGN.md language document.
- Creatives — 6 illustration concepts per brand variant (×3 = 18),
each with a LOW-RES preview (image gen, bounded cost; final HD only after
approval). Persist
asset_ids on the selection.
- Products — Printful catalog variant selection (mockups only, NO sync),
pricing (compare + % off,
price ≥ $29.99, product+shipping ≤ $18, net
margin ≥ 35%, break-even ≈ 3 units), PDP copy per product.
- Site — storefront preview at
/<slug> (path NOT routed live), GA4
custom events (single shared property, store as custom dimension), Stripe
keys + cart UI, minisearch indices, SEO/AEO/GEO meta, sitemap.
- Blog — 6 DRAFT articles (Unsplash illustrations, SEO/AEO/GEO meta),
persisted as
blog_posts with status draft.
Persist
stores record: status strategy_review, selection = {brand_variant: "", asset_ids[], product_ids[], blog_ids[], site_review: ""}.
- One
agent_runs row per stage (brand, assets, products, site,
copy, blog) — record successes and failures separately; failed stages are
retried by the build-check cron.
Selection + chat refinement
- The operator selects exactly one brand variant →
selection.brand_variant.
- The operator refines via chat (
creative-chat, proxied through Hermes
/v1/chat/completions with the trend's full context). Refinements are
appended to selection.refinements[]; affected stages re-run and are
recorded in new agent_runs rows (agent_runs.feedback).
Exit
On APPROVE STRATEGY (operator action in back-office): advance
strategy_review → building via the status machine. Do not start the build
yourself — the build-check cron picks it up.
Completion contract (final output)
skill: store-strategy
status: ok|partial|failed
store_id: <pb_id>
brand_variants: 3
concepts: 18
products: N
blog_drafts: 6
agent_runs: [stage ids]
1---2name: store-strategy3description: Trendy Strategy Approval stage (PRD §4.5). For each approved trend, generate a preview-only strategy package: 3 brand variants, 6 illustration concepts per variant (LOW-RES previews), Printful product selection with pricing, site preview, and 6 draft blog articles. Nothing is live, no Printful sync, no route. Kicked off by the build-check cron every 15 min.4---56# Store Strategy (Strategy Approval)78## Role910For each **approved** trend without a store, create the preview-only strategy11package and persist a `stores` record in status `strategy_review`. Everything12here is preview-only: LOW-RES assets, no Printful sync, no routed storefront13path, no live payments.1415## Package contents16171. **Branding** — exactly **3 brand variants** per trend18 (`branding.variants[]`, one per tone `conservative` / `catchy` /19 `aggressive`). Each: `{name, slug, logo (preview), colors[], tone,20 design_md}` — the DESIGN.md language document.212. **Creatives** — **6 illustration concepts per brand variant** (×3 = 18),22 each with a LOW-RES preview (image gen, bounded cost; final HD only after23 approval). Persist `asset_ids` on the selection.243. **Products** — Printful catalog variant selection (mockups only, NO sync),25 pricing (compare + % off, `price ≥ $29.99`, product+shipping ≤ $18, net26 margin ≥ 35%, break-even ≈ 3 units), PDP copy per product.274. **Site** — storefront preview at `/<slug>` (path NOT routed live), GA428 custom events (single shared property, store as custom dimension), Stripe29 keys + cart UI, minisearch indices, SEO/AEO/GEO meta, sitemap.305. **Blog** — **6 DRAFT articles** (Unsplash illustrations, SEO/AEO/GEO meta),31 persisted as `blog_posts` with status `draft`.3233## Persist3435- `stores` record: status `strategy_review`, `selection = {brand_variant:36 "", asset_ids[], product_ids[], blog_ids[], site_review: ""}`.37- One `agent_runs` row per stage (`brand`, `assets`, `products`, `site`,38 `copy`, `blog`) — record successes and failures separately; failed stages are39 retried by the build-check cron.4041## Selection + chat refinement4243- The operator selects exactly **one** brand variant → `selection.brand_variant`.44- The operator refines via chat (`creative-chat`, proxied through Hermes45 `/v1/chat/completions` with the trend's full context). Refinements are46 appended to `selection.refinements[]`; affected stages re-run and are47 recorded in new `agent_runs` rows (`agent_runs.feedback`).4849## Exit5051On **APPROVE STRATEGY** (operator action in back-office): advance52`strategy_review → building` via the status machine. Do not start the build53yourself — the build-check cron picks it up.5455## Completion contract (final output)5657```text58skill: store-strategy59status: ok|partial|failed60store_id: <pb_id>61brand_variants: 362concepts: 1863products: N64blog_drafts: 665agent_runs: [stage ids]66```