Prices shown in US dollars.
Core personal money management to help you get ahead.
All of Boost plus Entities — track expenses and export for end-of-year accounts.
Unlock your money insights.
Start your 7 day trial for just $1
We'll send you a reminder that your trial is ending soon.
Your plan starts /. Cancel at any time.
30 day money back guarantee
You'll be charged $1 today, and then after your trial.
PRD-88 — trial paywall with three billing options. Linear project. The $1 trial paywall, where the main design question of PRD-88 lives. It is shown here in its in-app modal presentation — StartTrialModal.tsx, a native <dialog open> floating over the user's running app, opened by AuthLayout for a web user still on demo data who has not started a trial. The identical card also renders full-page at /onboarding/payment on a photographic background; the card itself is byte-identical, so only the framing differs.
The decision. Today the billing period is chosen with BillingPlanToggle, a two-pill Annual/Monthly switch. An earlier version of this prototype replaced it with stacked selectable plan cards; those were rejected on 2026-07-28 in favour of staying as close to prod as possible. The paywall therefore keeps prod's toggle and simply adds a third pill: Annual · Monthly · 2 Years. The component barely changes — PLANS is a plain array and each pill is padding-sized (px-5), not fixed-width, so a third entry just widens the track. The trade-off to accept: a pill shows only a name, so price, savings and the per-month equivalent are invisible until it is selected; the tier rows below carry all of that, one selection at a time.
Vocabulary. The toggle keeps prod's own labels — Annual and Monthly, unchanged — with 2 Years added, because prod-similarity outranks the naming rule on a control the team already recognises. The rest of the flow (plans modal, settings) still uses Monthly / 12-month / 2-year. Aligning the two is a build decision, flagged on the toggle.
Savings badges are prod's own formula. computeAnnualSavings() already renders a dollar amount in a light-green pill — (monthly × 12) − annual — which is why prod shows Save $249 on BOOST and Save $289 on PRO. The 2 Years badge applies the identical formula over 24 months: 29×24 − 149 = $547. Only the number of months changes. Monthly shows no badge at all, matching prod, which computes savings only on the annual selection.
Per-month equivalents are cut from the paywall. The rejected cards showed one per option, and a later draft kept "$6.21 per month" as a subline on the BOOST row. Both are gone: the tier rows now match prod's anatomy exactly — tier, trial, then-price, Save badge, Details — with nothing extra. The Save $ badge carries the value story, as it does on prod today. The per-month equivalents still appear in the plans modal, where the rows have room for them. BEST VALUE is dropped too; prod has no such badge on this screen.
PRO gets a 2-year price. $399 NZD every 2 years (Aidan, 2026-07-28), so both tiers offer all three billing options and neither falls back. Save $777 on the same formula (49×24 − 399).
Kept from the real page. The modal's blur-and-dim overlay (blur(7px) over rgba(0,0,0,0.3)), the lg:w-[36rem] white card with its rounded-lg shadow-xl and the divider under the "Start Your $1 Trial" header, the Boost/Pro tier picker with its "$1/7d trial, then …" rows and Save pills, the 7-day trial timeline (Today / Day 5 / Day 7), the money-back-guarantee line, the coral "charged $1 today" line, "Start My Trial", and the "Skip (try with demo data)" link.
Open questions surfaced. PRO has no 24-month price, so the two tiers offer different numbers of options; the real Day 7 copy says "You're annual plan starts" and formats an NZD amount with a hardcoded USD locale; and the modal and onboarding chrome disagree on the close X and the Skip link (see the header annotation).
Faked vs real. BOOST prices, per-month equivalents and savings amounts are real. PRO's $299/year and $289 saving are prod's; PRO's $49/month is the best figure available in the repo (no price is hardcoded — everything comes from Stripe at runtime), and every PRO USD amount is illustrative. The app page behind the modal is an abstract stand-in for the user's real blurred app content, the card's max-h-[90vh] cap is dropped so the whole card fits one screenshot, and no Stripe checkout is wired.