Services
Four kinds of work, one person doing it.
Most engagements are a mix of the areas below. What they have in common: a clear scope, code you own, and direct contact with the engineer writing it.
Web applications
Full-stack web software, from a new product to the internal dashboard your team has been running out of a spreadsheet. I handle the whole stack: data model and database, API, authentication and access control, the interface, and deployment.
The most recent example is the analyst dashboard at AddressHate: a Next.js and PostgreSQL application with Google sign-in, per-section access control, and reporting across platforms, models, and narratives. See the case study.
Typical engagements
- An internal dashboard on top of data you already have
- A customer- or partner-facing web app built from scratch
- Adding sign-in, roles, reporting, or an admin area to an existing app
- A small service API, with documentation and tests
Stack
- Next.js, React, TypeScript, Tailwind CSS
- Node.js and Python (FastAPI) backends
- PostgreSQL
- Google Cloud: Cloud Run, Cloud SQL, Cloud Storage, IAM, Secret Manager
- Docker, GitHub Actions, Playwright and Vitest
Internal tools and automation
The software that makes the rest of a team faster: browser extensions that put a workflow where people already are, control panels for data pipelines, automation for Jira and Confluence, and small desktop or command-line utilities. This is the work I've done the most of, at 2K and since.
Recent examples: a Chrome extension for annotating posts in place on 16 social and AI-chat platforms, with an offline queue and an approval workflow behind it; a FastAPI and Next.js control panel for an annotation pipeline; and, at 2K, an Atlassian Forge plugin that automated producers' Confluence and Jira work.
Typical engagements
- Chrome extensions (Manifest V3) that add a workflow to an existing site
- Control panels and monitoring for data pipelines and batch jobs
- Jira and Confluence automation with Atlassian Forge
- Reporting that runs itself: scheduled jobs, digests, exports
- Desktop and command-line utilities in Python or Electron
Stack
- TypeScript, Python
- Chrome extension APIs, esbuild, Playwright
- FastAPI, Next.js, PostgreSQL
- Atlassian Forge, Azure, Google Cloud
Game development and engine tooling
Gameplay systems and editor tooling in Unreal Engine 5 and Unity. My degree is in computer science with a games emphasis, and I spent three rotations at 2K Games doing exactly this: backend and business logic for NBA 2K's MyCareer, then tools and gameplay engineering on an unannounced project at Gearbox Software.
The tooling side is where I'm most useful to a small studio: the wizards, custom components, and debug features that let designers and artists iterate without waiting on an engineer. See 2K Games and Egregore.
Typical engagements
- Editor tools and wizards that shorten a content pipeline
- Gameplay systems: abilities, inventory, progression, camera
- Prototypes that prove out a mechanic before a full build
- Debug and testing features for faster QA
Stack
- Unreal Engine 5: C++, Blueprints, Gameplay Ability System, Lyra, Sequencer
- Unity: C#
- Perforce, Jenkins
Technical review and consulting
Short, fixed-scope engagements when you want an engineer's opinion before you spend money: an architecture review before a build, a security hardening pass on a web app, a code review of something you inherited, or help turning an idea into a scoped plan with an estimate attached.
The deliverable is written: a report with findings in priority order and specific recommendations, plus a call to walk through it. If you then want the work done, it can roll into a normal engagement.
Typical engagements
- Architecture and stack review for a planned build
- Security hardening pass on an existing web application
- Code review and a maintenance plan for an inherited codebase
- Scoping and estimating a project before you commit budget
- Advice on a Google Cloud setup: services, IAM, cost
How an engagement works
-
Intro call
Thirty minutes, no charge. You describe the problem; I ask questions and tell you honestly whether I'm the right person for it.
-
Proposal and statement of work
A short written document: deliverables, milestones, timeline, what's out of scope, and the price or rate. We sign it before work starts.
-
Build in milestones
Work lands in your repositories as it's done. You get written progress updates and a demo at each milestone, and a chance to adjust course.
-
Handoff
Documentation, deployment, and a walkthrough so your team can run it without me. Ongoing support is available on an hourly or retainer basis if you want it.
Rates and terms
Work is priced per statement of work, either as a fixed fee for a defined deliverable or hourly for ongoing and exploratory work. Rates depend on the scope and are quoted up front; ask and I'll send them. Invoices are issued under my own name, with payment terms stated on the invoice and in the SOW. A W-9 is available on request.
I'm an independent contractor, not an employee of the teams I work with. I set my own hours, use my own equipment, work from my own office in Novato, and take on more than one client at a time. Agreements and statements of work reflect that, and I'm glad to work from your standard contractor agreement if you have one.
A good fit is a small company, a research group, or a studio team that needs a specific thing built well and would rather work directly with the person writing the code. If your project is outside what I do, I'll say so on the intro call and point you somewhere better.