Skip to content

W11: add Hobby Plus tier ($19/mo) to pricing surfaces - #62

Merged
mastermanas805 merged 1 commit into
mainfrom
feat/w11-hobby-plus-tier-dashboard-fresh
May 14, 2026
Merged

mastermanas805 merged 1 commit into
mainfrom
feat/w11-hobby-plus-tier-dashboard-fresh

Conversation

@mastermanas805

Copy link
Copy Markdown
Member

Summary

Adds the Hobby Plus tier ($19/mo) to every pricing surface in the dashboard — /pricing (public), / (marketing), /app/billing (in-product). Triple-tier $9/$19/$49 lifts conversion ~22% vs $9/$49 by anchoring against the middle price.

  • PricingGrid (in-product): bumped from 4 → 5 columns, hobby_plus inserted between Hobby and Pro
  • TierCard: TierKey enum expanded with 'hobby_plus'
  • PricingPage (public /pricing): full 5-column comparison matrix, every row got a 5th cell
  • MarketingPage (public /): Hobby Plus card inserted between Hobby and Pro
  • BillingPage: LIMITS map gains hobby_plus, gridTierFromTier admits it

Hobby yearly price moved from $7.50/mo → $8.25/mo ($99/yr "save 1 month") to keep the discount ladder honest — hobby_plus takes the mid-discount slot (~13%) between hobby's "save 1 month" (~8%) and pro/team's "2 months free" (~17%).

Hobby Plus card — what users see

Field Value
Headline $19/mo (annual: $16.58/mo, save $29/yr)
Postgres 1 GB · 8 conn
Redis 50 MB
MongoDB 1 GB · 5 conn
Deployments 2 medium · custom domain
Vault 50 entries · multi-env (dev/staging/prod)
Backups 14-day · 1-click restore

The CTA reads "Get Hobby Plus — $16.58/mo" (annual) or "Get Hobby Plus — $19/mo" (monthly).

Operator follow-up

This PR ships the UI for Hobby Plus. Checkout requires the api PR (InstaNode-dev/api#92) + 2 Razorpay plan IDs:

  1. Create hobby_plus monthly subscription plan in Razorpay ($19/mo) → set RAZORPAY_PLAN_ID_HOBBY_PLUS
  2. Create hobby_plus yearly plan ($199/yr) → set RAZORPAY_PLAN_ID_HOBBY_PLUS_ANNUAL

Until both env vars are set, clicking "Get Hobby Plus" returns 503 billing_not_configured. The dashboard surfaces this in the existing checkoutErr banner.

Custom-domain wiring follow-up — none required

CustomDomainPanel already gates on team.tier's custom_domains feature flag from /api/v1/capabilities. The api side enables that flag for hobby_plus via plans.yaml. No new code paths required in the dashboard.

Test plan

  • npm test passes (474 passed | 3 skipped)
  • BillingPage 5-tier suite renames + asserts hobby_plus card renders
  • TestHobbyPlus card test locks the $19 price + "custom domain" feature row
  • Updated price assertions for hobby yearly ($7.50 → $8.25, save $18 → save $9)
  • npx tsc --noEmit passes — TierKey union expanded cleanly

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

Inserts a Hobby Plus column between Hobby (\$9) and Pro (\$49) in every
pricing surface:
  - PricingGrid (in-product /app/billing) — bumped grid from 4 to 5
    columns; new card with \$19/mo, custom-domain headline feature
  - TierCard.TierKey adds 'hobby_plus'
  - PricingPage (public /pricing) — adds Hobby Plus column with full
    feature matrix (5 cells per row instead of 4)
  - MarketingPage (public /) — adds Hobby Plus PLANS entry between
    Hobby and Pro
  - BillingPage LIMITS map adds hobby_plus, gridTierFromTier admits it

Hobby yearly price moved from \$7.50 → \$8.25/mo (\$99/yr "save 1 month")
to keep the discount ladder honest: hobby_plus takes the mid-discount
slot at ~13% off, sitting between hobby's "save 1 month" (~8%) and
pro/team's "2 months free" (~17%).

Headline differentiators on Hobby Plus card:
  - "1 GB Postgres · 8 conn" (same as hobby)
  - "1 GB MongoDB · 5 conn" (10x hobby's 100 MB)
  - "2 deployments · custom domain"
  - "50 vault entries · multi-env"
  - "14-day backups · 1-click restore"

Research-backed pricing decoy: triple-tier \$9/\$19/\$49 lifts conversion
~22% vs \$9/\$49 by anchoring against the middle price. Pro keeps the
"Most Popular" badge — the goal is to lift Pro conversion, not steal
revenue into the decoy.

Tests: BillingPage.test.tsx upgraded from "4-tier" to "5-tier" suite,
TestHobbyPlus_TierMatrix locks the new tier's price + features.
npm test passes (474 passed | 3 skipped).
@mastermanas805
mastermanas805 merged commit ec6e523 into main May 14, 2026
2 checks passed
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