Examples Habit Tracker Kanban Board LeetCode Prep Portfolio README.txt SandVox Tanks uApp Demo Why Maverick Meerkat?
Portfolio - Joshua Bemenderfer
Portfolio
Contents

I’m a software engineer and Linux sysadmin in northwest Georgia. I’ve been paid to write software since 2013, and since 2018 I’ve been the senior developer and systems administrator at Creation Ministries International (CMI).

This page has three parts: what I built before AI coding tools existed, what I do at CMI, and what I’ve built with AI since 2025. The other two tabs are resumes.

Before AI (2013-2021)

Open source

prerenderer - a framework-agnostic library I wrote in 2017 for prerendering single-page apps to static HTML. Version 3 of prerender-spa-plugin (7,300 stars) was rebuilt on top of it, and I’m that project’s top contributor by commits. Both are still on npm as @prerenderer/*, now maintained by Tofandel.

prerender-spa-plugin on GitHub
prerenderer on GitHub
prerender-spa-plugin v3+ runs on prerenderer.

Quark (2018) - a GUI toolkit in C++ and OpenGL ES 3.0, built by stripping the Godot engine core down to what a desktop UI needs. Scene graph, widgets, theming, and C bindings for other languages.

Quark on GitHub

IncrediBots 2 HTML5 (2020-2021) - a TypeScript port of the Flash physics sandbox IncrediBots 2, started when Flash reached end of life. You can play it here.

IncrediBots 2 running in the browser

Smaller things from that era: iBrows (a minimal Electron browser), LDRParser (an LDraw file parser in Python), wsolver, Muon, iceblerg, and TitleTool, a Blender title generator I wrote at 15. Merged fixes upstream in vue-loader, Electron, Chance.js, PrestaShop, the Blender LDraw importer, and Directus (5 PRs).

Writing

Alligator.io (2017-2018) - about 100 articles on Vue.js, webpack, GraphQL, CSS and JavaScript. Alligator.io was later folded into DigitalOcean, where most of them still live.

One of my Alligator<span>.</span>io articles, now on DigitalOcean

Client work

  • MIDI2Piano.com (2016) - front end, back end and architecture. Drop in a MIDI file and it plays on an on-screen keyboard, using WebAudio and WebMIDI. Vue.js, Node.js, Nginx, Let’s Encrypt.
  • VIPetTag (2017-2018) - designed, built and deployed an offline-capable PWA for veterinary records. Vue.js, Node.js and PostgreSQL on Kubernetes and Google Cloud.
  • HabitStack (2018) - rewrote the business logic of a B2B mobile app (Vue.js and Quasar) and replaced its build system with a much simpler one.
  • CMC Markets and BlueAnchorSEO (2017) - an Alexa and Google Assistant app on Node.js and AWS Lambda.
  • ioAware (2016) - development team lead. Designed the architecture, database schemas and UI; built two front ends (Angular 2 and Vue.js) and a Node.js REST API on AWS.
  • Freelance (2013-2016) - smaller projects through Upwork, mostly JavaScript, Angular and LAMP.
MIDI2Piano<span>.</span>com in 2016, from the Wayback Machine
MIDI2Piano.com in 2016, from the Wayback Machine.

I also taught English full-time in Weihai, China (2017-2018), and a Western culture and drama workshop at Shandong University.

CMI (2018-present)

CMI is a nonprofit with offices in the US, Canada, the UK, Australia, New Zealand, South Africa and Singapore. I write software, run servers, and clean up after a lot of older systems. 3,700+ commits across the organization’s repositories so far.

Platform rebuild

  • Moving the public web presence off a legacy PHP CMS onto Nuxt and Directus, with the front end on Cloudflare Workers. I’m the second-largest contributor (1,680 commits) and wrote most of the CI, the production deploy scripts and the development environment.
  • A Directus monorepo with about 60 extensions. Mine include the search integration (Meilisearch), an AI actions extension (text and image generation from OpenAI, Anthropic, Google, Mistral and OpenRouter, as REST endpoints and automation steps), and an MCP server that gives AI assistants search and read access to the organization’s published content.
  • Moved the UI library from PrimeVue to Nuxt UI (156 files) and consolidated localization.
  • Public Directus extensions: custom search, inline form interface, autosave.

Migrations

  • Subscriptions - migrating a legacy subscription system into the new contact database. Deterministic ETL, fidelity harnesses that compare reports against the legacy system, and two-way sync that rolls out in stages (off, inbound only, dry run, live). One PR: 245 files, 48,000 lines.
  • Web stores - 544 commits to the PrestaShop stores: custom modules for subscriptions, donations, digital products and store selection, and payment gateways for each country’s office.
  • Upgrades - Joomla 3 to 4, PHP 8, and the Docker setup for the legacy services.

Cleanup and DevOps

  • Combined about 20 separate RPC services into three service apps, and four MySQL instances into one.
  • Rolled out Office 365 sign-in across eight internal apps.
  • A one-script development environment for Windows (WSL), Docker and VS Code that sets up the whole stack for a new developer.
  • GitHub Actions with Turborepo, production deploy scripts, Cloudflare cache and IP management, monitoring and database backups.

With AI (2025-present)

Since 2025 most of my side projects are built with Claude Code. These are large projects with specific requirements, and I check the output with tests, simulations, red-team suites and browser automation. They all run on infrastructure I set up and run myself.

Apps and libraries

uApp - a runtime for single-file apps. The code, data and an AI assistant that edits them live in one SQLite file you can send to someone. Rust, with a WebAssembly demo. This site is a uApp.

uApp with its assistant

CubbyCAD and CubbySlicer - a 3D CAD editor (solid modeling, sketcher, modifier stack, voxel sculpting) and a 3D-printing slicer, both running entirely in the browser. The slicer is OrcaSlicer and preFlight compiled to WebAssembly.

CubbyCAD
CubbySlicer

KeeNet - a ground-up Vue 3 rewrite of the KeeWeb password manager. Reads and writes KeePass files, and ships as a PWA, desktop apps and an Android app. Strict CSP, pinned dependencies, and documented security invariants.

KeeNet

sqlite-rls - row-level security for SQLite as a loadable C extension, usable from any language. Red-teamed in two rounds; the bypasses found were fixed and are covered by 30 adversarial tests. litebase is a Supabase-style backend built on it: auth, REST, realtime and storage.

sqlite-rls docs
litebase

guido - a native UI runtime. Write the app in Bun, Python, Rust, Go, C, Zig or Nim; a small Godot-based runtime draws the windows.

guido docs

Winston (private) - a zero-based budgeting app with bank sync through Plaid, OAuth, API tokens, a REST API, an MCP server, shared budgets and 2FA.

Games

The first four are online multiplayer on Cloudflare Workers and Durable Objects, with deterministic simulations shared between client and server.

  • Tidefront - pixel-art naval war across four eras and 34 ship classes. Historical battles (Trafalgar, Tsushima, Jutland, Midway) are tuned with a test harness until AI-vs-AI results land near the real ones.
  • Void Spaces - build a ship from parts shot off other ships. 30 Hz server simulation with client prediction.
  • Solvefront - territory control where every attack is a race to solve a problem. 517 lessons across seven tracks and a ranked ladder.
  • CorpCapture - take over countries’ markets and parliaments. Expansion speed follows real population density from OpenStreetMap.
  • Cannons & Coastlines - a 3D-printable tabletop naval game, also playable in the browser.
Tidefront
Void Spaces
Solvefront
CorpCapture
Cannons & Coastlines

Agents and hardware

  • Home voice assistant - Claude Agent SDK with MCP tools for charts and LAN devices, local Whisper speech recognition and Piper speech, and spoken confirmation before anything changes.
  • MCP servers - for Directus (several public extensions), a church management system, my file server, and CubbyCAD (an agent can model a part and send it to the slicer).
  • Old devices - reverse-engineered two Bluetooth thermal printers so they show up in CUPS, self-installing Linux images for kiosks, and Android device-owner apps. More in this post.
The magic mirror assistant at work
A reverse-engineered thermal printer

This server

31 Docker Compose services behind Caddy: git hosting (Forgejo) with CI runners, file storage with Collabora and Syncthing, single sign-on, WireGuard, LAN DNS, dynamic DNS, and the apps above. Public sites go through Cloudflare.

thederf.com
This site, which is a uApp pretending to be Ubuntu 10.10.

Joshua Bemenderfer

Forward-deployed AI engineer

Northwest Georgia · josh at thederf.com · thederf.com/portfolio · github.com/JoshTheDerf

Download PDF

Summary

Software engineer and Linux sysadmin with 13 years of professional experience. I build AI systems end to end: agents, MCP servers, the apps around them, and the servers they run on. Eight years at a nonprofit in seven countries, building and migrating the systems its staff use every day.

Skills

  • AI: Claude Agent SDK, Claude Code, MCP servers and tools, Vercel AI SDK, OpenAI, Anthropic, Google and OpenRouter APIs, local models (llama.cpp, Whisper, Piper), test harnesses for checking AI-written code
  • Languages: TypeScript, JavaScript, Rust, C, PHP, Python, SQL, GDScript
  • Web: Vue, Nuxt, Node.js, Bun, Directus, PrestaShop, PWAs
  • Infrastructure: Linux, Docker, Caddy, Nginx, Cloudflare (Workers, Durable Objects, D1), AWS Lambda, Google Cloud, Kubernetes, MySQL, PostgreSQL, SQLite, GitHub Actions

Experience

Senior Developer and Systems Administrator · Creation Ministries International · 2018-present

  • Wrote an MCP server that gives AI assistants search and read access to the organization’s published content.
  • Built an AI actions extension for Directus: text and image generation from five model providers, available as REST endpoints and as steps in staff automations.
  • Second-largest contributor (1,680 commits) to the rebuild of the organization’s public platform on Nuxt, Directus and Cloudflare Workers; wrote most of its CI, deploys and dev environment.
  • Migrating a legacy subscription system: deterministic ETL, fidelity checks against the old system, staged two-way sync (off, inbound, dry run, live).
  • Consolidated about 20 RPC services into three apps; rolled out Office 365 sign-in across eight internal apps; 544 commits to the web stores used by offices in seven countries.

Independent AI projects · thederf.com · 2025-present

  • uApp: a Rust runtime for single-file apps that an embedded AI assistant builds and edits. Runs natively and in the browser (WebAssembly).
  • Voice assistant on the Claude Agent SDK with MCP tools, local speech recognition and synthesis, and spoken confirmation before any change.
  • MCP servers for Directus, a church management system, a file server, and a browser CAD app that an agent can drive from modeling through slicing.
  • sqlite-rls: row-level security for SQLite in C, red-teamed with 30 adversarial tests.
  • Four multiplayer browser games on Cloudflare Workers and Durable Objects, with simulation harnesses that check AI-written game logic against expected results.
  • Reverse-engineered Bluetooth thermal printer protocols into CUPS drivers; Android device-owner apps; self-installing Linux kiosk images.

Earlier work · 2013-2018

  • Full-stack PWA developer, VIPetTag: veterinary records PWA, Vue.js, Node.js, PostgreSQL on Kubernetes and Google Cloud.
  • Development team lead, ioAware: architecture, schemas and UI; Angular 2 and Vue.js front ends, Node.js API on AWS.
  • Voice app developer, CMC Markets and BlueAnchorSEO: Alexa and Google Assistant app on AWS Lambda.
  • Front-end consultant, HabitStack; freelance developer through Upwork.

Open source and writing

  • Author of prerenderer; top contributor to prerender-spa-plugin (7,300 stars).
  • About 100 web development articles for Alligator.io (now part of DigitalOcean).
  • Merged contributions to Directus, PrestaShop, vue-loader and Electron.

Other

  • Taught English full-time in Weihai, China, and a Western culture workshop at Shandong University (2015, 2017-2018).

Joshua Bemenderfer

Senior software engineer and systems administrator

Northwest Georgia · josh at thederf.com · thederf.com/portfolio · github.com/JoshTheDerf

Download PDF

Summary

Senior software engineer and Linux sysadmin with 13 years of professional experience, eight of them running development and infrastructure for a nonprofit with offices in seven countries. I plan and carry out large migrations, consolidate systems that grew out of control, and set up the tooling that lets a small team ship. Former development team lead.

Skills

  • Engineering: TypeScript, JavaScript, PHP, Rust, C, Python, SQL; Vue, Nuxt, Node.js, Bun, Directus, PrestaShop, Joomla
  • Operations: Linux, Docker, Caddy, Nginx, Cloudflare, AWS, Google Cloud, Kubernetes, MySQL, PostgreSQL, SQLite, backups and monitoring
  • Delivery: GitHub Actions, Turborepo, staged rollouts, migration tooling, developer environments, documentation and onboarding
  • AI: Claude Code, Claude Agent SDK, MCP, AI features in production systems

Experience

Senior Developer and Systems Administrator · Creation Ministries International · 2018-present

  • 3,700+ commits across the organization’s repositories.
  • Second-largest contributor (1,680 commits) to the rebuild of the public platform, moving it from a legacy PHP CMS to Nuxt and Directus with the front end on Cloudflare Workers. Wrote most of the CI, the production deploy scripts and the development environment.
  • Planning and building the migration of a legacy subscription system: deterministic ETL, report-fidelity harnesses, and two-way sync rolled out in stages (off, inbound, dry run, live), with a written production rollout checklist.
  • Combined about 20 separate RPC services into three service apps and four MySQL instances into one; moved the shared RPC library to TypeScript.
  • Rolled out Office 365 single sign-on across eight internal apps.
  • 544 commits to the PrestaShop web stores: custom modules and per-country payment gateways for offices in seven countries.
  • Upgraded the main CMS from Joomla 3 to 4 and an internal app to PHP 8; maintain the Docker setup for the legacy services.
  • Built a one-script Windows/WSL development environment that sets up the whole stack for new developers.
  • Added AI features: an MCP server for published content and an AI actions extension for staff automations.

Development Team Lead · ioAware · 2016-2017

  • Designed the front-end and back-end architecture, database schemas and UI.
  • Built two front-end apps (Angular 2 and Vue.js) and a Node.js REST API on AWS.

Full-Stack PWA Developer · VIPetTag · 2017-2018

  • Designed, built and deployed an offline-capable veterinary records PWA: Vue.js, Node.js and PostgreSQL on Kubernetes and Google Cloud.

Consulting and freelance · 2013-2018

  • HabitStack: rewrote the business logic of a B2B mobile app and replaced its build system.
  • CMC Markets and BlueAnchorSEO: Alexa and Google Assistant app on AWS Lambda.
  • MIDI2Piano.com: full-stack web app using WebAudio and WebMIDI.
  • Smaller client projects through Upwork.

Open source and writing

  • Author of prerenderer; top contributor to prerender-spa-plugin (7,300 stars).
  • Quark, a C++ GUI toolkit; a TypeScript port of IncrediBots 2.
  • About 100 web development articles for Alligator.io (now part of DigitalOcean).
  • Merged contributions to Directus, PrestaShop, vue-loader and Electron.

Infrastructure I run

  • 31 Docker Compose services behind Caddy on my own server: Forgejo with CI runners, file storage, single sign-on, WireGuard, LAN DNS, and public apps and games behind Cloudflare.

Other

  • Taught English full-time in Weihai, China, and a Western culture workshop at Shandong University (2015, 2017-2018).
Joshua BemenderferPortfolioSite map