/** * PAYG (Pay-As-You-Go) Stripe metered billing configuration. * * Each billable feature is a Stripe Meter + Metered Price. * Users subscribe via Stripe Checkout (no upfront charge). * Usage is reported per action. Stripe invoices monthly. * * After creating meters and prices in Stripe Dashboard, * replace the placeholder IDs below with actual Stripe price IDs. * * Dashboard: https://dashboard.stripe.com/billing/meters */ export type MeterId = 'invoices' | 'employees' | 'payroll-runs' | 'expenses' | 'leave-requests'; export interface MeterConfig { id: MeterId; name: string; description: string; pricePerUnit: number; // In cents (e.g. 50 = $0.50) stripePriceId: string; // Stripe metered price ID stripeMeterName: string; // Stripe meter event name (matches meter in Dashboard) icon: string; } export const METERS: Record = { invoices: { id: 'invoices', name: 'Invoices', description: '$0.50 per invoice created. Includes line items and status tracking.', pricePerUnit: 50, stripePriceId: process.env.STRIPE_INVOICES_PRICE_ID || '', stripeMeterName: 'vela_invoices', icon: '๐Ÿ“„', }, employees: { id: 'employees', name: 'Employees', description: '$1.00 per employee per month. Unlimited profiles and details.', pricePerUnit: 100, stripePriceId: process.env.STRIPE_EMPLOYEES_PRICE_ID || '', stripeMeterName: 'vela_employees', icon: '๐Ÿ‘ค', }, 'payroll-runs': { id: 'payroll-runs', name: 'Payroll Runs', description: '$3.00 per payroll execution. Multi-jurisdiction tax calculation included.', pricePerUnit: 300, stripePriceId: process.env.STRIPE_PAYROLL_RUNS_PRICE_ID || '', stripeMeterName: 'vela_payroll_runs', icon: '๐Ÿ’ฐ', }, expenses: { id: 'expenses', name: 'Expenses', description: '$0.25 per expense recorded. Categories, approvals, and reporting included.', pricePerUnit: 25, stripePriceId: process.env.STRIPE_EXPENSES_PRICE_ID || '', stripeMeterName: 'vela_expenses', icon: '๐Ÿงพ', }, 'leave-requests': { id: 'leave-requests', name: 'Leave Requests', description: '$0.50 per leave request. Balance tracking and approval workflow included.', pricePerUnit: 50, stripePriceId: process.env.STRIPE_LEAVE_REQUESTS_PRICE_ID || '', stripeMeterName: 'vela_leave_requests', icon: '๐Ÿ–๏ธ', }, }; // Always-free features (never metered) export const FREE_FEATURES = [ 'Dashboard', 'Organisation management', 'Member invitations', 'Payroll jurisdiction setup', 'Reports (basic P&L)', 'Balance Sheet', ]; // Estimated monthly cost based on typical usage export const ESTIMATED_COSTS = [ { label: 'Starter (5 employees, 10 invoices)', cost: 1500 }, // $15 { label: 'Growing (15 employees, 30 invoices, 2 payrolls)', cost: 3625 }, // $36.25 { label: 'Established (30 employees, 60 invoices, 4 payrolls)', cost: 7150 }, // $71.50 ];