Files
website/FEATURES.md
Claude EZSCALE 052f651ee1 Init Commit
2026-02-09 01:05:29 -05:00

1333 lines
36 KiB
Markdown

# FEATURES.md - EZSCALE Site Feature Specifications
## Overview
This document details all feature decisions made during planning. Reference this when building specific features.
---
## 1. Coupon & Discount System
### Coupon Types
- **Percentage discount** (e.g., 20% off)
- **Fixed amount** (e.g., $10 off)
- **Free trial extensions** (e.g., extend trial by 7 days)
### Advanced Restrictions
- Expiry dates
- Maximum uses (total and per customer)
- First purchase only
- Specific plans/services
- Minimum order value
- Recurring vs one-time discounts
- **Stackable coupons** (allow multiple coupons per order)
- **User groups** (coupons for specific customer segments)
- **Geographic restrictions** (US-only coupons, EU-only, etc.)
- **A/B testing support** (track conversion by coupon)
### Database Schema Addition
```sql
coupons table:
stackable (boolean - can be combined with other coupons)
user_group (nullable - admin, vip, new_customer, etc.)
allowed_countries (JSON array - e.g., ["US", "CA", "GB"])
blocked_countries (JSON array)
conversion_tracking (boolean - track for analytics)
variant_id (nullable - for A/B testing)
```
---
## 2. Plan Changes & Billing
### Upgrade/Downgrade Logic
- **Immediate proration for plan changes**
- Calculate unused time credit on current plan
- Apply credit to new plan price
- Charge/credit difference immediately
- Update service resources immediately (VirtFusion/Pterodactyl API calls)
### Example Calculation
```
Customer on $10/month VPS (30 days), used 10 days
Upgrades to $20/month VPS
Credit: $10 * (20 days / 30 days) = $6.67
New charge: $20 - $6.67 = $13.33
```
### Implementation Notes
- Use Laravel Cashier's `swap()` method for Stripe subscriptions
- For PayPal, manually calculate and create new subscription
- Queue API calls to update VPS resources
- Send confirmation email with proration details
---
## 3. Payment Retry & Dunning
### Strategy
- **Use Stripe Smart Retries** (built-in dunning management)
- Stripe automatically retries failed payments with ML-optimized timing
- Laravel webhooks listen for payment failure events
### Our Enhancement
- On payment failure event:
- Send customer email with retry schedule
- Add grace period (7 days) before suspension
- Send reminder at 3 days before suspension
- Suspend service if still unpaid
- Discord webhook alert for high-value customer failures
### Configuration
```php
// config/billing.php
'dunning' => [
'grace_period_days' => 7,
'suspension_warning_days' => 3,
'termination_days' => 30, // 30 days after suspension
],
```
---
## 4. Datacenter & Location Management
### Per-Plan Location
- Plans are tied to specific datacenters
- Example: "VPS-Basic-US-East", "VPS-Basic-EU-West"
- Different pricing per location (if applicable)
### Database Schema
```sql
plans table:
datacenter_location (string - us-east, us-west, eu-west, ap-southeast)
datacenter_code (string - NYC1, LAX2, AMS1, SG1)
location_display_name (string - "New York, USA")
datacenters table (new):
id
code (NYC1, LAX2, etc.)
name (New York - US East)
location (city, country)
available_services (JSON - ['vps', 'dedicated', 'hosting'])
status (active, maintenance, full)
```
### VirtFusion Integration
- Each datacenter maps to a VirtFusion region/hypervisor group
- Provisioning service selects appropriate hypervisor based on plan's datacenter
---
## 5. Customer Onboarding
### Guided Onboarding Flow
1. **Email verification** - Confirm email address
2. **Profile completion** - Company name, address (for tax calculations)
3. **Payment method** - Add credit card or PayPal
4. **Plan selection** - Choose service and datacenter
5. **Service provisioning** - Automated provisioning begins
6. **Welcome tour** - Brief overlay tour of dashboard features
### Implementation
- Use Laravel Multi-Step Forms or similar
- Store progress in session
- Allow skipping steps (except email verification)
- Show progress bar: "Step 2 of 5"
### Post-Onboarding
- Redirect to service provisioning status page
- Email: "Your VPS is being provisioned" (ETA: 5 minutes)
- Email: "Your VPS is ready!" (includes credentials, getting started guide)
- Dashboard widget: "Next steps" (upload SSH key, configure firewall, install software)
---
## 6. Loyalty Rewards Program
### Automatic Tenure-Based Discounts
| Tenure | Discount |
|--------|----------|
| 1+ years | 5% off recurring |
| 2+ years | 10% off recurring |
| 3+ years | 15% off recurring |
| 5+ years | 20% off recurring |
### Implementation
- Scheduled job runs monthly to update customer discount tiers
- Apply discount as automatic coupon on renewals
- Display loyalty badge in dashboard: "Loyal Customer - 5% Discount"
- Email notification when customer reaches new tier
### Database Schema
```sql
users table additions:
customer_since (timestamp - first paid invoice date)
loyalty_tier (integer - 0, 1, 2, 3, 5 years)
loyalty_discount_percent (decimal - calculated discount)
```
---
## 7. Dedicated Server Waitlist
### Notify When Available Approach
- Customer signs up for email notifications
- No payment or reservation
- When inventory available, send email blast to waitlist
- First-come, first-served checkout
### Waitlist Features
- Show estimated wait time (based on average turnover)
- Let customer specify desired specs (RAM, CPU, disk)
- Email when exact match available
- Email when close match available
### Database Schema
```sql
server_waitlist table:
id
user_id
plan_id (nullable - if waiting for specific plan)
desired_specs (JSON - RAM, CPU, disk requirements)
datacenter_preference (nullable)
notified_at (nullable - when we sent availability email)
status (waiting, notified, fulfilled, cancelled)
created_at, updated_at
```
---
## 8. Custom Pricing for Enterprise
### Admin Custom Plan Creation
- Admin can create one-off plans for specific customers
- Set custom pricing, billing cycle, features
- Plan is private (not visible in public catalog)
- Assigned to specific customer only
### Implementation
```sql
plans table additions:
visibility (public, private, archived)
assigned_user_id (nullable - for private plans)
is_custom (boolean - marked as custom pricing)
```
### Admin UI
- Button: "Create Custom Plan for Customer"
- Form: Base on existing plan, modify price and features
- Auto-generate plan name: "Custom VPS - John Doe - $45/month"
---
## 9. GDPR Data Deletion
### Automated Process
1. Customer requests deletion from account settings
2. System creates data deletion request (7-day waiting period)
3. Email confirmation: "Your account will be deleted in 7 days"
4. After 7 days, automated job runs:
- Terminate all active services
- Anonymize personal data (name → "Deleted User #12345")
- Keep financial records (invoices, payments) with anonymized data
- Delete: email, phone, address, notes, login history
- Retain: subscription IDs, amounts, dates (for accounting/tax)
5. Email confirmation: "Your data has been deleted"
### Database Schema
```sql
data_deletion_requests table:
id
user_id
requested_at
scheduled_for (requested_at + 7 days)
completed_at (nullable)
status (pending, processing, completed, cancelled)
```
### Compliance
- Compliant with GDPR "right to be forgotten"
- Retain minimum data required by law (7 years for tax records)
- Provide data export (download all data as JSON/PDF) before deletion
---
## 10. Uptime Monitoring
### Built-In Monitoring System
- Platform pings customer services every 5 minutes
- HTTP/HTTPS checks for web hosting
- ICMP ping for VPS/dedicated
- Game server query for Pterodactyl services
### Features
- Uptime percentage displayed in dashboard
- Incident log (downtime events with duration)
- Customer can set up alert preferences (email, Discord webhook)
- Public status page shows overall platform health
### Database Schema
```sql
uptime_checks table:
id
service_id
check_type (http, ping, game_query)
check_url_or_ip
status (up, down, degraded)
response_time_ms
checked_at
uptime_incidents table:
id
service_id
started_at
ended_at (nullable - ongoing)
duration_seconds
notified (boolean - customer was alerted)
```
---
## 11. Real-Time Dashboard Updates
### Combination Approach
- **Real-time (WebSockets)** for:
- New orders/subscriptions
- Critical alerts (provisioning failures, payment failures)
- Customer support tickets
- Admin notifications
- **Periodic refresh (polling)** for:
- Analytics charts (every 60 seconds)
- Service status (every 30 seconds)
- Bandwidth graphs (every 5 minutes)
### Implementation
- Use **Laravel Reverb** (or Pusher) for WebSockets
- Channel: `admin.{admin_id}` for personal admin notifications
- Channel: `customer.{user_id}` for customer notifications
- Broadcast events: `OrderCreated`, `ServiceProvisioned`, `PaymentFailed`
---
## 12. Multi-Channel Admin Alerts
### Alert Routing
| Alert Type | Discord | Email | SMS (Twilio) |
|------------|---------|-------|--------------|
| New order | ✓ | ✗ | ✗ |
| High-value order (>$500) | ✓ | ✓ | ✓ |
| Payment failure | ✓ | ✗ | ✗ |
| Provisioning failure | ✓ | ✓ | ✓ |
| System error | ✓ | ✓ | ✗ |
| Security alert (failed admin login) | ✓ | ✓ | ✓ |
| Service cancellation | ✓ | ✗ | ✗ |
### Configuration
```php
// config/alerts.php
'channels' => [
'discord' => env('DISCORD_WEBHOOK_URL'),
'email' => env('ADMIN_ALERT_EMAIL'),
'sms' => [
'enabled' => env('SMS_ALERTS_ENABLED', false),
'twilio_sid' => env('TWILIO_SID'),
'twilio_token' => env('TWILIO_TOKEN'),
'phone_numbers' => explode(',', env('ADMIN_PHONE_NUMBERS')),
],
],
```
---
## 13. Public Status Page
### Built-In Status Page (status.ezscale.cloud)
- **System Status**: All systems operational / Degraded / Major outage
- **Service Components**:
- VirtFusion API
- Pterodactyl Panel
- SynergyCP
- Enhance
- Billing System
- Customer Portal
- ElastiFlow (Bandwidth Monitoring)
- **Incidents**: Current and past incidents with updates
- **Scheduled Maintenance**: Upcoming maintenance windows
- **Uptime Stats**: 90-day uptime graph per component
### Features
- Public page (no login required)
- RSS feed for status updates
- Customer can subscribe to status notifications
- Admin can post incidents and updates
- Auto-create incidents from monitoring (optional)
### Database Schema
```sql
status_components table:
id
name (VirtFusion API, Billing System, etc.)
status (operational, degraded, outage)
description
group (Infrastructure, Billing, Control Panels)
sort_order
status_incidents table:
id
title
description
status (investigating, identified, monitoring, resolved)
severity (minor, major, critical)
affected_components (JSON array of component IDs)
started_at
resolved_at (nullable)
status_updates table:
id
incident_id
message
status_change (investigating identified)
posted_at
```
---
## 14. Abuse Management System
### Full Abuse Management Module
- Dedicated abuse ticket queue (separate from support)
- Abuse report submission form (public, for reporting abuse)
- Automated abuse detection (optional - DMCA API, spam blacklist checks)
- Service auto-suspension for severe abuse (CSAM, phishing)
### Abuse Workflow
1. Abuse report received (email, web form, API)
2. Create abuse ticket (high priority)
3. Notify admin via Discord + email
4. Admin investigates, views customer history
5. Options:
- Warn customer (send abuse notice email)
- Suspend service immediately
- Request content removal (give customer X hours)
- Terminate account (severe violations)
6. Track abuse history per customer
7. Escalate repeat offenders automatically
### Database Schema
```sql
abuse_reports table:
id
service_id (nullable - may not know which service yet)
user_id (nullable - determined after investigation)
reporter_email
reporter_name (nullable)
abuse_type (spam, copyright, phishing, illegal_content, other)
description
evidence (JSON - URLs, headers, attachments)
status (new, investigating, resolved, dismissed)
assigned_admin_id (nullable)
resolved_at (nullable)
abuse_actions table:
id
abuse_report_id
action_type (warning, suspension, termination, content_removal)
taken_by_admin_id
notes
created_at
customer_abuse_history:
user_id
total_reports
resolved_reports
warnings_sent
suspensions
risk_score (calculated - higher score = more likely to abuse)
```
---
## 15. Fraud Detection
### Automated Fraud Scoring
- Check on signup/checkout before provisioning
- Assign risk score 0-100
- Auto-reject if score > 90
- Flag for manual review if score 50-90
- Auto-approve if score < 50
### Fraud Signals
- **Email**: Disposable email domains (mailinator, guerrilla mail), newly created Gmail/Outlook
- **IP Address**: VPN/proxy detection, high-risk countries, IP mismatch with billing address
- **Payment**: Prepaid cards, multiple failed attempts, card BIN country mismatch
- **Behavioral**: New account placing large order, unusual order patterns
- **Velocity**: Multiple accounts from same IP in short time
### Third-Party Services
- **MaxMind MinFraud** - IP and transaction risk scoring
- **Stripe Radar** - Built-in fraud detection
- **Email verification API** - Validate email deliverability
### Implementation
```php
// app/Services/Fraud/FraudDetectionService.php
public function calculateRiskScore(User $user, Order $order): int
{
$score = 0;
// Disposable email +30
if ($this->isDisposableEmail($user->email)) $score += 30;
// VPN/proxy +20
if ($this->isVpnOrProxy($user->ip_address)) $score += 20;
// High-risk country +15
if ($this->isHighRiskCountry($user->country)) $score += 15;
// ... more checks
return min($score, 100);
}
```
---
## 16. Game Server Templates
### Template Library
- Pre-configured templates for popular games
- One-click deployment from customer dashboard
- Admin can create/manage custom templates
### Supported Games (Initial)
- Minecraft (Vanilla, Spigot, Paper, Forge, Fabric)
- ARK: Survival Evolved
- Rust
- Counter-Strike 2
- Palworld
- Valheim
- Terraria
- 7 Days to Die
- Team Fortress 2
- Garry's Mod
### Template Features
- Default server configuration
- Recommended plugins/mods
- Startup parameters
- Port configurations
- Resource requirements (min RAM, CPU)
### Database Schema
```sql
game_templates table:
id
game_name (Minecraft, ARK, etc.)
template_name (Vanilla 1.20, Spigot, etc.)
pterodactyl_egg_id
description
icon_url
default_config (JSON - startup params, server.properties, etc.)
min_ram_mb
recommended_ram_mb
min_cpu_cores
status (active, deprecated)
sort_order
```
---
## 17. Backups (Included in Plans)
### Backup Features
- Daily automated backups for VPS/hosting
- Retention: 7 daily, 4 weekly, 3 monthly
- Customer can restore from dashboard (self-service)
- Backups stored on separate infrastructure (not same as service)
### Backup Storage
- Use S3-compatible storage (Wasabi, Backblaze B2, MinIO)
- Encrypted backups
- Compression to save space
### Implementation
- VirtFusion API: backup VPS snapshots
- Enhance API: backup hosting accounts
- Pterodactyl: backup game server files (via API or direct)
- SynergyCP: backup dedicated server config (customer responsible for data)
### Database Schema
```sql
backups table:
id
service_id
backup_type (daily, weekly, monthly, manual)
size_bytes
storage_path (S3 URL or path)
status (pending, completed, failed, restoring)
created_at
expires_at (based on retention policy)
backup_restores table:
id
backup_id
service_id
requested_by_user_id
status (pending, in_progress, completed, failed)
created_at
```
---
## 18. Platform Backups
### 15-Minute RPO (Recovery Point Objective)
- MySQL binary logs replicated in real-time
- Transaction log backups every 15 minutes
- Full database backup daily
- Test restores weekly (automated)
### Multi-Region Replication
- Master database in primary datacenter
- Read replica in secondary datacenter (async replication)
- Automatic failover to replica if master fails
### Backup Retention
- 15-minute transaction logs: 7 days
- Daily full backups: 30 days
- Weekly full backups: 90 days
- Monthly backups: 1 year
### Implementation
- Use MySQL Enterprise Backup or Percona XtraBackup
- Store backups in S3 with versioning enabled
- Encrypt backups at rest (AES-256)
---
## 19. IPv4 + IPv6 Dual-Stack
### IP Allocation
- All VPS and dedicated servers get:
- 1x IPv4 address (included)
- /64 IPv6 subnet (included)
- Web hosting:
- Shared IPv4 (multiple sites per IP)
- Shared IPv6
- Game servers:
- 1x IPv4 (included)
- IPv6 optional (most game clients don't support)
### Additional IPv4 Addresses
- Customer requests additional IPs via ticket
- Must provide justification (SSL certificates, multiple services, etc.)
- Admin reviews and approves
- Pricing: $3-5/month per additional IPv4
### IPAM (IP Address Management)
- Track IP allocation in database
- Prevent duplicate assignments
- RDNS (reverse DNS) management
- SWIP (Shared Whois Project) for larger allocations
### Database Schema
```sql
ip_addresses table:
id
ip_address (IPv4 or IPv6)
ip_version (4 or 6)
type (dedicated, shared)
service_id (nullable)
datacenter_id
status (available, allocated, reserved)
rdns_hostname (nullable)
notes
ip_requests table:
id
user_id
service_id
ip_version (4 or 6)
quantity
justification
status (pending, approved, rejected)
reviewed_by_admin_id
created_at
```
---
## 20. Invoice Numbering
### Sequential Format: INV-000001
- Simple incrementing counter
- Never resets
- Starts at INV-000001
- Auto-increments for each invoice
- Zero-padded to 6 digits
### Implementation
```php
// Generate next invoice number
$lastInvoiceNumber = DB::table('invoices')
->orderBy('number', 'desc')
->value('number');
$nextNumber = $lastInvoiceNumber
? intval(substr($lastInvoiceNumber, 4)) + 1
: 1;
$invoiceNumber = 'INV-' . str_pad($nextNumber, 6, '0', STR_PAD_LEFT);
// Result: INV-000001, INV-000002, ..., INV-123456
```
### Database
```sql
invoices table:
number (unique, indexed - INV-000001)
stripe_invoice_id (nullable - for Stripe invoices)
paypal_invoice_id (nullable - for PayPal)
```
---
## 21. Team Accounts & Sub-Users
### Full Team Support
- Primary account owner (billing access)
- Add team members with granular permissions
- Each team member gets own login (separate email)
### Permission Levels
| Permission | Description |
|------------|-------------|
| **Owner** | Full access (billing, services, team management) |
| **Billing Manager** | View and pay invoices, manage payment methods |
| **Technical Admin** | Manage services (reboot, reinstall, view credentials) |
| **Read-Only** | View services and billing, no modifications |
| **Custom** | Admin defines specific permissions |
### Features
- Owner can invite team members via email
- Team members accept invitation, create account
- Audit log shows which team member performed actions
- Owner can revoke access anytime
### Database Schema
```sql
team_members table:
id
account_owner_id (references users.id)
team_member_user_id (references users.id)
role (owner, billing_manager, technical_admin, read_only, custom)
permissions (JSON - for custom roles)
invited_at
accepted_at (nullable)
status (invited, active, revoked)
team_invitations table:
id
account_owner_id
email
role
token (unique invitation token)
expires_at
accepted_at (nullable)
```
---
## 22. Referral Credits
### Referral Program
- Customer gets unique referral link: `ezscale.cloud/ref/ABC123`
- When referred friend signs up and pays first invoice:
- Referrer gets $10 account credit
- New customer gets $5 account credit
- Credits apply to future invoices automatically
### Tracking
- Referral link parameter stored in session/cookie
- When customer registers, store referrer ID
- When first invoice paid, trigger credit issuance event
### Database Schema
```sql
referrals table:
id
referrer_user_id
referred_user_id
referral_code (unique - ABC123)
status (pending, completed, credited)
credit_amount_referrer
credit_amount_referred
referred_at
first_payment_at (nullable)
credited_at (nullable)
account_credits table:
id
user_id
amount
source (referral, loyalty, admin_granted, promotional)
description
applied_to_invoice_id (nullable)
expires_at (nullable - credits can expire)
created_at
```
---
## 23. Free Trial System
### Free Trial Configuration
- Trial length: 7 days (configurable per plan)
- Requires payment method (but not charged)
- Full service access during trial
- Auto-convert to paid subscription after trial ends
- Customer can cancel during trial (no charge)
### Trial Limitations (Optional)
- Email verification required
- One trial per email address
- Fraud score check (reject high-risk trials)
### Implementation
- Use Stripe's built-in trial period functionality
- For PayPal: create subscription with trial period
- Email reminders:
- Day 1: Welcome email with getting started guide
- Day 5: "2 days left in your trial"
- Day 7: "Your trial has ended, subscription starts today"
### Database Tracking
```sql
subscriptions table additions:
trial_ends_at (nullable - Cashier provides this)
trial_converted_at (nullable - when trial became paid)
trial_cancelled (boolean - cancelled during trial)
```
---
## 24. Chatbot for Marketing Site
### Chatbot Features (Crisp, Tidio, or custom)
- Appears on ezscale.cloud (marketing site)
- Answers common questions:
- Pricing
- Service features
- Datacenter locations
- Billing questions
- Signup process
### Bot Flows
- Initial greeting: "Hi! How can I help you today?"
- Quick reply buttons: "Pricing", "Features", "Sign Up", "Talk to Human"
- If "Talk to Human": Create support ticket or offer callback
### Integration
- Use Crisp or similar (GDPR-compliant, affordable)
- Escalate to human support via SupportPal ticket API
- Track chatbot interactions in analytics
---
## 25. Comprehensive Financial Reports
### Reports Needed
1. **Revenue Report**
- Total revenue by period (daily, monthly, yearly)
- Breakdown by service type (VPS, Dedicated, Hosting, Game)
- Breakdown by plan
- Growth percentage vs previous period
2. **Profit & Loss Statement**
- Revenue
- Refunds
- Payment gateway fees (Stripe, PayPal)
- Infrastructure costs (VirtFusion, Pterodactyl, etc.)
- Net profit
3. **Tax Report**
- Sales tax collected by region
- VAT collected (if applicable)
- Export for accountant (CSV, PDF)
4. **Aging Report**
- Outstanding invoices by age (0-30 days, 30-60, 60-90, 90+)
- Total amount overdue
- Customer list with overdue amounts
5. **Refund Report**
- All refunds issued
- Reason for refund
- Total refunded by period
6. **Subscription Report**
- New subscriptions this period
- Cancelled subscriptions
- Churn rate %
- MRR and ARR
### Export Formats
- PDF (formatted reports)
- CSV (raw data for Excel)
- JSON (API access)
### Scheduled Reports
- Admin can schedule email delivery (weekly/monthly)
- Auto-send month-end reports to accounting team
---
## 26. Login History & Security Audit
### Full Audit Trail
- Track all customer and admin logins
- Log IP address, device type, user agent, location (GeoIP)
- Customer can view their own login history
- Admin can view any user's login history
### Security Features
- Alert on login from new device/location
- Alert on multiple failed login attempts
- Option to enable "trusted devices" (require 2FA on new devices only)
- Admin can force logout all sessions
### Database Schema
```sql
login_history table:
id
user_id
ip_address
user_agent
device_type (desktop, mobile, tablet)
browser (Chrome, Firefox, Safari, etc.)
location_country
location_city (from GeoIP)
success (boolean - failed vs successful)
two_factor_used (boolean)
created_at
active_sessions table:
id
user_id
session_id (Laravel session ID)
ip_address
user_agent
last_activity_at
created_at
```
---
## 27. Invoice Consolidation
### Customer Preference
- Customer can choose in account settings:
- **Consolidated**: One invoice per billing cycle with all services
- **Separate**: Each service gets its own invoice
### Implementation
- Default: Consolidated
- Setting stored in user preferences
- Billing job checks preference before generating invoices
- For consolidated: Group by billing date, create single invoice with line items
### Example Consolidated Invoice
```
INVOICE #INV-001234
Due Date: February 15, 2026
Line Items:
- VPS Pro - us-east (Feb 15 - Mar 15) $20.00
- Web Hosting Basic (Feb 15 - Mar 15) $10.00
- Game Server - Minecraft (Feb 15 - Mar 15) $15.00
Subtotal: $45.00
Tax (8%): $3.60
Total: $48.60
```
---
## 28. Unified Communication Timeline
### Timeline View (Customer & Admin)
- Shows all interactions with customer in chronological order
- Event types:
- Account created
- Service provisioned
- Invoice generated
- Payment received
- Email sent (with subject)
- Support ticket created
- Ticket reply
- Service suspended
- Service resumed
- Login activity
- Admin notes
- Service upgrade/downgrade
### Features
- Filter by event type
- Search timeline
- Admin can add manual notes
- Export timeline as PDF (for records)
### Database Schema
```sql
customer_timeline table:
id
user_id
event_type (account_created, invoice_generated, etc.)
event_description
related_model_type (Invoice, Service, Ticket, etc.)
related_model_id
metadata (JSON - full event data)
created_by_admin_id (nullable - for admin notes)
created_at
```
---
## 29. API Features
### Full Control API
- Customers can create, modify, delete services via API
- Same capabilities as dashboard
- RESTful design
- Sanctum token authentication
### Webhook System
- Customers can register webhook URLs
- Events trigger POST requests to customer's webhook
- Events:
- `invoice.created`
- `invoice.paid`
- `service.provisioned`
- `service.suspended`
- `service.terminated`
- `bandwidth.threshold_reached`
### Webhook Security
- HMAC signature for verification
- Retry failed webhooks (3 attempts)
- Webhook delivery log
### Custom Domains (CNAME)
- Customer can point `billing.theirdomain.com` to `account.ezscale.cloud`
- SSL certificate auto-provisioned via Let's Encrypt
- Requires DNS verification (add TXT record)
### Database Schema
```sql
api_tokens table (Sanctum provides):
id
tokenable_type
tokenable_id
name
token (hashed)
abilities (JSON - permissions)
last_used_at
created_at
customer_webhooks table:
id
user_id
url
events (JSON array - subscribed events)
secret (for HMAC signature)
status (active, disabled)
created_at
webhook_deliveries table:
id
webhook_id
event_type
payload (JSON)
response_code
response_body
attempts
delivered_at
created_at
custom_domains table:
id
user_id
domain (billing.theirdomain.com)
verification_token
verified_at
ssl_status (pending, active, failed)
created_at
```
---
## 30. VPS & Service Management
### VPS Self-Service Reinstall
- Customer can reinstall OS from dashboard
- Choose from available OS templates
- Warning: "This will erase all data"
- Require confirmation (type service name)
- Queue reinstall job → VirtFusion API
### Additional IP Requests
- Customer submits form with justification
- Admin reviews in admin panel
- Approve/reject with reason
- If approved: Assign IP from pool, add to invoice
### DNS Integration
- Integrate with Cloudflare API for DNS management
- Customer adds Cloudflare API token in settings
- Auto-create DNS records when services provisioned
- A record for VPS: `vps1.customer.com → 1.2.3.4`
- A record for hosting: `www.customer.com → hosting IP`
---
## 31. Email Preferences & Notifications
### Granular Email Control
Customer can toggle each notification type:
- ✓ Invoices (required)
- ✓ Payment receipts (required)
- ☐ Renewal reminders
- ☐ Service provisioned
- ☐ Bandwidth alerts
- ☐ Marketing emails
- ☐ Product updates
- ☐ Platform news
### Renewal Reminder Schedule
- 30 days before renewal
- 14 days before renewal
- 7 days before renewal
- 1 day before renewal
### Invoice Emails: Summary + PDF
```
Subject: Invoice #INV-001234 - $48.60 Due
Hi John,
Your invoice is ready:
Invoice #: INV-001234
Amount Due: $48.60
Due Date: Feb 15, 2026
Services:
- VPS Pro ($20.00)
- Web Hosting ($10.00)
- Game Server ($15.00)
View invoice: https://account.ezscale.cloud/invoices/001234
Download PDF: [attached]
Payment will be automatically charged on Feb 15.
```
---
## 32. Performance & Scalability
### Analytics Dashboard: Hybrid Approach
- **Real-time**: Today's revenue, active orders
- **Cached**: Historical charts (updated every 15 min)
- **Daily aggregation**: Month/year totals (updated nightly)
### Queue Configuration
- **Critical queue** (priority: high)
- Service provisioning
- Payment processing
- Account suspension
- **Normal queue** (priority: medium)
- Emails
- Notifications
- Backup jobs
- **Low queue** (priority: low)
- Analytics aggregation
- Report generation
- Cleanup jobs
### Laravel Horizon
- Monitor queue health
- Failed job tracking
- Retry failed jobs
- Queue metrics dashboard
### Auto-Scaling Strategy
- Cloudflare CDN + WAF for DDoS protection
- Load balancer in front of app servers
- Auto-scale based on CPU/memory usage
- Scale up during traffic spikes (sales, launches)
- Scale down during low-traffic periods
---
## 33. Provisioning API Failure Handling
### Queue and Retry Strategy
1. Customer completes checkout, payment succeeds
2. Provisioning job added to queue
3. Attempt to provision via API (VirtFusion, Pterodactyl, etc.)
4. **If API fails:**
- Log error
- Send Discord alert to admin
- Email customer: "Service provisioning in progress, may take longer than usual"
- Retry after 5 minutes
- Retry after 15 minutes
- Retry after 30 minutes
- If still failing after 3 retries:
- Create high-priority admin ticket
- Email customer: "Provisioning delayed, our team is investigating"
- Manual admin intervention required
### Database Schema
```sql
provisioning_logs additions:
retry_count (integer - how many retries)
next_retry_at (nullable - scheduled retry time)
error_details (JSON - full error response)
```
---
## 34. Cryptocurrency Payments
### Integration via Coinbase Commerce or BTCPay
- Add "Pay with Crypto" option at checkout
- Supported coins: Bitcoin, Ethereum, USDC, USDT
- Customer selects crypto, invoice generated
- Payment detected via webhook
- Auto-convert to USD for accounting
### Implementation Notes
- Crypto payments are one-time (not recurring subscriptions)
- Customer must manually pay each invoice with crypto
- Or: Hold credit balance (customer pre-pays in crypto, drawn down monthly)
### Database Schema
```sql
crypto_payments table:
id
invoice_id
user_id
provider (coinbase_commerce, btcpay)
crypto_currency (BTC, ETH, USDC)
crypto_amount
usd_amount
wallet_address (where customer sent payment)
transaction_hash (blockchain tx)
status (pending, confirmed, expired)
confirmed_at
created_at
```
---
## 35. Churn Prevention: Exit Survey + Win-Back
### Exit Survey on Cancellation
- Modal appears when customer cancels subscription
- Questions:
- "Why are you cancelling?" (multiple choice + other)
- Too expensive
- Switching to competitor
- No longer need service
- Technical issues
- Poor support
- Other (text field)
- "What could we do better?" (optional text)
- "Would you consider returning?" (Yes / Maybe / No)
### Win-Back Email Campaign
- Triggered 30 days after cancellation
- Email sequence:
- **Day 30**: "We miss you! Here's 20% off to come back"
- **Day 45**: "Customer spotlight - see what you're missing"
- **Day 60**: "Final offer: 30% off for 3 months"
- Stop sending if customer re-subscribes
### Database Schema
```sql
cancellation_surveys table:
id
user_id
subscription_id
cancellation_reason
cancellation_feedback
would_return (yes, maybe, no)
created_at
win_back_campaigns table:
id
user_id
subscription_id (cancelled subscription)
campaign_started_at
emails_sent (integer)
last_email_sent_at
status (active, completed, unsubscribed, reactivated)
```
---
## Summary
This comprehensive feature specification covers all aspects discussed during planning:
- ✅ Advanced coupon system with A/B testing
- ✅ Immediate proration for plan changes
- ✅ Stripe Smart Retries with grace periods
- ✅ Per-plan datacenter locations
- ✅ Guided customer onboarding
- ✅ Automatic loyalty rewards program
- ✅ Dedicated server waitlist system
- ✅ Custom enterprise pricing
- ✅ GDPR-compliant automated data deletion
- ✅ Built-in uptime monitoring
- ✅ Real-time dashboard (WebSockets + polling)
- ✅ Multi-channel admin alerts (Discord, Email, SMS)
- ✅ Public status page
- ✅ Full abuse management system
- ✅ Automated fraud detection
- ✅ Game server template library
- ✅ Backups included in plans (7/4/3 retention)
- ✅ 15-minute database backups with multi-region replication
- ✅ IPv4 + IPv6 dual-stack
- ✅ Sequential invoice numbering (INV-000001)
- ✅ Full team accounts with granular permissions
- ✅ Referral credit system
- ✅ Free trial periods
- ✅ Marketing chatbot
- ✅ Comprehensive financial reports
- ✅ Login history and security audit trail
- ✅ Customer choice: consolidated or separate invoices
- ✅ Unified communication timeline
- ✅ Full-control customer API with webhooks
- ✅ Custom domain support (CNAME)
- ✅ VPS self-service OS reinstall
- ✅ Additional IP address requests
- ✅ DNS integration (Cloudflare)
- ✅ Granular email preferences
- ✅ Multiple renewal reminders
- ✅ Hybrid analytics (real-time + cached)
- ✅ Multi-queue system with Laravel Horizon
- ✅ Auto-scaling for traffic spikes
- ✅ Provisioning API failure queue-and-retry
- ✅ Cryptocurrency payment support
- ✅ Exit survey and win-back campaigns
**All features documented and ready for implementation!**