Software engineer / frontend and backend / web, mobile, and games

I build and ship software end to end.

For four years I've built and shipped products across the stack: Unity clients on iOS, Android, and VR, TypeScript web apps, and the APIs, databases, and deployments behind them. That has included some AI features, like document retrieval for a nonprofit client and MCP servers that give AI agents their own scoped access to tools I built.

Seeking full-time software engineering roles on the frontend, backend, or both. Based in Aurora, Illinois. Open to remote, or hybrid and on-site in the Chicago area.

Live products on the App Store, Steam, and the web
Frontend, backend, and deployments, from Unity clients to Node and PostgreSQL
Document retrieval on pgvector and MCP servers for AI agents

Engineering stories

Three problems, start to finish.

AirRaid Football

Replacing Unity Multiplay

Situation
Unity announced it was shutting down Multiplay, the hosting service AirRaid's live matchmaking and game servers ran on.
What I owned
That deployment was my design, and I was the client's main technical contact, so the move was mine to run. The shutdown set the deadline, not us.
What I did
I set up matchmaking and server deployment on EdgeGap while the Multiplay servers kept running. A client update pointed players to EdgeGap. We switched at a quiet time and gave players about a day to move over, then shut down the Multiplay side.
Where it landed
Live service ran without interruption through the switch. The game is on the iOS App Store with its servers on EdgeGap.
Read the case study

Athena

Giving AI agents their own accounts

Situation
I wanted AI agents to read and update my project documentation without borrowing a person's login.
What I owned
Athena was mine to design and build, from the data model through the MCP server.
What I did
Agents became separate accounts with API keys, an accountable owner, and capabilities that only narrow access. Every agent edit is recorded under the agent's name, and a test checks the permission rules against the SQL search so restricted pages can't leak.
Where it landed
Athena holds more than 100 pages now, and two AI agents use it regularly over MCP alongside people.
Read the case study

Proposal retrieval for a nonprofit

Making old proposals findable

Situation
A nonprofit client answers requests for proposals by drawing on its past proposals. The writing was valuable, but staff had a hard time finding the right piece.
What I owned
I built most of the system for this RSM Studio client, including the first document ingestion passes, then handed off the final ingestion work. Later I built out Zagger, the white-labeled version, from it.
What I did
I split the old proposals into chunks, embedded them with OpenAI's small embedding model, and stored them in pgvector on Supabase so they could be searched by meaning. Retrieval fed a chat session where staff could review and rewrite drafts, with a mini model handling the smaller steps.
Where it landed
The old writing became something staff could search and reuse. On Zagger, I put the Vercel AI SDK in front of the models so the product wasn't tied to one provider.
See the project

Experience

From Unity developer to full-stack work.

I started out implementing features on Unity projects. Over four years the work spread to web apps, backends, and deployments, including a few AI features.Full resume (PDF)

  1. July 2022 - September 2026

    • Software EngineerSeptember 2025 - September 2026Company-wide title standardization. My scope did not change.
    • Technical LeadJanuary 2024 - September 2025
    • Unity DeveloperJuly 2022 - December 2023
    Robot Sea Monster Games / RSM Studio

    I joined as a contract Unity developer and moved into web and backend work as the projects called for it, becoming Technical Lead in January 2024. When the company standardized job titles in September 2025, mine changed to Software Engineer, and the responsibilities stayed the same.

    • Moved AirRaid's live matchmaking and server deployment from Unity Multiplay to EdgeGap before Unity's shutdown cutoff, with no interruption to live service.
    • Built FIGURD from concept to a live web game as sole developer: the TypeScript client, the AWS deployment path, the subscriber PDF and email workflow, and a competition mode for school math contests.
    • Owned the iOS and Android client for tgthr as its only Unity developer, including API integration, deep links, geolocation, and native input fields.
    • Rewrote AirRaid Football's play simulation in Unity 6 as the design changed, along with the rules that turn simulated paths into player animations.
    • Built most of a retrieval and chat system over a nonprofit client's past proposals, with OpenAI embeddings stored in pgvector on Supabase, then built out the Zagger prototype from it, including Google Drive ingestion and a provider-agnostic model layer with the Vercel AI SDK.
    • Connected AI calls to scenes and added in-game recording for Twitch streaming as a developer on Pickford, a client AI project.
    • As technical lead on an unreleased internal project, designed systems, wrote and assigned tasks for up to two developers, and reviewed their pull requests. Also the main technical contact for clients on tgthr and AirRaid Football.
  2. April 2022 - February 2023

    • Software Engineer Intern

    STIGMA App

    I built the database and backend for an existing mobile product on low-code tools: a visual app builder that compiled to React Native, and workflow automation tools, including Zapier. I also gave input on how to develop the product further.

Selected work

Projects, and what I owned on each.

Additional work

Project snapshots

Shorter notes on the rest of my work, including projects where I joined a larger team.

Client projectAI systems

Proposal retrieval for a nonprofit

An RSM Studio client, a nonprofit, answers requests for proposals by reusing its past proposals, and a lot of that writing was hard to find. I built most of the system: old proposals are chunked, embedded with OpenAI's small embedding model, and stored in pgvector on Supabase, and retrieval feeds a chat session where staff review and rewrite drafts. This project led to Zagger.

  • pgvector
  • Supabase
  • OpenAI embeddings
  • LLM chat

Main developer

Live productWeb

Zagger

Zagger is a white-labeled version of the nonprofit proposal retrieval work, so other organizations could ingest their own documents and work from them. I built out the early TypeScript prototype and added Google Drive ingestion. The original project had been tied to OpenAI, so I put the Vercel AI SDK in front of the models, which let us switch providers. Later I came back as a test user.

  • TypeScript
  • Vercel AI SDK
  • Google Drive API
  • OpenAI

Prototype developer

In useWeb, self-hosted
Orbit overview with a two-week calendar of upcoming tasks for each person on the team

Orbit

Orbit is a self-hosted task and deadline tracker, a smaller take on Jira and monday.com. The first version ran as a Cloudflare Worker. I moved it to Node, PostgreSQL, and Next.js, and built its MCP server so AI agents can pick up and update tasks while they work. An agent always acts for a specific person, and its changes show as that person "via" the agent.

  • TypeScript
  • Next.js
  • Express
  • Hono

Developer

In developmentWeb, self-hosted
Hermes Logging showing an uploaded log with its size details and Pin, Protect, and Notes controls

Hermes Logging

Hermes is a self-hosted log server for apps and games. Apps upload finished log files in resumable chunks or stream logs while they run, and people search, pin, annotate, and download them in a web UI. Logs are stored compressed, and very large ones keep their head and tail. The backend is done, the UI is being finished, and client SDKs come next.

  • TypeScript
  • Next.js
  • Express
  • PostgreSQL

Designer and developer

Client projectAI systems
Pickford scene of animated cartoon characters seated around a long holiday dinner table in a kitchen

Pickford

Pickford is a client project where RSM Studio built a multi-agent AI system that generates story ideas, writes scripts, creates audio, renders 3D scenes, and reacts to live audience input. My part was as a developer, not the lead: connecting the AI calls to the scenes, handling scene loading, and adding in-game recording so a session could stream to Twitch.

  • Unity
  • AI API integration
  • In-game recording
  • Twitch streaming

Developer

Completed client workiOS and Android
tgthr opening screen with a view of Earth from space

tgthr

tgthr is a Unity app built around a 3D globe for sending messages to people and places. As the client's main technical contact and the only Unity developer, I owned the app on iOS and Android: the 2D interface, API integration, geolocation, and deep links. Text input behaved differently on each platform, so native input fields sit over the Unity screen. The client praised the focused support and Unity expertise.

  • Unity
  • C#
  • iOS
  • Android

Main technical contact for the client, Unity client developer

In final playtestingOculus VR

Stellar Dust

Stellar Dust is a multiplayer VR game for Oculus that I worked on from 2022 to 2026. Most of my work was engineering: gameplay algorithms, UI, networking with Photon Fusion, server deployment, and CI/CD. In the later stretch I also investigated playtest issues, wrote up likely causes and fixes, and split the work across a two-developer team. The team is now in final playtesting.

  • Unity 2022
  • Unity 6
  • C#
  • Photon Fusion

Unity developer and technical lead

Released on SteamSteam
Welcome, Get Out! title art with hand-drawn lettering framed by red stage curtains

Welcome, Get Out!

Welcome, Get Out! is a free point-and-click puzzle game with a sarcastic, mostly voiced narrator and seven levels. It was a Columbia College Chicago team project, with me as lead programmer, game designer, and Scrum Master. It was released on Steam in October 2023, and Steam shows Very Positive reviews (81% of 79 as of September 2026).

  • Unity
  • C#
  • Steam

Lead programmer and game designer

ArchivedGame
Knights of the Ether: Blightfell title art featuring an armored knight

Knights of the Ether: Blightfell

An early Unity project where I focused on player-facing visual behavior, including 2D rigging, animation triggers, card presentation, and reusable prefabs. I also contributed to a limited set of NFT-integration tasks.

  • Unity
  • C#
  • 2D rigging
  • Animation integration

Unity Developer

Capabilities

Software engineering across the stack.

Frontend

  • Next.js and React
  • TypeScript web clients
  • Unity UI on iOS, Android, and VR
  • Cross-browser and cross-platform fixes

Backend and infrastructure

  • Node, Express, and REST APIs
  • PostgreSQL and pgvector
  • AWS Lambda, S3, and CloudFront
  • Docker, GitHub Actions, and EdgeGap servers

Engineering practice

  • Design docs and task breakdown
  • Code review
  • Unit, integration, and end-to-end tests
  • Working directly with clients

AI features

  • Retrieval with pgvector and chat
  • MCP servers with scoped agent access
  • Provider-agnostic model layers

Education: B.A., Game Design, Columbia College Chicago, with a minor in programming. Student work included leading programming on two team games, Welcome, Get Out! and the capstone Strange Cargo, serving as Scrum Master on Welcome, Get Out!, and building a dialogue tool in Unity with the Graph View API.

Honors: Eagle Scout, Boy Scouts of America, 2018.

How I work

Design first, then build and check it.

The same habits apply whether I'm writing the code myself or working with an AI coding agent.

01

Write the design first

Start from an investigation record or a design doc with clear approval points. Larger plans are saved to disk so the work can be picked up again, by me or by an agent.

02

Match the model to the job

Smaller, faster models for searching a repo and investigating, larger ones for implementation. In a product, keep a provider layer like the Vercel AI SDK so the model can change without a rewrite.

03

Validate against the design

Write tests alongside the implementation, then check the integrated result against what we set out to build. On Athena, each phase had to pass its tests before the next one started.

Outside client work

Writing about the work.

When a setup is worth repeating, I write it up for other developers.

Strange Matter

Strange Matter is a blog I started so a few Chicago-area developers could post in one place. It's mostly mine now and runs on hardware at home. The articles come from problems I had to solve myself, from Unity on mobile to home lab networking to a security flaw in AI coding agents.

Visit Strange Matter

Recent articles

Contact

Hiring? I'm available!

Open to software engineering roles on the frontend, backend, or both. Based in Aurora, Illinois, and open to remote work or hybrid and on-site roles in the Chicago area.