Eight years of product management, the last two spent shipping production AI systems: a distributor's commerce and ERP platform, a consumer coaching app on the App Store, and an agent platform with an evaluation loop that has to prove its own work.
1,600+commits to a consumer iOS & web app in five months
5,000+commits to an agent platform, evaluation loop included
01 · Selected work
2025 → nowConfidential client Industrial distribution
Commerce, EDI and ERP integration for an industrial distributor
Chief Digital Transformation Officer. Reports to the COO and President.
The company's ERP is an AS/400 whose data is reachable only through ODBC. The brief was to put a modern commerce and integration layer on top without stopping the business, and without a seven-figure replatform.
Wrote the 3-year technology roadmap after a six-month assessment and replaced the plan the role was hired against.
Built a headless storefront on a ~60,000-SKU catalogue with Stripe checkout and B2B/B2C registration; live and selling on a major B2B marketplace channel.
Built the EDI service exchanging live 850/855/856/810 documents, and set its direction as a multi-partner platform with envelope-level isolation so a third partner needs no rebuild.
Designed an API insert layer over the ERP (customer, customer PO, RGA, vendor, rebates, AP/AR headers), validated end to end in a full test environment.
Grew supplier price and stock scraping to 20+ live suppliers with an authentication self-healing loop and a relay that gets past Cloudflare-protected portals.
Designed a full second copy of a 515-table, 27.7M-row ERP database in Postgres; the design passed contrarian and independent review before any production DDL.
Avoided a $500K outside quote for the site plus ERP integration by building in-house.
Storefront homeCategory browse, 28k products in one familyProduct detail with live availability
Client name, logo and contact details are replaced; everything else is the site as built.
2026 → nowOwn product Web · iOS · Android
Arnold — an AI strength coach, from zero to both app stores
Founder and product engineer.
A coach that knows your training history, talks to you between sets, and tracks food and body state. Solo build, web first, then a native shell.
Ships as separate iOS and Android apps alongside the web app, each released through its own store (App Store Connect and Google Play).
Took it through multiple App Store rejections (auth, in-app purchase, minimum functionality) to a compliant build: Apple in-app purchase on iOS, Stripe on the web.
Root-caused a month-long Sign in with Apple failure to a stale App ID registration, then fixed the four persistence and security bugs that success exposed.
Built the retrieval layer over each user's workout history (extraction, embeddings, graph RAG, BM25) that grounds the coach's answers.
Shipped a trainer portal with commission accounting and a referral program paid through Stripe Connect.
Found iOS voice drops from session telemetry, not guesswork: audio interruptions were silently skipping speech chunks. Shipped hold-and-resume playback.
FlaskPostgreSQLCapacitorSwiftAndroidRAGTTSStripe ConnectApp Store ConnectGoogle Play
PilotGentic — a desktop for agents, with an evaluation loop on top
Founder and product owner.
An MCP server that lets Claude and other agents see and operate the Mac desktop and browser. The interesting half is what happens after a run.
Hundreds of tools across screen, accessibility tree, browser, files and shell, behind one permissioned server.
A Chrome extension relays tabs, page content, console and network from the user's own signed-in browser profiles, so agents work inside the live authenticated session rather than a headless copy, without relaunching the browser.
Every run is audited against several data sources; failures become gap reports; a promoter proposes changes; a multi-perspective committee, including a devil's advocate, reviews them; a governor applies only what doctrine allows.
Review standard used across my projects: a check must be shown to fail when it should. Diagnosis, plan and diff each pass a refute-first reviewer, and verdicts state whether the objective, not just the code, was met.
Runagent does the task
Auditchecked against several data sources
Gap reportfailure becomes a filed gap
Promotelesson proposed as a change
Committeemulti-view review, devil's advocate
Governapplied only if doctrine allows
Claude, extended: Claude Code runs embedded inside the app, and every capability it gets is a named tool that can be switched on or off. Account and path details blurred.
Run and audit: every action is logged with its time, target and a screenshot. The audit step starts from this record.Gap report: 155 filed reports from the gap hunter, medic, auditor, reflector and promoter, each with a severity, a type and an open or fixed status.
In the browser: the Chrome extension overlays page health (errors, network, performance), a one-click fix-this-page action, and an embedded Claude session on any site. Account details blurred.
A member discovery survey, designed for honest answers
Built and donated to an association's technology task force.
Executives will not tell a trade body what they really think of AI if they can be identified. The tool is built around that.
Guided chat plus structured questionnaire, with optional 1-on-1 booking; approved by the task force for member distribution.
A two-store firewall keeps research answers and booking contacts apart; free text is redacted; pre-launch test data is hidden, not deleted.
Proposed a parallel employee track paired to executives by industry vantage rather than by company, to prevent re-identification at small members.
Survey designPrivacy by designFastAPIFly.io
Welcome screen. Association name replaced.
2025 → 2026Work demo Web · CMS
Lazarus — an AI chatbot, an AI-assisted CMS, and a zero-risk move to a static site
Product owner and builder. 267 commits, Jul 2025 – Jun 2026.
A home-remodeling company needed a content engine that could publish consistently and rank, and then a faster site to publish it on, without taking the live one down.
Built an AI chat widget (OpenAI GPT behind a backend proxy) with a guided booking flow that captures name, contact and appointment type, logs every session, and feeds an admin view of conversations and bookings.
Built a CMS backend (Express, PostgreSQL) with article lifecycle, image management, AI content generation and built-in SEO scoring.
Moved publishing to an Astro static-site generator behind an API bridge with auto-deploy and asset sync, hosted on Fly.io.
Planned the cutover as a DNS-based gradual switch with a revert snapshot taken first, so the live site was never at risk.
Ran multi-agent audits across the blog for content, image and duplicate consistency, with written reports on each pass.
The client work above is a set of separate services behind one portal. Each runs as its own deployed service. Customer, supplier and staff identifiers are masked in every image.
Portal
One front door
A single sign-in page that routes staff to each internal application: production, data query, knowledge assistant, commerce, warehouse, quoting and EDI.
Single entry pointRole-based access
Commerce
Headless storefront
B2B and B2C storefront on a 60,000+ SKU catalogue with live availability, FedEx-rated shipping, dealer account registration and Stripe checkout.
Next.jsStripeFedEx API
EDI
Marketplace EDI hub
X12 850 / 855 / 856 / 810 exchange with a marketplace partner: SFTP poller, 997 audit trail, SKU crosswalks, fulfilment flow and integration health checks.
X12SFTPFlask
ERP gateway
AS/400 data gateway and knowledge base
API and chat interface over a legacy ERP: search, inventory, purchasing and order insert (API or terminal emulation), plus a RAG knowledge base over the indexed program source.
FlaskODBCFull-text search
Quoting
RFQ automation
Pulls requests for quote from email and documents, extracts parts with AI, routes them to suppliers, and drafts customer responses with a daily QC scan of what was sent.
FlaskLLM extractionIMAP
Production
Rework and scheduling
Quotes, scheduling, staging checkpoints, machining operations and manufacturing analytics for a make-to-order shop floor.
FlaskPostgreSQL
Warehouse
Scanner for receiving, picking and counts
Barcode and AI-vision scanning for receiving, pick with double-scan validation, cycle counts and ship confirmation against the ERP.
Next.jsBarcode scanningAI vision
Knowledge
Retrieval-augmented assistant
Part and catalogue lookups answered from indexed documents, with the matching product card, specs and pricing tiers alongside the answer.
FlaskpgvectorLLM
At the order: print the slip and label, then verify with a camera. Recipient and sender details blurred.When it stops: a recovery ladder that says which step proves the roll actually moved.
Fulfilment
Shipping label and packing-slip printing
Prints the carrier label and packing slip from the order, routes them to the thermal label printer and the office printer, and verifies the output with a camera. When a printer stops, staff get a guided recovery ladder instead of a support call.
ZPLPDFCUPS / IPPCamera verification
Research
Member discovery survey
AI-guided research tool for a trade association, with identifiable consent data held in a separate store that is never joined to the research data.
FastAPILLMPrivacy by design
Data
Supplier price and stock scrapers
Network-level scrapers for manufacturer sites and 20+ supplier portals, with an authentication self-healing loop and a relay for portals behind bot protection.
Data
Shared data layer
A Postgres database per service, plus a dedicated vector database for semantic search over the ERP program source and product documents.
03 · What I do for clients
A
AI-agent evaluation & review design
Rubrics, verdict schemas and negative controls that tell you whether an agent's output is actually right. Audit loops that turn failures into reviewed fixes.
B
Technical product management for AI & SaaS
PRDs, roadmaps, prioritisation, launch-readiness reviews and the executive deck, written by someone who can read the diff.
C
Legacy-system integration
API and data layers over ERPs and green screens, EDI partners, and supplier portals. Incremental, with no big-bang replatform.
D
Idea to store listing
Web or mobile MVPs taken through build, payments, store review and launch, including the rejections.
04 · Ways to work together
Three kinds of engagement. They differ by what you are buying and who holds the decision, so the way I price them differs too.
I
Product management
For a team that has engineers and needs the product work done properly.
Specs and PRDs, roadmap and prioritisation
Launch-readiness reviews
Executive-ready decks and status reporting
Engagement: hourly, ongoing or fixed term.
II
Technical product management & AI evaluation
For a product that has to work with agents, models or legacy systems, and prove it.