Credits, Billing & Team
Thanh toán Stripe, credit hệ thống, team và cấu hình.
Credits, Billing & Team
Module quản lý thanh toán, credit, team và cấu hình tenant. Thanh toán qua Stripe, sync về Clerk publicMetadata qua webhooks.
Credits
/dashboard/credits — balance, transactions, top-up
Billing
/dashboard/billing — Stripe portal, plan, usage
Team
Clerk Organizations — invite, roles
Bạn tìm thấy gì ở đâu
| Trang | Đường dẫn | Mô tả |
|---|---|---|
| Credits | /dashboard/credits | Prefetch balance + transactions(limit20, date-desc) |
| Billing | /dashboard/billing | Plan, usage, Stripe Customer Portal |
| Team | Clerk Organizations | Không có trang /dashboard/settings/team riêng — quản lý qua Clerk UI hoặc team router |
Không có folder /dashboard/settings — các cài đặt brand-voice, generation-rules, business-config nằm trong settings router nhưng không có page riêng. Đừng tìm /settings/* trong sidebar.
Credits System
Credits là đơn vị thanh toán cho AI generation. Reserve → settle nguyên tử.
| Bảng | Mô tả |
|---|---|
credit_accounts | Balance per tenant (org_id unique) |
credit_transactions | Mỗi reserve/settle/refund/top-up |
pricing_rules | Giá per 1K tokens per model |
| Chức năng | Mô tả |
|---|---|
balance / transactions | Số dư và lịch sử |
checkBalance / quote | Kiểm tra trước khi generate, estimate cost |
reserve / usage / getUsage | Reserve khi tạo job/chat |
pricing / pricingRules / listPackages | Giá theo model |
createCheckoutSession | Tạo Stripe Checkout để nạp |
planInfo / usageSummary / modelUsage | Tổng hợp theo plan và model |
Billing
| Chức năng | Mô tả |
|---|---|
currentPlan | Plan từ Clerk publicMetadata + tenants.plan |
usage / usageHistory / getHistory | Usage: drafts/month, tokens/month, jobs |
createPortalSession | Tạo Stripe Customer Portal URL để tự quản lý subscription |
Plan quota lưu trong Clerk Org publicMetadata để check nhanh không cần DB query. Stripe webhook sync plan changes về Clerk metadata.
Plans
| Plan | Drafts / tháng | Tokens / tháng | Concurrent jobs | Giá |
|---|---|---|---|---|
| Free | 5 | 200K | 1 | $0 |
| Starter | 50 | 2M | 2 | $29 |
| Pro | 500 | 20M | 5 | $99 |
| Enterprise | Custom | Custom | Custom | Liên hệ |
Vượt soft cap 80% → banner warning + realtime tenant.quota.warning. Vượt hard cap 100% → block new jobs, hiện upgrade CTA.
Stripe Webhooks → Clerk Sync
app/api/webhooks/stripe/route.ts:
stripe.webhooks.constructEvent(body, sig, secret) — reject 401 nếu fail.checkout.session.completed, subscription.updated, invoice.payment_succeeded.publicMetadata.plan và credits trên Organization.audit_logs với actor, target tenant, action, timestamp.Team — Clerk Organizations
| Role | Clerk value | Quyền |
|---|---|---|
| Admin | org:admin | Full access, team/billing/publisher credentials |
| Member | org:member | Content creation, publishing |
| Chức năng | Quyền |
|---|---|
listMembers | org:admin |
invite({ email, role }) | org:admin |
updateRole / revokeInvitation | org:admin |
Team dùng Clerk Organizations API trực tiếp. Không lưu members trong Supabase — Clerk là source of truth.
Cấu hình khác
| Module | Router | Ghi chú |
|---|---|---|
| Brand Voice | settings.getBrandVoice / saveBrandVoice | Tone, vocabulary — chỉ org:admin |
| Content Strategy Profile | settings.getContentStrategyProfile / saveContentStrategyProfile | Profile cho Monthly Plans |
| Generation Rules | tenant-rules | list, create, update, toggle, delete — admin config, tenant dùng |
| Business Config | settings | Lưu trong profile, không có page riêng |
Lưu ý
- Không cho phép vượt hard cap — check
balancetrước khi gọi LLM - Failed jobs vẫn bị tính phí nếu đã gọi provider (đã reserve)
pricingRulesthay đổi theo model — luônquotetrước khi generate hàng loạt