Commit Graph

110 Commits

Author SHA256 Message Date
Claude Dev
9a410dc3c8 Fix impersonation routing, invoice numbers, dashboard caching, indexes, and Stripe property name
- Add impersonation stop route on account subdomain so impersonated users can exit (#11)
- Replace non-concurrency-safe invoice number generation (count+1, rand) with date+random string
- Wrap admin dashboard stats queries in Cache::remember with 5-minute TTL
- Add database indexes on invoices.status, orders.status, audit_logs.action, audit_logs.created_at
- Fix last_four to last4 matching Stripe's actual card property name

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 18:53:37 -04:00
Claude Dev
f194b60d5c Fix 5 critical issues: provisioning storage, webhook auth, password exposure, middleware, model conflict
- Store VirtFusion provisioning info in credentials column instead of non-existent provisioning_info key
- Add PayPal webhook header verification to reject unsigned requests
- Stop exposing VPS root password in flash message, use separate new_password key
- Apply ensure_not_suspended middleware to account routes
- Rename User::invoices() to billingInvoices() to avoid overriding Cashier's invoices() method

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 18:47:31 -04:00
Claude Dev
34a8ccd8c4 Fix missing platform column in admin placeOrder
Maps vps->virtfusion, dedicated->synergycp, hosting->enhance, game->pterodactyl
consistent with ProvisioningFactory routing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:47:33 -04:00
Claude Dev
ee5e1909e2 Fix missing service_type when admin places order for customer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:44:45 -04:00
Claude Dev
b83c2bcc8d Fix missing order_number when admin places order for customer
The orders table requires order_number (non-nullable, unique) but the
placeOrder method didn't set it, causing a QueryException.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:44:00 -04:00
Claude Dev
634b8916ae Set default VChip size to small for more compact badges/pills
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:39:21 -04:00
Claude Dev
56bd303254 Fix light mode contrast issues on marketing pages
Force white text inside .hero-dark-grid since its background is always
dark, and replace bg-surface-variant with the theme-aware section-alt-bg
class on the About page Values and Stats sections.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:31:42 -04:00
Claude Dev
9a12deeed3 Fix theme switcher persistence and hardcoded dark colors in SCSS
- ThemeSwitcher: save user's theme choice to localStorage and restore on mount
- Vuetify plugin: check localStorage before falling back to subdomain default
- _layouts.scss: make navbar and footer theme-aware using CSS custom properties
  (sidebar intentionally stays always-dark per design spec)
- _marketing.scss: make glass-card and hero-gradient-text theme-aware

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:24:51 -04:00
Claude Dev
65dcdebd5c Fix code review issues: flash toast dedup, sidebar CSS, pricing card colors
- Fix duplicate flash-to-toast watchers by tracking last shown flash JSON
- Replace inline sidebar margin styles with CSS class-driven approach
- Fix navbar left position to respond to sidebar collapse via CSS nesting
- Replace hardcoded white colors in PricingCard with theme-aware classes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:21:22 -04:00
Claude Dev
40c1ecc6fe Remove old Vuexy wrapper components (AppTextField, AppSelect, AppTextarea, FlashMessages, NotificationBell)
All pages now use native Vuetify components directly. Flash messages are handled
by the ToastStack component via Pinia store. Notifications use NotificationPanel.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:10:23 -04:00
Claude Dev
dd1a5d7ffc Replace AppTextField/AppSelect/AppTextarea with native Vuetify equivalents across 22 pages
Vuetify defaults already configure VTextField/VSelect/VTextarea with the correct
settings (outlined variant, comfortable density, primary color, auto hideDetails),
making the wrapper components unnecessary.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:09:15 -04:00
Claude Dev
66bb180f8f Migrate marketing pages to new design system heroes and components (#5)
- Replace gradient hero sections with HeroSection + animated SVG components
  (NetworkHero, VpsHero, DedicatedHero, WebHostingHero, GameServerHero)
- Add ScrollReveal wrappers for scroll animations on Home.vue sections
- Replace AppTextField/AppSelect/AppTextarea with VTextField/VSelect/VTextarea in Contact.vue
- Merge BattlefieldAcp content into GameServers.vue as a featured section
- Delete redundant Products.vue and BattlefieldAcp.vue pages
- Add 301 redirects in routes for /products -> / and /battlefield-acp -> /game-servers

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:06:51 -04:00
Claude Dev
b9c3382564 Replace AppTextField with VTextField in auth pages (#4)
Remove AppTextField wrapper imports from all 6 auth pages (Login, Register,
ForgotPassword, ResetPassword, ConfirmPassword, TwoFactorChallenge) and use
VTextField directly, relying on Vuetify defaults for variant/density/color.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-14 17:01:17 -04:00
Claude Dev
f861510625 Add marketing UI components: hero sections, glass card, scroll reveal, pricing card
Create 9 reusable marketing components:
- HeroSection: wrapper with dark grid background and two-column layout
- NetworkHero: animated SVG network visualization with floating nodes
- VpsHero, DedicatedHero, WebHostingHero, GameServerHero: themed variants
- GlassCard: glass morphism card for feature sections
- ScrollReveal: intersection observer wrapper for scroll animations
- PricingCard: glass morphism pricing card with features and CTA

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 16:59:23 -04:00
Claude Dev
d01ea28a8b Phase 1: Rebuild layout infrastructure with new shared components
Delete old Vuexy VerticalNav layout system (5 components + 4 SCSS files)
and replace with new modular components: AppSidebar, AppTopNavbar,
CommandPalette, NotificationPanel, ToastStack, SkeletonLoader,
EmptyState, Breadcrumbs. Rebuild all 4 layouts (Admin, Account,
Marketing, Auth) using new components. Add Pinia toast store for
flash message integration. Update navigation with cleaner groupings.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 16:55:54 -04:00
Claude Dev
34e7fb62f3 Phase 0: Replace Vuexy design system with custom EZSCALE foundation
- Install echarts, vue-echarts, @vueuse/core; remove @mdi/font
- Switch fonts from Inter/Public Sans to Plus Jakarta Sans/JetBrains Mono
- Delete all 38 @core SCSS files, replace with 6 new design token files
  (_variables, _mixins, _animations, _typography, _component-overrides, _layouts)
- Rewrite _marketing.scss with glass morphism and dark grid hero styles
- Update Vuetify theme from purple (#7367F0) to navy blue (#1d4ed8)
- Add pill-shaped buttons, tonal chips, rounded cards to Vuetify defaults
- Make default theme subdomain-aware (light for marketing, dark for app)
- Remove @core-scss and @configured-variables Vite aliases
- Fix AuthLayout and AppStepper to remove deleted @core SCSS imports

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 16:47:00 -04:00
Claude Dev
9a2a2c251d Re-crop ML analytics screenshot to show top section
Show stats cards, server health overview with slot recommendations,
and health trends chart instead of the lower tables.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 12:19:21 -05:00
Claude Dev
e3efa0f11b Add screenshot showcases to ACP marketing page
Replace 6-card feature grid with alternating image/text showcase sections
for ML Analytics, Admin Dashboard, Ban Appeal, and Server Browser features.
Cropped screenshots from the live admin panel paired with bullet-point
descriptions for each feature.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 12:10:51 -05:00
Claude Dev
6237003b46 Remove demo link from ACP marketing page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 11:52:11 -05:00
Claude Dev
466b0eadc8 Enhance ACP marketing page with real plugin details and admin features
- List all 24 ported ProCon plugins by name with descriptions
- Update ML Analytics feature with actual dashboard details (flagged cheaters,
  toxicity leaderboard, player clustering, ban predictions, session anomalies)
- Add Admin Dashboard feature card (population charts, kick analytics,
  event logger, online admins, player reports)
- Add Live Demo button linking to tbg.app.ezscale.cloud/p
- Expand "More Features" grid to 12 items with descriptions
- Update ProCon section: accurate C#/.NET description, layer server context
- Update supported games with per-game plugin counts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 11:48:48 -05:00
Claude Dev
169b06e349 Dynamic product pages + Battlefield ACP marketing page
- Web Hosting & Game Servers now pull plans from database (same pattern as VPS/Dedicated)
- Add 6 game server plans to PlanSeeder (Minecraft, Rust, ARK, Valheim, CS2, Palworld)
- Create Battlefield ACP marketing page with ProCon replacement hero, 6 feature cards,
  ML analytics, ban appeals, PunkBuster screenshots, Discord integration sections
- Add Battlefield ACP to Products dropdown navigation
- Marketing pages use SectionHeader component, fade-in animations, Vuexy design patterns

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 11:32:35 -05:00
Claude Dev
45d25d61ba Idempotent provisioning, service soft-delete, Plans page redesign, doc updates
Part A: Fix duplicate Service creation on provisioning retry
- All 4 provisioning services use Service::firstOrCreate() keyed on
  subscription_id+service_type to prevent duplicates on queue retries
- HandleSubscriptionCreated sends notification before provisioning,
  no longer re-throws on failure
- RetryProvisioningCommand simplified to reuse existing Service records

Part B: Plans/Pricing page complete redesign
- Service type tabs (VPS, Dedicated, Web Hosting, MySQL)
- Billing cycle segmented toggle (monthly/quarterly/semi-annual/annual)
- Feature icons per service type, Popular/Best Value badges
- Stock indicators, effective monthly price calculations

Part C: Admin service soft-delete/archive
- Service model uses SoftDeletes trait
- Admin can archive and restore services
- Show archived toggle on services list
- Migration adds deleted_at column

Docs: Updated TASKS.md, CLAUDE.md, PROJECT_DEVELOPMENT.md, MEMORY.md
- Phase 3 marked complete, test counts updated (252 passing)
- SupportPal references replaced with standalone ticket system
- Frontend design skill background rule added
- Closed GitHub issues #3, #6, #7, #8, #9

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 06:30:57 -05:00
Claude Dev
bf4f5f97c0 Update TASKS.md: check off provisioning retry, renewals, customer audit log
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:37:37 -05:00
Claude Dev
71927d59f9 Add audit log tab to admin customer detail page
Paginated audit log with action color coding, expandable detail rows
showing before/after JSON changes, and relative time formatting.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:37:20 -05:00
Claude Dev
dd558d5dcc Add upcoming renewals page with days-until-renewal indicators
Shows subscriptions nearing renewal with color-coded urgency chips,
auto-renew status, and quick manage links.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:37:15 -05:00
Claude Dev
edf428215f Add provisioning failure retry logic with scheduled command
Retries failed provisioning every 30 minutes with max 3 attempts,
dispatches ProvisioningFailed event when max attempts reached.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:37:09 -05:00
Claude Dev
7ea5c59f6b Update TASKS.md: check off Pterodactyl provisioning and service detail pages
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:30:31 -05:00
Claude Dev
c82ee91b9a Enhance service detail page with type-specific sections and provisioning info
Add service-type-specific detail cards (VPS, Dedicated, Game, Web Hosting),
provisioning info accessor that filters sensitive credentials, and improved
sidebar with service overview and quick actions.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:30:12 -05:00
Claude Dev
f87de9e2a4 Add Pterodactyl game server provisioning service
Implements ProvisioningServiceInterface for game servers via Pterodactyl
panel API. Supports create, suspend, unsuspend, terminate, status, and
credential retrieval. Auto-creates panel user accounts.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:30:06 -05:00
Claude Dev
c57318e2a5 Update TASKS.md: check off dashboard tickets, payment methods, analytics
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:24:58 -05:00
Claude Dev
55489d599e Enhance admin analytics with ARR, revenue trends, churn, and overdue invoices
Add Annual Recurring Revenue stat, 12-month revenue trend with progress bars,
customer growth chart, 6-month churn rate tracker with status indicators, and
overdue invoices table with days-overdue coloring.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:24:32 -05:00
Claude Dev
371ed4e6a6 Add payment methods management page
List Stripe payment methods with set-default and remove actions. Includes
delete confirmation dialog, breadcrumb navigation, and sidebar nav entry.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:24:15 -05:00
Claude Dev
cbc706d934 Add recent support tickets section to customer dashboard
Shows the 5 most recent tickets with status/priority chips and relative
timestamps. Includes empty state with Create Ticket button.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:24:09 -05:00
Claude Dev
0cdfc986b8 Update TASKS.md: check off customer edit, admin notes, credentials email, invoice PDF
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:17:39 -05:00
Claude Dev
69e0882c81 Add invoice PDF generation with dompdf
Install barryvdh/laravel-dompdf, create professional invoice Blade template
with EZSCALE branding, add download endpoints for customer billing and admin
invoice pages.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:17:34 -05:00
Claude Dev
0a6780d249 Add service credentials email notification on provisioning
Sends mail notification with login credentials when VPS, dedicated, or web
hosting services are provisioned. Wired into VirtFusion, SynergyCP, and
Enhance provisioning services.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:17:24 -05:00
Claude Dev
76c49e9ed7 Add admin customer edit, status management, and admin notes
Adds edit/update endpoints for customer management with admin notes
field, form request validation, status change audit logging, and
8 new tests (171 total, 846 assertions).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 20:09:57 -05:00
Claude Dev
1b2acbe96e Migrate navigation from horizontal navbar to Vuexy vertical sidebar
Replaces the horizontal VAppBar nav links with a proper vertical sidebar
matching the Vuexy design system: 260px fixed sidebar with collapsible
mini mode, section titles, active link highlighting, and mobile overlay.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-09 19:57:24 -05:00
Claude Dev
6869a267ea Add DemoDataSeeder with 300 customers and realistic data
Generates 300 customers with profiles, 500 subscriptions, 400 services,
800 invoices, 600 transactions, 150 orders, 200 tickets with ~700
replies, 50 coupons, and 100 audit log entries. Data spread across 12
months with realistic plan linkage and varied statuses.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:10:12 -05:00
Claude Dev
015949a7f6 Add email integration for ticket system and IMAP inbound support
Email integration: IMAP polling via webklex/php-imap (M365/Zoho/MIAB
compatible), TicketEmailProcessor with 3-strategy ticket matching
(In-Reply-To, References, subject line [EZSCALE-{id}]), signature and
quote stripping, scheduled command every 2min.

Outbound: 4 notification classes (TicketCreated, CustomerReply,
StaffReply, StatusChanged) with email threading headers via
withSymfonyMessage(). Staff replies set Reply-To: support@ezscale.cloud.

Frontend: ticket reference chips on all pages, "Via Email" badges on
email-originated replies. 12 new tests (163 total, 816 assertions).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 17:10:04 -05:00
Claude Dev
a4cf7026bc Add screenshot auth middleware, remove SupportPal references
Screenshot auth: dev-only middleware that authenticates headless Chrome
via ?_screenshot_token= query param. Auto-selects admin/customer user
by subdomain. Only active when APP_ENV=local or explicitly enabled.

SupportPal cleanup: dropped supportpal_ticket_id column, removed env
vars and Phase 7 task tracking. 7 new tests (151 total, 782 assertions).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 16:52:15 -05:00
Claude Dev
6f39c32270 Add standalone support ticket system with customer and admin interfaces
Replaces planned SupportPal integration with a built-in ticket system.
Customer side: create tickets, reply, close. Admin side: manage all
tickets with search/filters, staff replies, status updates. Includes
30 Pest tests (144 total, 775 assertions).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 16:20:12 -05:00
Claude Dev
9603803928 Add plan upgrade/downgrade, order management, impersonation, and contact form
- Plan upgrade/downgrade flow: UpgradeController with price difference
  calculations, Upgrade.vue with feature comparison and confirmation dialog
- Admin order management: Order model/migration/factory, OrderController
  with process/complete/cancel/notes, Index and Show pages with filters
- Admin impersonation: start/stop endpoints, session-based tracking,
  impersonation banner in AccountLayout, audit logging
- Contact form: ContactRequest validation, ContactController with email,
  marketing route for form submission
- FlashMessages now supports info alerts
- Inertia shared data includes impersonation state
- 114 tests passing (623 assertions)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 13:55:27 -05:00
Claude Dev
89fac519c3 Add notification system, notification bell, admin/account tests, and footer legal links
- 6 notification classes: PaymentSucceeded, PaymentFailed, SubscriptionCreated,
  SubscriptionCancelled, ServiceProvisioned, InvoiceGenerated (mail + database)
- Wire notifications to existing event listeners + new subscription listeners
- NotificationBell component in Account and Admin layouts
- NotificationController with index, markAsRead, markAllAsRead endpoints
- 62 new Pest tests: AdminPanelTest (admin CRUD) + CustomerAccountTest (account features)
- Add Legal links column to marketing footer
- 114 tests passing (623 assertions)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 13:45:10 -05:00
Claude Dev
813fde30c2 Add admin audit log viewer and system settings
Phase 5 (Admin Panel):
- Audit log viewer: searchable with action/date filters, expandable
  rows showing JSON changes, color-coded action chips, user avatars
- System settings: tabbed page (General, API Credentials, Billing,
  Notifications) with masked sensitive values, per-group save
- Settings model with get/set/getGroup/setGroup helpers
- Settings migration for key-value store with groups
- 52 tests passing, build clean

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 10:45:31 -05:00
Claude Dev
d9ec414264 Add coupon management, customer services, and update TASKS.md
Phase 5 (Admin Panel):
- Admin coupon management: full CRUD with create/edit/deactivate,
  auto-generate codes, plan restrictions multi-select, usage tracking,
  redemption history on edit page
- Add active flag migration for coupons table

Phase 4 (Customer Dashboard):
- Customer services list page with plan info and status
- Customer service detail page with network info, plan details,
  control panel links (VirtFusion/SynergyCP/Enhance), important dates
- Service status/type resolver utilities

Documentation:
- Update TASKS.md with all completed Phase 3/4/5/8 items

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 10:38:12 -05:00
Claude Dev
2061b1f3e3 Build admin panel CRUD: customers, plans, services, invoices
Phase 5 (Admin Panel):
- Customer management: searchable/filterable list, detail view with
  tabs (overview/services/billing), suspend/unsuspend actions with
  audit logging
- Plan management: full CRUD with create/edit/archive, dynamic
  feature key-value editor, service type filters, subscriber counts
- Service management: list with type/status filters, detail view
  with provisioning logs, suspend/unsuspend/terminate with
  confirmation dialogs
- Invoice management: list with status filters, detail view with
  line items and payment transactions, void invoice action
- Admin nav: added Customers, Plans, Services, Invoices links
- 52 tests passing, build clean

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 10:30:26 -05:00
Claude Dev
dc998b4d7c Add account settings page and admin analytics dashboard
Phase 4 (Customer Dashboard):
- Build tabbed account settings page (Account, Security, Billing tabs)
- Account tab: profile info, address, company fields with useForm()
- Security tab: password change, 2FA management, device sessions
- Billing tab: payment methods link, billing address, tax ID
- Create UpdateProfileRequest and UpdatePasswordRequest validators
- Expand ProfileController with update, updatePassword, updateBilling

Phase 5 (Admin Panel):
- Build rich admin analytics dashboard with 14 data points
- Stats: total customers, MRR, active services, pending invoices
- Recent subscriptions and invoices tables with customer info
- Popular plans with subscriber counts
- Revenue by service type breakdown
- Quick stats: monthly revenue, new customers, overdue accounts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 10:25:41 -05:00
Claude Dev
33e86a32a8 Add customer dashboard, provisioning services, and legal pages
Phase 3 (Provisioning):
- Create ProvisioningServiceInterface abstraction
- Implement VirtFusionService for VPS provisioning via REST API
- Implement SynergyCPService for dedicated server provisioning
- Implement EnhanceService for web hosting provisioning
- Create ProvisioningFactory for service type routing
- Add API config for VirtFusion, SynergyCP, Enhance

Phase 4 (Customer Dashboard):
- Enhance DashboardController with real data (services, subscriptions,
  invoices, pending amounts, next renewal)
- Rebuild Dashboard.vue with stats cards, active subscriptions list,
  recent invoices table, and quick action buttons

Phase 8 (Marketing):
- Add Terms of Service page with 15 sections
- Add Privacy Policy page (GDPR/CCPA aware)
- Add Acceptable Use Policy page
- Add Service Level Agreement page (99.99% uptime, credit calc)
- 52 tests passing, build clean

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 10:21:25 -05:00
Claude Dev
ec8f0272ec Migrate frontend to Vuetify/Vuexy + add real WHMCS product data
- Migrate all frontend from plain JS/Tailwind to TypeScript/Vuetify 3 (Vuexy design system)
- Replace placeholder plans with 25 real products scraped from WHMCS:
  9 VPS plans ($4.20-$30/mo), 8 dedicated servers ($44.39-$107.99/mo),
  4 web hosting plans ($2.39-$15.99/mo), 4 MySQL hosting plans ($6-$30/mo)
- Fix Pricing page: correct field mapping (service_type, price), display
  feature values instead of keys, proper price formatting
- Update all marketing pages (Home, Products, VPS, Dedicated, Web Hosting)
  with real specs, pricing, and features from production WHMCS
- Add 38 Vuexy @core SCSS override files for component styling
- Create 4 layouts (Account, Admin, Auth, Marketing) with Vuetify
- Add AppTextField/AppSelect/AppTextarea wrapper components
- Purple primary theme (#7367F0), dark mode default
- 52 tests passing, build clean

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 10:16:41 -05:00