Implements the design captured in
docs/superpowers/specs/2026-04-26-vps-hosting-estimator-design.md.
Estimator (after the hero on /vps-hosting):
- Workload picker (9 chips) recommends a plan; "Not sure" opens a
mini-quiz with a 12-app catalog and a traffic+priority follow-up.
- Recommended-plan card with "or pick another" alternates dropdown.
- Add-ons panel: IPv4 stepper (1-8, $8/extra), Windows BYOL toggle,
4-tier Managed Support radio (Self/Basic/Pro/Pilot @ $0/29/79/99),
5-tier Off-site Backup radio (None/Lite/Standard/Extended/Vault @
$0/5/12/25/59).
- Pilot tier gated to VPS-8+ via plan.features.tier; auto-fallback to
Pro on plan downgrade with snackbar warning.
- Billing cycle toggle (Monthly / Quarterly / Annual) reuses
per-cycle prices already on plan_prices and plan_config_values.
- Sticky footer with live total, "Order this configuration"
(deep-links to /checkout/{plan} with all params), and "Copy share
link" (history.replaceState debounced 300ms).
- Plans-table rows get an "Estimate →" link that pre-fills the
estimator with that plan and scrolls up.
Backend:
- PlanSeeder: each VPS plan gets features.tier (1-32) for gating.
- ConfigOptionSeeder: scope existing Server Management group to
dedicated only; add VPS Managed Support and Off-site Backup
groups with full per-cycle prices.
- routes/marketing.php /vps-hosting: pass addOns + workloadMap +
appExamples Inertia props.
- CheckoutController::show: build prefilledSelections from
?ipv4&windows&managed&backup query params; Vue page hydrates
configSelections from this prop.
Included With All Plans: rewritten to 13 accurate items with
per-line wording (10 Gbps fair-use uplink, ZFS snapshots free,
KVM virtualization, rDNS/PTR control, OOB console/VNC, 99.9%
SLA, etc.) plus a "Coming soon" badge for DDoS protection.
Tests: 10 Pest feature tests in tests/Feature/Marketing/
VpsHostingEstimatorTest.php cover the page props, both new
seeded groups, plan-tier metadata, Server Management dedicated
scope, configGroups attachment, and checkout query-param
pre-fill round-trip. All 10 pass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Design captured from brainstorming: workload-driven estimator with
plan + add-on configurator (managed support + off-site backup tiers),
URL state, share link, checkout pre-fill, and rewritten Included list.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Major additions:
- Knowledge base with categories, articles, revisions, and voting
- Enhanced ticket system: departments, SLA policies, canned responses, tags, custom fields, satisfaction ratings, internal notes
- Multi-currency support with exchange rate sync
- Shopping cart and quote system with PDF generation
- Affiliate program with referrals, commissions, and payouts
- Account credits, credit notes, and debit notes
- Staff management with granular role-based permissions
- Fraud detection and order risk assessment
- ServerHunter SEO integration
- Service lifecycle events (suspend/unsuspend/terminate)
- Service management panels for VPS, Dedicated, Hosting, and Game servers
- Plan lifecycle fields and per-customer overrides
- 30+ migrations, 17 factories, 8 feature test suites
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
README: reflect completed phases (1-5, 8-9), accurate tech stack
(Vuetify 3 not Tailwind, Passport not Sanctum, standalone tickets
not SupportPal), current codebase counts (59 migrations, 29 models,
85 pages, ~497 tests), and separate implemented vs planned features.
CLAUDE.md: reduce from 281 to 184 lines — trim derivable directory
listings, remove stale counts, cut redundant examples, update all
metrics to current state.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Includes all work from phases 6-9+ and frontend polish rounds 1 & 2:
- Login history with device trust, new device notifications, session management
- Churn prevention: cancellation surveys, winback campaigns with email sequences
- Financial reports: revenue, P&L, tax, aging, refund, subscription reports with PDF/CSV/JSON export
- Configurable checkout: plan config groups/options, build-your-own VPS
- Frontend polish: fix broken legal links, add SEO meta tags, favicon, font display=swap,
Head titles on all 14 marketing pages, mobile responsive fixes, AuthLayout legal footer,
remove false 24/7 claims, hide empty stats, correct uptime SLA to 99.9%,
GameServers notify buttons linked to /contact, 301 redirects for /terms and /privacy
- WHMCS migration scripts
- Update legal page effective dates to March 16, 2026
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Eager-load plan prices in the pricing route and add a billing cycle
toggle (monthly/quarterly/semi-annual/annual) with discount badges and
per-month equivalent display for longer cycles. CTA links now pass
the selected cycle as a query param.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Create plan_prices migration with unique(plan_id, billing_cycle)
- PlanPrice model with factory
- Plan::prices() relationship and priceForCycle() helper
- Tests for model relationships, uniqueness, cascade delete
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- EnsureUserNotSuspended: bypass for impersonation stop, also check banned
- FlashProps: add info and new_password keys
- AccountLayout: impersonation stop link uses account domain (not admin)
- withCount alias: billingInvoices as invoices_count for frontend compat
- VPS Show: add secure password dialog with copy button for reset-password
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 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>
- 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>
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>
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>
- 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>
- 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>
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>
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>
- 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>
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>
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>
- 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>
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>
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>
- 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>
- 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>
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>
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>
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>
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>
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>
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>
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>