Front drawings. A cutsheet item can pick a Front drawing (new chassis column, added on first use):
UniFi NVR Pro: a real faceplate (UNVRPRO in faceplates.js) built from the same parts as the UDM Pro, laid out from the CC0 NetBox devicetype-library image. UniFi Network doesn't report the NVR, so its ports are drawn unlinked.
UniFi Patch Panel Blank 24 (UACC-Rack-Panel-Patch-Blank-24): drawn from the NetBox image: grey steel face, darker ears with oval holes, 24 keystone openings with the support bar, and a cable slot at each end. Each port with a documented cable gets a keystone jack. Cutsheet marks, port labels and run highlighting all work.
Sliger CX4712 4U: two 5.25" blanks over 10 numbered bays, with an I/O strip. Layout from driveAtlas.
Rosewill RSV-L4500U 4U: perforated door with a latch over the 3-fan wall, D-handles, and a key lock.
Generic 1U, 2U and 4U servers for anything else.
The power light on server fronts shows the linked device's live status. Everything is included in the SVG/PNG export.
Faceplate labels. I checked them against the NetBox reference photos, and the UDM against the real unit. Each label is now centred under the screen, with the first word bold and the rest light: "UDM Pro", "USW Pro" with its PoE mark, "USW", "NVR Pro", and "USP PDU Pro".
No em or en dashes. I removed them from the UI, code and docs:
Page titles read "Rack | GANDALF".
Ranges use a hyphen: U26-42, 1-100 of 300.
Empty table cells show "-".
Phrases that were split with a dash now use a colon, a comma or a full stop.
In the shared base.js, only the text that appears on screen changed.
Automated: 367 tests pass, including drawing validation, the API passing the drawing through, and page titles. flake8 and bandit are clean, and ESLint reports 0 errors.
No dashes left: a check for em and en dashes across project files returns 0. The only ones left in the shared base.js and base.css are in comments.
Browser (Playwright):
Every drawing renders with no JS errors.
Hovering a UACC port lights up the switch port at the other end of its run.
## What changes
**Front drawings.** A cutsheet item can pick a **Front drawing** (new `chassis` column, added on first use):
- **UniFi NVR Pro:** a real faceplate (`UNVRPRO` in `faceplates.js`) built from the same parts as the UDM Pro, laid out from the CC0 NetBox devicetype-library image. UniFi Network doesn't report the NVR, so its ports are drawn unlinked.
- **UniFi Patch Panel Blank 24 (UACC-Rack-Panel-Patch-Blank-24):** drawn from the NetBox image: grey steel face, darker ears with oval holes, 24 keystone openings with the support bar, and a cable slot at each end. Each port with a documented cable gets a keystone jack. Cutsheet marks, port labels and run highlighting all work.
- **Sliger CX4712 4U:** two 5.25" blanks over 10 numbered bays, with an I/O strip. Layout from driveAtlas.
- **Rosewill RSV-L4500U 4U:** perforated door with a latch over the 3-fan wall, D-handles, and a key lock.
- **Generic 1U, 2U and 4U servers** for anything else.
The power light on server fronts shows the linked device's live status. Everything is included in the SVG/PNG export.
**Faceplate labels.** I checked them against the NetBox reference photos, and the UDM against the real unit. Each label is now centred under the screen, with the first word bold and the rest light: "UDM Pro", "USW Pro" with its PoE mark, "USW", "NVR Pro", and "USP PDU Pro".
**No em or en dashes.** I removed them from the UI, code and docs:
- Page titles read "Rack | GANDALF".
- Ranges use a hyphen: U26-42, 1-100 of 300.
- Empty table cells show "-".
- Phrases that were split with a dash now use a colon, a comma or a full stop.
- In the shared `base.js`, only the text that appears on screen changed.
## After deploy
Set these Front drawings on production:
- **UNVR-Pro:** UniFi NVR Pro
- **UACC-Rack-Panel-Patch-Blank-24:** UniFi Patch Panel Blank 24
## Testing
- **Automated:** 367 tests pass, including drawing validation, the API passing the drawing through, and page titles. flake8 and bandit are clean, and ESLint reports 0 errors.
- **No dashes left:** a check for em and en dashes across project files returns 0. The only ones left in the shared `base.js` and `base.css` are in comments.
- **Browser (Playwright):**
- Every drawing renders with no JS errors.
- Hovering a UACC port lights up the switch port at the other end of its run.
- The page title reads "Rack | GANDALF".
Screenshots are in the comments.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Items Gandalf has no live faceplate for can pick a Front drawing: the
UniFi NVR Pro (drawn from the CC0 NetBox devicetype-library image), the
Sliger CX4712 4U and Rosewill RSV-L4500U 4U cases (from driveAtlas's
layouts), and generic 1U/2U/4U servers. The power light shows the linked
device's live status. They export with the rest of the rack.
New cutsheet_items column chassis, added on first use.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The hand-drawn NVR Pro didn't match the UniFi faceplates: flat colours,
low contrast and its own port shapes. It is now a FACEPLATES entry
(UNVRPRO) built from the same parts as the UDM Pro: metal body, RJ45 jack,
SFP+ cage, quad screen, vents and labels. Front drawing "UniFi NVR Pro"
uses it, and it would go live if UniFi ever reports the model.
Sliger bays are numbered 1-10 (driveAtlas's order); the Rosewill door is
perforated with a latch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
NVR Pro now matches the other UniFi gear. It's a real faceplate (UNVRPRO in faceplates.js) built from the same parts as the UDM Pro: brushed-metal body, the same RJ45 jack and SFP+ cage, quad touchscreen, vents and labels. The first version used its own flat colours and port shapes. Its ports are drawn unlinked, because UniFi Network doesn't report the NVR.
U3–4 in the first screenshot was a sample "Backup box" (generic 2U server) in my local preview, not anything in your rack. It's gone from these screenshots.
Sliger: bays are numbered 1–10 in driveAtlas's order.
Rosewill: the door is perforated and has a latch.
The rack below is the local preview, with no live host data, so the status rings are grey:
Light mode:
## Updated after review
- **NVR Pro now matches the other UniFi gear.** It's a real faceplate (`UNVRPRO` in `faceplates.js`) built from the same parts as the UDM Pro: brushed-metal body, the same RJ45 jack and SFP+ cage, quad touchscreen, vents and labels. The first version used its own flat colours and port shapes. Its ports are drawn unlinked, because UniFi Network doesn't report the NVR.
- **U3–4 in the first screenshot** was a sample "Backup box" (generic 2U server) in my local preview, not anything in your rack. It's gone from these screenshots.
- **Sliger:** bays are numbered 1–10 in driveAtlas's order.
- **Rosewill:** the door is perforated and has a latch.
The rack below is the local preview, with no live host data, so the status rings are grey:


Light mode:

The label under each UniFi screen was one weight, left-aligned, and on the
UDM read "Dream Machine Pro". Checked against the NetBox reference photos
(and the UDM against the real unit), the labels are now centred under the
screen with the first word bold and the rest light: "UDM Pro",
"USW Pro" with its PoE mark, "USW", "NVR Pro", "USP PDU Pro". One helper
(fpModel) draws them all, so the NVR no longer looks bolder than the
switches.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Each UniFi screen's label was a single weight and left-aligned, and the UDM's read "Dream Machine Pro". I checked them against the NetBox reference photos, and the UDM against your unit, which reads "UDM Pro". All of them are now centred under the screen, with the first word bold and the rest light:
Unit
Label
UDM Pro
UDM Pro
USW Pro 24 PoE
USW Pro, with the PoE mark
Aggregation
USW
NVR Pro
NVR Pro, now the same weight as the switches
PDU Pro
USP PDU Pro
## Model labels fixed
Each UniFi screen's label was a single weight and left-aligned, and the UDM's read "Dream Machine Pro". I checked them against the NetBox reference photos, and the UDM against your unit, which reads "UDM Pro". All of them are now centred under the screen, with the first word bold and the rest light:
| Unit | Label |
|---|---|
| UDM Pro | **UDM** Pro |
| USW Pro 24 PoE | **USW** Pro, with the PoE mark |
| Aggregation | **USW** |
| NVR Pro | **NVR** Pro, now the same weight as the switches |
| PDU Pro | **USP** PDU Pro |

Page titles read "Rack | GANDALF", ranges use a hyphen (U26-42,
1-100 of 300), empty cells show "-", and dash-separated phrases use a
colon, comma or full stop. In the shared base.js only the on-screen strings
changed (boot line, placeholders, offline banner and toast).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Front drawing "UniFi Patch Panel Blank 24" draws the real panel, laid out
from the CC0 NetBox devicetype-library image: grey steel face, darker ears
with oval holes, 24 keystone openings with the cable-support bar behind
them, and a cable slot at each end. Ports with a documented cable get a
keystone jack; cutsheet marks, port labels and run highlighting work as on
the generic panel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
jared
changed title from Rack: drawn fronts for the NVR and server cases to Rack: drawn fronts (NVR Pro, UACC panel, server cases), faceplate labels, no em/en dashes2026-11-10 23:39:46 -05:00
Drawn from the NetBox reference photo. Ports 1, 2 and 23 have keystone jacks because cables are documented on them. Port 1 is hovered, so it lights up together with switch port 3 at the other end of its run. This is the local preview.
## UACC-Rack-Panel-Patch-Blank-24
Drawn from the NetBox reference photo. Ports 1, 2 and 23 have keystone jacks because cables are documented on them. Port 1 is hovered, so it lights up together with switch port 3 at the other end of its run. This is the local preview.

jared
merged commit 3e2918526f into main2026-11-10 23:45:37 -05:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What changes
Front drawings. A cutsheet item can pick a Front drawing (new
chassiscolumn, added on first use):UNVRPROinfaceplates.js) built from the same parts as the UDM Pro, laid out from the CC0 NetBox devicetype-library image. UniFi Network doesn't report the NVR, so its ports are drawn unlinked.The power light on server fronts shows the linked device's live status. Everything is included in the SVG/PNG export.
Faceplate labels. I checked them against the NetBox reference photos, and the UDM against the real unit. Each label is now centred under the screen, with the first word bold and the rest light: "UDM Pro", "USW Pro" with its PoE mark, "USW", "NVR Pro", and "USP PDU Pro".
No em or en dashes. I removed them from the UI, code and docs:
base.js, only the text that appears on screen changed.After deploy
Set these Front drawings on production:
Testing
base.jsandbase.cssare in comments.Screenshots are in the comments.
🤖 Generated with Claude Code
Updated after review
UNVRPROinfaceplates.js) built from the same parts as the UDM Pro: brushed-metal body, the same RJ45 jack and SFP+ cage, quad touchscreen, vents and labels. The first version used its own flat colours and port shapes. Its ports are drawn unlinked, because UniFi Network doesn't report the NVR.The rack below is the local preview, with no live host data, so the status rings are grey:
Light mode:
Model labels fixed
Each UniFi screen's label was a single weight and left-aligned, and the UDM's read "Dream Machine Pro". I checked them against the NetBox reference photos, and the UDM against your unit, which reads "UDM Pro". All of them are now centred under the screen, with the first word bold and the rest light:
Rack: drawn fronts for the NVR and server casesto Rack: drawn fronts (NVR Pro, UACC panel, server cases), faceplate labels, no em/en dashesUACC-Rack-Panel-Patch-Blank-24
Drawn from the NetBox reference photo. Ports 1, 2 and 23 have keystone jacks because cables are documented on them. Port 1 is hovered, so it lights up together with switch port 3 at the other end of its run. This is the local preview.