B2C Two-Tier Pricing (Free + Pro)¶
Kwilo's B2C pricing is two plans, Free and Pro (₹399/mo, ₹3,990/yr), shared across three personas (learner, parent, trainer) that differ only in copy and one premium artifact name: Study Plan for learner/parent, Lesson Plan for trainer. Free is generous-but-metered: everything active, Study/Lesson Plan locked, one shared monthly generation cap. Pro sells on one clear unlock (the plan) plus uncapping, not a confusing three-way choice. B2B/institutional is untouched.
This replaces the old three-tier model (Free / Learner ₹199 / Pro ₹499) with its punishing 1/1/2-per-month free tier and self-contradicting persona wiring.
How it works¶
B2C user (role = b2c_user)
├── persona: learner | parent | trainer ← copy + premium-artifact name only
└── plan: free | pro ← the ONLY thing that gates capability
Premium artifact by persona:
learner → Study Plan
parent → Study Plan (same as learner; copy reframed "help your kid")
trainer → Lesson Plan + question papers
Invariants:
- Plan gates capability; persona never does. A free trainer and a free learner have identical limits, different labels.
- Persona is independent of plan: any persona can be Free or Pro.
- "Study Plan" and "Lesson Plan" are the same underlying capability with persona-specific naming and output framing.
Free tier: unlimited AI-tutor chat (the daily-habit hook, never metered); all modes available; roughly 10 heavy generations per month (presentation + research + exam-prep + recap drawn from one shared pool); Study/Lesson Plan fully locked; downloads produce a watermarked preview with an inline "remove watermark with Pro" affordance. The single shared pool is easier to communicate than per-feature counters, and the single feature lock gives Pro a crisp one-line pitch: "Pro unlocks the Study/Lesson Plan and removes limits."
Pro: Study/Lesson Plan unlocked, generations uncapped, downloads un-watermarked, priority generation.
The ₹399 price sits in the India premium band and matches the Khanmigo anchor ($4 ≈ ₹333). A single paid tier with no cheap on-ramp argues for an accessible price, hence ₹399 over the old ₹499.
The change also fixes the persona plumbing that the two-tier model depends on: parent/trainer added to the app signup persona picker; the parent CTA routed to the B2C learner entry instead of the institutional /parent/consent screen; vocabulary unified on learner/trainer; the dead ₹199 tier removed from B2C_PRICING_TIERS, site PRICING_TIERS, HIGHLIGHTED_TIER_BY_PERSONA, and SIGNUP_TIERS.
Parent flow (free → pro)¶
kwilo.ai/individuals?persona=parent: headline "Help your kid learn better at home." Pricing shows Free and Pro ₹399 only.- "Help your kid catch up" → B2C signup (
app.kwilo.ai/auth/signup) with Parent in the persona picker → lands in the B2C learner app, not/parent/consent. - Unlimited chat plus explanations/practice under the monthly cap.
- Tries Study Plan → paywall "Unlock Study Plan with Pro, ₹399/mo." Upgrades via Razorpay.
A trainer's flow is identical; the locked artifact is Lesson Plan + question papers. Existing ₹199 Learner subscribers are grandfathered until expiry, then migrate to Free or are prompted to Pro (no mid-cycle downgrade).
Where it lives¶
- Backend:
apps/backend/src/core/b2c_plans.py(PLAN_CATALOG,validate_webhook_amount),models/b2c_quota.py(limits,UserQuota),api/v1/ai_quota.py(/ai-quota/status). - Web:
apps/web/src/pages/b2c/constants.ts(B2C_PRICING_TIERS,B2C_PLAN_BADGE,PRICING_URL, quota colors),features/signup/constants.ts(SIGNUP_TIERS),pages/auth/SignupPage/components/PersonaSegment.tsx,pages/b2c/components/(PaywallModal,DownloadLockButton,QuotaPill). - Site:
apps/site/src/pages/Individuals/constants.ts(PRICING_TIERS,HIGHLIGHTED_TIER_BY_PERSONA),Individuals/components/PricingThree.tsx,config/urls.ts(APP_PARENT_URL).