{"article":{"slug":"making-1-750-programmable-pcb-badges-for-canadas-biggest-hackathon","title":"Making 1,750 programmable PCB badges for Canada's biggest hackathon","subtitle":null,"summary":"Nick Ficara tells how Hack the North's cardstock name tag became 1,750 programmable circuit-board badges with a screen, buttons and radio, walking through EVT, DVT and PVT prototypes, part-selection errors, flipped ICs, supply chain and the production run, with open-source hardware, firmware and a WebAssembly emulator.","content_type":"blog_post","language":"en","canonical_url":"https://va3ndf.com/blog/hacker-badges/","author":{"name":"Nick Ficara","url":"https://va3ndf.com","person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"Nick Ficara","url":"https://va3ndf.com","listing_slug":null,"listing":null},"topics":[{"name":"Hardware","slug":"hardware","url":"https://listedarticles.com/topics/hardware"},{"name":"Electronics","slug":"electronics","url":"https://listedarticles.com/topics/electronics"},{"name":"Hackathons","slug":"hackathons","url":"https://listedarticles.com/topics/hackathons"},{"name":"Open Source","slug":"open-source","url":"https://listedarticles.com/topics/open-source"}],"about_listings":[],"cover_image_url":null,"license":"all-rights-reserved","word_count":5525,"reading_minutes":24,"published_at":"2026-10-13T00:00:00.000Z","added_at":"2026-10-16T23:11:39.844Z","updated_at":"2026-10-16T23:11:39.844Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":true},"profile_url":"https://listedarticles.com/articles/making-1-750-programmable-pcb-badges-for-canadas-biggest-hackathon","markdown_url":"https://listedarticles.com/articles/making-1-750-programmable-pcb-badges-for-canadas-biggest-hackathon.md","example":false,"citation":"Nick Ficara, Nick Ficara. \"Making 1,750 programmable PCB badges for Canada's biggest hackathon.\" 13 Oct 2026. https://va3ndf.com/blog/hacker-badges/ (all-rights-reserved)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://va3ndf.com/blog/hacker-badges/"},"body_markdown":"# Making 1,750 programmable PCB badges for Canada's biggest hackathon\n\nAt most hackathons, your badge is a piece of cardstock on a lanyard. This year at Hack the North, Canada’s biggest hackathon, it was a circuit board with a screen, buttons, and a radio, and you could program it to do whatever you wanted.\n\nOn the Saturday, a team walked up to me holding four of them. They’d turned them into a working game of Among Us.\n\nEight months earlier, our badges were going to be made of cardstock too.\n\nIf you want to play with the badge before reading, go ahead! I made an emulator:\n\n[![The Hack the North 2026 badge](https://va3ndf.com/assets/badge-emulator.BCbClj-G_97ynN.webp) Start emulator](https://va3ndf.com/badge-emulator.html)\n\n[Open the full emulator](https://va3ndf.com/badge-emulator.html)\n\nThe badge's real firmware, compiled to WebAssembly.\n\nEverything is open source: the [hardware](https://github.com/hackthenorth/badge-hardware) (KiCad), the [firmware](https://github.com/hackthenorth/badge-firmware), and the [emulator](https://va3ndf.com/badge-emulator.html).\n\n## Why not cardstock\n\nIn mid January, my friend Alex (a PM at Hack the North) asked if I wanted to join Hack the North. The moment I got that message, a vision popped into my head. What if we brought the [badge culture](https://www.vice.com/en/article/a-history-of-badgelife-def-cons-unlikely-obsession-with-artistic-circuit-boards/) of cybersecurity events into the world of hackathons. What if we made a wave so big other hackathon organizers couldn’t ignore it. What if we brought hardware badges into the mainstream of hackathons. This was our goal.\n\nI quickly put together a deck and pitched the idea to the organizing team.\n\n![Badge presentation](https://va3ndf.com/assets/image.RmUhFuxh_ZxbfRa.webp)\n\nHere’s the executive summary:\n\n- LEDs (as many as we can fit)\n- Screen\n- Battery\n- Buttons\n- Audio\n- Wireless features\n- Cool shape\n- Silkscreen art\n- Lanyards\n\nOh, and all for $5 / head (boy was I naive).\n\nI made it super clear that we’d need multiple hardware iterations to de-risk and guarantee the success of this project. We initially scoped for an EVT (Engineering Validation Test), DVT (Design Validation Test), and 2-3 PVTs (Production Validation Test). We wound up shipping in four iterations, with the fourth being our production run.\n\nBuilt into the original pitch was an escape hatch to rapidly de-scope to blank badges, meaning ordering the badges without the components assembled which would drastically reduce cost. Without this safety net, I don’t think this project would have taken off. The directors, very understandably, did not want this project to (perhaps literally) blow up in our faces. (This was indeed a real risk we considered. Battery safety must be taken seriously.)\n\n![Kickoff meeting](https://va3ndf.com/assets/image-2.Dppd6BVl_ZAx2Gj.webp)\n\nThe initial kickoff meeting ran quite late. As you can see we had quite a few messages in the thread too ranging from reasonable concerns to brilliant ideas!\n\n## Engineering Validation Test (EVT)\n\nI had so much energy going into the initial schematic. It’s like the initial development of a software side project: pure forward development with no scaling problems, bugs, or tech debt. It didn’t have to be pretty, the primary goal was to prove the parts work together.\n\n![EVT schematic](https://va3ndf.com/assets/badge-schematic-EVT.4_yoT6XS_Z2iFL4G.webp)\n\nHere is our first schematic iteration! We’ll get into all the mistakes I made soon.\n\nAs for layout, well, I kinda took charge on it and of course went for the timeless classic: the hexagon. Why? Because HEXAGONS are the BESTAGONS.\n\n### EVT layout\n\n- ![](https://va3ndf.com/assets/badge-layout-EVT-af599aa-front.eaMLZ5Ec_1MUrpd.webp)\n\n  EVT front: the hexagon, with every block called out\n- ![](https://va3ndf.com/assets/badge-layout-EVT-af599aa-back.B8RDrxgk_1XwN3w.webp)\n\n  EVT back: battery holder and bottom-layer routing\n\nThe team were not hexagon ball knowers unfortunately.\n\n![EVT order page](https://va3ndf.com/assets/image-3.Chxz77h7_22WxaX.webp)\n\nThe hexagons stuck around as an engineering test, but the ill fated shape would be killed off in the next iteration. We placed the order on February 15th using JLCPCB, our manufacturing partner in China.\n\nA few issues ensued:\n\n### Part selection error\n\nOn USB, everything worked. On battery power, nothing. The culprit was in the part selector list:\n\n![Part selector list](https://va3ndf.com/assets/image-4.D6wJ3j7X_1V6Ab6.webp)\n\nCan you spot it? C10, C14, and L1 are on the same line. 😱 I labelled capacitors C10 and C14 as “10u”, meaning 10 microfarads. Unfortunately, I also labelled L1 “10u”, which tricked the part finder into giving me a 10uF capacitor in the place of a 10uH inductor. The opposite of what I wanted!\n\nThis was a quick fix. We took a note to not make this mistake again, and on the EVT we were able to just short the inductor and it worked. This probably introduced a lot of noise and efficiency losses into the system, but it was able to handle it somewhat gracefully. Fine for an EVT at least.\n\nLesson\n\nWrite unambiguous values (10uH instead of 10u). Don’t blindly trust the part finder. Check twice.\n\n### Pins too dense to solder\n\nMost small screens come with a thin ribbon cable hanging off them, called an FPC (flexible printed circuit). The normal way to attach one is with a small connector on the board: slide the ribbon in, flip the latch closed. We decided to skimp out on the connector. The plan was to stick the screen down with adhesive and solder the ribbon’s contacts straight onto pads on the board, saving about five cents a badge.\n\n![Screen assembly problem](https://va3ndf.com/assets/image-5.BKv7qUxx_11BVz0.webp)\n\nAny experienced hardware engineer reading this is wincing, I can practically see them. A soldered ribbon is hard to assemble reliably, and once it’s on, replacing a cracked screen requires hot air and a very steady hand. With 1,750 badges at a hackathon, some screens were going to crack.\n\nI knew this was the riskiest part of the assembly. I just wanted to see if we could get away with it. Turns out: nope! About ten days after we ordered, JLCPCB emailed to say the pins were too dense to solder. They offered me two options: leave the screens off entirely, or pick a different part.\n\nI cooked up a third idea. The FPC connector I should have used from the start happened to fit the pads I’d already laid out for the ribbon. JLCPCB soldered the connector onto those pads, plugged the screen into it, and taped it down, all for an extra $4.25 total. We got lucky, and that connector solution stayed with us until the very end.\n\nLesson\n\nDon’t ship manufacturing problems off to the manufacturer. Own them, figure them out, and be clear with them.\n\nThen, a few days later…\n\n![Real life badge](https://va3ndf.com/assets/image-6.eFBIkY1r_hc13v.webp)\n\nThe badge is real!\n\n![Me holding real life badge](https://va3ndf.com/assets/image-7.BiiOaIwK_o4Mzf.webp)\n\nWe hopped right onto a call to chat about it.\n\n![Badge connected to an oscilloscope](https://va3ndf.com/assets/image-9.fH_bu1FC_Z1OdPvA.webp)\n\nWe started testing right away with some basic bring-up firmware to make sure the peripherals worked. Keep in mind this was before the days of zero shotting this sort of thing with AI.\n\nBut did it work? Mostly!\n\nOnce we fixed the L1 inductor issue, all features on the badge worked except for NFC. And even NFC technically worked. It just did the wrong thing.\n\nNFC chips come in two roles. A reader, like the one in your phone or a door’s card scanner, powers up a field and scans things. A tag, like the chip in a transit card or an NFC sticker, sits there passively and gets scanned. We wanted our badges to scan tags. The chip I’d picked was a tag. A phone could scan our badge, but the badge couldn’t scan anything itself.\n\nWhat we really wanted was for two badges to tap together and swap contact details. That needs a chip that can switch between both roles, known as peer-to-peer mode, and those chips cost more than our budget allowed. In hindsight, badge-to-badge NFC was a bad idea anyway. NFC is finicky even with a well-tuned antenna, and ours was barely tuned. The ESP32 already had Bluetooth, which can do the same job without two strangers lining up their badges just right. So for the DVT, we switched to a reader chip for scanning tags and moved the badge bump to Bluetooth + accelerometer.\n\nLesson\n\nCheck that a chip does what you need before working out how to integrate it. The tag chip had all the right pins for our design, and that convinced me it was the right chip. ‘Twas not.\n\n## Design Validation Test (DVT)\n\nThe EVT proved that our parts worked. And the project as a whole was not crazy.\n\nThe DVT’s job was to prove that the *design* worked. This includes getting the real shape, real layout, and NFC chip that actually does what we wanted. Our DVT was best described as an EVT version two. Nonetheless, we had a Linear tracker to keep happy!\n\n![Linear tracker](https://va3ndf.com/assets/image-8.4a-JUfWb_Z1gduLj.webp)\n\n### Fixing NFC\n\nFirst priority was swapping the NFC tag for a reader chip. That turned out to be more than a part swap. The new chip expected a different antenna, and we had neither the tools nor the time to tune a custom one, so I copied the manufacturer’s reference design as closely as I could.\n\nHere was the finalized DVT schematic:\n\n![DVT schematic](https://va3ndf.com/assets/badge-schematic-DVT.DmxSf3Hc_xCsNr.webp)\n\n### Shape and Layout\n\nNow for the fun part. I had the pleasure of working with two very talented designers, which was fortunate, because my PCB art skills are… brutalist.\n\nThe first thing we settled was shape. We wanted something you’d hold like a handheld game console. Not unlike one released in 1989 that I may have [written an emulator](https://va3ndf.com/blog/gameboy-emulator/) for at one point.\n\n![Shape exploration](https://va3ndf.com/assets/image-10.l7rJALk__1l4mxU.webp)\n\nThen came the art, and the design team went all out with colour silkscreen:\n\n![Silkscreen art](https://va3ndf.com/assets/image-11.DPHsDsW7_2gS4IN.webp)\n\nNow, the astute reader will notice we had single colour (white) silkscreen badges in the end.\n\nJLC offers a colour silkscreen service, but there’s a catch: you have to use EasyEDA. We’d been using KiCAD. No problem, we thought, we’ll just import into EasyEDA and then add our silkscreen layers there! It did not work out. Something about our ground plane was breaking EasyEDA’s import and we did not have the time to debug it. We had to de-scope.\n\nLesson\n\nAlways have a plan to de-scope. A badge project only crosses the finish line if you’re willing to cut features ruthlessly. Dropping colour silkscreen was a hard but correct call, made together with Alex.\n\nHere was our DVT layout:\n\n### DVT layout\n\n- ![](https://va3ndf.com/assets/badge-layout-DVT-03245aa-front.DQJpaOc7_Z1CGG7K.webp)\n\n  DVT front: the hexagon now squared off into a rectangle\n- ![](https://va3ndf.com/assets/badge-layout-DVT-03245aa-back.DSRzEpPC_17LF6.webp)\n\n  DVT back: bottom layer, still no silkscreen art\n\n### Waiting\n\nOne of my favourite parts of ordering assembled boards is that JLCPCB X-rays a sample to check the solder joints you can’t see, like the ones hidden under the ESP32 module. Seeing the guts of your own board never gets old:\n\n![X-rays](https://va3ndf.com/assets/image-12.DnhSORHA_20zo2q.webp)\n\nOnce the boards shipped, I had Flightradar24 open all day at work, watching the plane carrying our badges cross the Pacific. (We were in SF.)\n\n![Real life DVT](https://va3ndf.com/assets/image-13.BFRWGyxf_Z16vnTQ.webp)\n\n### Bring up\n\nI had them shipped to my office and stayed up most of the night playing with them. With AI, I had a basic OS and a set of test apps running within about an hour. By the next day there were 22 of them. Every feature worked. It was, as far as a DVT goes, close to perfect!\n\n![OS test](https://va3ndf.com/assets/1731-0001.Ci0Rp-v4_nERPk.webp)\n\nThe colours were all wrong, because I’d sent each pixel’s two bytes in the wrong order. We didn’t catch it for weeks, and happily built apps on wonky colours, assuming the cheap screens just looked like that. *facepalm*\n\nAs we started working on the next hardware cycle, the firmware side came to fruition. We very quickly realized the possibilities of this project. For example, we built a Lua runtime so hackers could write their own apps, a browser-based code editor to write them in, and a shell on the badge itself for poking at its files and settings.\n\n![Badge IDE](https://va3ndf.com/assets/image-14.9wPqfcYv_1yChSH.webp)\n\nAt this very moment, the badge truly evolved from a fancy name tag into a platform for hackers.\n\n## Production Validation Test (PVT)\n\nRiding the high of a working DVT, we felt ready to tackle our full-scale production test. The PVT’s job was to prove we could actually *produce* this thing without needing to rework anything.\n\nMaking a handful of badges was one thing, but doing it at scale turned out to be a whole other beast.\n\nWe ordered 50 on May 14. New silkscreen applied, a few moved components. Nothing too major. Famous last words.\n\nHere was our PVT layout and schematic:\n\n### PVT layout\n\n- ![](https://va3ndf.com/assets/badge-layout-PVT-ff652ac-front.sUuXJZV3_tysMV.webp)\n\n  PVT front: the silhouette and silkscreen art land\n- ![](https://va3ndf.com/assets/badge-layout-PVT-ff652ac-back.C_rntXRR_Z1wvEoG.webp)\n\n  PVT back: sponsor panel, badge rules, emergency contacts\n\n![PVT schematic](https://va3ndf.com/assets/badge-schematic-PVT.DwQ_ufK1_ZOdqdn.webp)\n\n### NorthSec\n\nWhile our PVT was being assembled, I headed to NorthSec, Canada’s premier security conference. Think a Canadian DEF CON. They’ve been running hardware badges for 13 years, and I was there for their CTF with my awesome team. Their badge was fantastic: dazzling reverse-mounted LEDs, SAO headers, buttons, a PCIe connector, the works. It was designed with a screen in mind too, but as I understand it, a supplier fell through and the screens never made it.\n\n![NorthSec badge](https://va3ndf.com/assets/image-15.DYEZklkw_Z17F3Ub.webp)\n\nTheir badge was almost a mirror of ours. Nearly the same components, the same fab, and around 1,500 badges. In their closing ceremony, they walked through every challenge they’d faced, and they could have practically been reading our Slack. They ordered in March for a mid-May event, spent 20 hours on the phone with DHL, got the badges the night before, and flashed them all night.\n\nBy now I was getting quite stressed.\n\nLesson\n\nLearn from your peers. There’s an incredible community of badge developers out there, and they’re happy to share what went wrong. [badge.life](https://badge.life/)\n\n### The PVT arrives\n\nAllow me to set the scene: I was in SF, while most of the team was in Waterloo. We decided to send our PVT run straight to Waterloo in the hopes everything would just *work*, and we could pass badges around the team to start testing. Then we’d simply click “re-order” with a bigger number.\n\nWiiishful thinking.\n\n#### Secret feature: smoke!\n\nOur badges worked great with the batteries in the right way. But of course, we can’t expect every user to put them in the right way. Turns out, if you put them in the wrong way, the badge turns into a smoke machine!\n\nLesson\n\nWhen building hardware, you can’t trust any form of user interaction, especially if it’s safety critical. This should have been obvious, but I think my subconscious filed it as “out of scope” and almost didn’t want to think about it.\n\n#### The flipped ICs\n\nSmoke was indeed a problem, but the bigger one was that our badges just didn’t turn on. Two chips had been placed rotated the wrong way: the NFC chip and one of the power chips.\n\nHow did that happen? During assembly, JLCPCB sent us the final layout with every chip’s orientation and asked us to confirm it all looked OK. What the email didn’t mention was that two of those orientations had changed from what we’d set in the online portal. We gave it a look, nothing jumped out, and we approved it.\n\nLesson\n\nWhen a manufacturer asks you to confirm something, treat it like a full code review. Compare it against your own files and look for what changed, not just whether it looks right. Better yet, ask them to call out anything they changed.\n\nOn June 5th, Alex and Darien (random person helping out, thanks!) spent the whole day in the Waterloo prototyping shop with soldering irons while I debugged over a call from SF. Dead boards read 2.2 V on the power rail. End of day tally: three fully working, two working without NFC, and seven still dead. We didn’t even have time to look at the rest.\n\nWe later reworked every single board, and all 50 ended up working. But “just click re-order” was dead.\n\nLesson\n\nBe ready for rework in development. Don’t be afraid of rework.\n\n0:10\n\n## Picking up the pieces\n\n> You just begin. You do the math, you solve one problem. Then you solve the next one, and then the next and if you solve enough problems you get to come home.\n> - Mark Watney\n\nIf you haven’t seen or read [The Martian](https://en.wikipedia.org/wiki/The_Martian_(film)), then frankly, stop reading this and go read/watch it.\n\nWhile our project was not as critical as getting the first ever space pirate home, I’d like to think any problem, software or hardware, can be fixed by solving enough small problems. So we did the math.\n\n#### De-smokifier\n\nWe added a FET to our battery line in case people put the batteries in the wrong way. Wired for reverse-polarity protection, it only lets current through when the batteries are the right way round. Batteries in backwards now just means the badge doesn’t turn on.\n\nThe problem was realizing this so late. We didn’t have time for another PVT to test the change, so it was going straight into production. To be safe, I reworked a FET I had lying around onto a PVT board to make sure it passed some form of smoke check. We also hedged our bets with a bypass jumper in case the fix broke something else.\n\n![Hand-reworked FET](https://va3ndf.com/assets/image-16.C_ulTA6a_C4lfa.webp)\n\n(Yes, my rework abilities could use some work. In fairness to me, I was soldering to a ground fill.)\n\nIt worked! Power profiling showed almost no efficiency loss either. We also added battery safety instructions to the back silkscreen for good measure.\n\n#### Orientation dots\n\nMost PCB silkscreens include small dots showing which way each chip goes. We didn’t include those for aesthetic reasons. We reversed that decision and added the dots. They’re barely noticeable, and they helped a ton in our final run to double-check orientations.\n\n#### First article inspection\n\nWe had to cut the “find out when it arrives” nonsense. For production, JLCPCB would assemble a small first batch, send us photos and test results, and wait for our go-ahead before building the rest. If something was wrong, we’d only lose a few badges instead of the full 1,750.\n\n#### Clarity in emails\n\nA lot of our PVT failures came down to communication. So I wrote JLCPCB a long email titled “Issues to Resolve Before Our 2,000+ Unit Order.” I attached photos side by side: a correctly assembled screen from our previous order next to what we’d just received. No ambiguity about what “taped down” means.\n\nThis question we added turned out to be one of the most useful ones we could have asked:\n\n> “What is the best way for us to document this requirement so it works well for your process? A dedicated assembly drawing, a process note on the order, attached reference photos, or referencing the previous order number? We’re happy to provide whatever makes it unambiguous on the production floor.”\n\nTheir answer: text-only instructions can be unclear for their operators, so send a PDF with screenshots. Easy! We wrote our test procedure the same way.\n\nLesson\n\nAsk the factory how to tell the factory things. They know what their operators need.\n\n## Supply chain\n\nI knew the parts supply chain was going to be a problem. I knew this in February. I made every possible effort to not have it be an issue. It became an issue.\n\n![Our first pre-order](https://va3ndf.com/assets/pre-order.Cf7JCPTt_wmwGg.webp)\n\nThis was our first pre-order. We only pre-ordered parts that didn’t have enough resting stock on JLCPCB for our order. This turned out to be a mistake. Resting stock fluctuates fast, and it can be rug pulled out from under you.\n\nEven when you pre-order, lead times can be long. We placed this pre-order on April 30, and the screens came June 10. Maybe that’s short for HBM chips, but for a hackathon, that’s a long time!\n\nCase in point: when we were designing the board, the WS2812B-2020 LED had plenty of resting stock. No reason to pre-order, right? Right as we were about to order, the LEDs were rug-pulled from under us. The stock count flipped between 22,000 and 3,000 every time I refreshed the page. Our first pre-order got cancelled over our order quantity not being a round number. The second quote was cheaper, but 29 business days out. Useless. The third came back at 8 business days, and we grabbed it. Our production order slipped while we waited.\n\nLesson\n\nLock in supply early. Pre-order all but the most common passives as soon as your design is locked down, if your finance team can support it. Especially the critical parts: power, screen, and micro.\n\n## Production Run\n\nOn June 30, we hit order: 1,750 populated badges for hackers, plus 750 blank boards for volunteers. The blanks showed up a week later. The populated ones were going to take a while.\n\n### All the marbles\n\nRemember the “does this look OK?” email that got us during the PVT? Before production, JLCPCB sent us their placement render to confirm, just like last time. This time, I checked every single rotation against our own files. Good thing I did: the brand-new FET, the one we’d added to stop the smoke, was rotated the wrong way.\n\n![Placement render](https://va3ndf.com/assets/image-17.DSdQRUsO_Z1PH6uR.webp)\n\nThis run was indeed for all the marbles.\n\nHere was our final design with the added FET change included:\n\n### Production layout\n\n- ![](https://va3ndf.com/assets/badge-layout-PROD-20d64f3-front.DBHF9Qlf_WILU0.webp)\n\n  Production front: the art that shipped on 2,500 boards\n- ![](https://va3ndf.com/assets/badge-layout-PROD-20d64f3-back.BwbHIIjk_Z2pgjhs.webp)\n\n  Production back: the final sponsor and info panel\n\n### Gigapixel photos\n\nA week later, JLCPCB sent us gigapixel photos of our badges in production!\n\n![Production line photo](https://va3ndf.com/assets/high-res-1.GbtsinQ__Zfbjns.webp)\n![Production line close-up](https://va3ndf.com/assets/high-res-2.BxPcvo5k_Z1XggfS.webp)\n\n(I don’t think I can include the raw ones here, as they are massive.)\n\n### The first article that wasn’t\n\nThen I noticed the order status: “Packaging.”\n\nAfter the PVT, we’d set up a first article inspection. JLCPCB would build a small first batch, test it, send us the results, and wait for our go-ahead before building the rest. Alex had been worried about exactly this: having them assemble everything, test a few, and *then* tell us something’s wrong. “Packaging” meant the whole run was already built.\n\n“Did they just completely ignore the testing procedure?” I asked in Slack.\n\nWe emailed right away asking them not to ship until they’d confirmed the testing status. The next day, they sent a video of operators running our test firmware on the line, and the boards were passing. Phew. But the step meant to stop a repeat of the PVT never happened. If something had been wrong, we would have found out with 1,750 boards built instead of a couple dozen.\n\nLesson\n\nAsking for a process step doesn’t mean it happens. Get confirmation at each checkpoint *before* the next step starts, not after.\n\n### The toothbrush\n\nTesting turned up a few casualties. One NFC chip failed and got swapped for a spare from our own stock. One board had a missing pad that couldn’t be repaired. (We took it anyway.)\n\nThen came the cleaning question. Assembly leaves flux residue on the boards, and over 1,000 of ours were finished but not yet cleaned. JLCPCB’s cleaning method? A toothbrush wrapped in a cleanroom wipe, by hand, one board at a time. With a warning that the cleaning solution was corrosive and might discolour some components.\n\nWe paid the $59.11. These were going around 1,750 necks, and we wanted them clean.\n\n### Speed over perfection\n\nOn August 10, 25 screens failed testing: a bad batch from the supplier. That left 1,725 boards ready and 25 stuck waiting on replacement screens.\n\nThe math was simple. Hack the North was September 18th, and that date wasn’t moving. Shipping took about a week, so the boards had to leave by August 20 at the latest, and I wanted them out by the 15th. So I wrote what might be the most important email of the whole project:\n\n> “Around 1,600 working boards on time is far more valuable to us than 1,750 perfect boards arriving late.”\n\nI gave them approval to skip reworks, set aside problem boards, and ship whatever was ready. I offered to reply at any hour, pay extra fees, switch to WhatsApp, or hop on a call in Chinese. Whatever it took.\n\nLesson\n\nTell your manufacturer what matters most. They can’t make trade-offs they don’t know you’d accept.\n\nThe same thread brought one last piece of feedback: a few hand-soldered battery holders had weak joints, because the pads were exactly the size of the holder’s metal tabs. Their recommendation was to make the pads at least 0.5 mm bigger on each side so the solder has room to flow. In fairness to me, I’d used JLCPCB’s own footprint for that part.\n\nLesson\n\nLibrary footprints aren’t gospel. Check them against the manufacturer’s recommendations, especially for parts that get soldered by hand.\n\n### Wheels up\n\n![Flight radar](https://va3ndf.com/assets/image-18.CNT2sbBt_1XoBpH.webp)\n\nThe badges shipped on August 13. And yes, I had Flightradar24 open again, this time watching a DHL 777 freighter carry them from Hong Kong to Anchorage at 31,000 feet.\n\nThey arrived on August 20, roughly a month before event.\n\n![Boxes stacked up](https://va3ndf.com/assets/boxes.D9KKaDs0_Z1UlAS5.webp)\n\nThere were 34 boxes, with roughly 50 each.\n\n## What it cost\n\nIn the pitch, I promised $5 a head. Reader, it was not $5 a head.\n\nThe production order from JLCPCB was $14,338.40, with $5,958.61 in pre-ordered parts on top. The blank badges we ordered came out to $570.70 for the 750 boards.\n\nThat’s about $20,300 for 1,750 assembled boards, or roughly $11.60 per populated badge. This doesn’t include the cost of R&D, batteries, extra screens, event NFC stickers, etc.\n\n## Preparing the badges\n\n0:21\n\n0:16\n\nOur process was simple but time consuming:\n\n1. Open the box and remove the bubble wrap\n2. Take the badges out, and stack them with one foam in between each\n3. Snap the rail (the other side’s rail was snapped by JLC for access to the USB-C port)\n4. Clean off the sides with steel wool (we switched to using the rails themselves after)\n5. Flash it (this was so fun we decided to do it twice!)\n6. Attach the event lanyard\n7. Re-package\n\nWe started at 7pm. We finished at 3am. It takes a truly devoted team to pull this off. Thank you team!\n\n## The weekend\n\nThe greatest moment during event weekend was seeing hackers take our badges and make them their own. We kicked things off with a crash course on the badge at opening ceremonies:\n\n![Ceremonies](https://va3ndf.com/assets/ceremonies.DonnCzdY_Z1u9RIn.webp)\n\nAnd soon after hackers were flashing custom apps:\n![Acon's Firmware](https://va3ndf.com/assets/3941.SEg82VqG_Z1lJD0B.webp)\n\nAdding people on social media with the badge bump feature:\n![Connecting with hackers](https://va3ndf.com/assets/IMG_6791.K9R6U8QR_Z1MfAu2.webp)\n\nAnd some went extra crazy! We saw one team turn the badges into controllers for Tux Racer!\n![Racing game](https://va3ndf.com/assets/_MG_3964.BogNhJAZ_Z27zwGM.webp)\n\nAnd this team live-demoing a beat sync app on the badges!\n![On stage](https://va3ndf.com/assets/LOG04129.DDciTbYX_Z1oAbNG.webp)\n\nOverall, the weekend went phenomenally. The badges worked.\n\nWe also ran a workshop to teach hackers how to hack their badges. This went incredibly well. There were so many hackers that came running up afterward holding their badges out showing us the insane things they were doing.\n\n![Workshop](https://va3ndf.com/assets/1000060225.Cr7SyaTR_2oO5m9.webp)\n\nThe devpost submissions for badge hacks began flowing in, and they just didn’t stop. [Devpost filtered by badge hacks.](https://hackthenorth2026.devpost.com/submissions/search?utf8=%E2%9C%93&prize_filter%5Bprizes%5D%5B%5D=105913).\n\n### Badge hacks\n\n- ![](https://va3ndf.com/assets/bingbong.Bvau8EbE_CMf6m.webp)\n\n  bingbong: rhythm game finalist\n- ![](https://va3ndf.com/assets/firmwar.DvAZBci2_ZYVNOc.webp)\n\n  FirmWar: a multiplayer shooter\n- ![](https://va3ndf.com/assets/hackamon.RX3NnaV-_1HfI5B.webp)\n\n  Hackamon: Pokémon GO with NFC\n- ![](https://va3ndf.com/assets/badgemon.Bqla_eCz_1C60w2.webp)\n\n  Badgémon: battle whoever's nearby\n- ![](https://va3ndf.com/assets/badge-kart.B7BtlaLe_1pVjiS.webp)\n\n  Badge Kart: shake for nitro\n- ![](https://va3ndf.com/assets/murph-e.ExSOKgkm_Z2b1poq.webp)\n\n  Murph-e: describe a game, play it\n- ![](https://va3ndf.com/assets/protect-the-canadian-bird.DEu5zjTo_ZRM3OX.webp)\n\n  Operation, on a goose\n- ![](https://va3ndf.com/assets/trojan-badge.76mlaXkS_O6XcK.webp)\n\n  Trojan Badge: a badge-to-badge virus\n- ![](https://va3ndf.com/assets/controll.CoT394Wv_Z1RruXp.webp)\n\n  ContROLL: FPV driving on your badge\n- ![](https://va3ndf.com/assets/hedge-the-north.CxLrCVbC_1b50Vi.webp)\n\n  Hedge The North: tap to bet\n- ![](https://va3ndf.com/assets/solarpay.DMpaJ0VE_1e7NAW.webp)\n\n  SolarPay: tap to pay\n- ![](https://va3ndf.com/assets/bump.DpbBvlez_JsDtC.webp)\n\n  Bump: every connection, mapped\n- ![](https://va3ndf.com/assets/hack-the-dex.C5feQuRC_ZbUBkX.webp)\n\n  Hack the Dex: a Pokédex of people\n- ![](https://va3ndf.com/assets/nored.B_S9RCf7_Z2s5jhm.webp)\n\n  Nored: messaging with no Wi-Fi\n\nOne of the most insane projects we were blown away by was the Among Us project. This team implemented a mesh networked way to play Among Us on the badges using custom firmware. All in one weekend.\n\n![Among Us on the badge](https://va3ndf.com/assets/image-19.BGp9feTR_ZFdPWg.webp)\n\nThe badge project also seemed to have garnered some social media attention. Here are a few of the X posts:\n\n### On X\n\n- [![](https://va3ndf.com/tweets/avatar-2000062958282612736.jpg)   Alex Scott  @afscott](https://x.com/afscott)\n\n  solana sponsored a hackathon with the best badges ive ever seen\n\n   [![](https://va3ndf.com/tweets/2101939929240715546-1.jpg)![](https://va3ndf.com/tweets/2101939929240715546-2.jpg)](https://x.com/afscott/status/2101939929240715546)\n\n    [Sep 21, 2026](https://x.com/afscott/status/2101939929240715546)   266 likes 41 replies\n- [![](https://va3ndf.com/tweets/avatar-2097604919671025664.jpg)   Solana  @solana](https://x.com/solana)\n\n  gm\n\n  Spent the weekend touching hardware instead of touching grass at [@HackTheNorth](https://x.com/HackTheNorth)\n\n    [Sep 21, 2026](https://x.com/solana/status/2102017817423843425)   422 likes 151 replies\n- [![](https://va3ndf.com/tweets/avatar-1653252742259826689.jpg)   Laguna 🌴  @lagunacarta](https://x.com/lagunacarta)\n\n  Talked to some teams hacking the badge and they have added:\n  - custom lights\n  - Super Mario\n  - prediction market\n  - Solana pay\n  - remote control car control\n  - sensors that pay via x402\n\n  Countless other wild and wacky ideas at [@HackTheNorth](https://x.com/HackTheNorth), I’m ruined for regular conference badges\n\n    [Sep 20, 2026](https://x.com/lagunacarta/status/2101705583896211516)   41 likes 8 replies\n- [![](https://va3ndf.com/tweets/avatar-2036310946877153280.jpg)   Ryu  @RyushenTan](https://x.com/RyushenTan)\n\n  Actually the coolest hacker badge I’ve seen, also if you see me stop me to connect badges [@HackTheNorth](https://x.com/HackTheNorth)\n\n   [![](https://va3ndf.com/tweets/2101205037317837049-1.jpg)](https://x.com/RyushenTan/status/2101205037317837049)\n\n    [Sep 19, 2026](https://x.com/RyushenTan/status/2101205037317837049)   13 likes 1 replies\n- [![](https://va3ndf.com/tweets/avatar-2074672236762382336.jpg)   まぐー  @magooyyz](https://x.com/magooyyz)\n\n  先日、夫がウォータールー大学のHack the Northでもらった電子バッジ🪪、こんなん初めて見た！↓\n  相手のバッジと重ねると名刺交換できたり、参加企業やガイドも見れてなかなか良いけど、後ろに単3電池2個も付いてて首からかけると…まぁまぁ重いっ！😂\n  イベント終了が深夜0時でシンデレラ帰宅おそっ！\n\n   [![](https://va3ndf.com/tweets/2102919701592682570-1.jpg)![](https://va3ndf.com/tweets/2102919701592682570-2.jpg)](https://x.com/magooyyz/status/2102919701592682570)\n\n    [Sep 24, 2026](https://x.com/magooyyz/status/2102919701592682570)   9 likes 1 replies\n- [![](https://va3ndf.com/tweets/avatar-2066334134793056256.jpg)   jeremy  @suymerej](https://x.com/suymerej)\n\n  my last year at HTN is over 🥲\n\n   [![](https://va3ndf.com/tweets/2102501349044650358-1.jpg)![](https://va3ndf.com/tweets/2102501349044650358-2.jpg)](https://x.com/suymerej/status/2102501349044650358)\n\n    [Sep 22, 2026](https://x.com/suymerej/status/2102501349044650358)   69 likes 7 replies\n\n## By the numbers\n\nBy closing ceremonies, the badges had logged\n\n- 11,700 badge-bump connections\n- 40,000 sponsor table scans\n- 540 Solana blind box scans\n- 420,000 bubbles popped (about 240 per badge)\n- 120 custom app hacks built\n\nThe post-event survey was just as kind. Of the 115 hackers who answered, 90% called getting the badge “Awesome!” or “Literally incredible,” and 72% said it was a big part of their weekend, or the biggest. It wasn’t all praise though. Contact sharing was the badge’s main job, and while 87% of respondents tried it, only about half of those found it really helpful. The top complaint, from 24 people, was that the badge was heavy and clunky to wear, and some stopped wearing it altogether. Completely fair. Two AAs on a bare board is a lot to hang around your neck.\n\n## Closing\n\nThis is for hackathon organizers:\n\nWhen we started, hardware badges at hackathons were rare, and I wanted to know why. I think it’s because they look impossible from the outside. I’m here to tell you they aren’t. We did it with a handful of people, one credit card, and a little grit. The factory is ultimately a web form, the parts are just rows in a table, and mistakes are expensive but survivable.\n\nSo here’s my challenge to you: beat us.\n\nMake the colour silkscreen we couldn’t. Build a better power architecture. Integrate the badge better into your hackathon. Add a better radio, maybe even connect to event Wi-Fi. Get a nicer screen. Use a more powerful MCU. Spec it to run Linux. Add a crypto chip. Make it bend or fold.\n\nThis post exists to hand you receipts proving it’s possible and a not-so-crazy idea.\n\nI can’t wait to see what you build.\n\nSend me an email any time:\nnick [-at-] va3ndf.com\n\nEverything we’ve built is open source: the [hardware](https://github.com/hackthenorth/badge-hardware) (KiCad), the [firmware](https://github.com/hackthenorth/badge-firmware), and the [emulator](https://va3ndf.com/badge-emulator.html). Feel free to use it as licensed!\n\nDisclosure: JLCPCB and EasyEDA partially sponsored this project. Where things went wrong in this post, the root cause was almost always on my end. They’re a professional fab. I’m a hacker with more ambition than experience.\n\nP.S.\n\nThis wouldn’t have been possible without Solana, who sponsored the badge. But they were far more than a sponsor. We worked closely with [@spacemandev](https://x.com/spacemandev) throughout the project. He built a scavenger hunt into the badge that over 300 people attempted, and he spent the hackathon mentoring hackers on firmware and all things Solana. He felt like part of the team, and we loved having him.\n\nP.P.S.\n\nAbout Alex, my friend and PM at Hack the North. Put plainly: without Alex, you wouldn’t be reading this.\n\nHe was assigned as my PM from the very beginning. My honest first reaction was “great, they’re giving me a babysitter. I guess that’s fair, given how much money is about to get thrown at this.” Boy was I wrong.\n\nFinishing projects has always been incredibly hard for me. If you run `ls | wc -l` in my programming directory, you get roughly 380. And no, that’s not where I clone other people’s code. Those are all my own projects from 12 years of being a developer. Exactly one of them is finished: Hacker Badges.\n\nDon’t get me wrong, every one of those taught me something, and together they gave me a very broad set of skills. But it would have been nice to ship one. So… what was missing from all the others?\n\nAlex.\n\nA project like this put every one of my weaknesses on full display, and Alex jumped in exactly where I needed him and kept me going. He has a line that’s going to stick with me and ruin all my future PMs: “A good PM sees a problem and doesn’t go find someone to complain to. They just fix it themselves if they can.” He lived it. He dove into the firmware directory, cleared out the backlog of polish items, and ended up with more commits than me.\n\nAnd the badge was only part of it. He managed backend and frontend, and had a hand in nearly every other subteam. Since February, he’s put something like 1,000 hours into making Hack the North magical for hackers, including three hours of calls every single day after work at his internship. At one point he was interviewing for an incredible software engineering job, and on his short lunch break between interviews, he was texting me QA notes on the badge. (He got the job. Obviously.)\n\nPeople this dedicated to anything, let alone a volunteer-run hackathon, are rare. Hack the North was incredibly lucky to have Alex for three years. The 1,750 attendees wearing his badge probably have no idea, but they were lucky too.\n\nGood luck, Alex!\n\n![The Badge Bros](https://va3ndf.com/assets/badge-bros.TDb35dcf_ZtgzBV.webp)\n\n*Left: Me, Right: Alex*\n\n<https://badge.hackthenorth.com/>\n","body_html":"<h1 id=\"making-1-750-programmable-pcb-badges-for-canada-s-biggest-hackat\">Making 1,750 programmable PCB badges for Canada&#39;s biggest hackathon</h1>\n<p>At most hackathons, your badge is a piece of cardstock on a lanyard. This year at Hack the North, Canada’s biggest hackathon, it was a circuit board with a screen, buttons, and a radio, and you could program it to do whatever you wanted.</p>\n<p>On the Saturday, a team walked up to me holding four of them. They’d turned them into a working game of Among Us.</p>\n<p>Eight months earlier, our badges were going to be made of cardstock too.</p>\n<p>If you want to play with the badge before reading, go ahead! I made an emulator:</p>\n<p><a href=\"https://va3ndf.com/badge-emulator.html\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/assets/badge-emulator.BCbClj-G_97ynN.webp\" alt=\"The Hack the North 2026 badge\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /> Start emulator</a></p>\n<p><a href=\"https://va3ndf.com/badge-emulator.html\" rel=\"nofollow ugc noopener\">Open the full emulator</a></p>\n<p>The badge&#39;s real firmware, compiled to WebAssembly.</p>\n<p>Everything is open source: the <a href=\"https://github.com/hackthenorth/badge-hardware\" rel=\"nofollow ugc noopener\">hardware</a> (KiCad), the <a href=\"https://github.com/hackthenorth/badge-firmware\" rel=\"nofollow ugc noopener\">firmware</a>, and the <a href=\"https://va3ndf.com/badge-emulator.html\" rel=\"nofollow ugc noopener\">emulator</a>.</p>\n<h2 id=\"why-not-cardstock\">Why not cardstock</h2>\n<p>In mid January, my friend Alex (a PM at Hack the North) asked if I wanted to join Hack the North. The moment I got that message, a vision popped into my head. What if we brought the <a href=\"https://www.vice.com/en/article/a-history-of-badgelife-def-cons-unlikely-obsession-with-artistic-circuit-boards/\" rel=\"nofollow ugc noopener\">badge culture</a> of cybersecurity events into the world of hackathons. What if we made a wave so big other hackathon organizers couldn’t ignore it. What if we brought hardware badges into the mainstream of hackathons. This was our goal.</p>\n<p>I quickly put together a deck and pitched the idea to the organizing team.</p>\n<figure><img src=\"https://va3ndf.com/assets/image.RmUhFuxh_ZxbfRa.webp\" alt=\"Badge presentation\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>Here’s the executive summary:</p>\n<ul><li>LEDs (as many as we can fit)</li><li>Screen</li><li>Battery</li><li>Buttons</li><li>Audio</li><li>Wireless features</li><li>Cool shape</li><li>Silkscreen art</li><li>Lanyards</li></ul>\n<p>Oh, and all for $5 / head (boy was I naive).</p>\n<p>I made it super clear that we’d need multiple hardware iterations to de-risk and guarantee the success of this project. We initially scoped for an EVT (Engineering Validation Test), DVT (Design Validation Test), and 2-3 PVTs (Production Validation Test). We wound up shipping in four iterations, with the fourth being our production run.</p>\n<p>Built into the original pitch was an escape hatch to rapidly de-scope to blank badges, meaning ordering the badges without the components assembled which would drastically reduce cost. Without this safety net, I don’t think this project would have taken off. The directors, very understandably, did not want this project to (perhaps literally) blow up in our faces. (This was indeed a real risk we considered. Battery safety must be taken seriously.)</p>\n<figure><img src=\"https://va3ndf.com/assets/image-2.Dppd6BVl_ZAx2Gj.webp\" alt=\"Kickoff meeting\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>The initial kickoff meeting ran quite late. As you can see we had quite a few messages in the thread too ranging from reasonable concerns to brilliant ideas!</p>\n<h2 id=\"engineering-validation-test-evt\">Engineering Validation Test (EVT)</h2>\n<p>I had so much energy going into the initial schematic. It’s like the initial development of a software side project: pure forward development with no scaling problems, bugs, or tech debt. It didn’t have to be pretty, the primary goal was to prove the parts work together.</p>\n<figure><img src=\"https://va3ndf.com/assets/badge-schematic-EVT.4_yoT6XS_Z2iFL4G.webp\" alt=\"EVT schematic\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>Here is our first schematic iteration! We’ll get into all the mistakes I made soon.</p>\n<p>As for layout, well, I kinda took charge on it and of course went for the timeless classic: the hexagon. Why? Because HEXAGONS are the BESTAGONS.</p>\n<h3 id=\"evt-layout\">EVT layout</h3>\n<ul><li><p><img src=\"https://va3ndf.com/assets/badge-layout-EVT-af599aa-front.eaMLZ5Ec_1MUrpd.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>EVT front: the hexagon, with every block called out</p></li><li><p><img src=\"https://va3ndf.com/assets/badge-layout-EVT-af599aa-back.B8RDrxgk_1XwN3w.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>EVT back: battery holder and bottom-layer routing</p></li></ul>\n<p>The team were not hexagon ball knowers unfortunately.</p>\n<figure><img src=\"https://va3ndf.com/assets/image-3.Chxz77h7_22WxaX.webp\" alt=\"EVT order page\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>The hexagons stuck around as an engineering test, but the ill fated shape would be killed off in the next iteration. We placed the order on February 15th using JLCPCB, our manufacturing partner in China.</p>\n<p>A few issues ensued:</p>\n<h3 id=\"part-selection-error\">Part selection error</h3>\n<p>On USB, everything worked. On battery power, nothing. The culprit was in the part selector list:</p>\n<figure><img src=\"https://va3ndf.com/assets/image-4.D6wJ3j7X_1V6Ab6.webp\" alt=\"Part selector list\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>Can you spot it? C10, C14, and L1 are on the same line. 😱 I labelled capacitors C10 and C14 as “10u”, meaning 10 microfarads. Unfortunately, I also labelled L1 “10u”, which tricked the part finder into giving me a 10uF capacitor in the place of a 10uH inductor. The opposite of what I wanted!</p>\n<p>This was a quick fix. We took a note to not make this mistake again, and on the EVT we were able to just short the inductor and it worked. This probably introduced a lot of noise and efficiency losses into the system, but it was able to handle it somewhat gracefully. Fine for an EVT at least.</p>\n<p>Lesson</p>\n<p>Write unambiguous values (10uH instead of 10u). Don’t blindly trust the part finder. Check twice.</p>\n<h3 id=\"pins-too-dense-to-solder\">Pins too dense to solder</h3>\n<p>Most small screens come with a thin ribbon cable hanging off them, called an FPC (flexible printed circuit). The normal way to attach one is with a small connector on the board: slide the ribbon in, flip the latch closed. We decided to skimp out on the connector. The plan was to stick the screen down with adhesive and solder the ribbon’s contacts straight onto pads on the board, saving about five cents a badge.</p>\n<figure><img src=\"https://va3ndf.com/assets/image-5.BKv7qUxx_11BVz0.webp\" alt=\"Screen assembly problem\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>Any experienced hardware engineer reading this is wincing, I can practically see them. A soldered ribbon is hard to assemble reliably, and once it’s on, replacing a cracked screen requires hot air and a very steady hand. With 1,750 badges at a hackathon, some screens were going to crack.</p>\n<p>I knew this was the riskiest part of the assembly. I just wanted to see if we could get away with it. Turns out: nope! About ten days after we ordered, JLCPCB emailed to say the pins were too dense to solder. They offered me two options: leave the screens off entirely, or pick a different part.</p>\n<p>I cooked up a third idea. The FPC connector I should have used from the start happened to fit the pads I’d already laid out for the ribbon. JLCPCB soldered the connector onto those pads, plugged the screen into it, and taped it down, all for an extra $4.25 total. We got lucky, and that connector solution stayed with us until the very end.</p>\n<p>Lesson</p>\n<p>Don’t ship manufacturing problems off to the manufacturer. Own them, figure them out, and be clear with them.</p>\n<p>Then, a few days later…</p>\n<figure><img src=\"https://va3ndf.com/assets/image-6.eFBIkY1r_hc13v.webp\" alt=\"Real life badge\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>The badge is real!</p>\n<figure><img src=\"https://va3ndf.com/assets/image-7.BiiOaIwK_o4Mzf.webp\" alt=\"Me holding real life badge\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>We hopped right onto a call to chat about it.</p>\n<figure><img src=\"https://va3ndf.com/assets/image-9.fH_bu1FC_Z1OdPvA.webp\" alt=\"Badge connected to an oscilloscope\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>We started testing right away with some basic bring-up firmware to make sure the peripherals worked. Keep in mind this was before the days of zero shotting this sort of thing with AI.</p>\n<p>But did it work? Mostly!</p>\n<p>Once we fixed the L1 inductor issue, all features on the badge worked except for NFC. And even NFC technically worked. It just did the wrong thing.</p>\n<p>NFC chips come in two roles. A reader, like the one in your phone or a door’s card scanner, powers up a field and scans things. A tag, like the chip in a transit card or an NFC sticker, sits there passively and gets scanned. We wanted our badges to scan tags. The chip I’d picked was a tag. A phone could scan our badge, but the badge couldn’t scan anything itself.</p>\n<p>What we really wanted was for two badges to tap together and swap contact details. That needs a chip that can switch between both roles, known as peer-to-peer mode, and those chips cost more than our budget allowed. In hindsight, badge-to-badge NFC was a bad idea anyway. NFC is finicky even with a well-tuned antenna, and ours was barely tuned. The ESP32 already had Bluetooth, which can do the same job without two strangers lining up their badges just right. So for the DVT, we switched to a reader chip for scanning tags and moved the badge bump to Bluetooth + accelerometer.</p>\n<p>Lesson</p>\n<p>Check that a chip does what you need before working out how to integrate it. The tag chip had all the right pins for our design, and that convinced me it was the right chip. ‘Twas not.</p>\n<h2 id=\"design-validation-test-dvt\">Design Validation Test (DVT)</h2>\n<p>The EVT proved that our parts worked. And the project as a whole was not crazy.</p>\n<p>The DVT’s job was to prove that the <em>design</em> worked. This includes getting the real shape, real layout, and NFC chip that actually does what we wanted. Our DVT was best described as an EVT version two. Nonetheless, we had a Linear tracker to keep happy!</p>\n<figure><img src=\"https://va3ndf.com/assets/image-8.4a-JUfWb_Z1gduLj.webp\" alt=\"Linear tracker\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<h3 id=\"fixing-nfc\">Fixing NFC</h3>\n<p>First priority was swapping the NFC tag for a reader chip. That turned out to be more than a part swap. The new chip expected a different antenna, and we had neither the tools nor the time to tune a custom one, so I copied the manufacturer’s reference design as closely as I could.</p>\n<p>Here was the finalized DVT schematic:</p>\n<figure><img src=\"https://va3ndf.com/assets/badge-schematic-DVT.DmxSf3Hc_xCsNr.webp\" alt=\"DVT schematic\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<h3 id=\"shape-and-layout\">Shape and Layout</h3>\n<p>Now for the fun part. I had the pleasure of working with two very talented designers, which was fortunate, because my PCB art skills are… brutalist.</p>\n<p>The first thing we settled was shape. We wanted something you’d hold like a handheld game console. Not unlike one released in 1989 that I may have <a href=\"https://va3ndf.com/blog/gameboy-emulator/\" rel=\"nofollow ugc noopener\">written an emulator</a> for at one point.</p>\n<figure><img src=\"https://va3ndf.com/assets/image-10.l7rJALk__1l4mxU.webp\" alt=\"Shape exploration\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>Then came the art, and the design team went all out with colour silkscreen:</p>\n<figure><img src=\"https://va3ndf.com/assets/image-11.DPHsDsW7_2gS4IN.webp\" alt=\"Silkscreen art\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>Now, the astute reader will notice we had single colour (white) silkscreen badges in the end.</p>\n<p>JLC offers a colour silkscreen service, but there’s a catch: you have to use EasyEDA. We’d been using KiCAD. No problem, we thought, we’ll just import into EasyEDA and then add our silkscreen layers there! It did not work out. Something about our ground plane was breaking EasyEDA’s import and we did not have the time to debug it. We had to de-scope.</p>\n<p>Lesson</p>\n<p>Always have a plan to de-scope. A badge project only crosses the finish line if you’re willing to cut features ruthlessly. Dropping colour silkscreen was a hard but correct call, made together with Alex.</p>\n<p>Here was our DVT layout:</p>\n<h3 id=\"dvt-layout\">DVT layout</h3>\n<ul><li><p><img src=\"https://va3ndf.com/assets/badge-layout-DVT-03245aa-front.DQJpaOc7_Z1CGG7K.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>DVT front: the hexagon now squared off into a rectangle</p></li><li><p><img src=\"https://va3ndf.com/assets/badge-layout-DVT-03245aa-back.DSRzEpPC_17LF6.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>DVT back: bottom layer, still no silkscreen art</p></li></ul>\n<h3 id=\"waiting\">Waiting</h3>\n<p>One of my favourite parts of ordering assembled boards is that JLCPCB X-rays a sample to check the solder joints you can’t see, like the ones hidden under the ESP32 module. Seeing the guts of your own board never gets old:</p>\n<figure><img src=\"https://va3ndf.com/assets/image-12.DnhSORHA_20zo2q.webp\" alt=\"X-rays\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>Once the boards shipped, I had Flightradar24 open all day at work, watching the plane carrying our badges cross the Pacific. (We were in SF.)</p>\n<figure><img src=\"https://va3ndf.com/assets/image-13.BFRWGyxf_Z16vnTQ.webp\" alt=\"Real life DVT\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<h3 id=\"bring-up\">Bring up</h3>\n<p>I had them shipped to my office and stayed up most of the night playing with them. With AI, I had a basic OS and a set of test apps running within about an hour. By the next day there were 22 of them. Every feature worked. It was, as far as a DVT goes, close to perfect!</p>\n<figure><img src=\"https://va3ndf.com/assets/1731-0001.Ci0Rp-v4_nERPk.webp\" alt=\"OS test\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>The colours were all wrong, because I’d sent each pixel’s two bytes in the wrong order. We didn’t catch it for weeks, and happily built apps on wonky colours, assuming the cheap screens just looked like that. <em>facepalm</em></p>\n<p>As we started working on the next hardware cycle, the firmware side came to fruition. We very quickly realized the possibilities of this project. For example, we built a Lua runtime so hackers could write their own apps, a browser-based code editor to write them in, and a shell on the badge itself for poking at its files and settings.</p>\n<figure><img src=\"https://va3ndf.com/assets/image-14.9wPqfcYv_1yChSH.webp\" alt=\"Badge IDE\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>At this very moment, the badge truly evolved from a fancy name tag into a platform for hackers.</p>\n<h2 id=\"production-validation-test-pvt\">Production Validation Test (PVT)</h2>\n<p>Riding the high of a working DVT, we felt ready to tackle our full-scale production test. The PVT’s job was to prove we could actually <em>produce</em> this thing without needing to rework anything.</p>\n<p>Making a handful of badges was one thing, but doing it at scale turned out to be a whole other beast.</p>\n<p>We ordered 50 on May 14. New silkscreen applied, a few moved components. Nothing too major. Famous last words.</p>\n<p>Here was our PVT layout and schematic:</p>\n<h3 id=\"pvt-layout\">PVT layout</h3>\n<ul><li><p><img src=\"https://va3ndf.com/assets/badge-layout-PVT-ff652ac-front.sUuXJZV3_tysMV.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>PVT front: the silhouette and silkscreen art land</p></li><li><p><img src=\"https://va3ndf.com/assets/badge-layout-PVT-ff652ac-back.C_rntXRR_Z1wvEoG.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>PVT back: sponsor panel, badge rules, emergency contacts</p></li></ul>\n<figure><img src=\"https://va3ndf.com/assets/badge-schematic-PVT.DwQ_ufK1_ZOdqdn.webp\" alt=\"PVT schematic\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<h3 id=\"northsec\">NorthSec</h3>\n<p>While our PVT was being assembled, I headed to NorthSec, Canada’s premier security conference. Think a Canadian DEF CON. They’ve been running hardware badges for 13 years, and I was there for their CTF with my awesome team. Their badge was fantastic: dazzling reverse-mounted LEDs, SAO headers, buttons, a PCIe connector, the works. It was designed with a screen in mind too, but as I understand it, a supplier fell through and the screens never made it.</p>\n<figure><img src=\"https://va3ndf.com/assets/image-15.DYEZklkw_Z17F3Ub.webp\" alt=\"NorthSec badge\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>Their badge was almost a mirror of ours. Nearly the same components, the same fab, and around 1,500 badges. In their closing ceremony, they walked through every challenge they’d faced, and they could have practically been reading our Slack. They ordered in March for a mid-May event, spent 20 hours on the phone with DHL, got the badges the night before, and flashed them all night.</p>\n<p>By now I was getting quite stressed.</p>\n<p>Lesson</p>\n<p>Learn from your peers. There’s an incredible community of badge developers out there, and they’re happy to share what went wrong. <a href=\"https://badge.life/\" rel=\"nofollow ugc noopener\">badge.life</a></p>\n<h3 id=\"the-pvt-arrives\">The PVT arrives</h3>\n<p>Allow me to set the scene: I was in SF, while most of the team was in Waterloo. We decided to send our PVT run straight to Waterloo in the hopes everything would just <em>work</em>, and we could pass badges around the team to start testing. Then we’d simply click “re-order” with a bigger number.</p>\n<p>Wiiishful thinking.</p>\n<h4 id=\"secret-feature-smoke\">Secret feature: smoke!</h4>\n<p>Our badges worked great with the batteries in the right way. But of course, we can’t expect every user to put them in the right way. Turns out, if you put them in the wrong way, the badge turns into a smoke machine!</p>\n<p>Lesson</p>\n<p>When building hardware, you can’t trust any form of user interaction, especially if it’s safety critical. This should have been obvious, but I think my subconscious filed it as “out of scope” and almost didn’t want to think about it.</p>\n<h4 id=\"the-flipped-ics\">The flipped ICs</h4>\n<p>Smoke was indeed a problem, but the bigger one was that our badges just didn’t turn on. Two chips had been placed rotated the wrong way: the NFC chip and one of the power chips.</p>\n<p>How did that happen? During assembly, JLCPCB sent us the final layout with every chip’s orientation and asked us to confirm it all looked OK. What the email didn’t mention was that two of those orientations had changed from what we’d set in the online portal. We gave it a look, nothing jumped out, and we approved it.</p>\n<p>Lesson</p>\n<p>When a manufacturer asks you to confirm something, treat it like a full code review. Compare it against your own files and look for what changed, not just whether it looks right. Better yet, ask them to call out anything they changed.</p>\n<p>On June 5th, Alex and Darien (random person helping out, thanks!) spent the whole day in the Waterloo prototyping shop with soldering irons while I debugged over a call from SF. Dead boards read 2.2 V on the power rail. End of day tally: three fully working, two working without NFC, and seven still dead. We didn’t even have time to look at the rest.</p>\n<p>We later reworked every single board, and all 50 ended up working. But “just click re-order” was dead.</p>\n<p>Lesson</p>\n<p>Be ready for rework in development. Don’t be afraid of rework.</p>\n<p>0:10</p>\n<h2 id=\"picking-up-the-pieces\">Picking up the pieces</h2>\n<blockquote><p>You just begin. You do the math, you solve one problem. Then you solve the next one, and then the next and if you solve enough problems you get to come home.</p>\n<ul><li>Mark Watney</li></ul></blockquote>\n<p>If you haven’t seen or read <a href=\"https://en.wikipedia.org/wiki/The_Martian_(film)\" rel=\"nofollow ugc noopener\">The Martian</a>, then frankly, stop reading this and go read/watch it.</p>\n<p>While our project was not as critical as getting the first ever space pirate home, I’d like to think any problem, software or hardware, can be fixed by solving enough small problems. So we did the math.</p>\n<h4 id=\"de-smokifier\">De-smokifier</h4>\n<p>We added a FET to our battery line in case people put the batteries in the wrong way. Wired for reverse-polarity protection, it only lets current through when the batteries are the right way round. Batteries in backwards now just means the badge doesn’t turn on.</p>\n<p>The problem was realizing this so late. We didn’t have time for another PVT to test the change, so it was going straight into production. To be safe, I reworked a FET I had lying around onto a PVT board to make sure it passed some form of smoke check. We also hedged our bets with a bypass jumper in case the fix broke something else.</p>\n<figure><img src=\"https://va3ndf.com/assets/image-16.C_ulTA6a_C4lfa.webp\" alt=\"Hand-reworked FET\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>(Yes, my rework abilities could use some work. In fairness to me, I was soldering to a ground fill.)</p>\n<p>It worked! Power profiling showed almost no efficiency loss either. We also added battery safety instructions to the back silkscreen for good measure.</p>\n<h4 id=\"orientation-dots\">Orientation dots</h4>\n<p>Most PCB silkscreens include small dots showing which way each chip goes. We didn’t include those for aesthetic reasons. We reversed that decision and added the dots. They’re barely noticeable, and they helped a ton in our final run to double-check orientations.</p>\n<h4 id=\"first-article-inspection\">First article inspection</h4>\n<p>We had to cut the “find out when it arrives” nonsense. For production, JLCPCB would assemble a small first batch, send us photos and test results, and wait for our go-ahead before building the rest. If something was wrong, we’d only lose a few badges instead of the full 1,750.</p>\n<h4 id=\"clarity-in-emails\">Clarity in emails</h4>\n<p>A lot of our PVT failures came down to communication. So I wrote JLCPCB a long email titled “Issues to Resolve Before Our 2,000+ Unit Order.” I attached photos side by side: a correctly assembled screen from our previous order next to what we’d just received. No ambiguity about what “taped down” means.</p>\n<p>This question we added turned out to be one of the most useful ones we could have asked:</p>\n<blockquote><p>“What is the best way for us to document this requirement so it works well for your process? A dedicated assembly drawing, a process note on the order, attached reference photos, or referencing the previous order number? We’re happy to provide whatever makes it unambiguous on the production floor.”</p></blockquote>\n<p>Their answer: text-only instructions can be unclear for their operators, so send a PDF with screenshots. Easy! We wrote our test procedure the same way.</p>\n<p>Lesson</p>\n<p>Ask the factory how to tell the factory things. They know what their operators need.</p>\n<h2 id=\"supply-chain\">Supply chain</h2>\n<p>I knew the parts supply chain was going to be a problem. I knew this in February. I made every possible effort to not have it be an issue. It became an issue.</p>\n<figure><img src=\"https://va3ndf.com/assets/pre-order.Cf7JCPTt_wmwGg.webp\" alt=\"Our first pre-order\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>This was our first pre-order. We only pre-ordered parts that didn’t have enough resting stock on JLCPCB for our order. This turned out to be a mistake. Resting stock fluctuates fast, and it can be rug pulled out from under you.</p>\n<p>Even when you pre-order, lead times can be long. We placed this pre-order on April 30, and the screens came June 10. Maybe that’s short for HBM chips, but for a hackathon, that’s a long time!</p>\n<p>Case in point: when we were designing the board, the WS2812B-2020 LED had plenty of resting stock. No reason to pre-order, right? Right as we were about to order, the LEDs were rug-pulled from under us. The stock count flipped between 22,000 and 3,000 every time I refreshed the page. Our first pre-order got cancelled over our order quantity not being a round number. The second quote was cheaper, but 29 business days out. Useless. The third came back at 8 business days, and we grabbed it. Our production order slipped while we waited.</p>\n<p>Lesson</p>\n<p>Lock in supply early. Pre-order all but the most common passives as soon as your design is locked down, if your finance team can support it. Especially the critical parts: power, screen, and micro.</p>\n<h2 id=\"production-run\">Production Run</h2>\n<p>On June 30, we hit order: 1,750 populated badges for hackers, plus 750 blank boards for volunteers. The blanks showed up a week later. The populated ones were going to take a while.</p>\n<h3 id=\"all-the-marbles\">All the marbles</h3>\n<p>Remember the “does this look OK?” email that got us during the PVT? Before production, JLCPCB sent us their placement render to confirm, just like last time. This time, I checked every single rotation against our own files. Good thing I did: the brand-new FET, the one we’d added to stop the smoke, was rotated the wrong way.</p>\n<figure><img src=\"https://va3ndf.com/assets/image-17.DSdQRUsO_Z1PH6uR.webp\" alt=\"Placement render\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>This run was indeed for all the marbles.</p>\n<p>Here was our final design with the added FET change included:</p>\n<h3 id=\"production-layout\">Production layout</h3>\n<ul><li><p><img src=\"https://va3ndf.com/assets/badge-layout-PROD-20d64f3-front.DBHF9Qlf_WILU0.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Production front: the art that shipped on 2,500 boards</p></li><li><p><img src=\"https://va3ndf.com/assets/badge-layout-PROD-20d64f3-back.BwbHIIjk_Z2pgjhs.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Production back: the final sponsor and info panel</p></li></ul>\n<h3 id=\"gigapixel-photos\">Gigapixel photos</h3>\n<p>A week later, JLCPCB sent us gigapixel photos of our badges in production!</p>\n<figure><img src=\"https://va3ndf.com/assets/high-res-1.GbtsinQ__Zfbjns.webp\" alt=\"Production line photo\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<figure><img src=\"https://va3ndf.com/assets/high-res-2.BxPcvo5k_Z1XggfS.webp\" alt=\"Production line close-up\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>(I don’t think I can include the raw ones here, as they are massive.)</p>\n<h3 id=\"the-first-article-that-wasn-t\">The first article that wasn’t</h3>\n<p>Then I noticed the order status: “Packaging.”</p>\n<p>After the PVT, we’d set up a first article inspection. JLCPCB would build a small first batch, test it, send us the results, and wait for our go-ahead before building the rest. Alex had been worried about exactly this: having them assemble everything, test a few, and <em>then</em> tell us something’s wrong. “Packaging” meant the whole run was already built.</p>\n<p>“Did they just completely ignore the testing procedure?” I asked in Slack.</p>\n<p>We emailed right away asking them not to ship until they’d confirmed the testing status. The next day, they sent a video of operators running our test firmware on the line, and the boards were passing. Phew. But the step meant to stop a repeat of the PVT never happened. If something had been wrong, we would have found out with 1,750 boards built instead of a couple dozen.</p>\n<p>Lesson</p>\n<p>Asking for a process step doesn’t mean it happens. Get confirmation at each checkpoint <em>before</em> the next step starts, not after.</p>\n<h3 id=\"the-toothbrush\">The toothbrush</h3>\n<p>Testing turned up a few casualties. One NFC chip failed and got swapped for a spare from our own stock. One board had a missing pad that couldn’t be repaired. (We took it anyway.)</p>\n<p>Then came the cleaning question. Assembly leaves flux residue on the boards, and over 1,000 of ours were finished but not yet cleaned. JLCPCB’s cleaning method? A toothbrush wrapped in a cleanroom wipe, by hand, one board at a time. With a warning that the cleaning solution was corrosive and might discolour some components.</p>\n<p>We paid the $59.11. These were going around 1,750 necks, and we wanted them clean.</p>\n<h3 id=\"speed-over-perfection\">Speed over perfection</h3>\n<p>On August 10, 25 screens failed testing: a bad batch from the supplier. That left 1,725 boards ready and 25 stuck waiting on replacement screens.</p>\n<p>The math was simple. Hack the North was September 18th, and that date wasn’t moving. Shipping took about a week, so the boards had to leave by August 20 at the latest, and I wanted them out by the 15th. So I wrote what might be the most important email of the whole project:</p>\n<blockquote><p>“Around 1,600 working boards on time is far more valuable to us than 1,750 perfect boards arriving late.”</p></blockquote>\n<p>I gave them approval to skip reworks, set aside problem boards, and ship whatever was ready. I offered to reply at any hour, pay extra fees, switch to WhatsApp, or hop on a call in Chinese. Whatever it took.</p>\n<p>Lesson</p>\n<p>Tell your manufacturer what matters most. They can’t make trade-offs they don’t know you’d accept.</p>\n<p>The same thread brought one last piece of feedback: a few hand-soldered battery holders had weak joints, because the pads were exactly the size of the holder’s metal tabs. Their recommendation was to make the pads at least 0.5 mm bigger on each side so the solder has room to flow. In fairness to me, I’d used JLCPCB’s own footprint for that part.</p>\n<p>Lesson</p>\n<p>Library footprints aren’t gospel. Check them against the manufacturer’s recommendations, especially for parts that get soldered by hand.</p>\n<h3 id=\"wheels-up\">Wheels up</h3>\n<figure><img src=\"https://va3ndf.com/assets/image-18.CNT2sbBt_1XoBpH.webp\" alt=\"Flight radar\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>The badges shipped on August 13. And yes, I had Flightradar24 open again, this time watching a DHL 777 freighter carry them from Hong Kong to Anchorage at 31,000 feet.</p>\n<p>They arrived on August 20, roughly a month before event.</p>\n<figure><img src=\"https://va3ndf.com/assets/boxes.D9KKaDs0_Z1UlAS5.webp\" alt=\"Boxes stacked up\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>There were 34 boxes, with roughly 50 each.</p>\n<h2 id=\"what-it-cost\">What it cost</h2>\n<p>In the pitch, I promised $5 a head. Reader, it was not $5 a head.</p>\n<p>The production order from JLCPCB was $14,338.40, with $5,958.61 in pre-ordered parts on top. The blank badges we ordered came out to $570.70 for the 750 boards.</p>\n<p>That’s about $20,300 for 1,750 assembled boards, or roughly $11.60 per populated badge. This doesn’t include the cost of R&amp;D, batteries, extra screens, event NFC stickers, etc.</p>\n<h2 id=\"preparing-the-badges\">Preparing the badges</h2>\n<p>0:21</p>\n<p>0:16</p>\n<p>Our process was simple but time consuming:</p>\n<ol><li>Open the box and remove the bubble wrap</li><li>Take the badges out, and stack them with one foam in between each</li><li>Snap the rail (the other side’s rail was snapped by JLC for access to the USB-C port)</li><li>Clean off the sides with steel wool (we switched to using the rails themselves after)</li><li>Flash it (this was so fun we decided to do it twice!)</li><li>Attach the event lanyard</li><li>Re-package</li></ol>\n<p>We started at 7pm. We finished at 3am. It takes a truly devoted team to pull this off. Thank you team!</p>\n<h2 id=\"the-weekend\">The weekend</h2>\n<p>The greatest moment during event weekend was seeing hackers take our badges and make them their own. We kicked things off with a crash course on the badge at opening ceremonies:</p>\n<figure><img src=\"https://va3ndf.com/assets/ceremonies.DonnCzdY_Z1u9RIn.webp\" alt=\"Ceremonies\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>And soon after hackers were flashing custom apps:\n<img src=\"https://va3ndf.com/assets/3941.SEg82VqG_Z1lJD0B.webp\" alt=\"Acon&#39;s Firmware\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p>\n<p>Adding people on social media with the badge bump feature:\n<img src=\"https://va3ndf.com/assets/IMG_6791.K9R6U8QR_Z1MfAu2.webp\" alt=\"Connecting with hackers\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p>\n<p>And some went extra crazy! We saw one team turn the badges into controllers for Tux Racer!\n<img src=\"https://va3ndf.com/assets/_MG_3964.BogNhJAZ_Z27zwGM.webp\" alt=\"Racing game\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p>\n<p>And this team live-demoing a beat sync app on the badges!\n<img src=\"https://va3ndf.com/assets/LOG04129.DDciTbYX_Z1oAbNG.webp\" alt=\"On stage\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p>\n<p>Overall, the weekend went phenomenally. The badges worked.</p>\n<p>We also ran a workshop to teach hackers how to hack their badges. This went incredibly well. There were so many hackers that came running up afterward holding their badges out showing us the insane things they were doing.</p>\n<figure><img src=\"https://va3ndf.com/assets/1000060225.Cr7SyaTR_2oO5m9.webp\" alt=\"Workshop\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>The devpost submissions for badge hacks began flowing in, and they just didn’t stop. <a href=\"https://hackthenorth2026.devpost.com/submissions/search?utf8=%E2%9C%93&amp;prize_filter%5Bprizes%5D%5B%5D=105913\" rel=\"nofollow ugc noopener\">Devpost filtered by badge hacks.</a>.</p>\n<h3 id=\"badge-hacks\">Badge hacks</h3>\n<ul><li><p><img src=\"https://va3ndf.com/assets/bingbong.Bvau8EbE_CMf6m.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>bingbong: rhythm game finalist</p></li><li><p><img src=\"https://va3ndf.com/assets/firmwar.DvAZBci2_ZYVNOc.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>FirmWar: a multiplayer shooter</p></li><li><p><img src=\"https://va3ndf.com/assets/hackamon.RX3NnaV-_1HfI5B.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Hackamon: Pokémon GO with NFC</p></li><li><p><img src=\"https://va3ndf.com/assets/badgemon.Bqla_eCz_1C60w2.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Badgémon: battle whoever&#39;s nearby</p></li><li><p><img src=\"https://va3ndf.com/assets/badge-kart.B7BtlaLe_1pVjiS.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Badge Kart: shake for nitro</p></li><li><p><img src=\"https://va3ndf.com/assets/murph-e.ExSOKgkm_Z2b1poq.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Murph-e: describe a game, play it</p></li><li><p><img src=\"https://va3ndf.com/assets/protect-the-canadian-bird.DEu5zjTo_ZRM3OX.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Operation, on a goose</p></li><li><p><img src=\"https://va3ndf.com/assets/trojan-badge.76mlaXkS_O6XcK.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Trojan Badge: a badge-to-badge virus</p></li><li><p><img src=\"https://va3ndf.com/assets/controll.CoT394Wv_Z1RruXp.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>ContROLL: FPV driving on your badge</p></li><li><p><img src=\"https://va3ndf.com/assets/hedge-the-north.CxLrCVbC_1b50Vi.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Hedge The North: tap to bet</p></li><li><p><img src=\"https://va3ndf.com/assets/solarpay.DMpaJ0VE_1e7NAW.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>SolarPay: tap to pay</p></li><li><p><img src=\"https://va3ndf.com/assets/bump.DpbBvlez_JsDtC.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Bump: every connection, mapped</p></li><li><p><img src=\"https://va3ndf.com/assets/hack-the-dex.C5feQuRC_ZbUBkX.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Hack the Dex: a Pokédex of people</p></li><li><p><img src=\"https://va3ndf.com/assets/nored.B_S9RCf7_Z2s5jhm.webp\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></p><p>Nored: messaging with no Wi-Fi</p></li></ul>\n<p>One of the most insane projects we were blown away by was the Among Us project. This team implemented a mesh networked way to play Among Us on the badges using custom firmware. All in one weekend.</p>\n<figure><img src=\"https://va3ndf.com/assets/image-19.BGp9feTR_ZFdPWg.webp\" alt=\"Among Us on the badge\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p>The badge project also seemed to have garnered some social media attention. Here are a few of the X posts:</p>\n<h3 id=\"on-x\">On X</h3>\n<ul><li><p><a href=\"https://x.com/afscott\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/tweets/avatar-2000062958282612736.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" />   Alex Scott  @afscott</a></p><p>solana sponsored a hackathon with the best badges ive ever seen</p>\n<p> <a href=\"https://x.com/afscott/status/2101939929240715546\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/tweets/2101939929240715546-1.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /><img src=\"https://va3ndf.com/tweets/2101939929240715546-2.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></a></p>\n<p>  <a href=\"https://x.com/afscott/status/2101939929240715546\" rel=\"nofollow ugc noopener\">Sep 21, 2026</a>   266 likes 41 replies</p></li><li><p><a href=\"https://x.com/solana\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/tweets/avatar-2097604919671025664.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" />   Solana  @solana</a></p><p>gm</p>\n<p>Spent the weekend touching hardware instead of touching grass at <a href=\"https://x.com/HackTheNorth\" rel=\"nofollow ugc noopener\">@HackTheNorth</a></p>\n<p>  <a href=\"https://x.com/solana/status/2102017817423843425\" rel=\"nofollow ugc noopener\">Sep 21, 2026</a>   422 likes 151 replies</p></li><li><p><a href=\"https://x.com/lagunacarta\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/tweets/avatar-1653252742259826689.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" />   Laguna 🌴  @lagunacarta</a></p><p>Talked to some teams hacking the badge and they have added:</p>\n<ul><li>custom lights</li><li>Super Mario</li><li>prediction market</li><li>Solana pay</li><li>remote control car control</li><li>sensors that pay via x402</li></ul>\n<p>Countless other wild and wacky ideas at <a href=\"https://x.com/HackTheNorth\" rel=\"nofollow ugc noopener\">@HackTheNorth</a>, I’m ruined for regular conference badges</p>\n<p>  <a href=\"https://x.com/lagunacarta/status/2101705583896211516\" rel=\"nofollow ugc noopener\">Sep 20, 2026</a>   41 likes 8 replies</p></li><li><p><a href=\"https://x.com/RyushenTan\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/tweets/avatar-2036310946877153280.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" />   Ryu  @RyushenTan</a></p><p>Actually the coolest hacker badge I’ve seen, also if you see me stop me to connect badges <a href=\"https://x.com/HackTheNorth\" rel=\"nofollow ugc noopener\">@HackTheNorth</a></p>\n<p> <a href=\"https://x.com/RyushenTan/status/2101205037317837049\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/tweets/2101205037317837049-1.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></a></p>\n<p>  <a href=\"https://x.com/RyushenTan/status/2101205037317837049\" rel=\"nofollow ugc noopener\">Sep 19, 2026</a>   13 likes 1 replies</p></li><li><p><a href=\"https://x.com/magooyyz\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/tweets/avatar-2074672236762382336.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" />   まぐー  @magooyyz</a></p><p>先日、夫がウォータールー大学のHack the Northでもらった電子バッジ🪪、こんなん初めて見た！↓\n相手のバッジと重ねると名刺交換できたり、参加企業やガイドも見れてなかなか良いけど、後ろに単3電池2個も付いてて首からかけると…まぁまぁ重いっ！😂\nイベント終了が深夜0時でシンデレラ帰宅おそっ！</p>\n<p> <a href=\"https://x.com/magooyyz/status/2102919701592682570\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/tweets/2102919701592682570-1.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /><img src=\"https://va3ndf.com/tweets/2102919701592682570-2.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></a></p>\n<p>  <a href=\"https://x.com/magooyyz/status/2102919701592682570\" rel=\"nofollow ugc noopener\">Sep 24, 2026</a>   9 likes 1 replies</p></li><li><p><a href=\"https://x.com/suymerej\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/tweets/avatar-2066334134793056256.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" />   jeremy  @suymerej</a></p><p>my last year at HTN is over 🥲</p>\n<p> <a href=\"https://x.com/suymerej/status/2102501349044650358\" rel=\"nofollow ugc noopener\"><img src=\"https://va3ndf.com/tweets/2102501349044650358-1.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /><img src=\"https://va3ndf.com/tweets/2102501349044650358-2.jpg\" alt=\"\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></a></p>\n<p>  <a href=\"https://x.com/suymerej/status/2102501349044650358\" rel=\"nofollow ugc noopener\">Sep 22, 2026</a>   69 likes 7 replies</p></li></ul>\n<h2 id=\"by-the-numbers\">By the numbers</h2>\n<p>By closing ceremonies, the badges had logged</p>\n<ul><li>11,700 badge-bump connections</li><li>40,000 sponsor table scans</li><li>540 Solana blind box scans</li><li>420,000 bubbles popped (about 240 per badge)</li><li>120 custom app hacks built</li></ul>\n<p>The post-event survey was just as kind. Of the 115 hackers who answered, 90% called getting the badge “Awesome!” or “Literally incredible,” and 72% said it was a big part of their weekend, or the biggest. It wasn’t all praise though. Contact sharing was the badge’s main job, and while 87% of respondents tried it, only about half of those found it really helpful. The top complaint, from 24 people, was that the badge was heavy and clunky to wear, and some stopped wearing it altogether. Completely fair. Two AAs on a bare board is a lot to hang around your neck.</p>\n<h2 id=\"closing\">Closing</h2>\n<p>This is for hackathon organizers:</p>\n<p>When we started, hardware badges at hackathons were rare, and I wanted to know why. I think it’s because they look impossible from the outside. I’m here to tell you they aren’t. We did it with a handful of people, one credit card, and a little grit. The factory is ultimately a web form, the parts are just rows in a table, and mistakes are expensive but survivable.</p>\n<p>So here’s my challenge to you: beat us.</p>\n<p>Make the colour silkscreen we couldn’t. Build a better power architecture. Integrate the badge better into your hackathon. Add a better radio, maybe even connect to event Wi-Fi. Get a nicer screen. Use a more powerful MCU. Spec it to run Linux. Add a crypto chip. Make it bend or fold.</p>\n<p>This post exists to hand you receipts proving it’s possible and a not-so-crazy idea.</p>\n<p>I can’t wait to see what you build.</p>\n<p>Send me an email any time:\nnick [-at-] va3ndf.com</p>\n<p>Everything we’ve built is open source: the <a href=\"https://github.com/hackthenorth/badge-hardware\" rel=\"nofollow ugc noopener\">hardware</a> (KiCad), the <a href=\"https://github.com/hackthenorth/badge-firmware\" rel=\"nofollow ugc noopener\">firmware</a>, and the <a href=\"https://va3ndf.com/badge-emulator.html\" rel=\"nofollow ugc noopener\">emulator</a>. Feel free to use it as licensed!</p>\n<p>Disclosure: JLCPCB and EasyEDA partially sponsored this project. Where things went wrong in this post, the root cause was almost always on my end. They’re a professional fab. I’m a hacker with more ambition than experience.</p>\n<p>P.S.</p>\n<p>This wouldn’t have been possible without Solana, who sponsored the badge. But they were far more than a sponsor. We worked closely with <a href=\"https://x.com/spacemandev\" rel=\"nofollow ugc noopener\">@spacemandev</a> throughout the project. He built a scavenger hunt into the badge that over 300 people attempted, and he spent the hackathon mentoring hackers on firmware and all things Solana. He felt like part of the team, and we loved having him.</p>\n<p>P.P.S.</p>\n<p>About Alex, my friend and PM at Hack the North. Put plainly: without Alex, you wouldn’t be reading this.</p>\n<p>He was assigned as my PM from the very beginning. My honest first reaction was “great, they’re giving me a babysitter. I guess that’s fair, given how much money is about to get thrown at this.” Boy was I wrong.</p>\n<p>Finishing projects has always been incredibly hard for me. If you run <code>ls | wc -l</code> in my programming directory, you get roughly 380. And no, that’s not where I clone other people’s code. Those are all my own projects from 12 years of being a developer. Exactly one of them is finished: Hacker Badges.</p>\n<p>Don’t get me wrong, every one of those taught me something, and together they gave me a very broad set of skills. But it would have been nice to ship one. So… what was missing from all the others?</p>\n<p>Alex.</p>\n<p>A project like this put every one of my weaknesses on full display, and Alex jumped in exactly where I needed him and kept me going. He has a line that’s going to stick with me and ruin all my future PMs: “A good PM sees a problem and doesn’t go find someone to complain to. They just fix it themselves if they can.” He lived it. He dove into the firmware directory, cleared out the backlog of polish items, and ended up with more commits than me.</p>\n<p>And the badge was only part of it. He managed backend and frontend, and had a hand in nearly every other subteam. Since February, he’s put something like 1,000 hours into making Hack the North magical for hackers, including three hours of calls every single day after work at his internship. At one point he was interviewing for an incredible software engineering job, and on his short lunch break between interviews, he was texting me QA notes on the badge. (He got the job. Obviously.)</p>\n<p>People this dedicated to anything, let alone a volunteer-run hackathon, are rare. Hack the North was incredibly lucky to have Alex for three years. The 1,750 attendees wearing his badge probably have no idea, but they were lucky too.</p>\n<p>Good luck, Alex!</p>\n<figure><img src=\"https://va3ndf.com/assets/badge-bros.TDb35dcf_ZtgzBV.webp\" alt=\"The Badge Bros\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"no-referrer\" /></figure>\n<p><em>Left: Me, Right: Alex</em></p>\n<p><a href=\"https://badge.hackthenorth.com/\" rel=\"nofollow ugc noopener\">https://badge.hackthenorth.com/</a></p>","headings":[{"level":1,"text":"Making 1,750 programmable PCB badges for Canada's biggest hackathon","id":"making-1-750-programmable-pcb-badges-for-canada-s-biggest-hackat"},{"level":2,"text":"Why not cardstock","id":"why-not-cardstock"},{"level":2,"text":"Engineering Validation Test (EVT)","id":"engineering-validation-test-evt"},{"level":3,"text":"EVT layout","id":"evt-layout"},{"level":3,"text":"Part selection error","id":"part-selection-error"},{"level":3,"text":"Pins too dense to solder","id":"pins-too-dense-to-solder"},{"level":2,"text":"Design Validation Test (DVT)","id":"design-validation-test-dvt"},{"level":3,"text":"Fixing NFC","id":"fixing-nfc"},{"level":3,"text":"Shape and Layout","id":"shape-and-layout"},{"level":3,"text":"DVT layout","id":"dvt-layout"},{"level":3,"text":"Waiting","id":"waiting"},{"level":3,"text":"Bring up","id":"bring-up"},{"level":2,"text":"Production Validation Test (PVT)","id":"production-validation-test-pvt"},{"level":3,"text":"PVT layout","id":"pvt-layout"},{"level":3,"text":"NorthSec","id":"northsec"},{"level":3,"text":"The PVT arrives","id":"the-pvt-arrives"},{"level":2,"text":"Picking up the pieces","id":"picking-up-the-pieces"},{"level":2,"text":"Supply chain","id":"supply-chain"},{"level":2,"text":"Production Run","id":"production-run"},{"level":3,"text":"All the marbles","id":"all-the-marbles"},{"level":3,"text":"Production layout","id":"production-layout"},{"level":3,"text":"Gigapixel photos","id":"gigapixel-photos"},{"level":3,"text":"The first article that wasn’t","id":"the-first-article-that-wasn-t"},{"level":3,"text":"The toothbrush","id":"the-toothbrush"},{"level":3,"text":"Speed over perfection","id":"speed-over-perfection"},{"level":3,"text":"Wheels up","id":"wheels-up"},{"level":2,"text":"What it cost","id":"what-it-cost"},{"level":2,"text":"Preparing the badges","id":"preparing-the-badges"},{"level":2,"text":"The weekend","id":"the-weekend"},{"level":3,"text":"Badge hacks","id":"badge-hacks"},{"level":3,"text":"On X","id":"on-x"},{"level":2,"text":"By the numbers","id":"by-the-numbers"},{"level":2,"text":"Closing","id":"closing"}]}}