Joshua Fitz-Morris

Lead Software Engineer

Production AI systems, owned end to end.

For the last five years I have built full-stack, cloud, and AI systems for enterprise clients out of a Vancouver consultancy. Most recently as the sole code owner of a seven-service GCP platform spanning document intelligence, semantic retrieval, and agents, taken from an empty repository to live production in 28 weeks.

Vancouver, BC · Remote Canada / US · Open to relocating to San Francisco · TN-eligible

Inception to live production
28weeks
Merged as sole CODEOWNER
429PRs
Extraction recall, eval driven
37→99%
Under semantic retrieval
26kdocs
Governed MCP agent layer
40tools

Selected work

Client platforms, taken to production.

Five years at Ollon, a Vancouver software consultancy, as the engineer clients get handed when the thing has to actually ship.

01

IngestAI

Document intelligence, semantic retrieval & agent platform

Ollon · 2026

A seven-service, three-environment GCP platform that reads a company's paperwork, extracts it under evaluation, puts a human on the uncertain calls, and then lets agents answer questions across the whole corpus from grounded sources.

I was the primary technical owner and sole repository CODEOWNER, from the first commit to production traffic in 28 weeks across 429 merged pull requests.

The intake half is multi-tenant ingestion of PDF, XLSX, and Google Sheets through Gemini extraction, confidence scoring, human review, and system-of-record delivery. Fourteen of fourteen validated production pushes landed with zero orphaned records, which is the number I care about most: the pipeline either delivers a complete job or it delivers nothing.

The semantic layer is mine end to end. Chunking and embedding workers cover 26,000 historical documents at 99.98% coverage and feed pgvector retrieval, so the agents answer from grounded source passages rather than from the extraction database alone.

On top of that sits a governed MCP server and agent architecture: 40 tools over 21 BI views, with tenant and principal isolation, audited queries, answers grounded in a cited source, and conversational surfaces deployed on Gemini Enterprise.

Extraction quality was treated as an engineering problem rather than a prompt problem. A golden-data evaluation harness wired into CI as a release gate moved quantity recall from 37% to 99%, and reached 96.3% precision at 91% coverage on a taxonomy mapping field that had resisted every heuristic before it.

The unglamorous half was making it a good place to work. CI runtime came down 52%, and the local unit test loop went from 10.5 minutes to 15.6 seconds.

Inception to production
28 weeks
Clean production pushes
14 / 14
Precision at 91% coverage
96.3%
Unit test loop, from 10.5 min
15.6s

Stack

GCP · Python · FastAPI · React · TypeScript · Gemini · MCP · Agents · PostgreSQL / pgvector · BigQuery · Cloud Run · Pub/Sub · Terraform

02

Stellantis

AI contract intelligence

Ollon · 2025

A retrieval pipeline over a vendor contract portfolio, plus the agent surface that let people actually ask it things.

Over a thousand vendor contracts ingested and indexed into a vector searchable knowledge base, cutting contract search time by 90%.

I built the MCP server that exposed semantic search and natural language querying over the corpus, along with automated portfolio reporting across spend, obligations, and risk exposure.

Contracts indexed
1,000+
Reduction in search time
90%

Stack

GCP · Python · RAG · Vector embeddings · Document AI · Terraform · PostgreSQL / pgvector

03

Green & Spiegel LLP

Immigration case management platform

Ollon · 2024 – 2025

A multi-tenant platform for global immigration law firms, delivered as tech lead on a five-person team.

A $1M+ engagement where I led the team and owned the architecture through launch.

The piece that changed the client's economics was a schema-driven dynamic form engine: non-technical staff design their own intake workflows, without an engineer in the loop. It removed hundreds of hours of manual legal review a month.

Engagement, led end to end
$1M+
Engineers led
5

Stack

React · Express · MSSQL · Docker · AWS ECS · S3 · CloudFront · WAF · Cypress

Also built

Knighthead CapitalGoverned reinsurance treaty workflows and a secure Next.js data layer for underwriting.
Credit SuisseOkta and Azure AD single sign-on rollout across 1,000+ users.
SinaliteTerraform-driven multi-region AWS migration.
APRWorkflow automation with Document AI extraction and conversational BI over BigQuery.

Building now

Two products I am building on my own time.

Both start from the same observation: multimodal models just changed what is possible, and most of the interesting work is in the unglamorous half, the evaluation, the confidence handling, and the moment a human has to be asked.

KitchenOS

Stop wasting the food you already bought.

v0 on device

An operating system keeps state so the programs do not have to. KitchenOS keeps the state of a kitchen: what is there, what is dying, and what is possible tonight.

Every app that attacked food waste asked people to become inventory clerks, and every one of them died of that ask. Multimodal models changed the physics. A camera glance can read a fridge now, and a spoken sentence can update it. The bet is that a fuzzy, confidence-scored, staleness-tolerant picture of a fridge is sustainable where exact bookkeeping never was.

Native SwiftUI with a WidgetKit face on the Home and Lock Screen, on-device SwiftData, and three narrow agent surfaces: vision inventory inference, voice delta parsing, and constrained recipe generation. The design constitution is its own document, and the simulator is the source of truth for what the app is.

Fuzzy and alive beats precise and abandoned.
The KitchenOS core bet

Stack

Swift · SwiftUI · SwiftData · WidgetKit · Gemini vision · XcodeGen

Manifest

Meet your data where it lives, and make it make sense.

Pre-v0, first slice live

Manifest turns the documents a company already receives, invoices and receipts and POs and job paperwork, into organized files and normalized records in that company's own vocabulary: their jobs, their vendors, their cost types.

The bet is that it is configurable without developers. Taxonomies do not transfer between companies, and that is the point. An admin brings their own vocabulary and the engine stays constant. Every human correction becomes remembered mapping, which is the part a generic PDF-to-JSON tool cannot copy.

The first vertical slice runs intake, extraction, and normalization across three deliberately different company shapes at once, because forcing three taxonomies through one engine from day one is the only honest proof of the one-engine bet. Verifying a document in the review surface mints an eval expectation, so the review queue doubles as the accuracy corpus.

Manifest demonstrates intelligence by having already done the work, not by narrating that it is working.
The Manifest design principles

Stack

TypeScript · pnpm workspaces · Multimodal extraction · Eval harness · MCP

Writing

Patterns, written up with the code.

Each piece comes with a repository you can clone and run, because a pattern is a claim until the tests pass on someone else's machine.

Deny-by-default MCP: making agent tools safe to hand to an LLM

Keeping a model from choosing whose data it touches: required scope declarations, tenant-narrowed views, and a CI test that fails any tool whose answer depends on another tenant's data.

Approach

How I keep AI systems honest.

Shipping a model into production is mostly a question of what you refuse to claim without proof. These are the lines I hold, taken from the constitutions I write for my own projects.

01

Evidence over vibes

A trust claim ships with the measured run behind it. If accuracy cannot be stated as a number from a real eval, it does not go in the deck.

02

Demonstrated, not merged

A behavior exists when someone has watched it work on the real device or the real environment. Merged code is a claim, not a result.

03

Plain code by default

Agents earn their place against the boring alternative. Where a function will do, a function does it, and the model handles the part that genuinely needs judgment.

04

Never guess silently

Below the confidence bar, the system asks. One wrong silent record costs more trust than ten honest questions, and every automatic decision carries its evidence and a one-click correction.

Toolkit

What I reach for.

Languages

Python · TypeScript · JavaScript · Swift · SQL

AI & LLM

RAG · Agentic systems · MCP · Evals & golden data · Gemini · Embeddings · pgvector · Prompt & schema pipelines

Backend & frontend

FastAPI · Node.js · Express · React · Next.js · Tailwind · Cypress

Cloud & data

GCP (Cloud Run, BigQuery, Pub/Sub, Document AI) · AWS (ECS, S3, RDS) · Terraform · Docker · PostgreSQL · MySQL · MSSQL

Identity & security

OAuth 2.1 / PKCE · OIDC · SAML · Okta · Azure AD

BSc Computer ScienceSimon Fraser University · 2021
AWS Certified Solutions Architect, AssociateAmazon Web Services · 2025 – 2028

Contact

Building something that needs to actually work?

I am open to senior, staff, and forward deployed engineering roles, and to selected contract work. Production AI, retrieval, document intelligence, agents, and the platform underneath them.