feat(dedicated): build summary sidebar + expanded CPU/IPv4 options

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) <noreply@anthropic.com>
This commit is contained in:
2026-04-26 18:19:04 -04:00
parent 017b8b54c1
commit be3eaba2a1
5 changed files with 513 additions and 151 deletions

View File

@@ -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);