NURDISM.DEV
BIOS v20.26 · PHOSPHOR OK
▶ CLICK TO START
>set display
PHOSPHOR
MODE
BOOT SCREEN
SOUND

CRAIG
BETTERLY

Full-stack engineer. Self-taught, been at it 20+ years.
CONNECTION ESTABLISHED_
Open to work right now
Web apps, chain infra, Docker fleets, ESP32 firmware, 3D-printed parts, game servers. I was a senior software developer at Cyfrin until July. Right now I'm looking.
23K+GH STARS · NEKO LINEAGE
3.4M+USERS SERVED · TICKETEER
145KDOCKER PULLS
20+YEARS · SELF-TAUGHT
Work
Roles · 2013→2026
cygent.dev homepage
01 · 2026 · MAIN PROJECT
Cygent, and the platform it lives on
Cygent reads smart-contract codebases, finds the vulnerabilities, writes the fix and opens the PR. I built the thing underneath it. Every team gets its own isolated environment, and it had to be reachable from GitHub, Slack, Discord, Telegram, and whatever MCP client someone turns up with.
LAUNCHED APR 2026 · LIVE · CYGENT.DEV ↗
02 · 2026 · L2
BattleChain, an L2 where whitehats get paid to attack
I stood the chain up on the ZKsync OS stack, which meant reading enough of the sequencer to find a bug in it and get the fix merged upstream. Then the bridge portal, then the block-explorer deploy pipeline. Testnet was live seven weeks after my first infra commit.
TESTNET MAR 2026 · UPSTREAM PR ↗
BattleChain block explorer
Cyfrin Updraft
03 · 2025 · PLATFORM
A year inside Updraft and the Cyfrin platform
Backend APIs and the notification system for 200,000+ learners, Svelte on the front end, and the infra and deployments across Updraft, CodeHawks, and Solodit. Docker images, Coolify pipelines, devcontainers. I hit two bugs in Coolify along the way and fixed those too.
200K+ STUDENTS · UPDRAFT ↗
04 · 2020–23 · CTO
CLOSEM, a CRM that did the following-up for you
Three years as CTO of a crowdfunded SaaS startup. The product chased leads on every channel a small business actually uses: SMS and MMS, email, voice, physical mail, appointments, contact validation, and a Zapier-style layer so it could hook into whatever they already ran. I built the platform and ran the engineering team.
FEB 2020 – MAY 2023 · NAMED IN THE SEC FORM C
ROLE RECORD · CLOSEM.AI
ROLE
Chief Technology Officer
SPAN
Feb 2020 → May 2023
BUILT
Full CRM · omni-channel follow-up · appointments · contact validation · integrations
TEAM
Engineering, led
ROLE RECORD · YADA YADA MARKETING
ROLE
Web designer / developer
SPAN
Jan 2013 → Jan 2022
RAN
50+ WordPress sites
BUILT
Landing pages · funnels · campaign integrations
05 · 2013–22 · AGENCY
The technical half of a marketing firm
Yada Yada is the family firm in Tampa, and I was the half of it that wrote code. 50+ WordPress sites to keep online, plus the custom pieces the campaigns actually needed: landing pages, funnels, and whatever had to talk to whatever else. Nine years of fixing things I didn't build, which turned out to be the useful part.
JAN 2013 – JAN 2022 · TAMPA, FL
Flagships
The ones I'd actually want to talk about
OPEN SOURCE · 2020
neko
I wanted to watch anime with my friends and nothing out there did it properly, so I put a Linux desktop in a Docker container and streamed it over WebRTC, with everyone able to take turns driving. Go and pion, hand-rolled GStreamer cgo bindings, Vue client. Sixteen days from the first commit to v1.0.0.
"Neko seriously feels like magic the first time you run it." SEAN DUBOIS, CREATOR OF PION, POSTING IT TO SHOW HN HIMSELF
21,361★ community fork
145,118 Docker pulls
16 days to v1.0.0
Moe the tabby cat
FIG. 01 · MOE, CHIEF MORALE OFFICER, PROJECT NAMESAKE
ticketeer.bot homepage
FIG. 02 · TICKETEER.BOT, LIVE · 4.31/5 ON TOP.GG
FOUNDER · 2021 → NOW
Ticketeer
Ticket-based support for Discord communities. Forms, transcripts, a message editor, analytics, premium tiers, the whole thing on Laravel and Vue in Docker. Five years in production and still growing. The transcripts render Discord-flavored markdown properly, which sounds like a small thing until you try to do it.
4,200+ communities
3.4M+ users
337K+ tickets
Projects
Hardware, firmware, experiments
esp_radar in hand
FIRMWARE · C · ESP-IDF · LVGL
esp_radar
A live flight radar for my desk. A round ESP32-S3 display plotting real ADS-B aircraft on an ATC-style scope. I ended up writing the drivers myself, and sent some of that work upstream to Espressif.
hackceptor kiosk in hand, Add machine credit screen for the Tampa Hackerspace bill acceptor
HARDWARE + WEB · ESP32-P4 · NUXT · STRIPE
hackceptor
The vending machine at Tampa Hackerspace only took cash, so I built it a card reader. Scan a QR, pay by card, and a kiosk pulses the "$1 accepted" line into the bill acceptor through an opto-isolator.
Antweight battle bot
ROBOTICS · SOLIDWORKS · TEAM LEAD
Battle bots · Tampa Hackerspace
I lead the robotics team. Current build is an antweight, CAD the whole way through to combat. It weighed in at 452.76 g against a 453.59 limit, which was closer than I'd have liked.
libpyro transmitter internals: RF board, Pi Zero, and battery in a 3D-printed enclosure
OPEN SOURCE · PYROTECHNICS · LIBPYRO
Fireworks show control
I rewrote the show editor and the timeline in BackyardHero and got it merged. libpyro is the open-source side of it, ignition systems and my own transmitter, currently coming off SolidWorks and onto the bench.
esp_sand_sim on the round ESP32-S3 AMOLED: an hourglass scene with sand pouring through the neck
FIRMWARE · C · ESP-IDF · QSPI AMOLED
esp_sand_sim
Falling sand on a round 466×466 AMOLED. Twelve materials sorted by density, and that ordering is the physics, a cell moves into any neighbour holding something lighter than it is. Tilt the board and the sand pours toward the low edge, touch the glass to paint, set the wood on fire.
No LVGL, and no framebuffer in PSRAM either. It paints a band at a time out of internal DMA memory and only pushes the rows that actually changed. Scenes come in as PNGs over USB, which is where the hourglass came from.
grit engine sandbox: a destructible pixel cave with lava, water, and torches
RUST · WGPU · MULTIPLAYER · IN DEV
grit engine
A multiplayer combat falling sand game in Rust, and a passion project I've been at on and off for years. Noita's simulated pixels, ROUNDS' stacking cards, Soldat's multiplayer. 16 players on a map that's simulated per pixel, so terrain falls, liquids flow, and an explosion takes a bite out of whatever was in the way. 34 materials and 44 reactions so far.
Most of the work right now is the sandbox. It has a control for every engine constant and writes them back to a toml, so when I find a number that feels right it stays found. This is the second attempt, the first got to 18,400 lines of Rust without any gameplay in it, so I kept the design and started the code over.
Prospect's Field view: every judged job plotted keyword score against AI fit
ELECTRON · REACT · SQLITE · CLAUDE
Prospect
I built this while job hunting, because the search itself was the problem. Ten tabs open, the good postings buried under the noise, and the applications I'd already sent quietly going cold because I lost track of who to poke and when.
It pulls eight sources into one inbox, collapses the same role posted to three boards down to a single card, and scores everything against my own skill profile the moment it lands. The ones worth a look get read in full by Claude, which grades them on four dimensions and has to quote the posting for every claim it makes. Prospect then checks the quote actually appears before it believes it. After that it tailors a resume per job and won't let a lead sit quiet without telling me.
One SQLite file on my own machine, no accounts, no cloud. There's an MCP server in it too, so a Claude Code session can work the pipeline with me. Still buggy, still moving.
BTLY-2019
BATTLEYE RCON CLIENT · TS/UDP
ON NPM SINCE 2019 · STILL PULLED MONTHLY
CLSM-CTO
FULL CRM · SMS/EMAIL/VOICE/MAIL
BUILT THE PLATFORM · LED THE TEAM
NURD-SH
HOMELAB · SELF-HOSTED FLEET
THE TEST BED BEHIND THE DAY JOB
Skills
What I work with
"Generalist on purpose. Most of the time the hard part isn't fixing the thing, it's working out which layer it's actually broken on."
Toolkit · * still learning · where it all started
LANGUAGES
TypeScriptJavaScriptPHPGoCC++C#JavaLuaMoonScriptPythonSQLBashHTML/CSS · SASSRustVB.NET
FRONT-END
VueNuxtSvelteReactElectronTailwindViteLVGL
BACKEND & DATA
Node.jsFastifyLaravelGraphQL · ApolloPostgreSQLMySQLRedisTypeORMDrizzleWebSocketsWebRTC · pionGStreamerStripeTwilio
INFRA & OPS
Docker · ComposeCoolifyAWSAzureVercelCloudflareKubernetesTerraformTailscaleHeadscalegitGitHub ActionsGitLab CIDatadogSentrydevcontainersshell scriptingNginx / reverse proxiesWordPress opsSteamCMDOVH dedicated
HARDWARE
ESP-IDFESP32 · S3 · P4ArduinoI2C · SPI · I2S · QSPI
FABRICATION & DESIGN
Laser cuttingLatheMillBambu FDM printingResin printingResin castingSolidWorksBlenderPhotoshopPottery *
GAMES & MODDING
grit engine · Rust game devGarry's Mod · GLuas&boxArma · SQFMinecraft · ForgeEnfusionRCON toolingGodot
AI TOOLING
MCP serversAgent workflowsLLM APIs
MERGED UPSTREAM · I FIX THE TOOLS I USE
discord.js '17nuxt/awesome '18TypeORM '21Vuelidate '22–23unplugin-vue-components '22modeltyper ×3 '23laravel/vite-plugin '23Coolify ×2 '25ZKsync OS '26BackyardHero ×2 '26
Timeline
How I got here
early '00s
Grew up in my dad's computer repair shop. First code at 14, PHP and VB.NET, and I dropped out to do it full-time. Sysadmin by my late teens.
2007
Became the technical half of Yada Yada Marketing, the family firm. 50+ WordPress sites and the products behind them. Their About page called me "the geek king," which I never asked them to take down.
2017–19
First PR into discord.js. Minecraft modpacks on CurseForge, Farmers Market got to 17.8K downloads. Dockerized Arma servers before that was a normal thing to do. Shipped battleye and nuxtjs-electron.
2020
Built neko, sixteen days to v1.0.0, and Pion's creator posted it to Show HN himself. Became CTO at CLOSEM, built the CRM platform, led the team.
2021–24
Launched Ticketeer. Handed neko over to the community, where it's since gotten about 10× bigger than I left it, which is the right outcome. Ticketeer grew into a full SaaS. Started libpyro.
2025–26
Joined Cyfrin. Updraft backend and notifications first, then the BattleChain L2 and the Cygent platform. PRs merged into Coolify, ZKsync OS, Espressif. Wrapped up in July 2026.
now
Open to work. Leading the robotics team at Tampa Hackerspace, building the grit engine, and learning pottery, which I am not good at.
SEND ME A MESSAGE
GET IN
TOUCH
Full-stack product, platform and infra, or embedded. I'm most useful on the problems that don't sit neatly in one discipline. Browser, container, or soldering iron, all fair game.
I'm human
Spam check by Turnstile
All fields required