diff --git a/packages/dashboard/index.html b/packages/dashboard/index.html
index af701b0..7ca58b4 100644
--- a/packages/dashboard/index.html
+++ b/packages/dashboard/index.html
@@ -3900,8 +3900,10 @@ async function openSwitchDetail(id) {
['Layer', s.layer], ['ASIC', (s.asic_vendor || '') + ' ' + (s.asic_model || '')],
['Forwarding Rate', s.forwarding_rate_mpps ? s.forwarding_rate_mpps + ' Mpps' : null],
['Rack Units', s.rack_units ? s.rack_units + 'U' : null],
+ ['Typical Power', s.typical_power_w ? s.typical_power_w + 'W' : null],
['Max Power', s.max_power_w ? s.max_power_w + 'W' : null],
- ['PoE', s.poe_support !== 'None' ? s.poe_support : null],
+ ['Weight', s.weight_kg ? s.weight_kg + ' kg' : null],
+ ['PoE', s.poe_support && s.poe_support !== 'None' ? s.poe_support : null],
['Status', s.lifecycle_status],
];
for (var i = 0; i < specs.length; i++) {
@@ -3909,6 +3911,12 @@ async function openSwitchDetail(id) {
h += '
' + esc(specs[i][0]) + '' + esc(specs[i][1]) + '
';
}
}
+ // Certifications
+ if (s.certifications && s.certifications.length > 0) {
+ h += 'Certifications'
+ + s.certifications.map(function(c) { return '' + esc(c) + ''; }).join('')
+ + '
';
+ }
h += 'Features
';
var features = [];
diff --git a/sql/040-switch-facts-seed.sql b/sql/040-switch-facts-seed.sql
new file mode 100644
index 0000000..34a1ad3
--- /dev/null
+++ b/sql/040-switch-facts-seed.sql
@@ -0,0 +1,123 @@
+-- TIP: Migration 040 — Switch Physical Facts Seed
+-- Populates rack_units, typical_power_w, max_power_w, weight_kg, certifications
+-- for the 24 initial seeded switches.
+
+-- ─── Cisco Nexus 9300 / 9500 / 9200 ────────────────────────────────────────
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 340, max_power_w = 400, weight_kg = 16.8,
+ certifications = ARRAY['CE','FCC','RoHS','NEBS L3','UL']
+WHERE model = 'N9K-C9364C';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 550, max_power_w = 650, weight_kg = 18.2,
+ certifications = ARRAY['CE','FCC','RoHS','NEBS L3','UL']
+WHERE model = 'N9K-C93600CD-GX';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 410, max_power_w = 500, weight_kg = 16.5,
+ certifications = ARRAY['CE','FCC','RoHS','NEBS L3','UL']
+WHERE model = 'N9K-C9316D-GX';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 650, max_power_w = 800, weight_kg = 17.2,
+ certifications = ARRAY['CE','FCC','RoHS','NEBS L3','UL']
+WHERE model = 'N9K-C9332D-H2R';
+
+UPDATE switches SET
+ rack_units = 7, typical_power_w = 850, max_power_w = 1400, weight_kg = 41.0,
+ certifications = ARRAY['CE','FCC','RoHS','NEBS L3','UL']
+WHERE model = 'N9K-C9508';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 480, max_power_w = 600, weight_kg = 18.0,
+ certifications = ARRAY['CE','FCC','RoHS','NEBS L3','UL']
+WHERE model = 'N9K-C9364D-GX2A';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 310, max_power_w = 380, weight_kg = 7.9,
+ certifications = ARRAY['CE','FCC','RoHS','UL']
+WHERE model = 'N9K-C9232C';
+
+-- ─── Arista 7000 series ─────────────────────────────────────────────────────
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 480, max_power_w = 600, weight_kg = 20.1,
+ certifications = ARRAY['CE','FCC','RoHS','UL']
+WHERE model = '7060CX2-32S';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 510, max_power_w = 640, weight_kg = 21.5,
+ certifications = ARRAY['CE','FCC','RoHS','UL']
+WHERE model = '7060DX4-32';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 720, max_power_w = 900, weight_kg = 22.8,
+ certifications = ARRAY['CE','FCC','RoHS','UL']
+WHERE model = '7800R3-36P-LINE';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 650, max_power_w = 800, weight_kg = 23.0,
+ certifications = ARRAY['CE','FCC','RoHS','UL']
+WHERE model = '7060X6-64PE';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 450, max_power_w = 560, weight_kg = 19.5,
+ certifications = ARRAY['CE','FCC','RoHS','UL']
+WHERE model = '7050CX3-32S';
+
+-- ─── Juniper QFX / EX ───────────────────────────────────────────────────────
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 380, max_power_w = 480, weight_kg = 12.7,
+ certifications = ARRAY['CE','FCC','RoHS','NEBS','UL']
+WHERE model = 'QFX5130-32CD';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 420, max_power_w = 520, weight_kg = 13.5,
+ certifications = ARRAY['CE','FCC','RoHS','NEBS','UL']
+WHERE model = 'QFX5200-32C';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 280, max_power_w = 350, weight_kg = 10.2,
+ certifications = ARRAY['CE','FCC','RoHS','NEBS','UL']
+WHERE model = 'EX4650-48Y';
+
+-- ─── NVIDIA Spectrum ────────────────────────────────────────────────────────
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 530, max_power_w = 660, weight_kg = 17.3,
+ certifications = ARRAY['CE','FCC','RoHS','UL']
+WHERE model = 'SN5600';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 600, max_power_w = 750, weight_kg = 18.6,
+ certifications = ARRAY['CE','FCC','RoHS','UL']
+WHERE model = 'SN4700';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 290, max_power_w = 360, weight_kg = 14.0,
+ certifications = ARRAY['CE','FCC','RoHS','UL']
+WHERE model = 'SN2010M';
+
+-- ─── Edgecore / Celestica / Asterfusion ─────────────────────────────────────
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 420, max_power_w = 520, weight_kg = 14.8,
+ certifications = ARRAY['CE','FCC','RoHS']
+WHERE model = 'AS7726-32X';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 500, max_power_w = 620, weight_kg = 15.5,
+ certifications = ARRAY['CE','FCC','RoHS']
+WHERE model = 'AS9516-32D';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 450, max_power_w = 560, weight_kg = 15.0,
+ certifications = ARRAY['CE','FCC','RoHS']
+WHERE model = 'DCS810';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 490, max_power_w = 600, weight_kg = 14.9,
+ certifications = ARRAY['CE','FCC','RoHS']
+WHERE model = 'CX308P-48YN';
+
+UPDATE switches SET
+ rack_units = 1, typical_power_w = 520, max_power_w = 640, weight_kg = 16.2,
+ certifications = ARRAY['CE','FCC','RoHS']
+WHERE model = 'CX564P';