Appearance
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: runpnpm tsx scripts/seed-castars-bundles.ts(idempotent sync — deactivates old bundles, upserts the three new ones). Bounty floor is nowMIN_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"); setsortOrderso 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 areisActive:false(purchase history intact).
BE-CAST-PRICE-002 — Bounty reward floor 1,000 / step 500
Files:
- Edit:
castyou-backend/src/services/bountyHunter/index.ts—MIN_BOUNTY_REWARD_STARS500 → 1000; enforce reward is a whole multiple of 500 (≥1000) increateBounty().
Acceptance criteria:
createBountyrejects 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.tsx—MIN_REWARD500→1000,REWARD_STEP50→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
/castarspage 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/storefeature-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 lifetimeStatCard; default tab = Store. - Edit:
pages/castars/BuyCasTarsPage.tsx+pages/pricing/PricingPage.tsx— thin wrappers over the new sections (so/castars/buyand/pricingkeep working). - Delete:
pages/castars/FeatureStorePage.tsx; remove its route + lazy import (App.tsx) and/castars/storefromlib/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+ tabsstore/subscriptions/history(droppedbounties).
Acceptance criteria:
/castarsshows Store (bundles) / Subscriptions / History; no bounties tab, no lifetime stat./castars/storeis gone;/castars/buyand/pricingstill 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 backendspendCasTarsForFeature+FEATURE_COSTSremain). The loyalty-milestoneuseBountieshook 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.