ieltsprep.app · commercial build

Everything's built. One decision left.

The full app — auth, paywall, payments, landing page, AI content pipeline — is done and compiles clean. The only blocker to going live is the Cloudflare Worker size limit.

① How the app works, end to end

Visitor lands on / (landing page)
Marketing page · "$3.99/mo AI tutor" · if already signed in → /app
Sign up / Sign in — Clerk
Email or Google · Clerk webhook creates user in database as free tier
/app — choose a skill
Every route is checked by edge middleware before it loads
Reading · Listening · Games FREE
No login required · self-graded · low cost
Writing · Speaking
AI feedback · login + paid tier required
(free user hits a paid skill)
/upgrade → Lemon Squeezy checkout — $3.99/mo
Hosted, international cards · LS webhook flips the user to paid tier
Writing & Speaking AI feedback unlocked 🎉
Tier stored in both the database and Clerk · checked on every request

② The three moving parts

C

Clerk

Identity — who the user is. Login, signup, sessions, Google OAuth. Free to 10k users.

🍋

Lemon Squeezy

Money — what they've paid for. Handles global tax, works for Chile individuals.

CF

Cloudflare

Hosting — Worker + D1 database + R2 audio. Where the size limit bites.

③ The blocker — Worker bundle size

3.43 MB — Clerk is most of it

The free Cloudflare plan caps a Worker at 3 MiB gzipped. We're at 3.43 — just over. (The existing ielts.mrbell.app fits because it has no auth library.)

④ The decision — three ways forward

★ Recommended
Option 1

Workers Paid

$5 / month
  • Limit jumps to 10 MiB — huge headroom
  • Removes 100k req/day cap (10M included)
  • Zero code changes — redeploy now
  • Break-even ≈ 2 subscribers
  • $5/mo fixed before revenue
Option 2

Trim the bundle

Free · but fragile
  • Cut ~360 KB to fit under 3 MiB
  • Clerk SDK doesn't shrink easily
  • Likely fails anyway
  • Re-breaks on next dependency bump
  • 100k req/day cap still throttles a viral post
Option 3

Lighter auth

Free · ~1 week rework
  • Fits free plan, no vendor lock-in
  • Rebuild signup, login, reset, OAuth
  • Throws away the week Clerk saved
  • Better Auth on Workers has its own setup
  • Still hits the req/day cap

🎯 The honest call

You're about to market this publicly on social media. The free plan's 100k-requests/day cap would throttle you the moment a post lands — so you'd outgrow the free plan regardless of the Clerk size issue.

Options 2 & 3 spend real effort (or fragility) to dodge a $5/mo cost you'll need to pay anyway. Option 1 is zero rework and the normal cost of running a real app. If you weren't driving traffic, Option 3 would be worth a harder look.

Recommendation: Option 1 — Workers Paid. Enable at dash.cloudflare.com → Workers & Pages → Plans, then I redeploy immediately.