Skip to content

Epic 41 — CasTars Economy Re-pricing (bundles + bounty floor)

Reworks: Epic 13 (CasTars) bundle catalog and Epic 21 (Bounty Hunter) reward floor. Decision (user, 2026-06-16): New CasTars bundles — 5,000 / $5, 13,200 / $12 (10% bonus), 36,000 / $30 (20% bonus) — at a base rate of 1,000 CasTars per $1. Bounty base value = 1,000 CasTars, in 500 increments (1000, 1500, 2000, …).

Status: ✅ Implemented 2026-06-16 (backend + frontend committed on dev). Deploy step: run pnpm tsx scripts/seed-castars-bundles.ts (idempotent sync — deactivates old bundles, upserts the three new ones). Bounty floor is now MIN_BOUNTY_REWARD_STARS = 1000 + BOUNTY_REWARD_STEP_STARS = 500 (multiple-of-500 enforced server-side).

Why: Bundles are DB-managed (CasTarsBundle, seeded/edited by admin) and the current bounty floor is MIN_BOUNTY_REWARD_STARS = 500 / step 50. The new pricing is a re-seed plus two constant changes; nothing structural moves.

BE-CAST-PRICE-001 — Re-seed CasTars bundles

Files:

  • Edit/Create: castyou-backend/src/services/castars/bundles.ts (+ a seed/idempotent upsert run at boot or a script) — deactivate existing bundles and upsert the three new ones: {stars:5000, bonusStars:0, priceCents:500}, {stars:12000, bonusStars:1200, priceCents:1200} (13,200 total, "10% bonus"), {stars:30000, bonusStars:6000, priceCents:3000} (36,000 total, "20% bonus"); set sortOrder so the $12 (or $30) bundle is the highlighted "Best Value". Admin override of bundles still works.

Acceptance criteria:

  • After seed, getActiveBundles() returns exactly the three new bundles with correct totals/prices and bonus framing; old bundles are isActive:false (purchase history intact).

BE-CAST-PRICE-002 — Bounty reward floor 1,000 / step 500

Files:

  • Edit: castyou-backend/src/services/bountyHunter/index.tsMIN_BOUNTY_REWARD_STARS 500 → 1000; enforce reward is a whole multiple of 500 (≥1000) in createBounty().

Acceptance criteria:

  • createBounty rejects rewards < 1000 or not divisible by 500; accepts 1000/1500/2000.

FE-CAST-PRICE-001 — Bundle + bounty UI

Files:

  • Edit: castyou-frontend/apps/app/src/pages/castars/BuyCasTarsPage.tsx — show bonus-% badges, highlight the best-value bundle.
  • Edit: castyou-frontend/apps/app/src/pages/bounty/CreateBountyPage.tsxMIN_REWARD 500→1000, REWARD_STEP 50→500; slider/labels reflect the new floor.

Acceptance criteria:

  • Buy page shows the three bundles with bonus %; bounty slider starts at 1000 and steps by 500.

FE-CAST-PRICE-002 — Rework the CasTars hub (/castars) — ✅ Implemented 2026-06-16

Decision (user, 2026-06-16): Rethink the /castars page into a purchase-focused hub. Remove the bounties tab, drop the "lifetime earned" stat, make the Store tab show the buy bundles, add a Subscriptions tab, and remove the /castars/store feature-store page.

Files:

  • Create: components/castars/BuyBundlesSection.tsx + components/subscriptions/SubscriptionPlansSection.tsx — bundle grid + Stripe flow, and plan cards + checkout, both extracted with no page chrome so they render in a tab.
  • Edit: pages/castars/CasTarsPage.tsx — tabs Store (BuyBundlesSection) · Subscriptions (SubscriptionPlansSection) · History (ledger); removed the bounties tab + the lifetime StatCard; default tab = Store.
  • Edit: pages/castars/BuyCasTarsPage.tsx + pages/pricing/PricingPage.tsx — thin wrappers over the new sections (so /castars/buy and /pricing keep working).
  • Delete: pages/castars/FeatureStorePage.tsx; remove its route + lazy import (App.tsx) and /castars/store from lib/pageTitles.ts.
  • Edit: components/CaStarsWidget.tsx — drop the "spend on features" (/castars/store) link + the lifetime line; CTAs are now Buy CasTars + My CasTars.
  • Edit: i18n en/pt/es — castars.page.subtitle + tabs store/subscriptions/history (dropped bounties).

Acceptance criteria:

  • /castars shows Store (bundles) / Subscriptions / History; no bounties tab, no lifetime stat. /castars/store is gone; /castars/buy and /pricing still render via the shared sections. Typecheck + the full app test suite pass.

Note (flagged): removing the feature store leaves the CasTars feature-spends (PROFILE_BOOST, FEATURED_JOB, REEL_HIGHLIGHT, ADVANCED_FILTERS, APPLICATION_PRIORITY) with no UI entry point (the backend spendCasTarsForFeature + FEATURE_COSTS remain). The loyalty-milestone useBounties hook is now dead (definition-only). Both align with the realignment direction (messaging cost moves to Epic 44, search/apply change in Epics 40/42) — decide later whether to deprecate the backend feature-spends too.

TEST-CAST-PRICE-001 — Pricing coverage

Acceptance criteria: Bundle seed totals/prices, bounty floor/step validation, and the updated UIs are covered.