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 PAID
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 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.