🎄 Holidácor

Holiday décor brand family. Two surfaces: the marketing + package-booking site (Next.js monorepo with a Convex backend) and the four-shop dropship storefront — porch, yard, car, and dog — one shared cart, with internal purchasing manifests for order fulfillment.

Overview Features Operations Flow Tech Roadmap Test results 🧪 Pair test plan

Overview

LiveCommerce wiring pending (Convex / Stripe)

Marketing repomicrospaces/holidacor — pnpm + Turbo monorepo: apps/web, apps/installer, packages/convex
Shopfront repomicrospaces/holidacorshop — single Next.js 14 app
LocalC:/Users/AI/Repos/holidacor · C:/Users/AI/Repos/holidacorshop
Marketing liveholidacor-web.vercel.app — Vercel project holidacor-web (prj_S6jARdYFDyR9awcqehV652HVUV8a), rootDirectory apps/web
Shopfront liveholidacorshop.vercel.app — Vercel project holidacorshop (prj_oLaPn2m87CAqNZi1tMOB8nEvf9Pw)
Owner agentholidacordev
Brand familyHolidácor (porch) · Holidáworld (yard) · Holidácar (car) · Holidáwg (dog) — eight holidays a year

App features

Marketing + booking site (apps/web)

Dropship storefront (holidacorshop)

Operations playbook

The lifecycle of one Holidácor order — from checkout to a finished porch — and where automation ends. Current-state as of 2026-09-09, E2E-verified with order HS-HFAN79 (see Test results).

1 · Customer places an order

  1. Customer browses the four shops (porch / yard / car / dog) and adds items to the shared cart. The live path today is the shopfront catalog, including the Spooky Season Porch Package bundle.
  2. Checkout collects name, email, and ship-to; POST /api/orders validates, assigns an HS-XXXXXX id, and persists the order JSON under data/orders/.
  3. Confirmation (/orders/[id]) groups line items by supplier so the customer sees who ships what.

Marketing-site package booking (Essential / Signature / Grand) is not wired yet — no ConvexProvider / NEXT_PUBLIC_CONVEX_URL, Stripe stubbed — so shopfront checkout is the only live order path today.

2 · Purchase the display

  1. Open /admin — the order appears in the All / Halloween / Christmas tabs.
  2. /admin/orders/[id] renders the purchasing manifest: ship-to block with copy, package summary, and PRODUCTS TO PURCHASE grouped by supplier — package contents are exploded into individual rows tagged "from package", and the bundle line itself is excluded from re-ordering.
  3. Buy: print the manifest, or use the per-supplier Amazon bulk-cart link (AmazonCartButton builds an Amazon cart from mapped supplier SKUs).
Gap (2026-09-09): supplier / SKU / MAP mapping in lib/suppliers.ts is placeholder — rows show "MAP NEEDED" with generic SupplierA / SupplierB groups, and the Amazon bulk-cart link stays hidden until SKUs are mapped. Real supplier data is the next ops unlock.

3 · Dropship fulfillment

4 · Install → enjoy → takedown

Flow

Shopfront order → purchasing manifest

Shared cart (localStorage across 4 shops)
        │
        ▼
  POST /api/orders  →  data/orders/HS-XXXXXX.json
        │
        ▼
  /orders/[id] confirmation — line items grouped by supplier
        │
        ▼
  /admin + /admin/orders/[id] — per-supplier purchasing manifest
  (ship-to + items + "from package" tags, print)

Marketing build + deploy

Push to main triggers .github/workflows/deploy.yml: pnpm install → pnpm build (Turbo) → npx vercel@latest deploy --prod --yes from the repo root. Vercel project setting rootDirectory: apps/web handles the subpath — don't change it, and don't run the deploy from apps/web (the path doubles).

Deploy gotchas (fixed 2026-08-17): vercel/action-deploy doesn't exist; Turbo 2.x wants tasks not pipeline in turbo.json; the amondnet action bundles an ancient CLI — call npx --yes vercel@latest directly. GitHub Secrets: VERCEL_TOKEN, VERCEL_ORG_ID, VERCEL_PROJECT_ID.

Shopfront deploy

No GitHub Actions — Vercel project holidacorshop is linked (git integration) and serves latest main. Local: npm install · npm run dev.

Tech

Marketing stackpnpm workspaces + Turbo 2.x · Next.js 14 App Router + Tailwind · packages/convex backend
Shopfront stackNext.js 14.2.15 App Router + Tailwind 3 · data layer in lib/*.ts (products, packages, shops, holidays, orders) · JSON file storage under data/orders/
Vercelholidacor-web (rootDirectory apps/web, env listed in vercel-project.json: NEXT_PUBLIC_CONVEX_URL, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, INTERNAL_API_KEY) · holidacorshop (linked)
CIholidacor: .github/workflows/deploy.yml · holidacorshop: none (Vercel git integration)
Localholidacor: pnpm install · pnpm dev · holidacorshop: npm run dev
holidacor/               holidacorshop/
  apps/web/                 app/
  apps/installer/             holidacor|holidaworld|holidacar|holidawg/
  packages/convex/            cart · checkout · orders/[id]
                              admin/ · admin/orders/[id]
                              api/orders/route.ts
                            lib/ · data/orders/
Local dev gotchas: headless-Chrome screenshots need --user-data-dir=%TEMP%\… or they silently fail, and PowerShell array-in-foreach mangles --window-size (pass sizes literally). Running npm run build while next dev is up corrupts .next.

🗂️ Roadmap

Live roadmap, managed as GitHub issues (holidacorshop issues). Add or close items on GitHub — ☑ = done, close as “not planned” to remove.

Test results

2026-09-04 — live verification for this doc

2026-08-22 — shopfront packages + admin manifests

2026-08-17 — marketing deploy pipeline

Commerce paths (Convex, Stripe) are not live yet — treat current state as marketing + catalog/manifest verification, not a full commerce QA pass.