Skip to content

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)

  1. kwilo.ai/individuals?persona=parent: headline "Help your kid learn better at home." Pricing shows Free and Pro ₹399 only.
  2. "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.
  3. Unlimited chat plus explanations/practice under the monthly cap.
  4. 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).