Retire family/child Stripe tier; reframe free tier as 14-day trial #162

Open
will.anderson wants to merge 1 commits from fix/retire-family-child-plan-pricing into main
Owner

Two web-source cleanups for the new 18+-only, 14-day-trial → paid model. Source only — do not merge or deploy (website hold stands).

1. Retire the orphaned family/child Stripe plan

The family/child tier is dead under the new model. Removed its wiring:

  • src/main.el — deleted the three /api/family/{invite,members,remove} routes (~157 lines) and the STRIPE_PRICE_FAMILY_CHILD env load + __stripe_price_family_child__ state registration.
  • src/account.el — removed the account_family_section() function (Family members UI: add-child form, attestation, $10/month per child), its call site in the dashboard, and the "Family accounts" roadmap bullet.
  • src/js/account-dashboard.el — removed loadFamilyMembers / addFamilyMember / removeFamilyMember and the founding-plan family-section display block.

Free / Professional / Founding Member paths are untouched.

2. Pricing copy: permanent free tier → 14-day free trial

Reframed free-forever language (prices and checkout mechanics unchanged — copy only):

  • src/pricing.el — cadence foreverfor 14 days; tagline → "Try everything free for 14 days. No card required."; CTA Preorder free tierStart free trial.
  • src/comparison.el — row Free tierFree trial; Full app, foreverFull app, 14 days.
  • src/styles.el — hero/SEO meta: Start free — no credit card required → 14-day trial framing; Free tier available.14-day free trial.
  • src/main.el — checkout page title/desc for the free plan → 14-day trial framing.
  • src/local_first.el — no-ads promise: "Not on the free tier" → "Not during your trial".

Verification

Every edited .el compiles clean (elc exit 0); the dashboard JS output passes node --check. No services touched, nothing deployed.

Notes / open decisions (not invented here)

  • Backend plumbing left intact by design: data-checkout="free", the /api/waitlist "free tier preorder" path, and the free-plan SetupIntent flow. Whether the trial requires a card, what happens at day 14, and any post-trial price are business decisions — not changed here.
  • src/terms.el also contains free-tier language ("The free tier doesn't expire") but was intentionally NOT touched to avoid conflicting with the terms/privacy work on legal/18plus-terms-privacy-reconcile (PR #161). Flag for that PR to reconcile.

Branched off main; no file overlap with the legal branch.

Two web-source cleanups for the new 18+-only, 14-day-trial → paid model. **Source only — do not merge or deploy (website hold stands).** ## 1. Retire the orphaned family/child Stripe plan The family/child tier is dead under the new model. Removed its wiring: - **src/main.el** — deleted the three `/api/family/{invite,members,remove}` routes (~157 lines) and the `STRIPE_PRICE_FAMILY_CHILD` env load + `__stripe_price_family_child__` state registration. - **src/account.el** — removed the `account_family_section()` function (Family members UI: add-child form, attestation, `$10/month per child`), its call site in the dashboard, and the "Family accounts" roadmap bullet. - **src/js/account-dashboard.el** — removed `loadFamilyMembers` / `addFamilyMember` / `removeFamilyMember` and the founding-plan family-section display block. Free / Professional / Founding Member paths are untouched. ## 2. Pricing copy: permanent free tier → 14-day free trial Reframed free-forever language (prices and checkout mechanics unchanged — copy only): - **src/pricing.el** — cadence `forever` → `for 14 days`; tagline → "Try everything free for 14 days. No card required."; CTA `Preorder free tier` → `Start free trial`. - **src/comparison.el** — row `Free tier` → `Free trial`; `Full app, forever` → `Full app, 14 days`. - **src/styles.el** — hero/SEO meta: `Start free — no credit card required` → 14-day trial framing; `Free tier available.` → `14-day free trial.` - **src/main.el** — checkout page title/desc for the free plan → 14-day trial framing. - **src/local_first.el** — no-ads promise: "Not on the free tier" → "Not during your trial". ## Verification Every edited `.el` compiles clean (`elc` exit 0); the dashboard JS output passes `node --check`. No services touched, nothing deployed. ## Notes / open decisions (not invented here) - Backend plumbing left intact by design: `data-checkout="free"`, the `/api/waitlist` "free tier preorder" path, and the free-plan SetupIntent flow. Whether the trial requires a card, what happens at day 14, and any post-trial price are **business decisions** — not changed here. - **src/terms.el** also contains free-tier language ("The free tier doesn't expire") but was intentionally NOT touched to avoid conflicting with the terms/privacy work on `legal/18plus-terms-privacy-reconcile` (PR #161). Flag for that PR to reconcile. Branched off `main`; no file overlap with the legal branch.
will.anderson added 1 commit 2026-07-21 15:22:15 +00:00
The 18+-only model drops the family/child plan entirely, so its
Stripe wiring is dead code. Remove the /api/family/{invite,members,remove}
routes, the STRIPE_PRICE_FAMILY_CHILD env/state config, the account-page
Family members UI and its dashboard JS, and the "Family accounts" roadmap
bullet. Free/Pro/Founding paths are untouched.

Marketing/pricing copy still promised a permanent free tier, which no
longer matches the product. Reframe the free-forever language as a
14-day free trial across the pricing card, comparison table, hero/SEO
meta, checkout page copy, and the no-ads promise. Prices and checkout
mechanics are unchanged — copy only.
Author
Owner

GROOMING — 2026-08-03
Status: HELD pending attorney/counsel sign-off — retires the family/child Stripe tier and reframes the free tier as a 14-day trial under the new 18+-only model; PR is explicitly source-only ("do not merge or deploy, website hold stands").
Next action: Counsel confirms the 18+/no-family posture and trial framing; Will lands after sign-off. Do not merge or deploy.
Owner: Daniel/counsel (Will to land after sign-off)
Priority: HELD

**GROOMING — 2026-08-03** **Status:** HELD pending attorney/counsel sign-off — retires the family/child Stripe tier and reframes the free tier as a 14-day trial under the new 18+-only model; PR is explicitly source-only ("do not merge or deploy, website hold stands"). **Next action:** Counsel confirms the 18+/no-family posture and trial framing; Will lands after sign-off. Do not merge or deploy. **Owner:** Daniel/counsel (Will to land after sign-off) **Priority:** HELD
will.anderson added the HELD label 2026-08-03 18:59:32 +00:00
You are not authorized to merge this pull request.
This pull request can be merged automatically.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin fix/retire-family-child-plan-pricing:fix/retire-family-child-plan-pricing
git checkout fix/retire-family-child-plan-pricing
Sign in to join this conversation.