
Formship
The course-generation pipeline behind my company's first product: staged model calls, schema-checked output, and a sync step that patches training when its source changes.
Architecture, generation pipeline, and product design
Software engineer in Orlando. I build analytics interfaces and integrations at Mouseflow and data tooling at Cencora, and I run Formship, my own small software and games company.

The course-generation pipeline behind my company's first product: staged model calls, schema-checked output, and a sync step that patches training when its source changes.
Architecture, generation pipeline, and product design

A daily index of US price drops and probable price errors: a static Nuxt site fed by a TypeScript pipeline that keeps its own price history.
Product design, data contract, and pipeline architecture

Compare League of Legends items and full builds by their gold efficiency, using data from Riot's API.
Full-stack development and item-data pipeline

A resume and cover-letter builder with rich-text editing, PDF exports, and an MCP server for AI clients.
Product design, full-stack development, and MCP API

A coffee storefront with a shopping cart, live inventory, and online ordering.
Storefront development and launch
Senior Data Operations Engineer
Software Engineer
Founder
Full-Stack Developer (Contract)
Junior Frontend Developer

Most of my work is web applications, integrations, and data pipelines. At Mouseflow I build analytics interfaces and integrations. At Cencora, I build Python tools for production data workflows and maintain their deployment pipelines.
Outside work, I run Formship LLC, a small company I founded. It sells help-center drift audits, publishes barato.si, a daily index of US price drops, and releases my games under Formship Games. Formship began as a course-generation product; the pipeline behind it is the project featured here. HasteCV is a resume builder I use myself. I also make games, because I get to draw and then watch people play them.
Research notes from barato.si: how the price-error engine weighs evidence, and why the new forecast publishes its own report card.
A placement flow that passed its tests and ate clicks, a boss with bad instructions, and an economy that gave tools away. The September update.
The four-gate look test I run before any character or prop earns a place in a game.
How the post-jam overhaul went out as version 1.1 on Wavedash: staged by visibility, guarded by flags, judged in the engine.
Why I parked a from-scratch Unity rebuild, kept the jam codebase, and pointed it at Steam.
Killing three drafts, the rule that gave back depth I never designed, and balancing a roguelike with a bot that plays 300 runs.
A mid-jam engine switch, a mechanic that felt broken for three days, and the telegraph that fixed it.
The design tokens and motion system behind the previous version of this portfolio.
The player's kit never changes. Every bit of difficulty in I Won't Be Abducted lives in a Godot resource, and here is how that held up.
A weekend tabletop-defense game, the economy I cut, and the one ending everything else exists to protect.
Why attacks never miss, where the randomness went instead, and what painting a whole cast taught me about scope.