diff --git a/frontend/public/examples-thumbs/and-gate-alarm.webp b/frontend/public/examples-thumbs/and-gate-alarm.webp new file mode 100644 index 00000000..20175cc6 Binary files /dev/null and b/frontend/public/examples-thumbs/and-gate-alarm.webp differ diff --git a/frontend/public/examples-thumbs/attiny85-blink.webp b/frontend/public/examples-thumbs/attiny85-blink.webp new file mode 100644 index 00000000..d96d3759 Binary files /dev/null and b/frontend/public/examples-thumbs/attiny85-blink.webp differ diff --git a/frontend/public/examples-thumbs/attiny85-button-led.webp b/frontend/public/examples-thumbs/attiny85-button-led.webp new file mode 100644 index 00000000..44b5c4c2 Binary files /dev/null and b/frontend/public/examples-thumbs/attiny85-button-led.webp differ diff --git a/frontend/public/examples-thumbs/attiny85-ntc-sensor.webp b/frontend/public/examples-thumbs/attiny85-ntc-sensor.webp new file mode 100644 index 00000000..0a376f75 Binary files /dev/null and b/frontend/public/examples-thumbs/attiny85-ntc-sensor.webp differ diff --git a/frontend/public/examples-thumbs/attiny85-pwm-fade.webp b/frontend/public/examples-thumbs/attiny85-pwm-fade.webp new file mode 100644 index 00000000..e1ca58f7 Binary files /dev/null and b/frontend/public/examples-thumbs/attiny85-pwm-fade.webp differ diff --git a/frontend/public/examples-thumbs/battery-voltage-monitor.webp b/frontend/public/examples-thumbs/battery-voltage-monitor.webp new file mode 100644 index 00000000..7dd7fee5 Binary files /dev/null and b/frontend/public/examples-thumbs/battery-voltage-monitor.webp differ diff --git a/frontend/public/examples-thumbs/binary-counter-leds.webp b/frontend/public/examples-thumbs/binary-counter-leds.webp new file mode 100644 index 00000000..feca3bf9 Binary files /dev/null and b/frontend/public/examples-thumbs/binary-counter-leds.webp differ diff --git a/frontend/public/examples-thumbs/bjt-common-emitter.webp b/frontend/public/examples-thumbs/bjt-common-emitter.webp new file mode 100644 index 00000000..dad98213 Binary files /dev/null and b/frontend/public/examples-thumbs/bjt-common-emitter.webp differ diff --git a/frontend/public/examples-thumbs/blink-led.webp b/frontend/public/examples-thumbs/blink-led.webp new file mode 100644 index 00000000..fb3c7827 Binary files /dev/null and b/frontend/public/examples-thumbs/blink-led.webp differ diff --git a/frontend/public/examples-thumbs/button-led.webp b/frontend/public/examples-thumbs/button-led.webp new file mode 100644 index 00000000..e5301a88 Binary files /dev/null and b/frontend/public/examples-thumbs/button-led.webp differ diff --git a/frontend/public/examples-thumbs/c3-blink.webp b/frontend/public/examples-thumbs/c3-blink.webp new file mode 100644 index 00000000..ca2f2e7e Binary files /dev/null and b/frontend/public/examples-thumbs/c3-blink.webp differ diff --git a/frontend/public/examples-thumbs/c3-button.webp b/frontend/public/examples-thumbs/c3-button.webp new file mode 100644 index 00000000..21d7edfc Binary files /dev/null and b/frontend/public/examples-thumbs/c3-button.webp differ diff --git a/frontend/public/examples-thumbs/c3-dht22.webp b/frontend/public/examples-thumbs/c3-dht22.webp new file mode 100644 index 00000000..62a516e9 Binary files /dev/null and b/frontend/public/examples-thumbs/c3-dht22.webp differ diff --git a/frontend/public/examples-thumbs/c3-hcsr04.webp b/frontend/public/examples-thumbs/c3-hcsr04.webp new file mode 100644 index 00000000..017be0bf Binary files /dev/null and b/frontend/public/examples-thumbs/c3-hcsr04.webp differ diff --git a/frontend/public/examples-thumbs/c3-pir.webp b/frontend/public/examples-thumbs/c3-pir.webp new file mode 100644 index 00000000..bf020d13 Binary files /dev/null and b/frontend/public/examples-thumbs/c3-pir.webp differ diff --git a/frontend/public/examples-thumbs/c3-rgb.webp b/frontend/public/examples-thumbs/c3-rgb.webp new file mode 100644 index 00000000..bcdcb95b Binary files /dev/null and b/frontend/public/examples-thumbs/c3-rgb.webp differ diff --git a/frontend/public/examples-thumbs/c3-serial-echo.webp b/frontend/public/examples-thumbs/c3-serial-echo.webp new file mode 100644 index 00000000..fb267b96 Binary files /dev/null and b/frontend/public/examples-thumbs/c3-serial-echo.webp differ diff --git a/frontend/public/examples-thumbs/c3-serial.webp b/frontend/public/examples-thumbs/c3-serial.webp new file mode 100644 index 00000000..411a430d Binary files /dev/null and b/frontend/public/examples-thumbs/c3-serial.webp differ diff --git a/frontend/public/examples-thumbs/c3-servo.webp b/frontend/public/examples-thumbs/c3-servo.webp new file mode 100644 index 00000000..3b55cad0 Binary files /dev/null and b/frontend/public/examples-thumbs/c3-servo.webp differ diff --git a/frontend/public/examples-thumbs/capacitor-charge-curve.webp b/frontend/public/examples-thumbs/capacitor-charge-curve.webp new file mode 100644 index 00000000..d038842e Binary files /dev/null and b/frontend/public/examples-thumbs/capacitor-charge-curve.webp differ diff --git a/frontend/public/examples-thumbs/darlington-high-current.webp b/frontend/public/examples-thumbs/darlington-high-current.webp new file mode 100644 index 00000000..ab6f38f5 Binary files /dev/null and b/frontend/public/examples-thumbs/darlington-high-current.webp differ diff --git a/frontend/public/examples-thumbs/diode-rectifier.webp b/frontend/public/examples-thumbs/diode-rectifier.webp new file mode 100644 index 00000000..09bbaf03 Binary files /dev/null and b/frontend/public/examples-thumbs/diode-rectifier.webp differ diff --git a/frontend/public/examples-thumbs/dual-pico-bidirectional-handshake.webp b/frontend/public/examples-thumbs/dual-pico-bidirectional-handshake.webp new file mode 100644 index 00000000..dba077e2 Binary files /dev/null and b/frontend/public/examples-thumbs/dual-pico-bidirectional-handshake.webp differ diff --git a/frontend/public/examples-thumbs/dual-pico-digital-mirror.webp b/frontend/public/examples-thumbs/dual-pico-digital-mirror.webp new file mode 100644 index 00000000..a8474dc4 Binary files /dev/null and b/frontend/public/examples-thumbs/dual-pico-digital-mirror.webp differ diff --git a/frontend/public/examples-thumbs/dual-pico-serial1-passthrough.webp b/frontend/public/examples-thumbs/dual-pico-serial1-passthrough.webp new file mode 100644 index 00000000..22c0c79a Binary files /dev/null and b/frontend/public/examples-thumbs/dual-pico-serial1-passthrough.webp differ diff --git a/frontend/public/examples-thumbs/esp32-7segment.webp b/frontend/public/examples-thumbs/esp32-7segment.webp new file mode 100644 index 00000000..9674589b Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-7segment.webp differ diff --git a/frontend/public/examples-thumbs/esp32-ble-advertise.webp b/frontend/public/examples-thumbs/esp32-ble-advertise.webp new file mode 100644 index 00000000..2bc5bf57 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-ble-advertise.webp differ diff --git a/frontend/public/examples-thumbs/esp32-blink-led.webp b/frontend/public/examples-thumbs/esp32-blink-led.webp new file mode 100644 index 00000000..a5713b7b Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-blink-led.webp differ diff --git a/frontend/public/examples-thumbs/esp32-bmp280.webp b/frontend/public/examples-thumbs/esp32-bmp280.webp new file mode 100644 index 00000000..a7d4a5fe Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-bmp280.webp differ diff --git a/frontend/public/examples-thumbs/esp32-dht22.webp b/frontend/public/examples-thumbs/esp32-dht22.webp new file mode 100644 index 00000000..4771222a Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-dht22.webp differ diff --git a/frontend/public/examples-thumbs/esp32-dual-adc.webp b/frontend/public/examples-thumbs/esp32-dual-adc.webp new file mode 100644 index 00000000..987ab68b Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-dual-adc.webp differ diff --git a/frontend/public/examples-thumbs/esp32-hcsr04.webp b/frontend/public/examples-thumbs/esp32-hcsr04.webp new file mode 100644 index 00000000..42bfdb75 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-hcsr04.webp differ diff --git a/frontend/public/examples-thumbs/esp32-http-server.webp b/frontend/public/examples-thumbs/esp32-http-server.webp new file mode 100644 index 00000000..2bc5bf57 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-http-server.webp differ diff --git a/frontend/public/examples-thumbs/esp32-joystick.webp b/frontend/public/examples-thumbs/esp32-joystick.webp new file mode 100644 index 00000000..89515622 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-joystick.webp differ diff --git a/frontend/public/examples-thumbs/esp32-mpu6050.webp b/frontend/public/examples-thumbs/esp32-mpu6050.webp new file mode 100644 index 00000000..78bff20c Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-mpu6050.webp differ diff --git a/frontend/public/examples-thumbs/esp32-oled.webp b/frontend/public/examples-thumbs/esp32-oled.webp new file mode 100644 index 00000000..d8b498c9 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-oled.webp differ diff --git a/frontend/public/examples-thumbs/esp32-pir.webp b/frontend/public/examples-thumbs/esp32-pir.webp new file mode 100644 index 00000000..97482966 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-pir.webp differ diff --git a/frontend/public/examples-thumbs/esp32-pwm-led-rgb.webp b/frontend/public/examples-thumbs/esp32-pwm-led-rgb.webp new file mode 100644 index 00000000..f97e317b Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-pwm-led-rgb.webp differ diff --git a/frontend/public/examples-thumbs/esp32-serial-echo.webp b/frontend/public/examples-thumbs/esp32-serial-echo.webp new file mode 100644 index 00000000..2bc5bf57 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-serial-echo.webp differ diff --git a/frontend/public/examples-thumbs/esp32-servo.webp b/frontend/public/examples-thumbs/esp32-servo.webp new file mode 100644 index 00000000..94a52c6e Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-servo.webp differ diff --git a/frontend/public/examples-thumbs/esp32-wifi-connect.webp b/frontend/public/examples-thumbs/esp32-wifi-connect.webp new file mode 100644 index 00000000..2bc5bf57 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-wifi-connect.webp differ diff --git a/frontend/public/examples-thumbs/esp32-wifi-scan.webp b/frontend/public/examples-thumbs/esp32-wifi-scan.webp new file mode 100644 index 00000000..2bc5bf57 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32-wifi-scan.webp differ diff --git a/frontend/public/examples-thumbs/esp32c3-ble-advertise.webp b/frontend/public/examples-thumbs/esp32c3-ble-advertise.webp new file mode 100644 index 00000000..94b027d8 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32c3-ble-advertise.webp differ diff --git a/frontend/public/examples-thumbs/esp32c3-http-server.webp b/frontend/public/examples-thumbs/esp32c3-http-server.webp new file mode 100644 index 00000000..aba7ae3a Binary files /dev/null and b/frontend/public/examples-thumbs/esp32c3-http-server.webp differ diff --git a/frontend/public/examples-thumbs/esp32c3-wifi-connect.webp b/frontend/public/examples-thumbs/esp32c3-wifi-connect.webp new file mode 100644 index 00000000..87382c23 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32c3-wifi-connect.webp differ diff --git a/frontend/public/examples-thumbs/esp32c3-wifi-scan.webp b/frontend/public/examples-thumbs/esp32c3-wifi-scan.webp new file mode 100644 index 00000000..adc5f3b4 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32c3-wifi-scan.webp differ diff --git a/frontend/public/examples-thumbs/esp32cam-lcd-preview.webp b/frontend/public/examples-thumbs/esp32cam-lcd-preview.webp new file mode 100644 index 00000000..7bb133d9 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32cam-lcd-preview.webp differ diff --git a/frontend/public/examples-thumbs/esp32cam-webcam-demo.webp b/frontend/public/examples-thumbs/esp32cam-webcam-demo.webp new file mode 100644 index 00000000..39d2dff2 Binary files /dev/null and b/frontend/public/examples-thumbs/esp32cam-webcam-demo.webp differ diff --git a/frontend/public/examples-thumbs/fade-led.webp b/frontend/public/examples-thumbs/fade-led.webp new file mode 100644 index 00000000..f3c35548 Binary files /dev/null and b/frontend/public/examples-thumbs/fade-led.webp differ diff --git a/frontend/public/examples-thumbs/full-adder.webp b/frontend/public/examples-thumbs/full-adder.webp new file mode 100644 index 00000000..3536fe97 Binary files /dev/null and b/frontend/public/examples-thumbs/full-adder.webp differ diff --git a/frontend/public/examples-thumbs/i2c-eeprom-rw.webp b/frontend/public/examples-thumbs/i2c-eeprom-rw.webp new file mode 100644 index 00000000..86969929 Binary files /dev/null and b/frontend/public/examples-thumbs/i2c-eeprom-rw.webp differ diff --git a/frontend/public/examples-thumbs/i2c-rtc-read.webp b/frontend/public/examples-thumbs/i2c-rtc-read.webp new file mode 100644 index 00000000..00ae6723 Binary files /dev/null and b/frontend/public/examples-thumbs/i2c-rtc-read.webp differ diff --git a/frontend/public/examples-thumbs/i2c-scanner.webp b/frontend/public/examples-thumbs/i2c-scanner.webp new file mode 100644 index 00000000..808fe69c Binary files /dev/null and b/frontend/public/examples-thumbs/i2c-scanner.webp differ diff --git a/frontend/public/examples-thumbs/l293d-motor-control.webp b/frontend/public/examples-thumbs/l293d-motor-control.webp new file mode 100644 index 00000000..07b71bed Binary files /dev/null and b/frontend/public/examples-thumbs/l293d-motor-control.webp differ diff --git a/frontend/public/examples-thumbs/l293d-speed-pwm.webp b/frontend/public/examples-thumbs/l293d-speed-pwm.webp new file mode 100644 index 00000000..1e8ebac3 Binary files /dev/null and b/frontend/public/examples-thumbs/l293d-speed-pwm.webp differ diff --git a/frontend/public/examples-thumbs/lcd-hello.webp b/frontend/public/examples-thumbs/lcd-hello.webp new file mode 100644 index 00000000..bb2e7ae3 Binary files /dev/null and b/frontend/public/examples-thumbs/lcd-hello.webp differ diff --git a/frontend/public/examples-thumbs/led-current-limiting.webp b/frontend/public/examples-thumbs/led-current-limiting.webp new file mode 100644 index 00000000..6347b109 Binary files /dev/null and b/frontend/public/examples-thumbs/led-current-limiting.webp differ diff --git a/frontend/public/examples-thumbs/lm317-adjustable-psu.webp b/frontend/public/examples-thumbs/lm317-adjustable-psu.webp new file mode 100644 index 00000000..4d174031 Binary files /dev/null and b/frontend/public/examples-thumbs/lm317-adjustable-psu.webp differ diff --git a/frontend/public/examples-thumbs/logic-probe.webp b/frontend/public/examples-thumbs/logic-probe.webp new file mode 100644 index 00000000..c1fdb763 Binary files /dev/null and b/frontend/public/examples-thumbs/logic-probe.webp differ diff --git a/frontend/public/examples-thumbs/mega-blink.webp b/frontend/public/examples-thumbs/mega-blink.webp new file mode 100644 index 00000000..8f8ecd8a Binary files /dev/null and b/frontend/public/examples-thumbs/mega-blink.webp differ diff --git a/frontend/public/examples-thumbs/mega-led-chase.webp b/frontend/public/examples-thumbs/mega-led-chase.webp new file mode 100644 index 00000000..07448b98 Binary files /dev/null and b/frontend/public/examples-thumbs/mega-led-chase.webp differ diff --git a/frontend/public/examples-thumbs/mega-multi-led.webp b/frontend/public/examples-thumbs/mega-multi-led.webp new file mode 100644 index 00000000..fa42af3f Binary files /dev/null and b/frontend/public/examples-thumbs/mega-multi-led.webp differ diff --git a/frontend/public/examples-thumbs/mega-serial-control.webp b/frontend/public/examples-thumbs/mega-serial-control.webp new file mode 100644 index 00000000..fc9d6ae3 Binary files /dev/null and b/frontend/public/examples-thumbs/mega-serial-control.webp differ diff --git a/frontend/public/examples-thumbs/mega-serial.webp b/frontend/public/examples-thumbs/mega-serial.webp new file mode 100644 index 00000000..47abd5b1 Binary files /dev/null and b/frontend/public/examples-thumbs/mega-serial.webp differ diff --git a/frontend/public/examples-thumbs/mosfet-pwm-led.webp b/frontend/public/examples-thumbs/mosfet-pwm-led.webp new file mode 100644 index 00000000..d3eb6035 Binary files /dev/null and b/frontend/public/examples-thumbs/mosfet-pwm-led.webp differ diff --git a/frontend/public/examples-thumbs/multi-led-bar.webp b/frontend/public/examples-thumbs/multi-led-bar.webp new file mode 100644 index 00000000..cf4384f4 Binary files /dev/null and b/frontend/public/examples-thumbs/multi-led-bar.webp differ diff --git a/frontend/public/examples-thumbs/multi-protocol.webp b/frontend/public/examples-thumbs/multi-protocol.webp new file mode 100644 index 00000000..1627c23d Binary files /dev/null and b/frontend/public/examples-thumbs/multi-protocol.webp differ diff --git a/frontend/public/examples-thumbs/nand-sr-latch.webp b/frontend/public/examples-thumbs/nand-sr-latch.webp new file mode 100644 index 00000000..8ae7ba7c Binary files /dev/null and b/frontend/public/examples-thumbs/nand-sr-latch.webp differ diff --git a/frontend/public/examples-thumbs/nano-blink.webp b/frontend/public/examples-thumbs/nano-blink.webp new file mode 100644 index 00000000..d337d614 Binary files /dev/null and b/frontend/public/examples-thumbs/nano-blink.webp differ diff --git a/frontend/public/examples-thumbs/nano-button-led.webp b/frontend/public/examples-thumbs/nano-button-led.webp new file mode 100644 index 00000000..3c3ee697 Binary files /dev/null and b/frontend/public/examples-thumbs/nano-button-led.webp differ diff --git a/frontend/public/examples-thumbs/nano-fade.webp b/frontend/public/examples-thumbs/nano-fade.webp new file mode 100644 index 00000000..f31017a0 Binary files /dev/null and b/frontend/public/examples-thumbs/nano-fade.webp differ diff --git a/frontend/public/examples-thumbs/nano-sensor-station.webp b/frontend/public/examples-thumbs/nano-sensor-station.webp new file mode 100644 index 00000000..7a8071df Binary files /dev/null and b/frontend/public/examples-thumbs/nano-sensor-station.webp differ diff --git a/frontend/public/examples-thumbs/nano-serial.webp b/frontend/public/examples-thumbs/nano-serial.webp new file mode 100644 index 00000000..b3e5b8fa Binary files /dev/null and b/frontend/public/examples-thumbs/nano-serial.webp differ diff --git a/frontend/public/examples-thumbs/npn-led-switch.webp b/frontend/public/examples-thumbs/npn-led-switch.webp new file mode 100644 index 00000000..0a09ec55 Binary files /dev/null and b/frontend/public/examples-thumbs/npn-led-switch.webp differ diff --git a/frontend/public/examples-thumbs/ntc-temperature.webp b/frontend/public/examples-thumbs/ntc-temperature.webp new file mode 100644 index 00000000..4676ae57 Binary files /dev/null and b/frontend/public/examples-thumbs/ntc-temperature.webp differ diff --git a/frontend/public/examples-thumbs/opamp-comparator.webp b/frontend/public/examples-thumbs/opamp-comparator.webp new file mode 100644 index 00000000..e3f514ca Binary files /dev/null and b/frontend/public/examples-thumbs/opamp-comparator.webp differ diff --git a/frontend/public/examples-thumbs/opamp-difference.webp b/frontend/public/examples-thumbs/opamp-difference.webp new file mode 100644 index 00000000..d073723b Binary files /dev/null and b/frontend/public/examples-thumbs/opamp-difference.webp differ diff --git a/frontend/public/examples-thumbs/opamp-inverting.webp b/frontend/public/examples-thumbs/opamp-inverting.webp new file mode 100644 index 00000000..af364c83 Binary files /dev/null and b/frontend/public/examples-thumbs/opamp-inverting.webp differ diff --git a/frontend/public/examples-thumbs/opamp-schmitt-trigger.webp b/frontend/public/examples-thumbs/opamp-schmitt-trigger.webp new file mode 100644 index 00000000..03545826 Binary files /dev/null and b/frontend/public/examples-thumbs/opamp-schmitt-trigger.webp differ diff --git a/frontend/public/examples-thumbs/opamp-voltage-follower.webp b/frontend/public/examples-thumbs/opamp-voltage-follower.webp new file mode 100644 index 00000000..e4a37ede Binary files /dev/null and b/frontend/public/examples-thumbs/opamp-voltage-follower.webp differ diff --git a/frontend/public/examples-thumbs/optocoupler-signal.webp b/frontend/public/examples-thumbs/optocoupler-signal.webp new file mode 100644 index 00000000..efb48a5c Binary files /dev/null and b/frontend/public/examples-thumbs/optocoupler-signal.webp differ diff --git a/frontend/public/examples-thumbs/parallel-resistors.webp b/frontend/public/examples-thumbs/parallel-resistors.webp new file mode 100644 index 00000000..2a6411e7 Binary files /dev/null and b/frontend/public/examples-thumbs/parallel-resistors.webp differ diff --git a/frontend/public/examples-thumbs/photoresistor-light.webp b/frontend/public/examples-thumbs/photoresistor-light.webp new file mode 100644 index 00000000..7dc1dc7d Binary files /dev/null and b/frontend/public/examples-thumbs/photoresistor-light.webp differ diff --git a/frontend/public/examples-thumbs/pi-to-arduino-led-control.webp b/frontend/public/examples-thumbs/pi-to-arduino-led-control.webp new file mode 100644 index 00000000..aecd0209 Binary files /dev/null and b/frontend/public/examples-thumbs/pi-to-arduino-led-control.webp differ diff --git a/frontend/public/examples-thumbs/pico-7segment.webp b/frontend/public/examples-thumbs/pico-7segment.webp new file mode 100644 index 00000000..a246bebd Binary files /dev/null and b/frontend/public/examples-thumbs/pico-7segment.webp differ diff --git a/frontend/public/examples-thumbs/pico-adc-read.webp b/frontend/public/examples-thumbs/pico-adc-read.webp new file mode 100644 index 00000000..36f837f2 Binary files /dev/null and b/frontend/public/examples-thumbs/pico-adc-read.webp differ diff --git a/frontend/public/examples-thumbs/pico-blink.webp b/frontend/public/examples-thumbs/pico-blink.webp new file mode 100644 index 00000000..eb03e232 Binary files /dev/null and b/frontend/public/examples-thumbs/pico-blink.webp differ diff --git a/frontend/public/examples-thumbs/pico-button-led.webp b/frontend/public/examples-thumbs/pico-button-led.webp new file mode 100644 index 00000000..31d0e27f Binary files /dev/null and b/frontend/public/examples-thumbs/pico-button-led.webp differ diff --git a/frontend/public/examples-thumbs/pico-dht22.webp b/frontend/public/examples-thumbs/pico-dht22.webp new file mode 100644 index 00000000..382356c7 Binary files /dev/null and b/frontend/public/examples-thumbs/pico-dht22.webp differ diff --git a/frontend/public/examples-thumbs/pico-hcsr04.webp b/frontend/public/examples-thumbs/pico-hcsr04.webp new file mode 100644 index 00000000..151f7ecb Binary files /dev/null and b/frontend/public/examples-thumbs/pico-hcsr04.webp differ diff --git a/frontend/public/examples-thumbs/pico-i2c-eeprom-rw.webp b/frontend/public/examples-thumbs/pico-i2c-eeprom-rw.webp new file mode 100644 index 00000000..b060b8a1 Binary files /dev/null and b/frontend/public/examples-thumbs/pico-i2c-eeprom-rw.webp differ diff --git a/frontend/public/examples-thumbs/pico-i2c-rtc-read.webp b/frontend/public/examples-thumbs/pico-i2c-rtc-read.webp new file mode 100644 index 00000000..f4f92fca Binary files /dev/null and b/frontend/public/examples-thumbs/pico-i2c-rtc-read.webp differ diff --git a/frontend/public/examples-thumbs/pico-i2c-scanner.webp b/frontend/public/examples-thumbs/pico-i2c-scanner.webp new file mode 100644 index 00000000..1d27ffbb Binary files /dev/null and b/frontend/public/examples-thumbs/pico-i2c-scanner.webp differ diff --git a/frontend/public/examples-thumbs/pico-joystick.webp b/frontend/public/examples-thumbs/pico-joystick.webp new file mode 100644 index 00000000..624e270f Binary files /dev/null and b/frontend/public/examples-thumbs/pico-joystick.webp differ diff --git a/frontend/public/examples-thumbs/pico-multi-protocol.webp b/frontend/public/examples-thumbs/pico-multi-protocol.webp new file mode 100644 index 00000000..9c40827b Binary files /dev/null and b/frontend/public/examples-thumbs/pico-multi-protocol.webp differ diff --git a/frontend/public/examples-thumbs/pico-ntc.webp b/frontend/public/examples-thumbs/pico-ntc.webp new file mode 100644 index 00000000..7504a417 Binary files /dev/null and b/frontend/public/examples-thumbs/pico-ntc.webp differ diff --git a/frontend/public/examples-thumbs/pico-pir.webp b/frontend/public/examples-thumbs/pico-pir.webp new file mode 100644 index 00000000..3f32e358 Binary files /dev/null and b/frontend/public/examples-thumbs/pico-pir.webp differ diff --git a/frontend/public/examples-thumbs/pico-rgb.webp b/frontend/public/examples-thumbs/pico-rgb.webp new file mode 100644 index 00000000..ae35d47d Binary files /dev/null and b/frontend/public/examples-thumbs/pico-rgb.webp differ diff --git a/frontend/public/examples-thumbs/pico-serial-echo.webp b/frontend/public/examples-thumbs/pico-serial-echo.webp new file mode 100644 index 00000000..b2a5113b Binary files /dev/null and b/frontend/public/examples-thumbs/pico-serial-echo.webp differ diff --git a/frontend/public/examples-thumbs/pico-serial-led-control.webp b/frontend/public/examples-thumbs/pico-serial-led-control.webp new file mode 100644 index 00000000..4b1c317e Binary files /dev/null and b/frontend/public/examples-thumbs/pico-serial-led-control.webp differ diff --git a/frontend/public/examples-thumbs/pico-servo.webp b/frontend/public/examples-thumbs/pico-servo.webp new file mode 100644 index 00000000..3e6037ed Binary files /dev/null and b/frontend/public/examples-thumbs/pico-servo.webp differ diff --git a/frontend/public/examples-thumbs/pico-spi-loopback.webp b/frontend/public/examples-thumbs/pico-spi-loopback.webp new file mode 100644 index 00000000..b3b84496 Binary files /dev/null and b/frontend/public/examples-thumbs/pico-spi-loopback.webp differ diff --git a/frontend/public/examples-thumbs/pnp-high-side-switch.webp b/frontend/public/examples-thumbs/pnp-high-side-switch.webp new file mode 100644 index 00000000..f2f87ec8 Binary files /dev/null and b/frontend/public/examples-thumbs/pnp-high-side-switch.webp differ diff --git a/frontend/public/examples-thumbs/pot-adc-reader.webp b/frontend/public/examples-thumbs/pot-adc-reader.webp new file mode 100644 index 00000000..1d31c762 Binary files /dev/null and b/frontend/public/examples-thumbs/pot-adc-reader.webp differ diff --git a/frontend/public/examples-thumbs/power-supply-7805.webp b/frontend/public/examples-thumbs/power-supply-7805.webp new file mode 100644 index 00000000..0047a679 Binary files /dev/null and b/frontend/public/examples-thumbs/power-supply-7805.webp differ diff --git a/frontend/public/examples-thumbs/rc-low-pass-filter.webp b/frontend/public/examples-thumbs/rc-low-pass-filter.webp new file mode 100644 index 00000000..2949285c Binary files /dev/null and b/frontend/public/examples-thumbs/rc-low-pass-filter.webp differ diff --git a/frontend/public/examples-thumbs/relay-led-switch.webp b/frontend/public/examples-thumbs/relay-led-switch.webp new file mode 100644 index 00000000..067a7f8e Binary files /dev/null and b/frontend/public/examples-thumbs/relay-led-switch.webp differ diff --git a/frontend/public/examples-thumbs/rgb-led.webp b/frontend/public/examples-thumbs/rgb-led.webp new file mode 100644 index 00000000..b5182522 Binary files /dev/null and b/frontend/public/examples-thumbs/rgb-led.webp differ diff --git a/frontend/public/examples-thumbs/schottky-reverse-protection.webp b/frontend/public/examples-thumbs/schottky-reverse-protection.webp new file mode 100644 index 00000000..15e13b29 Binary files /dev/null and b/frontend/public/examples-thumbs/schottky-reverse-protection.webp differ diff --git a/frontend/public/examples-thumbs/serial-echo.webp b/frontend/public/examples-thumbs/serial-echo.webp new file mode 100644 index 00000000..204d2274 Binary files /dev/null and b/frontend/public/examples-thumbs/serial-echo.webp differ diff --git a/frontend/public/examples-thumbs/serial-hello.webp b/frontend/public/examples-thumbs/serial-hello.webp new file mode 100644 index 00000000..5e79a48c Binary files /dev/null and b/frontend/public/examples-thumbs/serial-hello.webp differ diff --git a/frontend/public/examples-thumbs/serial-led-control.webp b/frontend/public/examples-thumbs/serial-led-control.webp new file mode 100644 index 00000000..538605c7 Binary files /dev/null and b/frontend/public/examples-thumbs/serial-led-control.webp differ diff --git a/frontend/public/examples-thumbs/simon-says.webp b/frontend/public/examples-thumbs/simon-says.webp new file mode 100644 index 00000000..d348dd33 Binary files /dev/null and b/frontend/public/examples-thumbs/simon-says.webp differ diff --git a/frontend/public/examples-thumbs/spi-loopback.webp b/frontend/public/examples-thumbs/spi-loopback.webp new file mode 100644 index 00000000..0d6b70dd Binary files /dev/null and b/frontend/public/examples-thumbs/spi-loopback.webp differ diff --git a/frontend/public/examples-thumbs/tft-display.webp b/frontend/public/examples-thumbs/tft-display.webp new file mode 100644 index 00000000..3485f2c9 Binary files /dev/null and b/frontend/public/examples-thumbs/tft-display.webp differ diff --git a/frontend/public/examples-thumbs/traffic-light.webp b/frontend/public/examples-thumbs/traffic-light.webp new file mode 100644 index 00000000..a5c12509 Binary files /dev/null and b/frontend/public/examples-thumbs/traffic-light.webp differ diff --git a/frontend/public/examples-thumbs/uno-7segment.webp b/frontend/public/examples-thumbs/uno-7segment.webp new file mode 100644 index 00000000..756dff8b Binary files /dev/null and b/frontend/public/examples-thumbs/uno-7segment.webp differ diff --git a/frontend/public/examples-thumbs/uno-dht22.webp b/frontend/public/examples-thumbs/uno-dht22.webp new file mode 100644 index 00000000..ed8bda17 Binary files /dev/null and b/frontend/public/examples-thumbs/uno-dht22.webp differ diff --git a/frontend/public/examples-thumbs/uno-hcsr04.webp b/frontend/public/examples-thumbs/uno-hcsr04.webp new file mode 100644 index 00000000..58be4e9c Binary files /dev/null and b/frontend/public/examples-thumbs/uno-hcsr04.webp differ diff --git a/frontend/public/examples-thumbs/uno-ntc.webp b/frontend/public/examples-thumbs/uno-ntc.webp new file mode 100644 index 00000000..c4f48bf0 Binary files /dev/null and b/frontend/public/examples-thumbs/uno-ntc.webp differ diff --git a/frontend/public/examples-thumbs/uno-photoresistor.webp b/frontend/public/examples-thumbs/uno-photoresistor.webp new file mode 100644 index 00000000..08035a9f Binary files /dev/null and b/frontend/public/examples-thumbs/uno-photoresistor.webp differ diff --git a/frontend/public/examples-thumbs/uno-pir.webp b/frontend/public/examples-thumbs/uno-pir.webp new file mode 100644 index 00000000..367039b7 Binary files /dev/null and b/frontend/public/examples-thumbs/uno-pir.webp differ diff --git a/frontend/public/examples-thumbs/uno-potentiometer.webp b/frontend/public/examples-thumbs/uno-potentiometer.webp new file mode 100644 index 00000000..26d10390 Binary files /dev/null and b/frontend/public/examples-thumbs/uno-potentiometer.webp differ diff --git a/frontend/public/examples-thumbs/uno-rgb-cycle.webp b/frontend/public/examples-thumbs/uno-rgb-cycle.webp new file mode 100644 index 00000000..52a5f38a Binary files /dev/null and b/frontend/public/examples-thumbs/uno-rgb-cycle.webp differ diff --git a/frontend/public/examples-thumbs/uno-servo.webp b/frontend/public/examples-thumbs/uno-servo.webp new file mode 100644 index 00000000..9ea39c92 Binary files /dev/null and b/frontend/public/examples-thumbs/uno-servo.webp differ diff --git a/frontend/public/examples-thumbs/voltage-divider.webp b/frontend/public/examples-thumbs/voltage-divider.webp new file mode 100644 index 00000000..19ae6200 Binary files /dev/null and b/frontend/public/examples-thumbs/voltage-divider.webp differ diff --git a/frontend/public/examples-thumbs/wheatstone-bridge.webp b/frontend/public/examples-thumbs/wheatstone-bridge.webp new file mode 100644 index 00000000..cb5667e6 Binary files /dev/null and b/frontend/public/examples-thumbs/wheatstone-bridge.webp differ diff --git a/frontend/public/examples-thumbs/xor-toggle-detector.webp b/frontend/public/examples-thumbs/xor-toggle-detector.webp new file mode 100644 index 00000000..cd1e0ea9 Binary files /dev/null and b/frontend/public/examples-thumbs/xor-toggle-detector.webp differ diff --git a/frontend/public/examples-thumbs/zener-regulator.webp b/frontend/public/examples-thumbs/zener-regulator.webp new file mode 100644 index 00000000..277a009b Binary files /dev/null and b/frontend/public/examples-thumbs/zener-regulator.webp differ diff --git a/frontend/src/components/examples/ExampleThumbnail.tsx b/frontend/src/components/examples/ExampleThumbnail.tsx new file mode 100644 index 00000000..81e3b74f --- /dev/null +++ b/frontend/src/components/examples/ExampleThumbnail.tsx @@ -0,0 +1,73 @@ +/** + * ExampleThumbnail — convention-based card thumbnail for an example. + * + * 1. Try /examples-thumbs/.webp (real canvas screenshot, generated by + * velxio-prod's scripts/capture-example-thumbs.mjs). + * 2. If that 404s — or if the example has no thumbnail captured yet — + * fall back to the existing CircuitPreview component (the SVG mock). + * + * WebP only (no PNG fallback): supported by ~97% of browsers in use; the + * remaining ~3% (very old Safari) gracefully fall back to CircuitPreview + * via the onError handler. + * + * The optional `example.thumbnail` field still wins if explicitly set. + */ + +import { useState } from 'react'; +import type { CSSProperties } from 'react'; +import type { ExampleProject } from '../../data/examples'; +import { CircuitPreview } from './CircuitPreview'; + +interface Props { + example: ExampleProject; + width?: number; + height?: number; + background?: string; + style?: CSSProperties; +} + +export const ExampleThumbnail = ({ + example, + width = 300, + height = 180, + background = '#0a0a0c', + style, +}: Props) => { + const [imgFailed, setImgFailed] = useState(false); + + // Explicit thumbnail wins over convention-based. + if (example.thumbnail) { + return ( + {example.title} + ); + } + + if (imgFailed) { + return ( + + ); + } + + return ( + {example.title} setImgFailed(true)} + /> + ); +}; diff --git a/frontend/src/components/examples/ExamplesGallery.tsx b/frontend/src/components/examples/ExamplesGallery.tsx index 2ebf27c5..872d3dfc 100644 --- a/frontend/src/components/examples/ExamplesGallery.tsx +++ b/frontend/src/components/examples/ExamplesGallery.tsx @@ -6,7 +6,7 @@ import React, { useState, useCallback } from 'react'; import { exampleProjects, type ExampleProject } from '../../data/examples'; -import { CircuitPreview } from './CircuitPreview'; +import { ExampleThumbnail } from './ExampleThumbnail'; import './ExamplesGallery.css'; interface ExamplesGalleryProps { @@ -316,21 +316,13 @@ export const ExamplesGallery: React.FC = ({ onLoadExample return (
onLoadExample(example)}>
- {example.thumbnail ? ( - {example.title} - ) : ( - - )} +

{example.title}

diff --git a/frontend/src/pages/ExampleDetailPage.tsx b/frontend/src/pages/ExampleDetailPage.tsx index ae730b6e..ddddeafa 100644 --- a/frontend/src/pages/ExampleDetailPage.tsx +++ b/frontend/src/pages/ExampleDetailPage.tsx @@ -14,7 +14,7 @@ import { useParams, useNavigate, Link } from 'react-router-dom'; import { exampleProjects } from '../data/examples'; import { loadExample, type LibraryInstallProgress } from '../utils/loadExample'; import { AppHeader } from '../components/layout/AppHeader'; -import { CircuitPreview } from '../components/examples/CircuitPreview'; +import { ExampleThumbnail } from '../components/examples/ExampleThumbnail'; import { useSEO } from '../utils/useSEO'; const DOMAIN = 'https://velxio.dev'; @@ -176,7 +176,7 @@ export const ExampleDetailPage: React.FC = () => { border: '1px solid #333', }} > -