feat: Email templates, bulk delete, communication credits, plan features

- Add email template presets for Browse Templates tab (12 templates)
- Add bulk selection and deletion for My Templates tab
- Add communication credits system with Twilio integration
- Add payment views for credit purchases and auto-reload
- Add SMS reminder and masked calling plan permissions
- Fix appointment status mapping (frontend/backend mismatch)
- Clear masquerade stack on login/logout for session hygiene
- Update platform settings with credit configuration
- Add new migrations for Twilio and Stripe payment fields

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-02 01:42:38 -05:00
parent 8038f67183
commit 05ebd0f2bb
77 changed files with 14185 additions and 1394 deletions

View File

@@ -44,6 +44,17 @@ export interface SubscriptionPlan {
permissions: Record<string, boolean>;
transaction_fee_percent: string;
transaction_fee_fixed: string;
// Communication pricing
sms_enabled: boolean;
sms_price_per_message_cents: number;
masked_calling_enabled: boolean;
masked_calling_price_per_minute_cents: number;
proxy_number_enabled: boolean;
proxy_number_monthly_fee_cents: number;
// Default credit settings
default_auto_reload_enabled: boolean;
default_auto_reload_threshold_cents: number;
default_auto_reload_amount_cents: number;
is_active: boolean;
is_public: boolean;
is_most_popular: boolean;
@@ -64,6 +75,17 @@ export interface SubscriptionPlanCreate {
permissions?: Record<string, boolean>;
transaction_fee_percent?: number;
transaction_fee_fixed?: number;
// Communication pricing
sms_enabled?: boolean;
sms_price_per_message_cents?: number;
masked_calling_enabled?: boolean;
masked_calling_price_per_minute_cents?: number;
proxy_number_enabled?: boolean;
proxy_number_monthly_fee_cents?: number;
// Default credit settings
default_auto_reload_enabled?: boolean;
default_auto_reload_threshold_cents?: number;
default_auto_reload_amount_cents?: number;
is_active?: boolean;
is_public?: boolean;
is_most_popular?: boolean;