Subscription checkout

Victory+ · APMC, 2025—2026

Six ways into the purchase flow became one in-app checkout, with plans and prices kept in one place.

Context

Victory+ is a sports streaming service. On the web app it sold a Texas Rangers subscription with an annual and a monthly plan, paid through Stripe.

Problem

The purchase flow had grown in pieces. Entry points were spread across the app, some of them sent people out to an external page, and plan IDs and prices were copied into many files.

Six entry points into the purchase flow, consolidated into one in-app checkout.

What I did

  1. Wrote the architecture analysis before writing code: a phased plan, the impact on the other platforms, and how to roll back each phase.
  2. Centralized every purchase entry point and removed the flows that duplicated each other.
  3. Moved plan IDs and prices into one config, then read prices from the API instead of a hardcoded map.
  4. Kept the selected plan across the login redirect, moving it from sessionStorage to a cookie so it also works with server-side rendering.
  5. Deleted the old flow once the new one was live.

Outcome

  • One flow to change, test and reason about.
  • When the partnership ended in July 2026, hiding every entry point was a same-day change.

Stack

Nuxt, Vue 3, TypeScript, Stripe Embedded Checkout, Pinia

Want to talk about work like this?

I’m happy to go deeper on any of it, including what I’d do differently.