In developmentNot released yet — features and data may change without notice.

CHANGELOG

Changelog

Kill the biggest risk first — which is why the pipeline came before the UI. Built in the open; measured numbers are reported as they are.

Phase 0 · PoCPoC-A · PoC-B done
Simulator
SimulatorSite

The parts with screens finally move

The servo, the NeoPixel, the LCD, the seven-segment display and the OLED were drawn correctly and never moved. Each now reads its protocol back out of pin timing or the I²C stream and shows what the sketch sent it.

  • Angle from the pulse width, colour from WS2812 bit timing, text from PCF8574 nibbles, digits from the TM1637's two-wire frames, and the OLED picture from the SSD1306 framebuffer
  • An LED under analogWrite is a brightness, not a flicker — Fade, which is open without an account, now actually fades
  • The simulator waits for the breadboard to wire its parts up before it starts, so what a sketch draws once in setup() — a counter's 0000, a clock's time — is no longer missed
  • Five new examples: knob turns a servo, night light, motion lamp, parking sensor, button counter. The first two need no account
  • The fourteen String sketches, which drive nothing, moved to the end of the ladder and fold away — still listed, still linkable
  • Parser: an ultrasonic sensor driven by hand through TRIG_PIN and ECHO_PIN came out as two half-wired sensors, so nothing attached to either and the distance read zero forever
  • Example uno_bme280_oled drew nothing because it never called setTextColor — the same code is a blank screen on real hardware too
  • A virtual device and a slider for the PIR sensor
  • The hero is the L1 breadboard now, not a photograph of a finished PCB — the largest picture on the site was showing the one rung that is not open. It carries no ground of its own, so the board sits on the page's paper rather than inside a rectangle
  • The playground's next-step card promised Gerbers with the board stage closed. It promises verification now, and the board rung stays on the list marked as not open
  • The last two steps of the home demo are marked as not open. The paragraph said so; the cards did not
  • Five project examples opened without an account — eleven of thirteen were padlocked
  • Home: the eight-pass reference table folds away (500px of specification in the middle of a landing page)
  • uno_temp_relay was missing setTextColor too, so its OLED was blank as well
  • The remote example had never worked. IRremote 4.7.1 keeps the old API only as a stub that prints a deprecation banner, so it compiled and decoded nothing. Rewritten against the 4.x API, with a remote drawn on the breadboard whose keys play real NEC frames onto the receiver's pin
  • Nor had the SD logger. The MPU-6050 driver spins in setup() waiting for a reset bit to clear, so the simulator ran perfectly and the screen showed nothing at all
  • A virtual microSD card with a FAT16 volume on it. SD.begin() succeeds and motion.csv actually grows
  • The backend suite refuses to run against a database whose name does not end in _test, and says why — it had been quietly creating tables in the development database
  • The founding concept doc still described the ordering and institutional legs that were cut in September
Scope
SiteDocs

Only learning and making remain

Pages and copy about ordering, institutions and contracts are gone from the site. ibouPCB ends at verifying a sketch and producing the board files.

  • Removed the educators page, the Education tier and the classroom guide
  • The project's "Ready to order" page is now "Output files" — no fab links, just the file list and a checklist
  • Removed the ordering guide; cleaned ordering and contract wording from home, pricing, about, terms and privacy
  • Landing: light-mode card edge contrast, one section spacing scale, example cards spread across the curriculum
  • L1 breadboard: two-pin parts like LEDs now face the board with their legs, and parts with side or bottom pins are wired around the body instead of through it — checked across all 48 examples
  • The missing half of every button example: from the sketch's pinMode, a pull-up button gets its far leg on GND, otherwise 5V plus an auto-inserted 10 kΩ pull-down with the reason in its caption
  • Parser: for-loop ranges and pin arrays expand to their pins, and a pin with no name or library is read from how it is used (analogRead → pot, digitalRead → button, digitalWrite → LED) — the 8 examples that showed a bare board now have parts
  • L1 breadboard: a 330 Ω series resistor for every LED, and 5V/GND tapped from two rails — 25 of the 39 examples with parts now draw with zero crossings
  • L2/L3 expander: a button read with `pinMode(INPUT)` is built with a pull-down and its contact on VCC instead of the catalog's pull-up (a pressed-is-HIGH sketch used to come out inverted on the board); the golden pattern accepts either
  • L1 breadboard: the part row order joins the crossing search — 28 of the 39 examples with parts now draw with zero crossings
Site redesign
SiteDocs

The "bench paper & copper" design system and new pages

Dropped the dark-glass look for ink and copper traces on paper. Verification states are solder-mask green, auto-inserted parts are copper, consistently.

  • Landing page rewritten — datasheet-style board drawing, 4-level rail, three-gate panel, 8-pass table, live example cards
  • New pages: About · For educators · Changelog · Playground · Examples · Catalog · Guides · Pricing · Legal
  • i18n namespaces split (ko · ja · en), hreflang · sitemap · JSON-LD
  • Light/dark mode through CSS tokens only — no hard-coded colors
P8 · virtual sensors · ESP32
VerificationSimulator

Pin-map regression (P8), virtual sensors, server-side ESP32 simulation

"Your code runs unchanged" is now a test, not a slogan. The same sketch is recompiled for the target with pins.h applied and the server compares pin activity before and after.

  • P8: Uno → Pico measured at 22 s, 6 pins compared. A pin toggled on the source must toggle on the target; PWM pins direction-only plus a warning
  • Found: analogWrite(-508) is PWM on AVR but clamps to 0 on arduino-pico — core differences reported as warnings
  • Virtual sensors: DS18B20 (1-Wire slave · CRC8) · DHT22 · HC-SR04 · BME280/BMP280 · MPU6050 · DS3231. Uno measured 22/22 exact
  • ESP32: Espressif QEMU 9.2.2 as a separate process. DIO flash build, GPIO replayed from MMIO write traces. blink 6 s: 25 edges each on GPIO2/4
  • Pico: rp2040js + arduino-pico core. UF2 loaded into emulated flash, USB CDC serial, 30 GPIOs
Catalog · corpus
CatalogVerification

Modules 11 → 22, golden-pattern corpus importer

The catalog is the only moat. Every module got a reference circuit and an explanation, and an importer now extracts patterns from real KiCad projects.

  • Added modules: WS2812B · buzzer (tone) · PIR · BME/BMP280 · MPU6050 · DS3231 · microSD SPI · TM1637 · IR VS1838B · LDR · MOSFET load driver
  • Boards: ESP32-C3-WROOM-02 · Raspberry Pi Pico (L3 targets) · XIAO ESP32C3
  • I²C address-clash ERC (0x68 MPU6050 + DS3231). 5 more examples, all 4 targets PASS, tests 20 → 96
  • Corpus importer: on 4 Olimex ESP32 boards (Apache-2.0) confirmed EN 10k pull-up · EN 1 µF · 3V3 bulk 4.7–22 µF. No external IO0 pull-up on any of the 4 → severity under review. Human-curated merge, no auto-overwrite
PoC-B · L0/L1
SimulatorInfra

Browser simulator (logic gate) and breadboard view

Zero server-side simulation cost. arduino-cli builds the .hex, avr8js runs it in the browser, and the server re-derives expected pin directions from the sketch and checks them against browser evidence before passing the logic gate.

  • Compile worker: arduino-cli + AVR · arduino-pico · arduino-esp32 cores (GPL → separate image). blink: flash 1028 B, 2.5 s sim = 0.38 s
  • The client never sets a gate itself — it submits evidence and the server decides
  • L1 breadboard: @wokwi/elements draws the modules inferred from code wired to an Uno. LEDs and buzzers follow pins, buttons drive them
  • PCB 2D viewer: KiCanvas renders the real .kicad_pcb. Downloads for Gerber zip · BOM · CPL · KiCad · pins.h
PoC-A · P7
EDAVerification

ESP32 PoC board — Freerouting completes, DRC 0

Can one .ino become a fab-ready Gerber with no human hands? It took eight rounds.

  • ESP32 temperature + relay example, 32 parts / 21 nets: placed at 83×46 mm, 0 unconnected on the second routing pass, DRC 0, 11 Gerber files · drill · CPL
  • Round 1 DRC 24 → ASCII-normalized part values, courtyard-aware first-fit placer
  • JVM SIGKILLed twice during routing → VM memory (global_oom). Docker memory 16 → 30 GB
  • Antenna keep-out was eating board area → module antenna at the board edge (Espressif guide), keep-out mirrored as a rule area on all copper layers
  • Retry loop (up to 3) that re-exports the partially routed board and continues
PoC-A · P1–P6
VerificationInfra

Conversion pipeline — parser · expander · AI proposer · verifier P1–P6

The policy that AI only proposes and a deterministic verifier decides, turned into code. There is no AI in the verifier.

  • .ino parser: #define · pinMode · Wire/SPI · library constructors · identifier hints
  • Deterministic expander: module substitution · power tree · reference circuits · dividers/level shifting · pin assignment
  • Verifier P1–P6: schema · catalog grounding · golden patterns · ERC · pin contract · consensus — unit-tested without KiCad
  • AI proposer: enforced JSON schema · catalog allow-list · N samples. Falls back when no key is set
  • Artifacts: netlist.json · pins.h · bom.csv · explain.json (a "why?" per auto-inserted part)
  • Infra: Docker Compose dev/prod, nginx, GHCR build → SSH deploy. Own JSON netlist + direct pcbnew generation chosen over SKiDL/atopile
Next: broader P8 regression, catalog expansion, and the Phase 1 MVP — Arduino Uno/Nano · L0–L2 · 10 external users.
Open the playgroundAbout