76 lines
5.5 KiB
Markdown
76 lines
5.5 KiB
Markdown
# Datewise: session handoff (2026-10-16)
|
||
|
||
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).
|
||
|
||
## Done 2026-10-16
|
||
|
||
- Cancellation of #1001 verified; uninstall + reinstall test passed (data kept; checkout functions now auto-restore on reinstall, `settings.checkoutFunctions`).
|
||
- Listing complete, 0 issues: text, category tags, icon, feature image, 6 screenshots (alt ≤64), Manual pricing plans `starter`/`growth`/`pro`, screencast https://youtu.be/VZW767L6bNo (Unlisted).
|
||
- Self-review (live requirements) run; fixed 2.3.1 (`/auth/login` has no shop form) and 1.2.2 (test charges on dev stores via `shop.plan.partnerDevelopment`; plan approval opens Shopify's page instead of a 401). Growth approve + downgrade to Starter tested on veloxautomotive.
|
||
- Review page: capabilities embedded + online store; onboarding confirmed; AI self review marked done; automated checks run.
|
||
|
||
## Left, in order
|
||
|
||
1. Automated checks all green (re-run if any fail).
|
||
2. **User:** add the storefront password at the end of the listing's testing instructions, Save.
|
||
3. **User decision:** turn off the old Metatron-delivery app embed on veloxautomotive (its cart widget sits next to checkout).
|
||
4. **User** ticks "I've reviewed all the App Store Requirements"; Claude clicks **Submit for review** only after an explicit yes.
|
||
|
||
## 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/`.
|