Product Engineer / Forward Deployed Engineer / UX + Applied AI

Unclear problems. No obvious answer. I work out what should exist, then build it.

I get close to the people living with the problem, turn what I learn into something tangible, and design and build it myself. I take it into production, watch how it actually gets used, and improve it from there.

Garland, TX · Available for remote roles

Selected work

Real problems. Practical solutions.

What was actually going wrong, what I decided to build, and what happened once it was in production.

Client details anonymized.

  1. 01

    Bidirectional CRM operations platform

    Operations team running quoting and purchasing inside Zoho CRM

    Quoting, purchasing, and account management lived across disconnected tools. Operations staff rekeyed the same records by hand and quoted from pricing that was already out of date.

    What I owned. I worked with the operating team to map how quoting and purchasing actually ran, then designed and built the platform and its CRM synchronization.

    Technical detail

    Engineering decision

    Zoho CRM stayed the system of record rather than being replaced, so the platform was built to synchronize against it in both directions instead of holding its own copy of the truth.

    Built and integrated

    • Operations platform spanning quotes, purchase orders, accounts, and price lists
    • Bidirectional synchronization with Zoho CRM objects and workflow rules
    • Appwrite holding pricing, quote and document sections, and Discount From Invoice data
    • Customer portals with role-specific permissions

    Stack

    • Nuxt
    • Nitro
    • TypeScript
    • Zoho CRM API
    • Appwrite
  2. 02

    Scheduled research agent that proposes and never publishes

    Client content operation running inside a hosted CMS

    Keeping the content library current meant a person researching the same sources every week. It was the first thing dropped when the week got busy, so the library went stale.

    What I owned. I designed and built the agent, the tool interface it is allowed to use, and the review step a person has to clear before anything goes live.

    Nothing reaches the live site without a person approving it, and the research happens whether or not the week got busy.

    Technical detail

    Engineering decision

    The agent proposes and a person publishes. The write interface it is handed has no update, replace, or delete operation, so overwriting something the client entered is not an action available to it rather than a rule it is asked to follow.

    Built and integrated

    • Scheduled agent running a language model with web search against a strict tool schema
    • Structured output filed into the CMS as suggestions, never as published content
    • Create-only write surface, so client-entered fields cannot be overwritten
    • Human review and approval before anything reaches the live site

    Stack

    • TypeScript
    • Anthropic API
    • Tool use
    • Structured output
  3. 03

    A model reads the document, records decide the outcome

    Nonprofit operations team processing submitted documentation

    Approving an application meant a person reading an uploaded certificate and transcribing an identifier from it, which was slow and easy to get wrong.

    What I owned. I built the flow: the vision-model read, the validation against authoritative public records, and the approval path around both.

    In production every approval came through a person entering the identifier directly and none through the model. Measuring which path approvals actually took is what made that visible.

    Technical detail

    Engineering decision

    A model reading a PDF is not evidence. The identifier it proposes is checked against authoritative records before anyone is approved, so the model can make the work faster but cannot be the thing that grants the outcome.

    Built and integrated

    • Vision-model read of uploaded documentation, proposing an identifier
    • Validation of that identifier against authoritative public records
    • Approval path that treats the model as a suggestion and the record as the decision

    Stack

    • TypeScript
    • Vision model
    • Public records API
  4. 04

    Enterprise QSR webhook adapter

    Enterprise quick-service restaurant environment

    User and store data lived in enterprise systems nobody downstream could reach. The only thing published was a stream of events, and nothing was consuming it.

    What I owned. I built the adapter that receives those events and persists them, including the authentication integration and the operational logging around it.

    Technical detail

    Engineering decision

    There was no access to the customer’s upstream systems, so the adapter was built against the published event contract alone rather than reaching into anything.

    Built and integrated

    • Webhook adapter receiving enterprise user and store updates
    • Persistence into MySQL through Drizzle ORM
    • Authentication integration with the existing enterprise environment
    • Operational logging and exportable error reporting

    Stack

    • Nuxt
    • Nitro
    • Drizzle ORM
    • MySQL
    • TypeScript
  5. 05

    Lead-capture integrations with retries and alerting

    Field service operators using FieldRoutes and Quo

    Inbound leads arrive through third-party APIs that fail intermittently. A dropped one is a customer who tried to reach the business and never heard back, with no record that anything went wrong.

    What I owned. I built and supported the lead-capture integrations, including the retry, monitoring, and alerting around them.

    Retries, monitoring, and failure alerts protect lead-delivery integrity. The idempotency and timeout handling are published as claim-then-push.

    Technical detail

    Engineering decision

    A lead has to reach two systems, so a retry after a partial failure must not repeat the half that already worked. Each delivery is claimed in the database before anything is sent, and a target already recorded as delivered is never sent again.

    Built and integrated

    • Lead-capture integrations with FieldRoutes and Quo
    • Claim before send, so a retry cannot create a second customer in a system that already accepted one
    • Automatic retry handling for failed deliveries, limited to the failures worth retrying
    • Monitoring and failure alerts on lead delivery

    Production reality

    One target stopped answering rather than failing. Requests hung instead of erroring, the attempts outlived the scheduled worker, and it was killed mid-flight with the delivery still claimed. Every attempt now carries its own timeout and the attempts share a deadline, so a target that never answers costs bounded time and the caller always gets an outcome it can record.

    Stack

    • Nitro
    • TypeScript
    • REST APIs
  6. 06

    Territory-map automation from live county records

    Operations team maintaining sales territory maps

    Every time a boundary changed, someone rebuilt the territory maps by hand from county records. That was roughly a full work week, repeated.

    What I owned. I built the pipeline that generates the maps from live county records, replacing the manual rebuild.

    Replaced approximately 40 hours of manual work per revision while improving data accuracy.

    Technical detail

    Engineering decision

    Counties publish their records in inconsistent formats, so the pipeline normalizes what it receives rather than assuming a single schema.

    Built and integrated

    • Automated map generation driven by live county records
    • Data normalization across inconsistent source formats

    Stack

    • Nuxt
    • Nitro
    • TypeScript

Discovery to production

How I take work into production

  1. 01

    Understand the work

    I work directly with the people doing the job to understand the workflow, identify the problem, and define what a useful solution needs to do.

  2. 02

    Design around constraints

    I shape the solution around the customer’s existing systems, data, and access requirements, making the tradeoffs clear before building.

  3. 03

    Build, integrate, and deploy

    I build the application and its integrations, then take it into production with the logging and error reporting needed to support it.

  4. 04

    Stay through resolution

    I troubleshoot across system boundaries, coordinate with customer and partner teams, and improve the solution as real use exposes new needs.

Background

From sculpture to software

More than eleven years of client-facing product delivery. I am strongest early, when the problem is still ambiguous and nobody has decided what should exist yet.

I studied fine art and spent my early years making sculpture and installation work: understand a space, imagine what could exist in it, build the thing, put it in front of people, learn from what happens. The medium changed to software, systems and interfaces. The practice did not.

That path ran through design, UX leadership and interface architecture into backend development, integrations, deployment and production support.

View resume
  1. Oct 2023 to present

    Current

    Founder and Product Engineer

    Stryde Digital

    Discovery through launch and continued improvement, working directly with owners and operating teams.

  2. Apr 2017 to Sep 2023

    UX/UI Consultant and Full-Stack Developer

    Independent Consulting

    Product discovery, full-stack development, integrations, migrations, and post-launch support.

  3. Feb 2015 to Apr 2017

    Director of UI and Development

    Johnson & Sekin

    Interface architecture, frontend development, CMS, and integrations.

  4. Feb 2014 to Feb 2015

    Director of User Experience

    Levenson

    Information architecture, interaction patterns, and responsive interfaces.

  5. Oct 2012 to Oct 2013

    Senior UX Designer

    WorldVentures

    User flows and interface concepts for customer-facing web.

  6. Jun 2007 to Oct 2011

    Online Visual Designer

    Blockbuster

    Website UI components and online visual content for high-visibility consumer channels.

Technical skills

Tools behind the work

Core stack

  • TypeScript
  • Vue / Nuxt
  • React
  • Node.js / Nitro
  • MySQL / Drizzle

Languages

  • TypeScript
  • JavaScript
  • SQL
  • PHP

Python: project experience

Frontend

  • Vue
  • Nuxt
  • React
  • Astro
  • HTML
  • CSS

Integrations and customer systems

  • Node.js
  • Nitro
  • REST APIs
  • Webhooks
  • CRM integrations
  • Data synchronization

Data & platforms

  • MySQL
  • Drizzle ORM
  • Convex
  • Appwrite
  • Zoho CRM
  • HubSpot
  • FieldRoutes
  • Quo

Architecture and production

  • Authentication
  • Testing
  • Monitoring
  • Error handling
  • Troubleshooting
  • Deployment
  • Netlify
  • Git

Applied AI

  • LLM application integration
  • Tool use
  • Structured output
  • Agent workflows
  • Evaluation
  • Human-in-the-loop design
  • MCP

AI tools also support my own development workflow.

UX and product design

  • Product discovery
  • Information architecture
  • User flows
  • Wireframes
  • Interaction design
  • Responsive UI
  • Interface architecture

Published work

Patterns pulled out of production work, each one published with the failure that produced it.

  • stable-enough

    An eval harness for non-deterministic output. Reports how often a check held, not whether it held once.

  • propose-only

    Write guardrails for agents that touch real data. The agent can propose; only a person can publish.

  • claim-then-push

    Deliver a record to several third parties at most once each, so retrying a partial failure never repeats the part that worked.

  • anthropic-actions-auth

    Call the Anthropic API from CI with no stored key, and survive runs longer than the identity token.

Where I work

Stryde Digital

Stryde Digital is the business where this work happens now. I work directly with owners and operating teams to find where technology is costing time, money, or momentum, then own the solution from discovery through launch and continued improvement.

strydedigital.com Opens in a new tab

In development Stryde Demo OS, an internal product.

Stryde Digital

Contact

Have a problem without an obvious answer?

I am open to product engineering, forward deployed and customer engineering roles, and always interested in a problem that has not been defined yet. The fastest way to reach me is email.