Captures the brainstorm: 8 new Dell 14th-gen chassis SKUs alongside
existing rack inventory, per-chassis configurator at
/dedicated-servers/{slug}, 5-stage post-order build tracker,
tiered setup fees waived at Semi-Annual+ cycles.
User approved design + skipped spec-review gate. Implementation
phasing in 4 commits per the spec.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds a "Built on" hardware band above the plan grid and a small
meta line on each plan card so shoppers can see what's actually
running their VPS.
Hardware band lists: Dell PowerEdge hypervisors · Intel Xeon · ECC
memory · Enterprise SSD storage · Atlanta, GA datacenter.
Per-card meta line: "Intel Xeon · ECC memory" in muted small type
under the regular spec list.
Copy is intentionally generic ("Intel Xeon", not Broadwell-EP /
Cascade Lake) to remain accurate across the current mixed pool
(R720xd Ivy Bridge being retired into the new R740xd ATL-04 next
week per infrastructure/docs/hypervisor-consolidation-r740xd-build.md).
Tighten the wording once consolidation lands.
Dropped the originally-proposed "10 Gbps inter-host" row — it's
internal cluster networking (used for live migration + shared
storage), and customers were likely to confuse it with their own
egress bandwidth.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The differentiator card and comparison row were positioning EZSCALE
as "no chatbots" — but we DO run Ezra, an AI assistant that
extends the support team. Reframed honestly: engineer-first support
where Ezra helps the team triage and respond faster, not the
other way around. That's still differentiated against tier-1
outsourced or AI-only support models the big clouds run.
Also drops in docs/integrations/savemyserver/dedicated-server-catalog.json
— 27 Dell 14th-gen products from SaveMyServer with EZSCALE baseline
config and pricing, generated by a separate scraping session at
/tmp/sms-configurator. Lives next to other vendor integration data
in docs/integrations/. Will feed the dedicated-server PlanSeeder
refresh in a follow-up task.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The old "Why Choose EZSCALE VPS?" grid was duplicating the
Included With All Plans card right below it (RAID 10, ZFS Snapshots,
VirtFusion Panel, Full Root Access appeared in both). Replaced with
6 actual differentiators that answer "why us, not Linode/Hetzner/
Vultr": real US humans, ZFS-backed reliability, predictable billing,
optional Pilot tier, 14-day money-back, owner-operated.
Other improvements bundled in this pass:
- Hero subtitle rewritten from feature dump to identity-first one-liner.
- Plans table → responsive PlanCard grid with a "Most popular" badge
on VPS-4 and a separate "Storage-focused" subgrid for stor-500/1tb.
Each card carries Order Now + Estimate-this-plan link to the
estimator (still wired to the prefillEstimator handler).
- Added a 5-row "EZSCALE vs typical big-cloud" comparison table —
honest differences only, no specific competitor names to avoid
liability.
- Added an 8-question FAQ section (provisioning time, OS list,
upgrades, refunds, DDoS roadmap, rDNS, location, migrations) using
a new reusable Faq accordion component.
- Bottom CTA copy fixed (it was still mentioning DDoS protection as
current; it's coming-soon upstream): now reads "Real humans on
support. 14-day money-back if it's not the right fit." Heading
flipped to "Ready to spin one up?" / "Talk to a Human."
New shared components: Components/Marketing/PlanCard.vue,
Components/Marketing/Faq.vue, Components/Marketing/ComparisonTable.vue.
All three are reusable for the dedicated/web/game pages later.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Windows BYOL is free and doesn't change the price, so the toggle
was UI clutter. The Included With All Plans card already
communicates the BYOL requirement (line updated to read
"Linux included; Windows supported (bring your own license)" for
clarity), and OS template selection at checkout still lets users
pick a Windows image when they're ready to deploy.
- AddOnsPanel.vue: removed the Windows License switch
- EstimatorSection.vue: removed onWindowsChange handler
- stores/estimator.ts: removed windowsLicense state, dropped from
share/checkout URL params and hydration
- ConfigOptionSeeder.php: dropped the legacy 'Windows License'
option from the VPS Add-ons group (deletes existing row)
- CheckoutController.php: removed ?windows=1 query-param handling
from buildPrefilledSelections
- VpsHosting.vue: tightened the BYOL line in the Included card
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaced --v-theme-surface-bright (auto-generated lighter tone that
clashed with the page's dark navy palette) with --v-theme-surface
across all 10 estimator components. Removed gradient backgrounds in
favor of the existing .glass-card / .section-alt-bg patterns from
resources/styles/_marketing.scss. Bumped contrast on the cycle toggle
discount badges and the EstimatorFooter card so the Copy share link
button reads clearly.
Components touched: EstimatorSection, BillingCycleToggle, WorkloadPicker,
MiniQuizDialog, RecommendedPlanCard, AddOnsPanel, IPv4Stepper,
ManagedSupportSelector, BackupTierSelector, EstimatorFooter.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>