Single-width columns of pull-out trays, sized to your 2200 mm limit, in two orientations: upright (3/column → 6 columns) or horizontal, servers on their side (7/column → 3 columns). Real fan set, open rear, 18 mm phenolic box carrying timber-mounted slides, ply trays, tGBL castors — with an exploded view and step-by-step assembly in the configurator.
Upright stacks 3 (taller, narrower); horizontal lays each tower on its side for 7/column (shorter per level, wider, steadier). Pick per row.
Every level on AOLISHENG 600 mm soft-close slides (45 kg). Draw one out fully for service.
Arctic P14 ×3 front intake, P12 ×3 on the case top, 1× P14 rear — upright they blow UP into the 45 mm gap; horizontal they face the louvred side. Animated per-fan in the browser.
No closed plenum. The rear P14 exhausts to open air; the PiKVM + cabling live in the open rear space.
Add side panels to duct the flow front-to-rear, or leave them off for maximum open airflow. Toggle in the model.
An exploded-view slider and a numbered assembly guide with sizes — see the configurator's Assembly tab.
All fit the 2200 mm limit. Horizontal is wider but shorter per level, so it doubles servers-per-column and is less slender (steadier).
| Material | Orient | N/col | W×H×D mm | Col kg | Cols | Per col | Fleet | Slender |
|---|---|---|---|---|---|---|---|---|
| Aluminium | Upright | 3 | 352×1813×713 | 124.7 | 6 | £491 | £2946 | 5.1 |
| Aluminium | Horizontal | 7 | 588×2141×713 | 232.5 | 3 | £833 | £2499 | 3.6 |
| Welded | Upright | 3 | 352×1813×693 | 127.7 | 6 | £443 | £2658 | 5.1 |
| Welded | Horizontal | 7 | 588×2141×693 | 237.5 | 3 | £744 | £2232 | 3.6 |
| Dimensional | Upright | 3 | 352×1813×761 | 115.5 | 6 | £332 | £1992 | 5.1 |
| Dimensional | Horizontal | 7 | 588×2141×761 | 217.9 | 3 | £586 | £1758 | 3.6 |
| Existing | Upright | 3 | 600×2000×600 | 107.7 | 6 | £209 | £1254 | 2.9 |
| Existing | Horizontal | 6 | 600×2000×600 | 164.7 | 3 | £406 | £1218 | 3.0 |
The racks stand in a row against the back wall, fronts (filtered intake) facing the aisle. Exhaust leaves the open rear and rises — ceiling extract hoods above that hot aisle pull it out, so hot air is removed at the ceiling while cool air is drawn across the aisle. 6 upright columns take 2.24 m of the 6 m wall; 3 horizontal columns take 1.81 m — either fits with a wide working aisle.
Cool air is pulled in the filtered front, over the boards, and pushed out by the case-top P12 ×3 (upward into the 45 mm gap when upright; through the louvred right panel when horizontal) and the rear P14 into the open rear. The rear is deliberately left open so the P14 exhausts freely and the PiKVM sits in that space. Toggle Airflow in the configurator for an animated particle flow (it runs on your GPU in the browser). A quantitative CFD pass on the RTX 5090 is possible if you want pressure/temperature numbers.
How each level mounts — wall → 25×25 timber → runner → 25×25 timber → ply on top — as a plan section and a front section, with every screw named.
Break the model apart with the exploded slider, then follow the steps. Sizes below are Aluminium · upright; the configurator shows them for the selected material and orientation.
Four constructions compared for the upright column. The interesting one is B: make the 18 mm phenolic ply the frame itself (a cabinet carcass) — the AOLISHENG side-mount slides screw straight into the 18 mm walls, so there are no uprights, no shelf rails, and no brackets at all; the level pitch drops by the rail height, which buys an extra level under 2.2 m; and the box is inherently rigid and already intake/exhaust-separated.
| Construction | Width | Levels | Weight/col | Phenolic use | Slide fixing | Verdict |
|---|---|---|---|---|---|---|
| A · Stick frame + phenolic skins (current) | 346 mm | 3 | ~16 kg frame + ~24 kg panels | uses least phenolic | shelf rails carry the slides; hole-ladder adjustability | the default — proven, adjustable |
| B · 18 mm phenolic carcass (cabinet) | 302 mm | 3 | ~46.2 kg all-in | ~3.5 m2/column | AOLISHENG screws STRAIGHT into the 18 mm wall (4.2x16) — no rails, no frame members at all | RECOMMENDED to prototype: −44 mm width, +0 level, fewest parts, rigid box |
| C · 9 mm phenolic + 25x25 softwood battens | 334 mm | 3 | ~26.4 kg | ~half the phenolic of B | slides need a doubler: 9+9 mm pad or screws into a batten row | lightest; more fitting work |
| D · 18 mm phenolic ripped into a ladder frame | 346 mm | 3 | ~like A | uses offcuts | 60 mm strips as uprights/rails; screws hold well, no warp vs SPF | good if SPF quality is poor |
The runner's 4.0×20 screws drive into the timber face; the timber's 4.0×40 screws + PVA drive into the 18 mm phenolic (or through the cabinet's steel skin). Demand is ~100 N per side; each screw holds ~700 N in shear.
The 4000D sits directly on the flat ply (its own feet give the PSU intake its gap). Three 25×25 cross-ribs run UNDER the ply with their ends screwed into the moving timbers, so the ply spans front-to-back between tied supports and the load reaches the rails. The 5.5 mm ply first chosen was at 93 % of the L/360 limit under a 20 kg case's feet (point loads), so the tray is 9 mm: 0.13 mm under a VDI foot vs 0.61 mm allowed, for 3.5 mm of pitch and no level lost. Options and the two I got wrong (span 190 mm, limit 0.53 mm):
| Option | Deflection | Pitch | Note |
|---|---|---|---|
| Bare 9 mm ply | 0.06 mm | +0 mm pitch | fine upright; sags on the wide horizontal span |
| Ribs ON TOP (old design) | 0.1 mm | +20 mm pitch | REMOVED — leftover clutter; stole a horizontal level |
| Lengthwise centre rib, ends FLOATING (my error) | 0.06 mm | +0 mm | WRONG — no load path under uniform load; the rib just rides along (user catch) |
| 3 cross-ribs UNDER the ply, ends screwed to the moving timbers (chosen) | 0.23 mm | +0 mm | real path: ply → rib → timber → rail; hidden in the rail band |
| Ply screwed to the UNDERSIDE of the 25x25s | 0.0 mm | -5.5 mm pitch | case rides the timber top edges - load bears straight into the rails, zero ply bending; ply becomes a dust floor + U-channel stiffener. Same levels/column; loading is less forgiving (case must land on two 25 mm rails) |
| Clearance | Value | Why |
|---|---|---|
| Case side → upright (each side) | 18 mm | slide 13 + gap 6; door mesh clears the front |
| Top exhaust gap (case → shelf above) | 45 mm | the case-top P12 ×3 blow UP into this gap, out the open rear |
| Open rear space (case back → frame) | 175 mm | rear P14 exhaust + the tray tail (PiKVM rides it) — REAR STAYS OPEN |
| Tray pull-out travel | 600 mm | clears the 453 mm case by 147 mm |
| Front clearance needed (aisle) | 600 mm | keep clear in front of every column |
| Floor → first tray | 145 mm | castor 100 + the rail band the ply rests on |
| Level pitch (server to server) | 565 mm | tower standing |
| Rear airflow clearance | ≥ 150 mm | keep the rear open so the P14 can exhaust freely |
Black, waterproof, structural — the sides, top and bottom carry every level; trays are 9 mm ply on 25×25 timbers (0.13 mm under a case foot, limit 0.61 mm).
Bolt-on, 2 braked, rubbered/silent, no floor marks. 600 kg/set — huge margin over a ~124 kg column.
Level heights are wherever you screw the wall timbers — the 18 mm phenolic (or the cabinet skin, pre-drilled) takes screws at any line. Unscrew, move, pre-drill, re-drive.
| Joint | Fastener | Note |
|---|---|---|
| Rails → uprights | 5.0 × 70 mm Torx (T25) wood screw, 2/end + PVA | structural; 3 mm pilot |
| Phenolic panels → frame | 5.0 × 40 mm Torx (T25), pre-drill + countersink | phenolic must be pre-drilled |
| Wall timber → 18 mm wall | 4.0×40 Torx + PVA, 4 per timber | pre-drill 3 mm |
| Rail → wall timber | 4.0×20, 6 per outer member | straight into the timber face |
| Moving timber → rail inner member | 4.0×16 through the member holes, 6 each | |
| Ply tray → moving timbers | rests ON TOP; 4.0×30 down through the ply | |
| Tray height adjust | unscrew packer+slide, move, re-drive | the phenolic wall takes screws anywhere |
| Castors → base | M8/M10 coach bolt + nut (supplied with tGBL) | through the 2×3 base |
| Joint | Fastener | Note |
|---|---|---|
| Frame joints | M8 button-head + drop-in T-nut | 2 per corner bracket |
| Wall timber → 18 mm wall | 4.0×40 Torx + PVA, 4 per timber | pre-drill 3 mm |
| Rail → wall timber | 4.0×20, 6 per outer member | straight into the timber face |
| Moving timber → rail inner member | 4.0×16 through the member holes, 6 each | |
| Ply tray → moving timbers | rests ON TOP; 4.0×30 down through the ply | |
| Tray height adjust | unscrew packer+slide, move, re-drive | the phenolic wall takes screws anywhere |
| Castors → base | M10 bolt + nyloc (supplied with tGBL) | through the base rail |
Demciflex-style: a laser-cut 2 mm aluminium/ABS frame holding washable ~150 µm PET mesh, magnet-held to steel washers around the front. Tool-less, lift off, rinse. ~0.3 kg/level, lowest pressure drop.
1 mm perforated/expanded aluminium in a light frame, piano-hinged with a magnetic catch, full height, replaceable media behind. Sturdiest. ~0.9 kg.
Washable nylon range-hood mesh in a PETG-printed frame, twist-lock or magnet mount. Cheapest, reprintable. ~0.25 kg/level.
Coarse aluminium mesh in front of fine electrostatic media for dusty rooms — keep >50% open area so the P14s aren't choked.
| W×H×D | 352 × 1813 × 713 mm |
| Servers/col | 3 |
| Pitch | 565 mm |
| Columns for 16 | 6 (18) |
| Loaded | 124.7 kg |
| Tip SF (anti-tip) | 7.79 |
| Slenderness | 5.1 |
| Floor | 497 kg/m² |
| Item | Qty | Unit | £ |
|---|---|---|---|
| 4040 aluminium T-slot profile | 7 | × 3 m stock | £155 |
| Inside corner bracket, 4040 | 16 | pcs | £21 |
| M8 button-head bolt + drop-in T-nut | 32 | sets | £11 |
| Profile end caps | 4 | pcs | £2 |
| AOLISHENG 600 mm slides, 45 kg/pair, soft-close | 3 | pairs | £144 |
| 9 mm plywood tray (600 × 240 mm, full slide length) | 3 | trays | £12 |
| 25×25 wall timbers (your stock) — screwed into the 18 mm wall | 6 | strips | £3 |
| Rail → wall-timber screws 4.0×20 | 36 | pcs | £2 |
| 25×25 moving timbers — screwed to the rail inner members | 6 | strips | £3 |
| Ply → moving-timber screws 4.0×30 (down through the tray) | 24 | pcs | £1 |
| 25×25 cross-ribs under the ply — ends screwed into the moving timbers | 9 | ribs | £4 |
| 18 mm phenolic ply — 2 sides + top + bottom | 4 | panels | £46 |
| Phenolic fixings (5.0×40 + cups) | 28 | pcs | £3 |
| Mesh pre-filter door — frame + washable mesh + magnets | 1 | door | £28 |
| tGBL 100 mm bolt-on castor, 150 kg ea., 2 braked | 1 | pack of 4 | £32 |
| Front anti-tip feet + fixings | 2 | pcs | £10 |
| PiKVM mount bracket + cable service loop | 3 | sets | £9 |
| EPDM anti-vibration / gasket strip | 1 | roll | £5 |
| W×H×D | 588 × 2141 × 713 mm |
| Servers/col | 7 |
| Pitch | 289 mm |
| Columns for 16 | 3 (21) |
| Loaded | 232.5 kg |
| Tip SF (anti-tip) | 9.38 |
| Slenderness | 3.6 |
| Floor | 555 kg/m² |
| Item | Qty | Unit | £ |
|---|---|---|---|
| 4040 aluminium T-slot profile | 11 | × 3 m stock | £259 |
| Inside corner bracket, 4040 | 16 | pcs | £21 |
| M8 button-head bolt + drop-in T-nut | 32 | sets | £11 |
| Profile end caps | 4 | pcs | £2 |
| AOLISHENG 600 mm slides, 45 kg/pair, soft-close | 7 | pairs | £336 |
| 9 mm plywood tray (600 × 476 mm, full slide length) | 7 | trays | £28 |
| 25×25 wall timbers (your stock) — screwed into the 18 mm wall | 14 | strips | £7 |
| Rail → wall-timber screws 4.0×20 | 84 | pcs | £4 |
| 25×25 moving timbers — screwed to the rail inner members | 14 | strips | £7 |
| Ply → moving-timber screws 4.0×30 (down through the tray) | 56 | pcs | £3 |
| 25×25 cross-ribs under the ply — ends screwed into the moving timbers | 21 | ribs | £10 |
| 18 mm phenolic ply — 2 sides + top + bottom | 4 | panels | £46 |
| Phenolic fixings (5.0×40 + cups) | 28 | pcs | £3 |
| Mesh pre-filter door — frame + washable mesh + magnets | 1 | door | £28 |
| tGBL 100 mm bolt-on castor, 150 kg ea., 2 braked | 1 | pack of 4 | £32 |
| Front anti-tip feet + fixings | 2 | pcs | £10 |
| PiKVM mount bracket + cable service loop | 7 | sets | £21 |
| EPDM anti-vibration / gasket strip | 1 | roll | £5 |
| W×H×D | 352 × 1813 × 693 mm |
| Servers/col | 3 |
| Pitch | 565 mm |
| Columns for 16 | 6 (18) |
| Loaded | 127.7 kg |
| Tip SF (anti-tip) | 7.83 |
| Slenderness | 5.1 |
| Floor | 524 kg/m² |
| Item | Qty | Unit | £ |
|---|---|---|---|
| 30×30×2 mild-steel square tube | 4 | × 6 m stock | £93 |
| MIG wire + shielding gas + cutting discs | 1 | lot | £30 |
| Etch primer + enamel paint | 1 | lot | £18 |
| AOLISHENG 600 mm slides, 45 kg/pair, soft-close | 3 | pairs | £144 |
| 9 mm plywood tray (600 × 240 mm, full slide length) | 3 | trays | £12 |
| 25×25 wall timbers (your stock) — screwed into the 18 mm wall | 6 | strips | £3 |
| Rail → wall-timber screws 4.0×20 | 36 | pcs | £2 |
| 25×25 moving timbers — screwed to the rail inner members | 6 | strips | £3 |
| Ply → moving-timber screws 4.0×30 (down through the tray) | 24 | pcs | £1 |
| 25×25 cross-ribs under the ply — ends screwed into the moving timbers | 9 | ribs | £4 |
| 18 mm phenolic ply — 2 sides + top + bottom | 4 | panels | £46 |
| Phenolic fixings (5.0×40 + cups) | 28 | pcs | £3 |
| Mesh pre-filter door — frame + washable mesh + magnets | 1 | door | £28 |
| tGBL 100 mm bolt-on castor, 150 kg ea., 2 braked | 1 | pack of 4 | £32 |
| Front anti-tip feet + fixings | 2 | pcs | £10 |
| PiKVM mount bracket + cable service loop | 3 | sets | £9 |
| EPDM anti-vibration / gasket strip | 1 | roll | £5 |
| W×H×D | 588 × 2141 × 693 mm |
| Servers/col | 7 |
| Pitch | 289 mm |
| Columns for 16 | 3 (21) |
| Loaded | 237.5 kg |
| Tip SF (anti-tip) | 9.4 |
| Slenderness | 3.6 |
| Floor | 583 kg/m² |
| Item | Qty | Unit | £ |
|---|---|---|---|
| 30×30×2 mild-steel square tube | 6 | × 6 m stock | £156 |
| MIG wire + shielding gas + cutting discs | 1 | lot | £30 |
| Etch primer + enamel paint | 1 | lot | £18 |
| AOLISHENG 600 mm slides, 45 kg/pair, soft-close | 7 | pairs | £336 |
| 9 mm plywood tray (600 × 476 mm, full slide length) | 7 | trays | £28 |
| 25×25 wall timbers (your stock) — screwed into the 18 mm wall | 14 | strips | £7 |
| Rail → wall-timber screws 4.0×20 | 84 | pcs | £4 |
| 25×25 moving timbers — screwed to the rail inner members | 14 | strips | £7 |
| Ply → moving-timber screws 4.0×30 (down through the tray) | 56 | pcs | £3 |
| 25×25 cross-ribs under the ply — ends screwed into the moving timbers | 21 | ribs | £10 |
| 18 mm phenolic ply — 2 sides + top + bottom | 4 | panels | £46 |
| Phenolic fixings (5.0×40 + cups) | 28 | pcs | £3 |
| Mesh pre-filter door — frame + washable mesh + magnets | 1 | door | £28 |
| tGBL 100 mm bolt-on castor, 150 kg ea., 2 braked | 1 | pack of 4 | £32 |
| Front anti-tip feet + fixings | 2 | pcs | £10 |
| PiKVM mount bracket + cable service loop | 7 | sets | £21 |
| EPDM anti-vibration / gasket strip | 1 | roll | £5 |
| W×H×D | 352 × 1813 × 761 mm |
| Servers/col | 3 |
| Pitch | 565 mm |
| Columns for 16 | 6 (18) |
| Loaded | 115.5 kg |
| Tip SF (anti-tip) | 7.53 |
| Slenderness | 5.1 |
| Floor | 431 kg/m² |
| Item | Qty | Unit | £ |
|---|---|---|---|
| 2×3 SPF timber (uprights + rails) | 8 | × 2.44 m stock | £22 |
| Torx wood screw 5.0×70 mm (T25) — rails | 16 | pcs | £2 |
| PVA wood glue | 1 | bottle | £6 |
| AOLISHENG 600 mm slides, 45 kg/pair, soft-close | 3 | pairs | £144 |
| 9 mm plywood tray (600 × 240 mm, full slide length) | 3 | trays | £12 |
| 25×25 wall timbers (your stock) — screwed into the 18 mm wall | 6 | strips | £3 |
| Rail → wall-timber screws 4.0×20 | 36 | pcs | £2 |
| 25×25 moving timbers — screwed to the rail inner members | 6 | strips | £3 |
| Ply → moving-timber screws 4.0×30 (down through the tray) | 24 | pcs | £1 |
| 25×25 cross-ribs under the ply — ends screwed into the moving timbers | 9 | ribs | £4 |
| 18 mm phenolic ply — 2 sides + top + bottom | 4 | panels | £46 |
| Phenolic fixings (5.0×40 + cups) | 28 | pcs | £3 |
| Mesh pre-filter door — frame + washable mesh + magnets | 1 | door | £28 |
| tGBL 100 mm bolt-on castor, 150 kg ea., 2 braked | 1 | pack of 4 | £32 |
| Front anti-tip feet + fixings | 2 | pcs | £10 |
| PiKVM mount bracket + cable service loop | 3 | sets | £9 |
| EPDM anti-vibration / gasket strip | 1 | roll | £5 |
| W×H×D | 588 × 2141 × 761 mm |
| Servers/col | 7 |
| Pitch | 289 mm |
| Columns for 16 | 3 (21) |
| Loaded | 217.9 kg |
| Tip SF (anti-tip) | 9.17 |
| Slenderness | 3.6 |
| Floor | 487 kg/m² |
| Item | Qty | Unit | £ |
|---|---|---|---|
| 2×3 SPF timber (uprights + rails) | 13 | × 2.44 m stock | £38 |
| Torx wood screw 5.0×70 mm (T25) — rails | 16 | pcs | £2 |
| PVA wood glue | 1 | bottle | £6 |
| AOLISHENG 600 mm slides, 45 kg/pair, soft-close | 7 | pairs | £336 |
| 9 mm plywood tray (600 × 476 mm, full slide length) | 7 | trays | £28 |
| 25×25 wall timbers (your stock) — screwed into the 18 mm wall | 14 | strips | £7 |
| Rail → wall-timber screws 4.0×20 | 84 | pcs | £4 |
| 25×25 moving timbers — screwed to the rail inner members | 14 | strips | £7 |
| Ply → moving-timber screws 4.0×30 (down through the tray) | 56 | pcs | £3 |
| 25×25 cross-ribs under the ply — ends screwed into the moving timbers | 21 | ribs | £10 |
| 18 mm phenolic ply — 2 sides + top + bottom | 4 | panels | £46 |
| Phenolic fixings (5.0×40 + cups) | 28 | pcs | £3 |
| Mesh pre-filter door — frame + washable mesh + magnets | 1 | door | £28 |
| tGBL 100 mm bolt-on castor, 150 kg ea., 2 braked | 1 | pack of 4 | £32 |
| Front anti-tip feet + fixings | 2 | pcs | £10 |
| PiKVM mount bracket + cable service loop | 7 | sets | £21 |
| EPDM anti-vibration / gasket strip | 1 | roll | £5 |
| W×H×D | 600 × 2000 × 600 mm |
| Servers/col | 3 |
| Pitch | 565 mm |
| Columns for 16 | 6 (18) |
| Loaded | 107.7 kg |
| Tip SF (anti-tip) | 6.11 |
| Slenderness | 2.9 |
| Floor | 299 kg/m² |
| Item | Qty | Unit | £ |
|---|---|---|---|
| Existing 19-inch cabinet (600 w × 600 d, 42U) — OWNED | 1 | cabinet | £0 |
| Mesh front door + vented rear door (only if the cabinet's are solid/glass) | 1 | set | £0 |
| PU adhesive + 4.5 mm drill for the side-panel holes | 1 | lot | £8 |
| AOLISHENG 600 mm slides, 45 kg/pair, soft-close | 3 | pairs | £144 |
| 9 mm plywood tray (600 × 474 mm, full slide length) | 3 | trays | £12 |
| 25×25 wall timbers (your stock) — screwed into the 18 mm wall | 6 | strips | £3 |
| Rail → wall-timber screws 4.0×20 | 36 | pcs | £2 |
| 25×25 moving timbers — screwed to the rail inner members | 6 | strips | £3 |
| Ply → moving-timber screws 4.0×30 (down through the tray) | 24 | pcs | £1 |
| 25×25 cross-ribs under the ply — ends screwed into the moving timbers | 9 | ribs | £4 |
| Cabinet steel sides carry the timbers — no phenolic | 0 | panels | £0 |
| Right-angle HDMI + USB adapters for the PiKVMs (92 mm rear void) | 6 | pcs | £18 |
| PiKVM mount bracket + cable service loop | 3 | sets | £9 |
| EPDM anti-vibration / gasket strip | 1 | roll | £5 |
| W×H×D | 600 × 2000 × 600 mm |
| Servers/col | 6 |
| Pitch | 289 mm |
| Columns for 16 | 3 (18) |
| Loaded | 164.7 kg |
| Tip SF (anti-tip) | 9.28 |
| Slenderness | 3.0 |
| Floor | 458 kg/m² |
| Item | Qty | Unit | £ |
|---|---|---|---|
| Existing 19-inch cabinet (600 w × 600 d, 42U) — OWNED | 1 | cabinet | £0 |
| Mesh front door + vented rear door (only if the cabinet's are solid/glass) | 1 | set | £0 |
| PU adhesive + 4.5 mm drill for the side-panel holes | 1 | lot | £8 |
| AOLISHENG 600 mm slides, 45 kg/pair, soft-close | 6 | pairs | £288 |
| 9 mm plywood tray (600 × 474 mm, full slide length) | 6 | trays | £24 |
| 25×25 wall timbers (your stock) — screwed into the 18 mm wall | 12 | strips | £6 |
| Rail → wall-timber screws 4.0×20 | 72 | pcs | £4 |
| 25×25 moving timbers — screwed to the rail inner members | 12 | strips | £6 |
| Ply → moving-timber screws 4.0×30 (down through the tray) | 48 | pcs | £2 |
| 25×25 cross-ribs under the ply — ends screwed into the moving timbers | 18 | ribs | £9 |
| Cabinet steel sides carry the timbers — no phenolic | 0 | panels | £0 |
| Right-angle HDMI + USB adapters for the PiKVMs (92 mm rear void) | 12 | pcs | £36 |
| PiKVM mount bracket + cable service loop | 6 | sets | £18 |
| EPDM anti-vibration / gasket strip | 1 | roll | £5 |
From the wall inward, each level is: 18 mm phenolic wall (the structure; the steel side of your cabinet in the cabinet variant) → 25×25 timber screwed into it → AOLISHENG 600 mm runner, outer member screwed onto the timber's face → a second 25×25 timber screwed to the runner's moving side → the ply tray rests on top of it and screws down → three 25×25 cross-ribs under the ply, ends screwed into the moving timbers → the 4000D sits directly on the ply, PiKVM on the tray tail. Every screw drives into timber; the tray drops on from above.
What moves when you pull: the moving timbers, ply, cross-ribs, the server with all seven of its fans, and the PiKVM — as one assembly, 600 mm out on soft-close full-extension runners. What stays: the frame, phenolic box, wall timbers, runner outer members, door (it auto-fades in the 3D when a tray moves) and castors.
Demand is tiny (~98 N per side — half the heaviest server), so every option "holds"; the comparison is about load path, height cost and effort:
| Option | Load path | Capacity/side | Pitch cost | Levels/col | Verdict |
|---|---|---|---|---|---|
| A · rev-K cross-rail frame | screws+brackets into rails | 4200 N | +40 mm | 3 | rejected — wastes a rail height every level |
| B · laminated ply packer, tray hung beside the rail | screw shear into 18 mm phenolic | 4200 N | +0 mm | 3 | works; laminating labour, fiddly drawer-style tray |
| C · timber sandwich, ply ON TOP (chosen — user design) | wall→timber→rail→timber; ply RESTS on the moving timber | 37500 N | +42 mm | 3 | every screw into timber, tray drops on from above — and with the under-ply stiffener it keeps 7/col horizontal |
| D · timbers + full 18 mm deck | deck in bearing on battens | 37500 N | +43 mm | 3 | stiffest deck but redundant and heaviest |
Chosen: C — direct bearing on your 25×25 stock, no laminating, and the upper batten doubles as a wall stiffener. D (a full 18 mm deck) is structurally redundant beneath a slide-borne tray and costs 43 mm of pitch.
Path-traced from the exported geometry (Blender 4.5 LTS, Cycles/OptiX, 192 samples, denoised) — the same numbers as the drawings, not the browser preview. Left: front-left with the top tray fully out (door hidden). Right: rear-right, showing the louvred exhaust wall in horizontal lay and the open rear.
















Generated from the same parametric model, per variant: a dimensioned DXF of the panels and trays (side panels with level lines, timber screw holes and louvre cut-outs; top/base with castor bolt holes; tray ply with rib lines and screw holes), a DXF of the front/side elevations, an OpenSCAD file (parametric, with a pull variable), an OBJ with named parts, an STL, and a STEP (AP214, coloured, one named solid per part) built with CadQuery/OpenCASCADE in a Python 3.12 environment — opens in FreeCAD, Fusion, SolidWorks or Onshape.
| Variant | STEP | Panels + trays | Elevations | OpenSCAD | OBJ | STL |
|---|---|---|---|---|---|---|
| extrusion-upright | <a href="cad/extrusion-upright.step">STEP</a> | <a href="cad/extrusion-upright-panels.dxf">DXF</a> | <a href="cad/extrusion-upright-elevations.dxf">DXF</a> | <a href="cad/extrusion-upright.scad">SCAD</a> | <a href="cad/extrusion-upright.obj">OBJ</a> | <a href="cad/extrusion-upright.stl">STL</a> |
| extrusion-horizontal | <a href="cad/extrusion-horizontal.step">STEP</a> | <a href="cad/extrusion-horizontal-panels.dxf">DXF</a> | <a href="cad/extrusion-horizontal-elevations.dxf">DXF</a> | <a href="cad/extrusion-horizontal.scad">SCAD</a> | <a href="cad/extrusion-horizontal.obj">OBJ</a> | <a href="cad/extrusion-horizontal.stl">STL</a> |
| steel-upright | <a href="cad/steel-upright.step">STEP</a> | <a href="cad/steel-upright-panels.dxf">DXF</a> | <a href="cad/steel-upright-elevations.dxf">DXF</a> | <a href="cad/steel-upright.scad">SCAD</a> | <a href="cad/steel-upright.obj">OBJ</a> | <a href="cad/steel-upright.stl">STL</a> |
| steel-horizontal | <a href="cad/steel-horizontal.step">STEP</a> | <a href="cad/steel-horizontal-panels.dxf">DXF</a> | <a href="cad/steel-horizontal-elevations.dxf">DXF</a> | <a href="cad/steel-horizontal.scad">SCAD</a> | <a href="cad/steel-horizontal.obj">OBJ</a> | <a href="cad/steel-horizontal.stl">STL</a> |
| wood-upright | <a href="cad/wood-upright.step">STEP</a> | <a href="cad/wood-upright-panels.dxf">DXF</a> | <a href="cad/wood-upright-elevations.dxf">DXF</a> | <a href="cad/wood-upright.scad">SCAD</a> | <a href="cad/wood-upright.obj">OBJ</a> | <a href="cad/wood-upright.stl">STL</a> |
| wood-horizontal | <a href="cad/wood-horizontal.step">STEP</a> | <a href="cad/wood-horizontal-panels.dxf">DXF</a> | <a href="cad/wood-horizontal-elevations.dxf">DXF</a> | <a href="cad/wood-horizontal.scad">SCAD</a> | <a href="cad/wood-horizontal.obj">OBJ</a> | <a href="cad/wood-horizontal.stl">STL</a> |
| cabinet-upright | <a href="cad/cabinet-upright.step">STEP</a> | <a href="cad/cabinet-upright-panels.dxf">DXF</a> | <a href="cad/cabinet-upright-elevations.dxf">DXF</a> | <a href="cad/cabinet-upright.scad">SCAD</a> | <a href="cad/cabinet-upright.obj">OBJ</a> | <a href="cad/cabinet-upright.stl">STL</a> |
| cabinet-horizontal | <a href="cad/cabinet-horizontal.step">STEP</a> | <a href="cad/cabinet-horizontal-panels.dxf">DXF</a> | <a href="cad/cabinet-horizontal-elevations.dxf">DXF</a> | <a href="cad/cabinet-horizontal.scad">SCAD</a> | <a href="cad/cabinet-horizontal.obj">OBJ</a> | <a href="cad/cabinet-horizontal.stl">STL</a> |
The deployed app is exercised end-to-end by a Selenium suite running headless Chromium on this UAT box: it walks orientations, materials, tabs, airflow, exploded view and tray pull-out, asserts a clean console, and photographs each state. Latest run: APP_OK · 0 console errors · 12 states. Full-size shots: /shots/ (also archived in the repo under docs/screenshots/).
Everything the model assumes that must be checked on real hardware before cutting or ordering — each maps to an open item in BUGS.md: