Rack: drawn fronts (NVR Pro, UACC panel, server cases), faceplate labels, no em/en dashes #27

Merged
jared merged 5 commits from rack-drawn-fronts into main 2026-11-10 23:45:37 -05:00
Owner

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

## 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)
jared added 1 commit 2026-11-10 23:25:21 -05:00
Rack: drawn fronts for the NVR and server cases
Lint / JS (eslint) (push) Successful in 15s
Security / Python Security (bandit) (push) Successful in 1m5s
Lint / Python (flake8) (push) Successful in 49s
Lint / Notify on failure (push) Skipped
Lint / Deploy (push) Skipped
Lint / Python (flake8) (pull_request) Successful in 53s
Test / Python Tests (pytest) (push) Successful in 1m0s
Lint / JS (eslint) (pull_request) Successful in 7s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Security / Python Security (bandit) (pull_request) Successful in 53s
Test / Python Tests (pytest) (pull_request) Successful in 57s
0f4e129c20
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>
jared added 1 commit 2026-11-10 23:31:23 -05:00
Rack: NVR Pro as a real faceplate; Sliger and Rosewill touch-ups
Lint / JS (eslint) (push) Successful in 18s
Security / Python Security (bandit) (push) Successful in 1m45s
Lint / Python (flake8) (push) Successful in 1m25s
Lint / Notify on failure (push) Skipped
Lint / Deploy (push) Skipped
Lint / Python (flake8) (pull_request) Successful in 52s
Lint / JS (eslint) (pull_request) Successful in 6s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Test / Python Tests (pytest) (push) Successful in 1m18s
Security / Python Security (bandit) (pull_request) Successful in 56s
Test / Python Tests (pytest) (pull_request) Successful in 53s
565fdd81de
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>
Author
Owner

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:

Dark

NVR Pro

Light mode:

Light

## 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: ![Dark](https://code.lotusguild.org/LotusGuild/gandalf/raw/branch/pr-27-screenshots/2-fronts-dark.png) ![NVR Pro](https://code.lotusguild.org/LotusGuild/gandalf/raw/branch/pr-27-screenshots/4-nvr.png) Light mode: ![Light](https://code.lotusguild.org/LotusGuild/gandalf/raw/branch/pr-27-screenshots/3-fronts-light.png)
jared added 1 commit 2026-11-10 23:36:26 -05:00
Faceplates: model labels as printed on the units
Lint / JS (eslint) (push) Successful in 16s
Lint / Python (flake8) (push) Successful in 1m6s
Lint / Notify on failure (push) Skipped
Lint / Deploy (push) Skipped
Lint / Python (flake8) (pull_request) Successful in 52s
Lint / JS (eslint) (pull_request) Successful in 7s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Security / Python Security (bandit) (pull_request) Successful in 53s
Security / Python Security (bandit) (push) Successful in 54s
Test / Python Tests (pytest) (push) Successful in 2m11s
Test / Python Tests (pytest) (pull_request) Successful in 2m16s
3c9e5fd593
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>
Author
Owner

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

Labels

## 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 | ![Labels](https://code.lotusguild.org/LotusGuild/gandalf/raw/branch/pr-27-screenshots/5-labels.png)
jared added 1 commit 2026-11-10 23:37:59 -05:00
Remove em and en dashes from the UI, code and docs
Lint / JS (eslint) (push) Successful in 7s
Lint / Python (flake8) (push) Successful in 57s
Lint / Notify on failure (push) Skipped
Lint / Deploy (push) Skipped
Security / Python Security (bandit) (push) Successful in 57s
Lint / JS (eslint) (pull_request) Successful in 10s
Lint / Python (flake8) (pull_request) Successful in 51s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Security / Python Security (bandit) (pull_request) Successful in 1m0s
Test / Python Tests (pytest) (push) Successful in 1m3s
Test / Python Tests (pytest) (pull_request) Successful in 52s
619a2c913d
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>
jared added 1 commit 2026-11-10 23:39:30 -05:00
Rack: draw the UniFi UACC blank 24-port keystone patch panel
Lint / JS (eslint) (push) Successful in 7s
Lint / Python (flake8) (push) Successful in 58s
Lint / Notify on failure (push) Skipped
Lint / Deploy (push) Skipped
Lint / JS (eslint) (pull_request) Successful in 11s
Lint / Python (flake8) (pull_request) Successful in 1m6s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Security / Python Security (bandit) (push) Successful in 1m0s
Test / Python Tests (pytest) (push) Successful in 1m59s
Security / Python Security (bandit) (pull_request) Successful in 1m42s
Test / Python Tests (pytest) (pull_request) Successful in 1m0s
50db56cdcb
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 dashes 2026-11-10 23:39:46 -05:00
Author
Owner

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.

UACC panel

## 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. ![UACC panel](https://code.lotusguild.org/LotusGuild/gandalf/raw/branch/pr-27-screenshots/6-uacc.png)
jared merged commit 3e2918526f into main 2026-11-10 23:45:37 -05:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/gandalf#27