Skip to content

plans: yearly back to 17% off ('2 months free' framing per pricing research)#8

Merged
mastermanas805 merged 1 commit into
masterfrom
feat/yearly-revert-2months-free-fresh
May 13, 2026
Merged

plans: yearly back to 17% off ('2 months free' framing per pricing research)#8
mastermanas805 merged 1 commit into
masterfrom
feat/yearly-revert-2months-free-fresh

Conversation

@mastermanas805
Copy link
Copy Markdown
Member

Summary

Reverts common#7 (yearly @ 10% off) back to the original ~17%-off pricing,
this time expressed as exactly monthly_cents * 10 so we can honestly
ship the "2 months free" framing (pay 10, get 12).

Per PRICING-BEST-PRACTICES-2026-05-13.md top recommendation #3 (Athenic case study), "2 months free" outperforms percentage-off copy by ~3.4x in conversion. The math (10/12 ≈ 16.67% off) is functionally the prior pricing — we just needed clean round numbers to use the framing.

Price changes

Tier Monthly Old yearly (10% off) New yearly (2 months free)
hobby $9 $97.20/yr (9720c) $90/yr (9000c)
pro $49 $529.20/yr (52920c) $490/yr (49000c)
team $199 $2149.20/yr (214920c) $1990/yr (199000c)

Tests

  • Renamed TestYearlyDiscountIsExactly10PercentTestYearlyIsTwoMonthsFree (asserts (yearly/12)/monthly == 10/12 ± 0.01).
  • Added TestYearlyIsExactlyMonthlyTimesTen — strict integer-cents lock so the "2 months free" claim is provable to the cent.
  • TestYearlyVariants_MirrorMonthlyLimits (limits drift guard) still passes.
  • 24 plans tests pass, 1 skipped (the file-consistency check that needs api/plans.yaml).

Operator action required (post-merge)

The Razorpay plan IDs RAZORPAY_PLAN_ID_HOBBY_YEARLY, RAZORPAY_PLAN_ID_PRO_YEARLY, RAZORPAY_PLAN_ID_TEAM_YEARLY currently point at plans priced at the 10%-off values ($97.20 / $529.20 / $2149.20). After this lands you must:

  1. In the Razorpay dashboard, create new yearly plans at $90 / $490 / $1990.
  2. Update the three RAZORPAY_PLAN_ID_*_YEARLY k8s secrets (same playbook as the original yearly rollout — see api/CLAUDE.md "k8s Secrets").
  3. Roll the api deployment so the new plan IDs are picked up.
  4. Existing yearly subscribers on the $97.20/$529.20/$2149.20 plans keep their current pricing until renewal (Razorpay does not auto-reprice).

Test plan

  • go test ./plans/... green (24 pass, 1 skip)
  • Reviewer eye-balls the three new cent values vs the table above
  • Post-merge: operator updates Razorpay plans + secrets per the callout above

…990)

Reverts common#7 (yearly @ 10% off) back to the original 17%-ish pricing
expressed as exactly monthly x 10 — the mathematical form of "2 months
free". Per PRICING-BEST-PRACTICES-2026-05-13.md (top recommendation #3,
Athenic case study), the "2 months free" framing outperforms percentage-off
copy by ~3.4x in conversion. To use that framing honestly we need
yearly_cents == monthly_cents * 10.

- hobby_yearly: 9720 -> 9000 cents ($97.20 -> $90/yr)
- pro_yearly:   52920 -> 49000 cents ($529.20 -> $490/yr)
- team_yearly:  214920 -> 199000 cents ($2149.20 -> $1990/yr)

Tests:
- Renamed TestYearlyDiscountIsExactly10Percent -> TestYearlyIsTwoMonthsFree
  (asserts (yearly/12)/monthly == 10/12 within 0.01).
- Added TestYearlyIsExactlyMonthlyTimesTen — strict integer-cents lock so
  the "2 months free" claim is provable to the cent.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant