8 Commits

Author SHA1 Message Date
metatroncubeswdev
d814ba62bb Ask for plan approval again when the subscription was cancelled (uninstall, then reinstall)
Shopify App Pricing keeps a prepaid subscription active with cancelAtEndOfCycle after an uninstall, so
activeSubscription isn't null on reinstall. Treat a cancelled subscription like no plan (review 1.2.2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 21:15:52 -04:00
metatroncubeswdev
d723f41de5 Show a scheduled plan change (e.g. yearly plan downgraded to Free) on Plans and Home
Shopify App Pricing keeps a paid yearly plan active until the billing period ends and reports the new plan as
pendingUpdate. The app keeps the paid features until then and now says when the change applies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 21:08:58 -04:00
metatroncubeswdev
cf500e032c Read the plan from Shopify App Pricing (Partner API) and redirect shops without a plan to plan selection
App Store review 1.2.2: the app didn't register the chosen plan. App Pricing doesn't populate
currentAppInstallation.activeSubscriptions or send billing webhooks, so the plan now comes from the
Partner API activeSubscription query. Shops with no subscription (new install or reinstall) are sent
to Shopify's plan selection page; Partner API failures never redirect or downgrade.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 20:22:55 -04:00
metatroncubeswdev
d4d42b917b Proxy pages carry their own CSS/JS; align festival calendar; App Store screenshots
Bundle pages stay styled and functional when the app embed is off (e.g. on a draft
theme). Listing screenshots captured from the dev store and rendered at 1600x900.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 12:26:04 -04:00
metatroncubeswdev
b59c2d0668 Plans page: show yearly prices and Plus extras
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 11:58:22 -04:00
metatroncubeswdev
38c03cd1ae Encrypt order data at rest; add terms of service with data processing terms
Protected customer data (Level 1): order ids are stored as keyed HMACs, order numbers
and ids for admin links as AES-256-GCM ciphertext (DATA_ENCRYPTION_KEY). New public
/terms page with processor terms; privacy policy links to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:29:48 -04:00
metatroncubeswdev
ba7a7c89a2 Rename app to Offerlyst: Bundles & BOGO; add App Store icon and brand assets
Icon rebuilt as a full-bleed 1200x1200 square (Shopify rounds corners itself).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:03:32 -04:00
metatroncubeswdev
365e45406a Bundle Offers Shopify app: discount function, admin, storefront, deploy stack
Rust discount function (one automatic discount evaluating all offers in priority
order, parity with the Odoo engine), React Router admin with Polaris, theme app
extension and app proxy pages, webhooks incl. GDPR, managed-pricing limits, and
a Docker Compose stack (Postgres + Caddy HTTPS) for a single VPS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:35:58 -04:00