A pared-back version of the v1 mockup, focused only on changes we can ship now with high confidence. Mockups emulate the actual 529 UI (Baloo 2, yellow primary, rounded pill buttons, white cards on grey) so the team can see what the live screens will look like, not a hypothetical redesign.
Sequenced as v1 — ship now (three copy/template wins, no Stripe or auth changes) and v2 — next (enable Apple Pay and Google Pay once Brett has confirmed the prerequisites). Anything that still needs an answer before we can scope it sits in the verify-later list at the bottom.
No structural changes to the form. Two surgical edits in app/views/memberships/new.html.haml: replace the bare pricing line with a content block that names the marketplaces and frequency, and change the submit button label so it stops calling a one-time purchase a subscription.
| 529 Detective (One-time purchase, 6 months unlimited access) | $50.00 |
| Discount | −$25.00 |
| Total | $25.00 |
| 529 Detective | $50.00 |
| Discount | −$25.00 |
| Total | $25.00 |
subscribe i18n string in memberships.js's membershipTexts. We need a separate string for Detective rather than overloading the existing one (Protect is a real subscription and should keep "Subscribe"). The button render in new.html.haml:616 is plan-agnostic today — needs a small conditional.new.html.haml:579 with a meta line + the three reason bullets. Cosmetic; no controller change.The biggest gap in the live flow. After paying, users land on a generic thank-you and then have to figure out for themselves that Detective can't actually do anything until they file a stolen-bike alert. This template is rewritten to give the user one clear next step, set realistic timing expectations, and offer side-by-side things to do while Detective scans.
app/views/memberships/success_detective.html.haml. The "Search using Detective" button (live) is a dead-end if the user has no missing bike — replace with the existing quick_panic_bikes_path, which is already used as the "Start an Alert" target on the empty Detective dashboard.The current dashboard tells the user Detective is "constantly on the lookout" across some marketplaces and that matches are "updated frequently". Both are vague, and neither tells the user when their access ends. Two changes: name the marketplaces and frequency in the header copy, and add a status banner with the expiry date.
_( … ) strings at app/views/detectives/index.html.haml:24-25. The marketplace names should pull from the same source the count comes from (so they don't drift) — likely a model method on the marketplace scope already used to compute @active_marketplace_count. Worth checking with Brett.DetectivesController#index today. This is the only piece in the ship-now bucket that touches Ruby — flag for Brett to confirm scope. If it's a half-day or less, it goes in. If it surfaces anything ugly, this single banner moves to verify-later and the rest of Win 3 ships without it.Once v1 ships, this is the next change worth making. 94% of paid traffic is mobile and the live checkout has wallets explicitly disabled (memberships.js:25-29). For users with a wallet set up, this collapses checkout from a full form to a single tap. The code change itself is tiny — the work is in the prerequisites (see verify-later #1).
| 529 Detective | $25.00 |
applePay: 'auto', googlePay: 'auto'. Stripe handles device detection and only shows the relevant button.Items from the v1 mockup that need an answer from someone before we can scope them. Apple/Google Pay sits here too — the code change is small, but the prerequisites belong to Brett.
applePay/googlePay from 'never' to 'auto' in memberships.js:25-29, gated to the Detective code path. Before we can do that, Brett to confirm: (a) Stripe account is wallet-enabled for US/CA, (b) Apple Pay domain verification is registered for our domain, (c) the Detective branch of memberships.js can be isolated from the Protect flow (which shares the file). Once those land, v2 ships in well under a day.new.html.haml:381). Question: do we want it removed entirely, kept optional, or repurposed? Removal is trivial but the "share with law enforcement" checkbox below it depends on the field existing.devise-passwordless gem, a custom signed-token flow, or keep mandatory and just improve the copy. Needs a 30-min Brett scope before we know which is realistic.memberships/show.html.haml, edit page) still use subscription language for Detective, which is one-time. Worth a separate sweep — touches more templates than the three in this slice and the end-state probably needs Detective to render a different management page entirely.