diff --git a/Notizen.md b/Notizen.md
index c29547dc25c75c5bb3c22a39c28f52232c3377e6..bda4144ade36c068d30029cedab74d9d0b03d540 100644
--- a/Notizen.md
+++ b/Notizen.md
@@ -489,8 +489,6 @@
 TODO und weitere Gedanken:
 
 - LDO für 3.3V ist nicht mehr verfügbar.
-
-- Gerber vom Main Board noch mal. Ich hab Polygons noch geändert.
 - Subraum-Logos?
 
 - Von LCSC separat bestellen:
@@ -508,26 +506,15 @@ TODO und weitere Gedanken:
     - 50x [M2.5 Mutter](https://www.lcsc.com/product-detail/Nuts_AOFENG-DIN934-M2-5-0-45-304-A2-50-B_C5138931.html) (nicht die günstigste, aber sieht besser aus bzgl. Qualität)
   - 30x PS1240P02BT (C76871)
   - Eventuell [Kabelbinder](https://www.lcsc.com/product-detail/span-style-background-color-ff0-Cable-span-Tie_KSS-KAI-SUH-SUH-ENTERPRISE-CV075K-B_C5181010.html)
+  - Auch einmal in die dedizierten BOMs schauen, die KiBot dafür jetzt generiert.
 - Beim Bestellen:
-  - Header im CPL anpassen (gerbers/c3pb-heizung-top-pos.csv): Designator,Val,Package,Mid X,Mid Y,Rotation,Layer
   - Auf Rotation der Komponenten achten! Die sind nicht alle richtig, aber kann man bei JLC im Online-Editor noch drehen.
     - Dioden auf dem Display-Board sind zum Beispiel genau falsch herum. TMP102 auch.
+    - Ist eventuell schon durch KiBot behoben.
   - Wannenstecker und Stiftleisten sizten falsch. Kicad hat den Ursprung auf Pin 1, JLC legt die Mitte auf den Ursprung.
-  - Kicad negiert die x-Position auf bottom und JLC mag das nicht.
-    - Almost but doesn't support quoted CSV:
-      `#mv c3pb-heizung-display-all-pos.csv x.csv && gawk '{ FS=OFS=","; if ($7 == "bottom") $5 = -$5; print }' <x.csv >c3pb-heizung-display-all-pos.csv && rm x.csv`
-    - [gawk Doku zu CSV](https://www.gnu.org/software/gawk/manual/html_node/More-CSV.html)
-    - `mv c3pb-heizung-display-all-pos.csv x.csv && gawk '{ FPAT="([^,]+)|(\"[^\"]+\")"; OFS=","; if ($7 == "bottom") $4 = -$4; print }' <x.csv >c3pb-heizung-display-all-pos.csv && rm x.csv`
   - Rechnungsadresse passend einstellen.
-- Fräsen: File -> Plot, nur User.4 auswählen, "Plot graphics items using their contours" abschalten, Format DXF. Für FreeCAD passt es damit.
-  - In der `.kicad_pcb`, für Gerber:
-    (layerselection 0x00010fc_ffffffff)
-    (dxfpolygonmode true)
-    (outputformat 1)
-  - In der `.kicad_pcb`, für DXF:
-    (layerselection 0x0200000_7ffffffe)
-    (dxfpolygonmode false)
-    (outputformat 3)
+- Fräsen: User.4 layer, DXF wird automatisch exportiert, siehe README
 - TODO später:
   - Anschlussplan designen für in den Deckel kleben, wo keine Display-Platine ist.
+  - Temperatur-Ring designen und von außen drauf kleben (hoffentlich für Touch, sonst für die LEDs).
 
diff --git a/README.md b/README.md
index 409fabd867631eeb6de1685a97d7f2f8f091e01d..d5df8b3dfdcae5329f109d3349c0e1c1b392ec33 100644
--- a/README.md
+++ b/README.md
@@ -51,22 +51,74 @@ auf RS485. Die Steuerung läuft im Keller auf einem Linux, z.B. auf vogon.
       Lager haben und einfach tauschen. Es ist halt wirklich nur diese Platine und der USB-RS485 und nicht noch weitere ESP32
       oder Raspi oder so, die ebenfalls kaputtgehen könnten.
 
-![aktuelles PCB](img/PCB.png)
-![PCB in 3D](img/PCB_3D.png)
-![PCB in 3D, Rückseite](img/PCB_3D_back.png)
+
+Main PCB
+--------
+
+RP2040 microcontroller (like Raspberry Pico), power supply, terminal block and most of the functions.
+
+![3D rendering of main PCB](./c3pb-heizung/generated/3D/c3pb-heizung-3D_top30deg.png)
+![bottom side of main PCB](./c3pb-heizung/generated/3D/c3pb-heizung-3D_bottom.png)
+
+FIXME: export PDF of schematic (unfortunately, KiBot only exports the first page)
+
+[PDF with rendering of PCB layers](./c3pb-heizung/generated/PCB/PDF/c3pb-heizung-assembly.pdf)
+
 ![Verbindungsdose als Gehäuse, https://www.spelsberg.de/verbindungsdosen/innenbereich-bis-252/33291201/](img/csm_33291201_V1_0629111c9b.webp)
 
 Anschlussklemmen: Es gibt leider kein Bild in richtig herum. Man kippe sie im Kopf um 90 Grad nach links-oben und die Kabel kommen dann von links-oben.
 ![Anschlussklemmen, auf der Seite liegend - danke LCSC](img/20230317_Cixi-Kefa-Elec-KF250T-5-0-2-13P_C976547_front.jpg)
 
+
+DCDC PCB
+--------
+
 Da ich es zunächst mit LDO ausgelegt habe, aber der nicht genug Verlustleistung abkann, gibt es jetzt als Workaround dieses
 Aufsteckboard als Spannungswandler. Denkt euch die Stiftleisten weg. Dort sind Stiftleisten auf dem Haupt-Board und an denen
 wird es festgelötet (oder mit Buchsenleisten gesteckt). Die oberen beiden sind nur mechanisch:
-![Aufsteckboard mit DCDC](img/PCB_DCDC_3D.png)
 
-Und das ist das optionale Display-Board:
-![Display Board von vorne](img/PCB_Display_3D.png)
-![Display Board, Rückseite](img/PCB_Display_3D_back.png)
+![3D rendering of main PCB](./c3pb-heizung-dcdc/generated/3D/c3pb-heizung-dcdc-3D_top30deg.png)
+
+FIXME: export PDF of schematic (unfortunately, KiBot only exports the first page)
+
+[PDF with rendering of PCB layers](./c3pb-heizung-dcdc/generated/PCB/PDF/c3pb-heizung-dcdc-assembly.pdf)
+
+
+Display PCB
+-----------
+
+Some of the boards will also get a user interface, e.g. when there is a radiator in a good location for that. We should probably
+also have at least one dedicated control board for each room in a central location (i.e. most likely not near a radiator).
+
+![Display Board von vorne](./c3pb-heizung-display/generated/3D/c3pb-heizung-display-3D_top30deg.png)
+![Display Board, Rückseite](./c3pb-heizung-display/generated/3D/c3pb-heizung-display-3D_bottom.png)
+
+The hole in the middle will be filled by one of those small, cheap OLED boards:
+![OLED](img/OLED.png)
+
+The OLED and four buttons are the "fallback" user interface. We can make this reasonably useful by providing shortcut actions,
+e.g. long press on left/right button to set room temperature to 17 resp. 21 °C.
+
+There is a ring of touch areas and a ring of LEDs around the display. If they work as expected, they will be the main user interface:
+Double-tap a temperature of your choice to set it and the LEDs will be used to display set point and actual value. There will be
+some text and graphics on the case, e.g. an adhesive label with lines for the sector and temperature values printed on it.
+
+The display PCB has an additional temperature sensor on the outside so it should provide a reasonable estimate of room temperature
+when it is placed in a central location between hand and eye level.
+
+FIXME: export PDF of schematic (unfortunately, KiBot only exports the first page)
+
+[PDF with rendering of PCB layers](./c3pb-heizung-display/generated/PCB/PDF/c3pb-heizung-display-assembly.pdf)
+
+We plan to mill holes in the case for LEDs, fasteners, buttons and the display. The outlines are on layer User.4 and that is
+[exported to DXF by KiBot](./c3pb-heizung-display/c3pb-heizung-display-User_4.dxf). If touch is working, we should get the board
+as close to the case as possible (best would be below 0.3 mm but that's not realistic here). If not, we may want to add some
+spacers and reduce the hole for the display to only the active area. Best case would be that we have the best of both, i.e. touch
+is working and we can add some small spaces between display PCB and OLED board so we can make the hole small anyway. In either case,
+we may want to think about a thin layer of transparent PMMA. ahorn would like to have the buttons actuated via a piece of plastic,
+e.g. with suitable slots in the case instead of making a complete hole for the buttons. We will evaluate this further when we know
+how well touch is working.
+
 
 Sonstiges
 =========
@@ -76,3 +128,4 @@ Sonstiges
   - change header line in CPL to: Designator,Val,Package,Mid X,Mid Y,Rotation,Layer
   - There is more to do, e.g. rotate components to match JLC's expectations.
   - Use KiBot to make it reproducible: `nix develop -c time kibot`
+  - You can use the script `generate-pcb-outputs.sh` to run KiBot for all PCBs.
diff --git a/img/PCB.png b/img/PCB.png
deleted file mode 100644
index 78bc9f3231d5cc312d352b4be57a0defe956e73d..0000000000000000000000000000000000000000
Binary files a/img/PCB.png and /dev/null differ
diff --git a/img/PCB_3D.png b/img/PCB_3D.png
deleted file mode 100644
index 54a2812b8a06cbbc06032f5572c311e6b33ec7ee..0000000000000000000000000000000000000000
Binary files a/img/PCB_3D.png and /dev/null differ
diff --git a/img/PCB_3D_back.png b/img/PCB_3D_back.png
deleted file mode 100644
index cb5d6c3e3b637fd787384da26ec22744bc0b0bd9..0000000000000000000000000000000000000000
Binary files a/img/PCB_3D_back.png and /dev/null differ
diff --git a/img/PCB_DCDC_3D.png b/img/PCB_DCDC_3D.png
deleted file mode 100644
index dcd161f8a3d88dc238fd853d51bbf5016d62c813..0000000000000000000000000000000000000000
Binary files a/img/PCB_DCDC_3D.png and /dev/null differ
diff --git a/img/PCB_Display_3D.png b/img/PCB_Display_3D.png
deleted file mode 100644
index f1dbbf28fe8b261764c89475ea90da9ee2a3c301..0000000000000000000000000000000000000000
Binary files a/img/PCB_Display_3D.png and /dev/null differ
diff --git a/img/PCB_Display_3D_back.png b/img/PCB_Display_3D_back.png
deleted file mode 100644
index c934b6885aa60a7b2a9f61ecaf4c10a191d5ee33..0000000000000000000000000000000000000000
Binary files a/img/PCB_Display_3D_back.png and /dev/null differ