dev

Web & Software Development

Technology that works for your business — and the people in it.

Also open to software engineering roles, full-time or contract.

I build websites and custom software for small businesses that want practical solutions, not corporate ones — and I ship my own products the same way.

Open to work

Also available for full-time and contract roles.

Full-stack web, Android, or product engineering. I work end to end, directing AI coding agents through schema, implementation, tests, CI, and documentation, and owning the decisions and review at every step, and I've shipped products to real users on my own, not just to a demo branch.

Live in production

RidePrint — a full-stack SaaS platform with payments, third-party OAuth, and paid-tier features, running at rideprint.com.

5,000+ automated tests

Across four shipped projects, with CI on every push and emulator-based instrumented tests on Android.

AI-directed, test-verified

I build with AI coding agents and own the requirements, architecture, review, and test suites that make the result trustworthy.

01

Web development

A clean, professional website that represents your business and makes it easy for customers to find and contact you.

02

Custom software

Tools built around how your business actually works — not generic software you have to work around.

03

Consultation

Not sure what you need? Let's talk through your business and figure out what technology can actually help.

Products I've built and shipped myself, and site work for local businesses. Every project below went from an empty repository to something people actually use, built with AI coding agents under my direction and gated by automated tests.

Products

Android · Kotlin · Open Source

Postmark

A privacy-first Android SMS client that fully replaces the default messaging app, keeping its own local database so search, stats and backups work with no cloud account at all. Its MMS layer splits the carrier's byte budget across every attachment in a message — smallest first, with under-budget images donating their surplus to larger ones — so a multi-photo message compresses to fit instead of failing to send. Photo, video and voice-memo messaging; full-text search; conversation stats and calendar heatmaps; scheduled backup and merge-only restore. No cloud, no accounts, no analytics.

View on GitHub
Stack
Kotlin · Jetpack Compose · Room · Media3 · WorkManager
Scale
~40,000 lines of production Kotlin; 1,100+ unit tests plus instrumented tests in CI
Android · Kotlin · Open Source

ShaftSchematic

An Android app for modeling marine propeller-shaft assemblies, built out of my own day job inspecting and repairing shafts at a propeller shop, where the drawings were being made by hand because CAD made the work slower rather than faster. A machinist defines a shaft, watches a live dimensioned preview, and exports the one-page technical PDFs a repair job actually needs — without opening CAD at all. Multi-segment shafts with bodies, tapers, threads, liners and bolt slots; schematics, runout sheets, wear documents and undercut drawings, each with a blank write-in variant for marking up on the job.

View on GitHub
Stack
Kotlin · Jetpack Compose · DataStore · Android PDF rendering
Scale
~64,000 lines of production Kotlin; 2,200+ unit tests with CI gating merges
React · TypeScript · Three.js

Engine Visualizer

An interactive 3D visualizer for piston-engine geometry, built so the motion can be studied rather than just watched. Enter bore, stroke, rod length and compression ratio — or load one of sixteen real engines — and the crank turns on exact slider-crank kinematics rather than the usual sinusoidal approximation, so rod angularity is visible instead of averaged away. Renders inline-3, -4 and -6 layouts at their real crank-throw phasing, plots position, velocity and acceleration from closed-form derivatives, and compares two engines side by side at a shared scale.

Try it live
Stack
React · TypeScript · Three.js (R3F) · Zustand · Vite · Vercel
Scale
1,500+ tests against ~15,000 lines of source; CI runs lint, tests and a production build
AI · Python · React

DocArchivist

A local-first document archive that turns a drawer of scanned paperwork into something searchable, without a page of it leaving the machine. Drop in a PDF or a photo and it reads the text by OCR, applies AI-generated metadata — title, vendor, date, category — and files it where you can find it again. Covers 22 document types and image-to-PDF ingest, ships as a Windows installer, and is backed by 950+ automated tests and a nine-phase fault-injection test plan.

Stack
FastAPI · React · SQLite FTS5 · Electron · PyInstaller
Status
Private pre-release, demo on request

Small business sites

Small business · Web

Chase Race

A site for a one-man race prep and performance shop in Duvall, WA — 15+ years of experience, 40+ custom cages built, recognized by SCCA, NASA, and LeMons. Showcases services including exhaust, alignment, coilovers, and Miata/MX-5 specialization. Built with the owner and revised to his notes; he's finalizing copy before it goes live under his own domain.

View the demo
Stack
HTML · CSS · vanilla JS · Netlify
Small business · Web

Urban City Coffee

A polished marketing site for a café in Mountlake Terrace, WA — est. 1993. Single-page and mobile-responsive, with a tabbed menu, an hours bar, photo sections, Google reviews, and an online-order call to action. Built on spec to show the owner what the shop could have. They're keen to go ahead; the project is parked for now while other priorities take precedence.

View the demo
Stack
HTML · CSS · vanilla JS · Netlify

Also built

Two book-length teaching projects, drafted in collaboration with AI against my own public Android codebases, under rules I set before drafting began. Every quoted listing is machine-checked against a pinned commit and every count was measured, not remembered.

Writing

Reading the Machine

377 pages · 16 chapters

Teaches software architecture backwards: rather than building a toy system forwards, it walks through two real, public Kotlin/Android codebases and names what is already there. The reader is framed as a developer hired to build them — for a machine shop, and for the Android platform itself — so each architectural decision arrives with the client constraint that caused it.

Read a sample chapter

Body complete · unpublished

Meeting the Machine

585 pages · 19 chapters

The prequel. Most first books teach a construct and hang it on an invented toy, leaving an enormous gap between the last chapter and a real repository. This one teaches every construct twice — once in five lines you type and run, then again verbatim inside a forty-thousand-line working application, with its real file path. The goal is not to understand the whole listing; it is to recognize the thing you just learned, sitting in grown-up code.

Read a sample chapter

Drafted · PDF and accessible HTML editions both build

Open source

Claude Code Usage Monitor

Opened a pull request to an open-source Python terminal monitor published on PyPI — still open as of September 2026 — that adds recognition for the Claude 5 model family, corrected pricing that was billing a new model at a legacy model's rates, labeled auto-estimated limits honestly rather than presenting them as measured, and fixed metric bars that broke in narrow terminals.

View the pull request

Built from real experience.

Chris Mendoza, wearing a gray beanie and hoodie, on the Puget Sound shoreline.

I'm Chris Mendoza, a developer in Bothell, WA, just outside Seattle, working as PlusOrMinusTwo Designs. I have a B.A.S. in Application Development and a background that's taken me through IT support, restaurants, and — still, today — a machine shop floor.

I've worked alongside the kind of small businesses I now build for — and I know that what you need is something practical that actually works, not an overcomplicated solution from someone who's never been in the trenches.

That background shows up in the code. I machine and inspect marine propellers and shafts at Sound Propeller Services, and ShaftSchematic exists because I needed it there — the drawings were being done by hand, since CAD made the job slower rather than faster. RidePrint started as a problem I had as a cyclist and is now a live platform with a marketplace and shop integrations. I build with AI coding agents. My job is deciding what gets built, how it fits together, and whether it's actually right: reviewing the output, setting the test and CI gates, and using the software daily on real devices.

Languages
TypeScript Kotlin Python C# / .NET HTML / CSS / JS SQL
Frontend
React Next.js Tailwind Jetpack Compose React Native
Backend
Supabase / Postgres FastAPI Flask SQLite Room REST APIs
Platform
Android Stripe Anthropic API OAuth & webhooks Git GitHub Actions Vercel / Netlify

Let's build something useful.

Have a project in mind, a role to fill, or just an idea you want to talk through? I'd love to hear from you.

The best way to start is a direct email. Tell me a bit about what you're working on — a rough idea is enough to go on. If you're hiring, mention the role and I'll send whatever else you need.

Send an email

Usually back within a business day.