datewise/HANDOFF.md
metatroncubeswdev b7ef11f31e docs: session handoff for finishing the App Store submission
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 16:33:35 -04:00

81 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Datewise: session handoff (2026-10-15)
Read this first in a new session. It covers everything needed to finish the Shopify App Store submission.
Process: follow the `shopify-app-launch` skill (Offerlyst was the first app through it).
## What Datewise is
Shopify app **"Datewise: Delivery & Pickup"**: customers choose store pickup, local delivery or shipping, then a date and a time slot, in the cart. Capacity holds, rush days and waitlist, checkout guard on every plan, reminders, run sheets.
Forked from the SlotSure reference build (`../slotsure/`); some features were ported from the old app (`../shipping-app/`).
## Key facts
| | |
|---|---|
| Repo | https://git.metatroncube.in/MetatroncubeSoftwareSolutions/datewise.git (branch `main`) |
| Local path | `D:\MCS_Repos\2026\claude_shopify_shipping_app\datewise` |
| Production | https://datewise.metatronlabz.com (VPS `/opt/datewise`, Nginx → `127.0.0.1:3320`; runbook `deploy/README.md`) |
| Shopify app | name "Datewise: Delivery & Pickup", **handle `datewise-delivery`** (`datewise` is taken), client_id `7e7c4baa00daac7fc6909336039d40b5` |
| Partner Dashboard | partners.shopify.com/2451848/apps/435762528257 |
| Dev Dashboard | dev.shopify.com/dashboard/129011982/apps/435762528257 |
| Dev store | `veloxautomotive` (storefront password protected: **the user types the password**) |
| Latest released version | `datewise-delivery-5` |
| API version | 2026-01 (upgrade after launch) |
| Stack | React Router 7, Polaris web components, Prisma + Postgres, JS Functions, theme app extension |
## Done
- **Code:** all features working end to end. Fixes this round: CSRF origin behind Nginx (`react-router.config.ts` `allowedActionOrigins`); shop-record self-heal and install race; plan location limit counts switched-on locations; widget empty state, width and contrast; bookings list polish; Shopify `userErrors` logged.
- **Security:** customer PII encrypted at rest (AES-256-GCM via Prisma extension, `app/lib/pii.server.ts`); keyed-hash lookups; **access log** of staff views (`DataAccessLog`); `SECURITY.md`; privacy/terms pages live.
- **Server:** latest code deployed, migrations 0001–0003 applied, **encrypted nightly backups** (cron 3 AM, key `/root/.datewise-backup-key`).
- **Partner Dashboard:**
- **Public distribution** selected (irreversible).
- **Protected customer data:** step 1 done (Name/Email/Phone/Address; reasons Store management + App functionality); step 2 done (16/16).
- **Network access** for UI extensions enabled.
- **Dev store setup:**
- App installed.
- "Shop location" taking bookings; Shopify **Local pickup** on at that location (the user's home address: **never show it unblurred in public assets**).
- Theme block + app embed saved.
- Checkout guard, delivery label and payment rules on.
- **Bogus test gateway** active.
- **Verified:**
- Test order #1001 (pickup Oct 15, 12–1 PM) → booking confirmed, pickup line renamed "Shop location — Thu, Oct 15, 12 PM–1 PM", order attributes and tags.
- Checkout blocked without a time ("Please choose a delivery or pickup time…").
- **Listing assets (`brand/`):**
- `shopify/app-icon-1200x1200.png`, `shopify/feature-image-1600x900.png`.
- 6 screenshots in `screenshots/listing/` + `alt-text.txt`.
- `LISTING.md` (all listing text + reviewer testing steps).
- `SCREENCAST.md` (14 scenes, captions, YouTube title/description).
## Left, in order
1. **Verify the cancellation:** the user cancelled order #1001. Check Datewise → Bookings (Show: All) shows it **cancelled**, and Today's capacity for Oct 15 is back to 0.
2. **Uninstall + reinstall test** (approved): uninstall Datewise from veloxautomotive, reinstall from Dev Dashboard → Install app (**user approves the permissions screen**), confirm data is back and there are no errors.
3. **Fill the App Store listing** (approved): Partner Dashboard → Distribution → Manage submission → listing (English). Use `brand/LISTING.md` and upload the icon, feature image and 6 screenshots with alt text. Demo store URL `https://veloxautomotive.myshopify.com`; **the user types the storefront password.** Save, then check for listing issues.
4. **Screencast** (approved):
- The user records with Snipping Tool (`Win+Shift+R`) over the page area; Claude drives Chrome through `brand/SCREENCAST.md`, injecting a caption div per scene (see the skill's Offerlyst example).
- Hide cookie banners and popups with JS; **never click Accept**.
- At the payment step **the user** enters Bogus card `1` (Claude never types card numbers).
- Check whether the "Claude is controlling the browser" banner is in-page (hide with JS) or Chrome UI (record the page region only / F11).
- The user uploads to YouTube **Unlisted**, "not made for kids", and sends the URL; paste it into the listing's screencast field.
5. **Pre-submit gate** (skill Phase 10):
- Run the `app-store-review` self-check.
- Confirm `curl` against prod (no shop-domain form on `/`, privacy/terms 200).
- Confirm `shopify app deploy` is current.
- Testing instructions have no placeholders; the screencast URL opens signed-out.
- Emergency contact is set.
- Then **ask the user for an explicit yes** before clicking **Submit for review**.
## Known notes / follow-ups (not blockers)
- Theme check warns `AssetSizeAppBlockJavaScript` (18 KB raw, ~7 KB gzipped). Non-blocking.
- Shopify's own pickup card shows its "Usually ready in 24 hours" estimate; the setup guide tells merchants to set the shortest pickup time.
- Billing plan test (choose Growth → test charge → **user clicks Approve**) not yet done; worth doing before or with the screencast scene 13.
- Webhook API version 2026-01; upgrade within ~12 months.
## Rules for the next session
- Secrets never in chat or Git. The user types every password and card number.
- Ask before irreversible clicks: Submit for review, deleting apps or orders, OAuth/permission approvals not already approved.
- After code changes: `npx tsc --noEmit`, `npx vitest run`, commit + push, then the user runs on the server: `cd /opt/datewise && git pull && docker compose -f docker-compose.yml -f docker-compose.nginx.yml up -d --build app worker`. Extension changes: `CI=1 shopify app deploy --allow-updates --message "..."` from `datewise/`.