diff --git a/frontend/public/component-svgs/arduino-nano-esp32.svg b/frontend/public/component-svgs/arduino-nano-esp32.svg
new file mode 100644
index 00000000..813a6334
--- /dev/null
+++ b/frontend/public/component-svgs/arduino-nano-esp32.svg
@@ -0,0 +1,823 @@
+
+
+
+
diff --git a/frontend/public/component-svgs/esp32-c3.svg b/frontend/public/component-svgs/esp32-c3.svg
new file mode 100644
index 00000000..ddf48f11
--- /dev/null
+++ b/frontend/public/component-svgs/esp32-c3.svg
@@ -0,0 +1,219 @@
+
diff --git a/frontend/public/component-svgs/esp32-cam.svg b/frontend/public/component-svgs/esp32-cam.svg
new file mode 100644
index 00000000..82ce4545
--- /dev/null
+++ b/frontend/public/component-svgs/esp32-cam.svg
@@ -0,0 +1,1150 @@
+
+
+
+
diff --git a/frontend/public/component-svgs/esp32-devkit-c-v4.svg b/frontend/public/component-svgs/esp32-devkit-c-v4.svg
new file mode 100644
index 00000000..e9dbb909
--- /dev/null
+++ b/frontend/public/component-svgs/esp32-devkit-c-v4.svg
@@ -0,0 +1,4361 @@
+
+
diff --git a/frontend/public/component-svgs/esp32-s3.svg b/frontend/public/component-svgs/esp32-s3.svg
new file mode 100644
index 00000000..67af1d70
--- /dev/null
+++ b/frontend/public/component-svgs/esp32-s3.svg
@@ -0,0 +1,1534 @@
+
+
diff --git a/frontend/public/component-svgs/esp32c3-supermini.svg b/frontend/public/component-svgs/esp32c3-supermini.svg
new file mode 100644
index 00000000..6e21445d
--- /dev/null
+++ b/frontend/public/component-svgs/esp32c3-supermini.svg
@@ -0,0 +1,584 @@
+
+
\ No newline at end of file
diff --git a/frontend/public/component-svgs/xiao-esp32-c3.svg b/frontend/public/component-svgs/xiao-esp32-c3.svg
new file mode 100644
index 00000000..5419179f
--- /dev/null
+++ b/frontend/public/component-svgs/xiao-esp32-c3.svg
@@ -0,0 +1,717 @@
+
+
diff --git a/frontend/public/component-svgs/xiao-esp32-s3.svg b/frontend/public/component-svgs/xiao-esp32-s3.svg
new file mode 100644
index 00000000..ee850d8b
--- /dev/null
+++ b/frontend/public/component-svgs/xiao-esp32-s3.svg
@@ -0,0 +1,137 @@
+
+
diff --git a/frontend/src/components/examples/CircuitPreview.tsx b/frontend/src/components/examples/CircuitPreview.tsx
index 5b52b089..4f9f2d1d 100644
--- a/frontend/src/components/examples/CircuitPreview.tsx
+++ b/frontend/src/components/examples/CircuitPreview.tsx
@@ -114,18 +114,19 @@ const BOARD_DEFS: Record = {
'raspberry-pi-pico': { svg: 'raspberry-pi-pico.svg', w: 79, h: 200 },
'pi-pico-w': { svg: 'raspberry-pi-pico-w.svg', w: 105, h: 264 },
'raspberry-pi-3': { svg: 'raspberry-pi-3.svg', w: 200, h: 135 },
- // ESP32 family ā every variant currently maps to the DevKit V1 art (no
- // dedicated SVGs are extracted for the variants yet).
+ // ESP32 family ā every variant with its own art in public/boards/ uses it
+ // (w/h keep each SVG's aspect at the family's ~3.75 px/mm scale); only the
+ // Lolin32 Lite still borrows the DevKit V1 drawing.
esp32: { svg: 'esp32-devkit-v1.svg', w: 107, h: 204 },
- 'esp32-devkit-c-v4': { svg: 'esp32-devkit-v1.svg', w: 107, h: 204 },
- 'esp32-cam': { svg: 'esp32-devkit-v1.svg', w: 107, h: 204 },
+ 'esp32-devkit-c-v4': { svg: 'esp32-devkit-c-v4.svg', w: 105, h: 212 },
+ 'esp32-cam': { svg: 'esp32-cam.svg', w: 102, h: 152 },
'wemos-lolin32-lite': { svg: 'esp32-devkit-v1.svg', w: 107, h: 204 },
- 'esp32-s3': { svg: 'esp32-devkit-v1.svg', w: 107, h: 204 },
- 'xiao-esp32-s3': { svg: 'esp32-devkit-v1.svg', w: 107, h: 204 },
- 'arduino-nano-esp32': { svg: 'esp32-devkit-v1.svg', w: 107, h: 204 },
- 'esp32-c3': { svg: 'esp32-devkit-v1.svg', w: 107, h: 204 },
- 'xiao-esp32-c3': { svg: 'esp32-devkit-v1.svg', w: 107, h: 204 },
- 'aitewinrobot-esp32c3-supermini': { svg: 'esp32-devkit-v1.svg', w: 107, h: 204 },
+ 'esp32-s3': { svg: 'esp32-s3.svg', w: 72, h: 199 },
+ 'xiao-esp32-s3': { svg: 'xiao-esp32-s3.svg', w: 68, h: 88 },
+ 'arduino-nano-esp32': { svg: 'arduino-nano-esp32.svg', w: 170, h: 72 },
+ 'esp32-c3': { svg: 'esp32-c3.svg', w: 95, h: 161 },
+ 'xiao-esp32-c3': { svg: 'xiao-esp32-c3.svg', w: 68, h: 88 },
+ 'aitewinrobot-esp32c3-supermini': { svg: 'esp32c3-supermini.svg', w: 68, h: 92 },
// ATtiny85 ā DIP-8, drawn inline (no wokwi element ships its SVG).
attiny85: { svg: '', inline: Attiny85InlinePreview, w: 160, h: 100 },
};
diff --git a/scripts/generate-component-svgs.cjs b/scripts/generate-component-svgs.cjs
index 15ae56ff..e00cc593 100644
--- a/scripts/generate-component-svgs.cjs
+++ b/scripts/generate-component-svgs.cjs
@@ -466,6 +466,16 @@ const BOARD_COPIES = [
['wokwi-arduino-mega-board','arduino-mega.svg'],
['wokwi-esp32-board', 'esp32-devkit-c-v4.svg'],
['velxio-raspberry-pi-3', 'Raspberry_Pi_3.svg'],
+ // ESP32 variants with dedicated art (CircuitPreview BOARD_DEFS references
+ // these basenames; before this they all borrowed the DevKit V1 drawing).
+ ['wokwi-arduino-nano-esp32', 'arduino-nano-esp32.svg'],
+ ['wokwi-esp32-devkit-c-v4', 'esp32-devkit-c-v4.svg'],
+ ['wokwi-esp32-cam', 'esp32-cam.svg'],
+ ['wokwi-esp32-s3', 'esp32-s3.svg'],
+ ['wokwi-esp32-c3', 'esp32-c3.svg'],
+ ['wokwi-xiao-esp32-s3', 'xiao-esp32-s3.svg'],
+ ['wokwi-xiao-esp32-c3', 'xiao-esp32-c3.svg'],
+ ['wokwi-esp32c3-supermini', 'esp32c3-supermini.svg'],
];
console.log('\nš Copying board SVGs from public/boards/...');