M3MM

Software Engineer II | Founder & Product Engineer · Atlanta, GA

Production systems for regulated, high-stakes software.

Software Engineer II and founder with 4+ years shipping production systems across regulated gaming, fintech, client services, and SaaS. Architected internal DevOps and release infrastructure at AGS, then designed, sold, deployed, and operated accessible web and automation products for real businesses. Full-stack across C#/.NET, Python, cloud, data, payments, and AI-assisted workflows.

Experience

The chronology, without opening a PDF

  1. Aug 2022 — Present

    Software Engineer II · American Gaming Systems (AGS)

    Architected the company's DevOps portal and SVN release-tooling suite from the ground up, then owned end-to-end release management for regulated slot platforms across multiple gaming jurisdictions. AGS was subsequently acquired for $1B.

    • C#
    • .NET
    • WPF
    • C++
    • SQL
    • SVN
    • Microservices
  2. 2026 — Present

    Founder & Product Engineer · M3MM

    Founded the studio, delivered live client sites including Big7 Construction, and shipped two production SaaS products — SiteGuide's storefront with a verified Stripe purchase flow and the AI Manual Assistant RAG service — plus an n8n lead-automation OS traced end to end in production.

    • Astro
    • Cloudflare
    • Python
    • FastAPI
    • Stripe
    • Supabase
    • Claude API
    • React
    • n8n
  3. Nov 2021 — Aug 2022

    Software Engineer · InComm Payments

    Delivered front-end and back-end features across multiple fintech products in an Agile team, supporting Azure cloud integration and deployment automation on secure payment systems.

    • C#
    • .NET
    • ASP.NET
    • Angular
    • Azure
    • REST APIs
View the full resume →

Selected work

Problem → approach → result

American Gaming Systems — Software Engineer II

DevOps portal for a $1B-acquired gaming platform

Used daily by 5–10 engineers · 5 release tools shipped · platform later acquired for $1B

Problem
Release management for regulated slot-machine software was scattered across disconnected legacy tools: a standalone WPF decryption utility, manual SVN branch/build steps, ad-hoc email notifications, and no single place to see compliance status across jurisdictions.
Approach
Architected and built a unified DevOps portal, then designed a microservices layer connecting decryption, file handling, SVN automation, notification pipelines, and queue-based processing. Shipped Branch Creator, Branch Unlocker, Build Validator, ChangeSet Manager, and Jurisdiction Map tools around the same hub.
Result
Used daily by 5–10 engineers across QA and development for release coordination, build validation, and compliant delivery across multiple gaming jurisdictions. AGS was subsequently acquired for $1B.
  • C#
  • .NET
  • WPF
  • SQL
  • SVN
  • Microservices

Private repo — happy to walk through the code.

Cropped view of the live Big7 Construction homepage hero: the headline "Commercial framing. Residential precision. Every trade, under one contract." beside an aerial photo of an active job site.

M3MM client delivery — designed, shipped, and live

Big7 Construction — a live client site built around how buyers hire

3 buyer paths on one domain · 21 structural contract tests · live at big7construction.com

Problem
A construction company serving commercial, residential, and repair customers needed one credible website without forcing three different buyer types through the same generic pitch and intake path.
Approach
Designed a mobile-first multi-lane information architecture with dedicated buyer journeys, service-specific calls to action, accessible interaction patterns, production form handling, structured metadata, and Cloudflare hosting.
Result
Live at the production apex domain with commercial, residential, and home-repair paths operating as one coherent client system.
Engineering notes — the decision that hurt

The decision that hurt was killing a shipped page. Big7 launched with three buyer lanes; the 2026-07 restructure collapsed that to two buyer paths — Commercial & Industrial and Residential — with Home Repair folded into the residential page as an in-page section. Separate audience pages rank and convert better than one homepage trying to serve everyone, but home repair didn't have the volume to justify its own destination page. The old URL 301s to the new section and legacy query-string intent links are caught by an inline shim, so no inbound link ever broke.

That restructure moved the money path. The homepage now carries no form at all — it's a lean chooser routing to two lane pages, each owning a tailored intake form. Two forms means two copies of submit, prefill, and analytics JS, so that code was extracted into one shared big7.js loaded on every page: inline copies drift, and drift in money code is how intakes silently die. Leads mirror to an n8n webhook fire-and-forget while Formspree remains the path of record, because a verified money path never gets swapped silently for a new one.

The accessibility tradeoff was visual: the primary CTA orange failed WCAG AA at 3.48:1 contrast on white text. Rather than invent a new palette token, the base color moved one step down the existing ramp to roughly 5.05:1 and hover became a brightness filter — the button reads slightly darker than the original brand orange, and that is the accepted price.

What keeps it honest: 21 structural contract-test scripts parse the shipped HTML and lock the Formspree endpoint (a wrong action attribute still returns 200 in the browser while intakes land nowhere), the required fields, the spam honeypot, the tel: link agreeing digit-for-digit with the JSON-LD phone number, and real 404s — a missing path returns an actual 404 page instead of an SPA-style silent rewrite to the homepage, which would otherwise poison SEO and analytics.

  • HTML
  • CSS
  • JavaScript
  • Cloudflare Workers
  • Accessibility
  • SEO
View Big7 live →

M3MM client delivery — designed, shipped, sold, live

Aries Outdoor Living — the client site that sold at handoff

Sold at handoff · first quote request 3 days after launch · live at ariesoutdoorliving.com

Problem
A Metro Atlanta custom deck design-and-build company — a real business with a 4.8-star reputation — had no web presence turning homeowner research into quote requests, in a market where established contractors win on visible proof.
Approach
Designed and shipped a fast static site built around the homeowner's decision path: project photography and client testimonials as the proof spine, plain-language process expectations, and a single conversion goal — the quote request. Structured metadata and local SEO carry the company's service area and rating.
Result
The client bought the site outright at handoff and a quote request arrived three days after launch. The site remains live in production today as client-owned infrastructure — delivered, transferred, and running without ongoing dependence on the builder.
Engineering notes — the decision that hurt

Sold-at-handoff changes the engineering contract. Ownership transferred with the site, so it was built to run without its builder: static hosting with nothing to patch, no framework churn, no CMS to maintain, and no dependency that expires — boring outcomes chosen on purpose for a client who owns the result.

The discipline that proves it: the live V1 is frozen to me. Once a client owns their site, edits go through them — the production system's word is theirs now. A client-approved V2 rebuild exists as a separate track, gated on their walkthrough and sign-off before any cutover touches the live property.

  • HTML
  • CSS
  • JavaScript
  • SEO
  • Accessibility
View Aries live →

Founder & Product Engineer — live SaaS/storefront

SiteGuide — a production storefront, not a product mockup

19 templates live · 660 test functions across 31 files · purchase flow verified in production

Problem
Small businesses needed a portable website guide they could install without commissioning a custom chat product, while paid templates still required a secure purchase and delivery path.
Approach
Built the embeddable guide backend and a 19-template storefront, then implemented Stripe checkout, idempotent webhooks, buyer entitlements, protected ZIP delivery, per-site origin controls, rate limits, and purchase-confirmation email.
Result
All 19 templates are live and sellable. The complete purchase-to-download flow was verified in production with a real test purchase, including entitlement and email delivery.
Engineering notes — the decision that hurt

The widget's public API is one script tag plus a per-tenant JSON config — no SDK, no secret on the host page. That promise has a price: with no API token to check, tenant auth has to be origin-based, and the allowlist has to live server-side.

The decision that hurt: the default tenant. Unknown site IDs originally fell back to a default config that shipped without an origin allowlist, which the config layer treated as allow-anything. Any site on the internet could paste the script tag with a made-up site ID and stream Claude tokens off the production API key — and rotating site IDs multiplied the effective rate-limit quota. Closed before charging money by locking the default tenant to the SiteGuide domain itself. The hard-404 alternative was rejected to keep demo ergonomics (the store previews would-be tenant IDs), and per-embedder API tokens were rejected because a secret in every customer's HTML breaks the one-tag promise and turns key rotation into a coordination problem.

CORS stays deliberately wide open while the chat endpoint enforces the per-tenant origin check, because CORS is a browser convention, not a server-side security boundary — curl ignores it entirely. The rate limiter is an in-memory sliding window, which only works because Railway runs a single instance; horizontal scaling means moving that state somewhere shared, a cost deliberately not paid yet. Prompt caching on the system prompt is mandatory in the Claude client — it is the difference between a demo-priced and a production-priced token bill.

Measured result: all 19 templates are live and sellable behind a Stripe checkout → idempotent webhook → entitlement → protected ZIP → confirmation-email flow, verified with a real purchase in production. A parametrized drift test fails the suite if any sellable tenant ships without an origin allowlist, and 660 test functions across 31 files keep it that way.

  • Python
  • FastAPI
  • Stripe
  • Railway
  • Claude API
  • JavaScript
View SiteGuide live →

Founder & Product Engineer — live RAG SaaS

AI Manual Assistant — PDFs become cited, searchable knowledge

3 production services · 450+ backend test functions · upload → cited answer verified end to end

Problem
Product manuals are long, fragmented, and difficult to search when a user needs one specific answer with proof from the source document.
Approach
Built a full-stack RAG system that uploads and chunks PDFs into Supabase Postgres, retrieves passages with ranked full-text search (pgvector hybrid retrieval built behind flags), and returns Claude-generated answers with citations through a React interface and FastAPI backend.
Result
The Railway backend, Netlify frontend, and Supabase data layer are live; the real upload-to-question-to-cited-answer journey has been verified end to end.
Engineering notes — the decision that hurt

The first real production question broke retrieval, and the failure was structural, not a fluke. Search used Postgres full-text search, which ANDs every stemmed content word together — a chunk had to match every word of the question inside the same ~800-character window. "What is the role of an enabling team in a microservice architecture?" returned "I couldn't find relevant information" against a manual with a full page on enabling teams. Verified directly against the live database: zero rows for the strict AND match, while three chunks discussed the topic at length — none happened to also say "role" and "architecture" in the same chunk.

The designed answer already existed in the codebase: vector and hybrid search behind feature flags, with the pgvector column and index already migrated. But no embeddings had been backfilled and no embedding-provider key was set — turning the flags on meant a real migration-and-backfill pass, not a flag flip. The chosen fix was deliberately cheap: when the strict AND returns zero rows, retry the same lexemes OR'd together, ranked so chunks matching more terms still win. Zero new infrastructure, zero new API cost, one extra query only on the already-rare found-nothing path. Measured before the code was written: the OR-relaxed query returned six ranked results for the exact failing question, including both chunks that actually answer it.

Deployment had its own hurt: the first live deploy 500'd in a way that looked exactly like a CORS block, because an uncaught exception bypasses the CORS middleware's header-attaching step. The real traceback, pulled from Railway's deployment logs, was psycopg2 failing with "Network is unreachable" — Supabase's direct Postgres host resolves to IPv6 and Railway containers have no outbound IPv6 route. Fixed by switching to Supabase's IPv4-only connection pooler, safe here because the backend opens one connection per call and relies on no session-level state.

The lesson that stuck: get the real traceback before declaring a fix, and never trust a green local suite when CI's entry point differs — 450+ backend test functions now lock the retry behavior, the CORS fallback parsing, and the retry-backoff math.

  • React
  • FastAPI
  • Supabase
  • pgvector
  • Claude API
  • Railway
View AI Manual Assistant live →

Skills

Evidence-linked, not self-rated

No star ratings, no padded lists — every chip links to the case study or role above where the skill actually shipped.

Proven on a case study

×N = number of selected-work projects using it — the chip jumps to one

Shipped in a role

Chipped on the role that used it in the Experience section

Actively building depth: AZ-204 (Azure Developer Associate) · System design at scale

Contact

Open to remote roles. Let's talk.