EVRION.
Ascend Academy — main project image

SaaS Platform · Education

A paid subscription learning platform with server-side tier gating, Stripe checkout, billing portal, and webhooks — where access is always decided on the server, never the client.

Project
Ascend Academy
Year
2026
Discipline
SaaS · Subscriptions
Stack
Next.js · Prisma · Stripe

Context

Ascend Academy is a complete paid-membership education platform: a sequenced curriculum across nine pillars, downloadable resources, a live-session hub, and tiered access from a free explorer plan up to 1:1 mentorship.

The interesting part of any subscription product isn't the content — it's getting access control right so that paying gates actually hold. That's the spine the whole build is organized around.

Challenge

Tier gating is one of those features that's easy to fake and hard to get right. Hide a lesson with a CSS class and anyone can read it in devtools; trust the post-checkout redirect and a refund or a lapsed card still leaves the door open.

Access had to be the user's effective, current tier — honoring subscription status and period end — and it had to be enforced on the server for every protected page, with Stripe webhooks as the source of truth.

Approach

Every protected page calls `getCurrentUser()` and `canAccess(user, requiredTier)` on the server before rendering. A subscription only counts if it's active or trialing and hasn't lapsed past its current period end — the tier is computed, not stored blindly.

Stripe Checkout, Billing, and the Customer Portal handle the money, and signature-verified, idempotent webhooks (deduped through a ProcessedEvent table) are the authority on who can access what — not the redirect the browser lands on.

Outcome

The platform runs out of the box with zero external services — SQLite plus a built-in demo-mode checkout — and upgrades to real Stripe test mode the moment you paste in keys. Seeded demo accounts cover the free, member, and premium tiers.

What ships is a genuinely complete membership product: a member dashboard, gated curriculum, downloadable worksheets, a live-session hub, and the full set of public and legal pages, all sitting on access control that's enforced where it actually matters.

Technical Detail

Next.js 16 (App Router) + React 19 + TypeScript with server components and server actions, Tailwind CSS, and Prisma over SQLite in dev (a one-line swap to Postgres for production). Auth is bcrypt plus a signed JWT in an httpOnly cookie, edge-verified in middleware and authoritatively re-checked server-side.

Payments run through Stripe Checkout, Billing, the Customer Portal, and webhooks, with a clean fall-back to demo mode when no keys are present — so the security model is demonstrable even with nothing configured.

// Gallery

The curriculum across nine pillars
The curriculum across nine pillars
Tiered subscription pricing
Tiered subscription pricing
About the academy
About the academy

// Next step

The next case study could be yours. Tell us what you're building and we'll tell you honestly how we'd ship it.