18 Commits

Author SHA1 Message Date
metatroncubeswdev
38e82f791e fix: allow form actions from the app domain behind the HTTPS proxy
React Router's CSRF check compared https Origin with the http URL seen behind Nginx,
rejecting every admin form save with 400.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 05:06:05 -04:00
metatroncubeswdev
23f259fcc8 fix(admin): create or revive the shop record on first admin load instead of 404
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 05:01:59 -04:00
metatroncubeswdev
59de2b9d34 chore(config): link to the new 'Datewise: Delivery & Pickup' app (client_id 7e7c4baa…)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 04:44:32 -04:00
metatroncubeswdev
40d1752739 chore(config): app handle datewise-delivery ('datewise' is taken on Shopify)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 02:03:55 -04:00
metatroncubeswdev
467347e902 fix(deploy): worker builds the image too instead of pulling 'datewise' from Docker Hub
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 01:14:51 -04:00
metatroncubeswdev
db85f3263d fix(build): make every extension build for shopify app deploy
- functions: add codegen config and the downloaded schema.graphql (generated/ ignored)
- order-reschedule: add the @preact/signals peer dependency
- widget: source moved to widget-src/, minified build in assets (npm run build:widget,
  also run by predeploy); e2e passes on the minified file

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:47:08 -04:00
metatroncubeswdev
3ca60ef174 chore(config): link to the Datewise app on Shopify (client_id)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 00:41:54 -04:00
metatroncubeswdev
4aadc4b85a fix(order-reschedule): point the extension at the production app URL
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:04:17 -04:00
metatroncubeswdev
5995fd42ec docs(deploy): real clone URL in the server runbook
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 19:28:24 -04:00
metatroncubeswdev
1d2d943d54 feat(security): encrypt customer personal data at rest
- Prisma extension seals booking name/email/phone/address and waitlist contacts with
  AES-256-GCM on write and opens them on read (incl. nested reads)
- keyed-hash columns for exact email/phone lookups (privacy webhooks, booking search,
  waitlist de-duplication); migration 0002
- tests prove only ciphertext is stored; privacy/terms/SECURITY.md updated to match

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:56:05 -04:00
metatroncubeswdev
1e19b773cd chore: make backup.sh executable
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:53:30 -04:00
metatroncubeswdev
bd2e3906df chore(deploy): Docker stack for the VPS (db, app, worker; Caddy or existing Nginx)
- multi-stage Dockerfile; worker bundled to build/worker.mjs (no tsx at runtime)
- docker-compose.yml + docker-compose.nginx.yml (127.0.0.1:3320), Nginx site, encrypted backups
- production URLs (datewise.metatronlabz.com) in shopify.app.toml; URL auto-update off
- verified locally: healthz/landing/privacy/terms 200, unsigned proxy/webhook 400, worker starts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:53:08 -04:00
metatroncubeswdev
f96ab10634 feat(brand): brand assets at Shopify sizes; public landing, privacy and terms
- brand/: 1200x1200 full-bleed app icon, 1600x900 feature image, transparent logos,
  favicons, guidelines (palette, type, usage) and the build script
- / is now a branded landing page with no shop-domain form (App Store 2.3.1)
- /privacy and /terms describe Datewise's actual data handling and sub-processors

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:26:12 -04:00
metatroncubeswdev
893b0f6ada fix(admin): theme editor deep links use block file handles
activateAppId pointed at a non-existent 'datewise-embed' handle; the embed is 'embed'.
Adds an addAppBlockId link that places the scheduler block on the cart template.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:23:21 -04:00
metatroncubeswdev
85ed1a8f0e feat: delivery-label and payment-rules checkout functions with Settings toggles
- delivery-label renames only options matching the chosen method (en/fr dates)
- payment-rules hides COD / pay-in-store for shipped orders
- functions matched by handle (fixes guard lookup matching any 'datewise' title)
- scopes: write_delivery_customizations, write_payment_customizations

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:21:55 -04:00
metatroncubeswdev
67b86cf411 feat(admin): setup guide on Today page with live step status
Shared checkout-guard lookup moved to app/lib/guard.server.ts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:18:42 -04:00
metatroncubeswdev
123ca71d42 feat(widget): restyle storefront scheduler; booking stub with hold countdown
- segmented method control with line icons
- round calendar days with availability dots and scarcity badges
- pill time chips; confirmation stub shows method, place, date, time, fee
- colours derive from theme text colour + one merchant accent (light/dark safe)
- rename leftover ss- internals to dw-

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:17:09 -04:00
metatroncubeswdev
e56182e0e3 chore: initial Datewise app (rebranded from SlotSure prototype)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 20:06:49 -04:00