Technical product leadership

I write the PRD, and I open the pull request.

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.

~60kSKU catalogue behind a headless storefront
20+live supplier integrations, self-healing
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.
PythonFlaskPostgreSQLAS/400EDI X12StripeFly.ioPlaywright
Storefront home page with search, category navigation and sign-in
Storefront home
Category page listing bearing subcategories with product counts
Category browse, 28k products in one family
Product detail page with availability, dealer-benefit prompt and cart actions
Product 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
Arnold Training App landing page: The AI that trains with you, not at you
Landing page, live at arnoldtrainingapp.com
arnoldtrainingapp.com ↗
2026 → nowOwn product
macOS · MCP

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.
  1. Runagent does the task
  2. Auditchecked against several data sources
  3. Gap reportfailure becomes a filed gap
  4. Promotelesson proposed as a change
  5. Committeemulti-view review, devil's advocate
  6. Governapplied only if doctrine allows
PilotGentic desktop app: radar of running agents, an embedded Claude Code session, a skills catalogue with per-tool toggles, and a copilot pane
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.
Automation tab showing a recorded run: 58 actions, each with time, gesture, target app, coordinates and a screenshot thumbnail, with a Replay button
Run and audit: every action is logged with its time, target and a screenshot. The audit step starts from this record.
Pilot Reports dashboard listing filed capability gaps with severity, type and status, from Gap Hunter, Medic, Auditor, Reflector and Promoter
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.
The PilotGentic Chrome extension overlaid on a web page: a stats panel with errors, console, network and performance, a status panel with a fix-this-page action, an embedded Claude Code chat, and a footer showing no issues
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.
MCPChrome extensionSwiftNodeAgent orchestrationLLM evaluation
pilotgentic.com ↗
2026Volunteer
Industry trade association

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
Survey welcome screen: a few minutes now shapes what the association builds next
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.
ExpressPostgreSQLAstroLLM content generationSEOFly.io
Home remodeling site with a three-step free-estimate form and kitchen design gallery
Public site with the estimate funnel. Phone number replaced.
lazarushomeremodeling.com ↗
02 · The platform, service by service

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.

One front door screen, identifiers masked
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
Headless storefront screen, identifiers masked
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
Marketplace EDI hub screen, identifiers masked
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
AS/400 data gateway and knowledge base screen, identifiers masked
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
RFQ automation screen, identifiers masked
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
Rework and scheduling screen, identifiers masked
Production

Rework and scheduling

Quotes, scheduling, staging checkpoints, machining operations and manufacturing analytics for a make-to-order shop floor.

FlaskPostgreSQL
Scanner for receiving, picking and counts screen, identifiers masked
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
Retrieval-augmented product assistant answering a part-number lookup, prices masked
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
Order-level print step: packing slip and shipping label buttons, with camera verification of the printed label (recipient details blurred)
At the order: print the slip and label, then verify with a camera. Recipient and sender details blurred.
Printer controls panel with a step-by-step recovery ladder for a stopped label printer
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
Member discovery survey screen, identifiers masked
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.

  • Evaluation rubrics, negative controls, audit loops
  • Agent-harness and integration design
  • Hands-on build: commits and pull requests included

Engagement: hourly or a fixed-scope project.

III

Fractional digital leadership

For a business that needs someone to own the technology roadmap and portfolio, not just a project.

  • Roadmap, build-versus-buy and vendor decisions
  • Portfolio ownership and reporting to ownership
  • Hands-on delivery of the first systems

Engagement: monthly retainer with defined availability.

Rates on request. Not sure which fits? Describe the problem and I will tell you.

05 · How I work

Measure first

Every fact a plan rests on is measured before a reviewer sees it, and labelled verified or second-hand.

Try to refute

Each change is handed to a reviewer whose job is to break it. A check that has never been seen to fail is not evidence.

Report outcomes

Reports are written from the user's side: what they got before, what they get now, and what is still waiting on a decision.

The recurring failure is verifying with an instrument that cannot fail, then reporting its silence as success.

05 · Contact

Have a system that needs to ship, or an agent that needs proving?

Email is best. I keep scheduling light and decisions in writing.

tenxservice@gmail.com

linkedin.com/in/robertmsher · Résumé