diff --git a/BACKLOG.md b/BACKLOG.md index 39c6ba9..b63d36f 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -353,10 +353,10 @@ Sami explicitly stated he wants email auth as an OPTION alongside TOTP, not a re - **owner:** hermes ### DC-061: Remove superseded status/pricing/index.html — dead weight since dashcaddy.net pricing page -- **status:** in-progress -- **owner:** hermes -- **details:** The in-repo `status/pricing/index.html` is served by the status.sami SPA catch-all but duplicates the canonical pricing page now living on the dedicated Next.js marketing site at `dashcaddy.net/pricing`. It has 0 Stripe refs in the current codebase (the marketing site handles checkout). Remove the file to avoid confusion and reduce surface area. No Caddy config change needed — the SPA fallback will serve index.html for /pricing, which is correct behavior (dashboard app handles unknown routes). -- **impact:** Cleaner repo, single source of truth for pricing. Eliminates a stale page that could mislead users who hit status.sami/pricing directly. +- **status:** done +- **owner:** hermes +- **details:** The in-repo `status/pricing/index.html` was served by the status.sami SPA catch-all but duplicated the canonical pricing page now living on the dedicated Next.js marketing site at `dashcaddy.net/pricing`. It had 0 Stripe refs in the current codebase (the marketing site handles checkout). Removed the file and its parent directory. Also deleted the obsolete test `__tests__/billing/pricing-page-catalog.test.js` that validated the now-removed page against the catalog — pricing-page/catalog consistency is now verified by the dashcaddy.net marketing site's own test suite. No Caddy config change needed — the SPA fallback serves index.html for /pricing, which is correct behavior (dashboard app handles unknown routes). +- **result:** Removed `status/pricing/index.html` and `status/pricing/` directory. Deleted `__tests__/billing/pricing-page-catalog.test.js` (9 tests). All 2854 remaining tests pass, zero new ESLint warnings. - **details:** Two static pages at `/legal/tos` and `/legal/privacy`. ToS covers: license terms (per-host, non-transferable), prohibited use, refund policy (pro-rated refunds within 14 days of initial purchase), termination. Privacy Policy covers: data collected (license key, host metadata, optional email), data NOT collected, third parties (Stripe — payment, Tailscale — coord API calls only when operator configures it), GDPR rights (access, deletion, portability — even though we have no central account system, we'll respond to direct requests within 30 days). No SOC2/HIPAA — that's a v2 conversation. - **impact:** Legal compliance for taking money. Stripe can technically sell without these but payment processors flag accounts without them. - **prerequisite:** None. diff --git a/dashcaddy-api/__tests__/billing/pricing-page-catalog.test.js b/dashcaddy-api/__tests__/billing/pricing-page-catalog.test.js deleted file mode 100644 index bae3eaf..0000000 --- a/dashcaddy-api/__tests__/billing/pricing-page-catalog.test.js +++ /dev/null @@ -1,134 +0,0 @@ -/** - * DC-057 pricing-page catalog consistency test. - * - * The pricing page at status/pricing/index.html hard-codes the 4 product - * IDs, prices, and labels. This test asserts that those hard-coded values - * exactly match the catalog in src/billing/catalog.js — preventing drift - * between the two sources. - * - * If a new tier is added to the catalog, this test will fail until the - * pricing page is updated. If the pricing page is updated, the catalog - * must change in lockstep (or this test fails the other way). - */ - -const fs = require('fs'); -const path = require('path'); -const catalog = require('../../src/billing/catalog'); - -const PRICING_PAGE_PATH = path.join(__dirname, '..', '..', '..', 'status', 'pricing', 'index.html'); - -function extractTiersFromPage(html) { - // Extract each `