# JAUS Event-Ready — partner (development) store checklist

What to click, in order, once the development store exists. Steps marked **(me)** are the ones I run as soon as I have collaborator access or the store is connected through the Shopify connector.

## 0. Before creating the store
- Partner dashboard → **Stores → Add store → Create development store**.
- Purpose: *Build a new store for a client*. Name: `jaus-event-ready`. Store URL: `jaus-event-ready.myshopify.com`. Country: United States. Currency: USD.
- Under *Developer preview*: none needed (Online Store 2.0 and metafields are GA).
- Create a **staff account for me** (Settings → Users → Add staff) or send a collaborator request from the Partner dashboard. Permissions needed: Products, Online Store, Apps and channels, Settings (for metafield definitions), Customers, Orders (read).

## 1. Store basics (5 min)
- Settings → **Store details**: name JAUS (dev), address 311 E Maple Rd, Birmingham, MI 48009, phone 248-283-3994, timezone America/Detroit.
- Settings → **Locations**: add `Birmingham boutique` (311 E Maple) and `Warehouse` — the hold Flow reads boutique stock by location.
- Settings → **Shipping and delivery**: General profile, US zone — Standard $6.95 (free over $70), Express (carrier-calculated), Overnight (carrier-calculated); International from $19. Matches the live shipping page.
- Settings → **Policies**: paste the live Returns and Shipping text so the policy badges are accurate.

## 2. Catalog import (15 min) **(me)**
- Preferred: on the live store, Products → Export → *All products, CSV for Excel* (includes images and inventory). Import it here: Products → Import.
- Fallback: `research/products.json` (public export, 4,872 products) converted to the Shopify product CSV — I have the converter.
- After import: spot-check 5 products (images, variants, tags), set inventory tracking on, and give every variant a quantity at *Warehouse* (dev stores have no real stock; I set quantities from the export's `available` flags: available = 3, sold out = 0).

## 3. Metafield definitions (5 min) **(me)**
- Settings → **Custom data → Products → Add definition**, one per row in `metafield-definitions.json` — or run `create-metafield-definitions.graphql` in the *Shopify GraphiQL App* with the store's Admin API token.
- Storefront access is set to *Public read* on each definition so the theme and the Finder feed can read them.

## 4. Product metafield import (10 min) **(me)**
- Install **Matrixify** (free tier is enough for 3,931 rows) → Import → upload `product-metafields-matrixify.csv` → mapping is automatic from the column headers → run.
- Alternative without an app: `SHOP=... TOKEN=... node enrich.js --write` writes the same values through the Admin API in ~4 minutes (25 metafields per call, 3,931 products).
- Check: Products → open *Olivia Maxi Dress - Chocolate* → Metafields section shows fit note *true to size*, model *5'8" wears S*, stretch *true*, lining *lined*, fabric *86% polyester & 14% spandex*, length *maxi*, sizes in stock *XS S M L XL*.

## 5. Apps (10 min) **(me)**
- Install (all free): **Search & Discovery**, **Flow**, **Forms**, **Shopify Email**.
- Search & Discovery → Filters → add: *Sizes in stock* (`jaus.sizes_in_stock`), *Occasion* (`jaus.occasion`), *Length* (`jaus.length`), *Fit* (`jaus.fit_note`), *Color family* (`jaus.color_family`), plus Availability, Price, Vendor. Remove the raw *Size* option filter (it is the stock-blind one).
- Search & Discovery → Search → boost `jaus.occasion` and `jaus.color_family` as searchable metafields; add synonyms: *wedding → wedding guest, bridesmaid*; *8 → L*; *6 → M*; *4 → S*; *2 → XS*; *formal → black tie*.
- Forms → create two forms: *Notify me* (hidden variant_id, product_handle, size; tag `bis:{variant_id}`) and *Hold in Birmingham* (name, phone, product, size, day; tag `hold-request`). Note both form page URLs for the theme settings.
- Do **not** install Globo, Route, Bogos, Hextom, Avada or Amplitude on the dev store; the point is to measure the site without them.

## 6. Theme (30 min) **(me)**
- Online Store → Themes → Add theme → *Horizon* (or the current Impulse export if JAUS wants to keep it for the comparison).
- Edit code → upload `assets/event-ready.css`, `assets/event-ready.js`, `sections/event-ready-finder.liquid`, `sections/fit-confidence.liquid`.
- Customize → Home page → add section *Event-Ready Finder* under the hero; set Source collection = Dresses (or a "Finder" automated collection: product type Dress/Gown, available), occasions list, default size, cutoff 14, standard 4, express 2, overnight 1, hold URL = Forms page.
- Customize → Collection templates *wedding-guest-dresses*, *bridesmaids-dresses*, *prom-dresses*, *homecoming-2026*, *bride-to-be* → add the Finder above the grid with the matching occasion first.
- Customize → Product template → add *Fit Confidence* block under the price / above the buy button.
- Theme settings → Typography: headings Tenor Sans, body Outfit (Google Fonts are in the Shopify font library); colors: background #FFFFFF, text #111111, accent #7A1E2E, secondary background #F3EEE6.
- Home page sections in order: announcement (free shipping over $70 · same-day dispatch · 30-day store credit returns), hero (one image, one line, one button), Event-Ready Finder, featured collection *Wedding guest* (8 products), reviews (Stamped or Shopify reviews), occasion tiles, editorial/blog, store map + hours, newsletter (no popup).

## 7. Flows (20 min) **(me)**
- Flow → Create workflow, one per recipe in `flows.md` (Back-in-size, Try-on hold, Low-size alert + tag expiry, Fit feedback, New-product enrichment). Use the internal email action pointed at my address until JAUS supplies theirs.

## 8. Measure (10 min) **(me)**
- Preview URL → run Lighthouse (mobile) on home, /collections/dresses, a product page. Record scores next to the live-site baseline (32 / 31 / 30) in `research/lighthouse-after.md`.
- Run the test script `event-ready.js` in the browser console: `document.querySelector('.er-finder')._er.rows.length` should equal the number of in-stock dresses in the source collection.

## 9. Hand over (5 min)
- Themes → *Share preview* link (valid for 14 days) → send to JAUS with the three Lighthouse numbers and the Finder link.
- When JAUS says yes: Partner dashboard → *Transfer store* to their account, or export the theme + metafields into their live store (theme upload, Matrixify import, Flow export/import).

---

**Time to a working demo store once access exists: about 2 hours, all in the steps marked (me).**

---

## What actually happened on the Kauss demo store (23 Sep 2026) — read before repeating

- **Metafield definitions**: created with `metafieldDefinitionCreate` (see `create-metafield-definitions.graphql`). Drop the *choices* validation on `jaus.occasion`; a list metafield with choices rejects any row that carries more than one value at CSV import.
- **Product import**: the Shopify product CSV importer does **not** split list-metafield cells. `["a","b"]` is double-encoded and `a; b` is stored as a single item. Import with the columns anyway (`jaus-shopify-import.csv`, 618 products, about 3 s each), then rewrite the two list fields with `metafieldsSet` — 25 rows per call, four aliased calls per request, ~1,230 rows in 14 requests. Matrixify (`product-metafields-matrixify.csv`) does split lists if it is installed.
- **Theme upload**: `themeCreate(source: <public zip URL>)` and the *Add theme → Upload zip* button both work. The importer silently drops files that contain a `range` setting with a tiny span or a `url` setting called `data_url`, and then drops the templates that reference the dropped section. All schema numbers are `select` settings now; the feed setting is `feed_url`. `themeFilesUpsert` writes to unpublished themes are allowed by Shopify but were blocked by the assistant session's policy, so use the zip route.
- **Finder catalog size**: Liquid's `collection.products` returns 50 products unless the loop sits inside `paginate`, and `paginate … by` tops out at 250. The section is now wrapped in `paginate coll.products by 250` and `event-ready.js` fetches the remaining pages with the Section Rendering API (`/?section_id=<id>&page=N`) and merges them, so all 618 products reach the Finder without an external feed. Verified: *Wedding guest* shows 164 dresses, the same count as the automated collection.
- **Occasion counts vs collections**: the occasion collections are tag-based (JAUS's own tags); the Finder reads `jaus.occasion`, which the enrichment script derives from tags, titles and product type. Bride, Bridesmaid, Prom, Homecoming and Wedding guest match exactly; Black tie, Night out and Vacation are broader in the Finder (e.g. every gown counts as black tie). Decide with JAUS which one is canonical, then either add metafield-based collection rules or trim `enrich.js`.
- **Still manual in the admin** (no API for these on a partner dev store from this session): delete the nine `zz-delete-me` test themes, install Search & Discovery / Flow / Forms, enable the metafield filters, build the flows from `flows.md`, and publish *JAUS Event-Ready* when ready.
