rename: "Team" billing tier to "Family"

All literal "team" tier-value references renamed to "family" across
API routes, admin UI, OpenAPI schemas, and lib/tiers.ts. The DB enum
value itself is renamed in place via ALTER TYPE ... RENAME VALUE
(migration 0044) rather than drizzle-kit's auto-generated
drop-and-recreate-the-enum migration, which would have failed against
any existing row still holding 'team' — RENAME VALUE preserves
existing data with no cast/backfill needed.

Also adds STRIPE_PLAN.md — a full Stripe billing integration plan
(Checkout+Portal, tier→Price mapping, admin billing dashboard, and a
multi-user Family-group design since Family is meant to cover several
accounts under one subscription, not one payer). Planning only, no
Stripe code yet.

v0.47.0
This commit is contained in:
Arnaud
2026-07-18 00:25:51 +02:00
parent 21a3622e6c
commit c8f4b50ef3
47 changed files with 5469 additions and 60 deletions
@@ -0,0 +1 @@
ALTER TYPE "public"."tier" RENAME VALUE 'team' TO 'family';
File diff suppressed because it is too large Load Diff
@@ -309,6 +309,13 @@
"when": 1784302338735,
"tag": "0043_futuristic_shadowcat",
"breakpoints": true
},
{
"idx": 44,
"version": "7",
"when": 1784326930573,
"tag": "0044_polite_living_mummy",
"breakpoints": true
}
]
}
+1 -1
View File
@@ -10,7 +10,7 @@ import {
import { relations } from "drizzle-orm";
export const userRoleEnum = pgEnum("user_role", ["user", "moderator", "admin"]);
export const tierEnum = pgEnum("tier", ["free", "pro", "team"]);
export const tierEnum = pgEnum("tier", ["free", "pro", "family"]);
export const unitPrefEnum = pgEnum("unit_pref", ["metric", "imperial"]);
export const apiKeyScopeEnum = pgEnum("api_key_scope", ["full", "read"]);
+2 -2
View File
@@ -21,9 +21,9 @@ async function seed() {
maxPublicRecipes: 99999,
},
{
tier: "team",
tier: "family",
// -1 is the actual "no cap" sentinel (see lib/tiers.ts UNLIMITED) —
// pro uses large-but-finite numbers instead; team is genuinely unlimited.
// pro uses large-but-finite numbers instead; family is genuinely unlimited.
maxRecipes: -1,
aiCallsPerMonth: 2000,
storageMb: 50000,