prototype: /pro pricing + checkout variants (do not merge)#194
Conversation
Three ?variant= mockups of the pricing section (dev-only, do not ship): A static-first cards, B comparison panel, C single-product term chooser. Only the price text suspends; everything else renders from static copy. See src/components/pro/prototype/NOTES.md for the question and findings.
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
🚀 Preview: https://wcpos-cfmcyo86i-wcpos.vercel.app |
Three ?variant= mockups on /pro/checkout (dev-only, fully stubbed): A one column express-first, B collapsing three-step, C split-screen paywall. All create the account inline from the email field instead of bouncing to /login, collect a compact billing address, and lead with wallet payments. ?signedin=1 previews the signed-in state. Dev-only middleware bypass lets ?variant=a|b|c through without auth. Switcher generalized to take a variants list.
|
🚀 Preview: https://wcpos-mmuipjmza-wcpos.vercel.app |
Owner picked variant B. Payment step reworked: wallets on top, then a radio-accordion — Card default and expanded, PayPal and Bitcoin equally visible rows that expand with an explanation; pay button label follows the selection. Verdict recorded in NOTES.md (pricing still TBD).
|
Update: checkout variant B picked by owner. Payment step reworked per feedback: Apple/Google Pay buttons on top, then a radio-accordion payment selector — Card default and expanded, PayPal and Bitcoin as first-class visible rows (no longer a buried text link). Pay button label follows the selection ("Pay $129 now" / "Continue to PayPal" / "Continue to Bitcoin payment"). Preview: |
|
🚀 Preview: https://wcpos-g9mbk2uvv-wcpos.vercel.app |
Round 1 rejected as lacklustre. Researched high-converting license pages (Sketch, WP Rocket, Tower, conversion-data roundups) and built: D free-tier-anchored 3-column, E dark zero-column value pitch with term toggle, F till-receipt pricing. All factual claims sourced from live pages (5,000+ stores, 14-day refund, yearly-credits-to-lifetime). Switcher cycles current+d/e/f; a/b/c remain URL-reachable.
|
Pricing round 2 (round 1 a/b/c rejected as lacklustre). Researched high-converting license pages (Sketch's yearly-vs-perpetual framing, WP Rocket's guarantee/social-proof placement, Tower's confident no-urgency premium feel, plus conversion-data roundups) and built three new variants — the switcher on
All claims are sourced from live pages (5,000+ stores, open source since 2014, 14-day no-reason refund, yearly credits toward lifetime, no auto-renew), and all three keep the static-first rule — only the price text suspends. |
|
🚀 Preview: https://wcpos-htx3rve6q-wcpos.vercel.app |
Owner rejected d/e/f: no point repeating the same checklist for yearly and lifetime. G: feature grid (real descriptions, icon tiles) once, then two compact price tiles with term facts only. H: product-page buy-box pattern — features left, sticky radio term selector right. Switcher cycles current/g/h; earlier rounds stay URL-reachable.
|
Pricing round 3 — d/e/f rejected: "no point reproducing the same checklist for yearly and lifetime." New rule applied: the feature list appears once; yearly vs lifetime is price + term facts only.
Both keep round-2 trust elements (guarantee at CTA, proof strip, dollar-framed lifetime math). Switcher now cycles current/g/h. |
|
🚀 Preview: https://wcpos-ln9bviu19-wcpos.vercel.app |
|
🚀 Preview: https://wcpos-b2fkczgvm-wcpos.vercel.app |
|
Pricing implementation landed as ready-for-review PR #195 (variant H built production-quality: feature list once, sticky buy box, /pro now partially prerendered — only the buy box suspends). Remaining in this prototype: checkout variant B implementation (bigger lift — inline account creation, background cart init, wallet payments). This prototype PR stays as the checkout design reference until then. |
feat(checkout): three-step checkout (PR #194 variant B) + payment-flow battle-test harness
Prototype — do not merge
Mockups for two complaints about the Pro purchase experience, both as dev-only
?variant=switchers on the real routes (floating bottom bar, ←/→ keys). Production builds render the real pages unchanged.Part 1 — /pro pricing section
Complaint: the whole yearly/lifetime blocks skeleton while the Medusa catalog loads.
/pro?variant=a— Static-first cards: today's design, but cards render instantly; only the price number suspends with an inline skeleton./pro?variant=b— Comparison panel: features listed once, term differences (updates / billing) side by side./pro?variant=c— One product, pick a term: single decision panel with a radio term selector and one CTA./pro— current production design as baseline.?delay=<ms>tunes simulated Medusa latency (default 1500).Key finding: only the price text needs Medusa. All card copy is static (
OFFER_COPY), and the checkout CTA works with just?product=<handle>because checkout re-validates against the live catalog. Verified via streaming inspection: full card markup arrives in the first HTML chunk with price-sized skeletons.Part 2 — /pro/checkout flow
Complaint: boring, too many steps. Constraints: account + billing address are required; everything else should be painless.
/pro/checkout?variant=a— One column, express-first: order pill → Apple/Google Pay → email → card → compact address → one Pay button, all on one screen./pro/checkout?variant=b— Three steps that collapse: Account → Billing → Payment accordion; completed steps collapse to ✓ summaries with Edit; sticky order summary./pro/checkout?variant=c— Split-screen paywall (Stripe-Checkout style): dark left pane keeps selling, flat boxless form on the right./pro/checkout— current production checkout as baseline (needs sign-in).?signedin=1(or the toggle in the floating bar) previews the signed-in state. Pay buttons fake 1.2s of processing then a success screen. Fully stubbed — no Medusa/Stripe/auth; middleware has a dev-only bypass for?variant=a|b|c.Structural ideas all three share (the actual proposals, whatever visual wins):
Validation
tsc --noEmitclean, eslint clean on touched filesNext step: pick winners (or combinations) for both surfaces, record in
src/components/pro/prototype/NOTES.md, fold into the real components, delete the prototype directory and the middleware bypass.