Inspiration
We kept running into the same wall whenever one of us wanted a circuit for a project. You either build it on perfboard, which is quick and looks ugly, or you order a proper PCB and wait a week. Neither works when the whole project is a weekend.
We knew people had printed boards and covered them in copper tape before, and we'd read the write-ups. They all stop in the same place: once the tape is down, you have to cut it to the shape of the traces by hand, and that takes longer than the print did.
The badge gave us the second half of the idea. Everyone at the event gets one, it has no spare pins, and the rules are blunt about not damaging it. We liked that constraint. If we were going to show off a printed board, it may as well be one that plugs into the badge without soldering a single wire to it. A goose seemed like the right shape, and Operation seemed like the right game.
What it does
We wrote a converter that takes a KiCad board file and gives you a 3D model you can print. It reads everything on the copper layer: tracks, curved tracks, pads of every shape, vias, filled areas and drill holes. We tested it on the organisers' own badge board, which has 634 tracks and 315 pads, and it converts in about two and a half seconds. Our goose takes 0.4.
The goose itself is a printed plate, 158 by 133 mm, covered in copper tape. There are no components on it at all. It carries four copper nets, and three of them reach the badge through spring pins sitting on the badge's own button pads. The tweezers are tied to badge ground, so when you touch the copper, the badge sees a button press.
The game runs on the badge in Lua. You lift the first organ out, carry the second one in, and try not to touch the walls. Every touch costs you seconds and makes the goose honk at you. We never had to modify the badge's firmware; the game just listens for ordinary button events.
We also put the converter in a browser. You can drop a KiCad file in, watch the conversion happen step by step, spin the result in 3D, change the plate thickness or the hole rules, and download the STL. There's a second tab where you can draw a board yourself, and it checks the fabrication rules as you draw, so you find out immediately when two traces are too close to be cut.
How we built it
We decided early not to depend on KiCad itself. A board file is just text, so we parse it directly, which means the tool runs anywhere with no GUI and no install. Every copper feature becomes a flat shape, the shapes merge into one, the holes come out of it, and the whole thing gets extruded into a solid. It's all 2.5D, so the difficult work stays in two dimensions and the 3D step is barely more than "extrude this and glue it together".
The fabrication side is where most of the thinking went. Each trace sits raised off the plate, ringed by a moat and a low rim, and a second printed plate presses down on top with teeth that drop into those moats. The teeth wipe the tape down the side of each trace and shear it against the rim. We kept every dimension as a named parameter, because we didn't know the right values and still don't until we've printed enough coupons to measure them.
For the badge, we settled on four spring pins: three button lines and a ground. The board never solders to anything, nothing is glued, and a printed tray holds the badge by the holes it already has. We put relief pockets in the back of the board over every button it covers, so it can't hold one down by accident.
The app had to live inside the badge's Lua sandbox, so it's a small state machine: stages, a countdown, penalties with a lockout so one scrape doesn't cost you ten seconds, LED flashes, and screens built from artwork we converted into the badge's own image format.
Adit did the fabrication design, drew the goose, and wrote the generator that produces the plates, the cutter and the tray. Vi built the KiCad to 3D converter and the web app. Akshat wrote the badge game and the tools that push it to hardware and play through it automatically. Talia designed the screens and the artwork.
Challenges we ran into
We couldn't afford to break the badge. There's one per person, no replacements, and no spare pins to borrow. Before designing anything, we checked on real hardware that shorting a button's signal pad to its ground pad reads as a press, and then we built everything around touching nothing but the pads that are already exposed.
The shearing trick needs room. If two different nets sit closer than about 4.6 mm, their moats merge, and the tape between them never gets cut. We drew the goose at 3 mm before we understood that, so for the demo we cut those spots by hand. Our checker now lists exactly which ones they are, and the six places it flagged were the same six our other generator had reported on its own.
One bug took us a while because the model looked perfect. The badge's STL was a closed solid in memory and a broken one on disk. It turned out there were more than a thousand points where two copper shapes touch at exactly one spot, plus pairs of points sitting closer together than an STL file can even record. We snapped everything to a micron grid, closed those contacts, and stacked the copper on top of the plate instead of overlapping it. Now every build reopens its own saved file to check.
Printers were the bottleneck all weekend. A queue can be hours long, so a bad print costs you more than the plastic. That pushed us to check things in software first, and to print a true-scale PDF on ordinary paper, which catches a mirrored or wrongly scaled board for nothing.
The badge sandbox is small: 48 KB of heap, no canvas, images in one specific format, ASCII-only fonts, and only a few milliseconds per tick. The game had to fit inside that.
Our drawing canvas was the last thing to fight us. It looked finished and behaved badly, and reading the code twice didn't find it. Driving it with a real browser in tests found three causes in about ten seconds: an outline drawn with two points collapsed the whole board, a half-drawn trace survived when you changed tools, and clearing a number field wrote a zero into the design.
Accomplishments that we're proud of
We have a circuit board with nothing on it that still plays a game. The logic is the copper shapes themselves, which is the part we most wanted to be true.
We can convert any KiCad file we've thrown at it, including the organisers' badge, in seconds, and get a solid that slices cleanly. We also ended up with two tools written independently, and when both of them pointed at the same six places where the tape wouldn't shear, we finally believed the checks.
The badge came out of the weekend exactly as it went in: no solder, no glue, no custom firmware. And we leaned on tests harder than we expected to: 156 of them, 126 on the converter and 30 driving the browser, with the geometry checked against numbers we worked out by hand rather than against the code's own output.
What we learned
The geometry was never the hard part. The hard part is the manufacturing knowledge sitting behind it: how far apart traces have to be before tape will shear between them, how much a printed hole shrinks, how thin a feature can get before a 0.4 mm nozzle gives up. Every one of those turned into a parameter we can tune rather than a number we hard-coded.
We learned that 3D file formats quietly lose precision, and that a model can be perfect in memory and broken the moment you save it.
Designing for hardware we weren't allowed to damage changed every decision we made, mostly for the better. It's why the board touches the badge with nothing but spring pins.
And we learned to test the way a person actually touches the thing. The browser tests found in ten seconds what we'd missed by reading the code.
What's next for PCB - Protect the Canadian Bird
We want to fold the cutter, tray and moat geometry into the converter, so a board and its cutter come out as printable files in one step with no manual CAD in between.
We'd like the spacing problem handled properly: report every place two nets are too close, then offer to push the tracks apart and write a new KiCad file for you to review.
We want to replace our researched tolerances with measured ones by printing a coupon that sweeps trace width, gap and shear clearance.
We designed the web app so a description in plain words could become an editable draft board, with the same rules checking it. We didn't ship that this weekend, but the schema and the validation are already there for it.
And we want more cartridges. Different copper, different puzzle, same badge. That was the original idea, and the pipeline makes it cheap now.
Built With
- pcb
Log in or sign up for Devpost to join the conversation.