diff --git a/README.md b/README.md
index 939eeda..ec665e5 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,8 @@ Status: **design**. No boards ordered, no firmware written.
| Board | Qty | Keys | Carries |
|---|---|---|---|
-| `hardware/half` | 2 (mirrored) | TBD — layout not designed | MCU, matrix, USB-C, SBU split link |
+| `hardware/half-left` | 1 | **36** | MCU, matrix, USB-C, SBU split link |
+| `hardware/half-right` | 1 | **39** | MCU, matrix, USB-C, SBU split link |
| `hardware/numpad` | 1 | 25 (16 numpad + 9 nav) | MCU, matrix, 1 encoder, **CH334R hub**, 3 downstream ports |
**Numpad layout is settled** — see `docs/numpad-layout.svg`, and
@@ -145,11 +146,19 @@ socket pads off. FR4 plate is just another JLC board.
Use [perigoso/keyswitch-kicad-library](https://github.com/perigoso/keyswitch-kicad-library)
for footprints — don't draw them.
-### Mirrored board files, not a reversible PCB
+### The halves are two different boards
-The socket footprint isn't mirror-symmetric, so a reversible board needs two
-socket footprints per key with one populated. Two mirrored layouts sharing one
-schematic and one BOM is simpler and keeps everything that mattered.
+Splitting a full 104 at the 6/T/G/B boundary gives **36 keys left, 39 right** —
+the right side inherits Backspace, Enter, both brackets, the backslash and an
+extra bottom-row key. They are therefore *not* mirrors, and the earlier plan of
+one layout flipped for both halves does not survive.
+
+Two separate designs: two schematics, two layouts, two fab setups, different
+diode and socket counts. A reversible PCB was never on the table anyway — the
+hotswap socket footprint isn't mirror-symmetric, so it would have needed two
+socket footprints per key with one populated.
+
+See `docs/half-left.svg` and `docs/half-right.svg`.
### RGB: numpad underglow only
diff --git a/docs/bom.csv b/docs/bom.csv
index 4c7ea69..d9f6427 100644
--- a/docs/bom.csv
+++ b/docs/bom.csv
@@ -16,11 +16,12 @@ ALL,MCU,R1-R2,2,22R 0402,FRC0402F22R0TS,C2929994,0402,Extended,0.0007,"USB D+/D-
ALL,MCU,R3-R4,2,5.1k 0402,JLC basic library,-,0402,Basic,0.002,"USB-C CC1/CC2 pull-DOWN (Rd - device side)"
ALL,MCU,R5,1,1.5k 0402,JLC basic library,-,0402,Basic,0.002,"*** SWAP-DEPENDENT *** D+ pull-up. POPULATE for STM32F103. DNF for CH32L103 (internal 1.5k via RB_UC_DEV_PU_EN)"
ALL,MCU,R6-R7,2,10k 0402,FRC0402F1002TS,C25744,0402,Basic,0.003,"BOOT0 pulldown, BOOT1/PB2 pulldown"
-HALF,Matrix,D1-Dn,1,1N4148W,1N4148W,C81598,SOD-123,Basic,0.011,"One per key. Qty per your layout"
-HALF,Split,R14,1,100R 0402,JLC basic library,-,0402,Basic,0.002,"Series on the SBU net between connector and MCU USART pin"
-HALF,Split,D-ESD,1,ESD 5V bidirectional,PESD5V0S1BA,C2827694,SOD-323,Extended,0.036,"On the SBU net - user-exposed signal going to a GPIO"
-HALF,Split,J3,1,3-pin header DNF,JST SH,-,-,Consigned,0.02,"*** DNF INSURANCE *** VCC/GND/DATA fallback if SBU proves flaky (bad cables). 3 pads cost nothing"
-HALF,Split,-,-,SBU1+SBU2 TIE,-,-,-,-,0.00,"Tie A8 and B8 together on the board. SBU is CROSSED in the cable, so this makes it orientation-proof and doubles the conductor"
+HALF-L,Matrix,D1-D36,36,1N4148W,1N4148W,C81598,SOD-123,Basic,0.011,"Left half: 36 keys"
+HALF-R,Matrix,D1-D39,39,1N4148W,1N4148W,C81598,SOD-123,Basic,0.011,"Right half: 39 keys"
+HALF-L/R,Split,R14,1,100R 0402,JLC basic library,-,0402,Basic,0.002,"Series on the SBU net between connector and MCU USART pin"
+HALF-L/R,Split,D-ESD,1,ESD 5V bidirectional,PESD5V0S1BA,C2827694,SOD-323,Extended,0.036,"On the SBU net - user-exposed signal going to a GPIO"
+HALF-L/R,Split,J3,1,3-pin header DNF,JST SH,-,-,Consigned,0.02,"*** DNF INSURANCE *** VCC/GND/DATA fallback if SBU proves flaky (bad cables). 3 pads cost nothing"
+HALF-L/R,Split,-,-,SBU1+SBU2 TIE,-,-,-,-,0.00,"Tie A8 and B8 together on the board. SBU is CROSSED in the cable, so this makes it orientation-proof and doubles the conductor"
NUMPAD,DNF,J1/U3/R3/R4/R5,0,DO NOT POPULATE,-,-,-,-,0.00,"*** From the ALL block: numpad MCU has NO connector of its own. Its D+/D- route internally to hub downstream port 1. No connector = no ESD part and no CC resistors needed. Saves ~$0.19"
NUMPAD,Matrix,D1-D25,25,1N4148W,1N4148W,C81598,SOD-123,Basic,0.011,"25 keys: 16 numpad (no Num key) + 9 nav"
NUMPAD,Encoder,ENC1,1,EC11 detented,EC11L1525G01,C2991196,THT,Extended,1.27,"VOLUME - detented, which is what a stock EC11 already is. Occupies a 2u cell so a full-size knob fits. THT: hand-solder or JLC THT surcharge"
@@ -35,7 +36,8 @@ NUMPAD,Hub,U8-U10,3,Ideal diode / OCP,CH213K,C5456874,SOT-23-3,Extended,0.073,"V
NUMPAD,Hub,R8-R13,6,56k 0402,FRC0402F5602TS,C2906875,0402,Extended,0.0018,"Rp pull-UPS on CC1/CC2 of each downstream port - host side. NOT 5.1k"
NUMPAD,SBU,-,-,SBU PASS-THROUGH,-,-,-,-,0.00,"*** Passive trace *** Tie SBU1+SBU2 on J5 (left half) and on J6 (right half), then connect the two nets together. Carries QMK split_common UART between the halves. Numpad MCU does NOT touch this net"
NUMPAD,SBU,D-ESD2,2,ESD 5V bidirectional,PESD5V0S1BA,C2827694,SOD-323,Extended,0.036,"One per half-port SBU net"
-HALF,Switches,SW-,1,MX hotswap socket,CPG151101S11,C41430893,SMD 14.5x5.9mm,Extended,0.037,"One per key. BOTTOM SIDE. Alt: C49352235 (CPG151101S11-2)"
+HALF-L,Switches,SW-,36,MX hotswap socket,CPG151101S11,C41430893,SMD 14.5x5.9mm,Extended,0.037,"BOTTOM SIDE. Alt: C49352235"
+HALF-R,Switches,SW-,39,MX hotswap socket,CPG151101S11,C41430893,SMD 14.5x5.9mm,Extended,0.037,"BOTTOM SIDE. Alt: C49352235"
NUMPAD,Switches,SW-,25,MX hotswap socket,CPG151101S11,C41430893,SMD 14.5x5.9mm,Extended,0.037,"One per key. BOTTOM SIDE"
NOTE,Assembly,-,-,SINGLE-SIDED,-,-,-,-,-,"Put ALL SMD on the BOTTOM: sockets, MCU, passives, diodes, and any reverse-mount SK6812MINI-E. Top face bare except switch holes. Keeps JLC to one assembly pass"
NOTE,Mechanical,-,-,PLATE REQUIRED,-,-,-,-,-,"Hotswap needs a switch plate or socket pads tear off during switch insertion. FR4 plate = just another JLC board"
diff --git a/docs/half-left.svg b/docs/half-left.svg
new file mode 100644
index 0000000..47b0c8d
--- /dev/null
+++ b/docs/half-left.svg
@@ -0,0 +1,42 @@
+
\ No newline at end of file
diff --git a/docs/half-right.svg b/docs/half-right.svg
new file mode 100644
index 0000000..af26450
--- /dev/null
+++ b/docs/half-right.svg
@@ -0,0 +1,45 @@
+
\ No newline at end of file
diff --git a/docs/three-board-overview.svg b/docs/three-board-overview.svg
index a3c49b0..e44a426 100644
--- a/docs/three-board-overview.svg
+++ b/docs/three-board-overview.svg
@@ -1,94 +1,115 @@
\ No newline at end of file