Web & Software Development
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
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.
Services
A clean, professional website that represents your business and makes it easy for customers to find and contact you.
Tools built around how your business actually works — not generic software you have to work around.
Not sure what you need? Let's talk through your business and figure out what technology can actually help.
Selected work
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
A permanent service history and resale verification platform for bikes — the Carfax of bikes. Riders keep a maintenance record a buyer can actually trust, shops log work straight onto a customer's bike, and sellers list with that verified history attached, which is a claim no other marketplace can make. Riders log service records, sync rides from Strava, upload receipts that Claude Vision reads and pre-fills, and share the result by QR code. Shop access sits behind a mechanic clock-in gate, and privacy tiers are enforced in application code and again by Postgres row-level security.
Visit rideprint.comStack
Next.js 16 · TypeScript · Tailwind v4 · Supabase (Postgres + RLS) · Anthropic API · Stripe · Resend · Vercel
Highlights
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 GitHubAn 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 GitHubAn 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 liveA 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.
Small business sites
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 demoA 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 demoAlso built
Writing & open source
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
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 chapterBody complete · unpublished
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 chapterDrafted · PDF and accessible HTML editions both build
Open source
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.
About
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.
Contact
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 emailUsually back within a business day.