From be3eaba2a16f3aa62c16afb722483af86a11989962b32c085b8ec00047f2919a Mon Sep 17 00:00:00 2001 From: Andrew Date: Sun, 26 Apr 2026 18:19:04 -0400 Subject: [PATCH] feat(dedicated): build summary sidebar + expanded CPU/IPv4 options MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CPU upgrade ladder (standard, R440/R540/R640/R740) now 6 tiers: - Gold 6230 (baseline, included) - Gold 6244 high-clock (16C / 3.6 GHz, +$25/mo) — for per-core licensed workloads (MS SQL / Oracle) and single-threaded compute - Gold 6248 (40C / 2.5 GHz, +$35/mo) - Gold 6230R sweet-spot (52C / 2.1 GHz, +$50/mo) — Cascade Lake Refresh of the 6230, more cores at same clock, bridges baseline and 6248R - Gold 6248R (48C / 3.0 GHz, +$75/mo) - Gold 6258R (56C / 2.7 GHz, +$145/mo) R740xd CPU ladder unchanged (6230 / 6248R / 6258R / Platinum 8280). IPv4 block options extended to /24: - /29 ($12) · /28 ($36) · /27 ($80) · /26 ($145) · /25 ($275) · /24 ($499). All blocks above /29 require ARIN justification — the group description explains the policy and each tier's label carries a "justification required" tag. Build summary sidebar replaces the bottom sticky footer on the per-chassis page. New 2-column layout (configurator left, summary right, sticky); collapses to single-column on tablet/mobile with the summary stacked above the configurator so total stays visible. The summary fixes the original "Total $468 billed monthly / includes $349 setup" wording confusion by splitting into clearly labeled sections: - RECURRING: per-line itemized breakdown (baseline + each upgrade with its actual cycle-priced cost), subtotal in /mo or /yr suffix - ONE-TIME: setup fee with non-refundable note (or strikethrough + "waived" badge when cycle is semi/annual) - TOTAL: "First invoice $X" + "Then $Y/mo recurring" framing on monthly/quarterly cycles; "Total due today" + renewal preview on semi/annual Removed: ConfiguratorFooter.vue (replaced by BuildSummary). Pinned to top via position:sticky with viewport-height clamp + internal scroll for tall configs. Order CTA + Copy share link moved into the summary card. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../database/seeders/ConfigOptionSeeder.php | 18 +- .../DedicatedConfigurator/BuildSummary.vue | 446 ++++++++++++++++++ .../ConfiguratorFooter.vue | 119 ----- .../Dedicated/DedicatedConfigurator/index.vue | 19 +- .../Pages/Marketing/DedicatedServerDetail.vue | 62 ++- 5 files changed, 513 insertions(+), 151 deletions(-) create mode 100644 website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/BuildSummary.vue delete mode 100644 website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/ConfiguratorFooter.vue diff --git a/website/database/seeders/ConfigOptionSeeder.php b/website/database/seeders/ConfigOptionSeeder.php index 86643e4..3621328 100644 --- a/website/database/seeders/ConfigOptionSeeder.php +++ b/website/database/seeders/ConfigOptionSeeder.php @@ -358,7 +358,13 @@ class ConfigOptionSeeder extends Seeder $gen14CpuOption = $this->seedRadioOption($gen14CpuUpgrade, 'CPU Upgrade', false, 1); $this->seedValues($gen14CpuOption, [ ['label' => 'Baseline: 2× Xeon Gold 6230 (40C / 2.10 GHz)', 'value' => 'gold-6230-baseline', 'monthly' => 0, 'is_default' => true], + // High-clock SKU for per-core licensed workloads (Microsoft SQL, + // Oracle, single-threaded compute). Fewer cores, higher base clock. + ['label' => 'High-clock: 2× Xeon Gold 6244 (16C / 3.60 GHz)', 'value' => 'gold-6244', 'monthly' => 25.00], ['label' => 'Upgrade: 2× Xeon Gold 6248 (40C / 2.50 GHz)', 'value' => 'gold-6248', 'monthly' => 35.00], + // Cascade Lake Refresh of the 6230 — same gen, more cores at the + // same clock. Sweet-spot mid-tier between baseline and 6248R. + ['label' => 'Mid-tier: 2× Xeon Gold 6230R (52C / 2.10 GHz)', 'value' => 'gold-6230r', 'monthly' => 50.00], ['label' => 'Upgrade: 2× Xeon Gold 6248R (48C / 3.00 GHz)', 'value' => 'gold-6248r', 'monthly' => 75.00], ['label' => 'Upgrade: 2× Xeon Gold 6258R (56C / 2.70 GHz)', 'value' => 'gold-6258r', 'monthly' => 145.00], ]); @@ -469,7 +475,7 @@ class ConfigOptionSeeder extends Seeder $gen14Ipv4 = PlanConfigGroup::updateOrCreate( ['name' => 'Dedicated 14th Gen — IPv4 Block'], [ - 'description' => 'Additional IPv4 addresses beyond the 1 included with every server.', + 'description' => 'Additional IPv4 addresses beyond the 1 included with every server. Blocks of /28 or larger require ARIN justification — we provide the template; you fill in your use case before the IPs are allocated.', 'mode' => 'preset', 'service_type' => 'dedicated', 'is_active' => true, @@ -478,11 +484,17 @@ class ConfigOptionSeeder extends Seeder ); $gen14Ipv4Option = $this->seedRadioOption($gen14Ipv4, 'IPv4 Block', false, 1); + // ARIN justification policy applies to anything above /29; the group + // description (above) tells customers about it, so we don't repeat + // it on every tier label. $this->seedValues($gen14Ipv4Option, [ ['label' => '1 included (no extra)', 'value' => '1', 'monthly' => 0, 'is_default' => true], ['label' => '/29 (5 usable)', 'value' => '5', 'monthly' => 12.00], - ['label' => '/28 (13 usable)', 'value' => '13', 'monthly' => 36.00], - ['label' => '/27 (29 usable)', 'value' => '29', 'monthly' => 80.00], + ['label' => '/28 (13 usable) — justification required', 'value' => '13', 'monthly' => 36.00], + ['label' => '/27 (29 usable) — justification required', 'value' => '29', 'monthly' => 80.00], + ['label' => '/26 (61 usable) — justification required', 'value' => '61', 'monthly' => 145.00], + ['label' => '/25 (125 usable) — justification required', 'value' => '125', 'monthly' => 275.00], + ['label' => '/24 (253 usable) — justification required', 'value' => '253', 'monthly' => 499.00], ]); $gen14Ipv4->plans()->syncWithoutDetaching($gen14AllPlans); diff --git a/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/BuildSummary.vue b/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/BuildSummary.vue new file mode 100644 index 0000000..41d82ac --- /dev/null +++ b/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/BuildSummary.vue @@ -0,0 +1,446 @@ + + + + + diff --git a/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/ConfiguratorFooter.vue b/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/ConfiguratorFooter.vue deleted file mode 100644 index d2a9bdc..0000000 --- a/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/ConfiguratorFooter.vue +++ /dev/null @@ -1,119 +0,0 @@ - - - - - diff --git a/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/index.vue b/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/index.vue index 9a63140..ea39e9e 100644 --- a/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/index.vue +++ b/website/resources/ts/Components/Marketing/Dedicated/DedicatedConfigurator/index.vue @@ -1,9 +1,8 @@