one-page version →

Kelly Michels

Houston, TX  (Remote)  ·  kelly@evomedia.net  ·  713-412-9323

Full-Stack SaaS Engineer — multi-tenant products built, shipped and run end to end: UX, front end, APIs, data, billing and operations  ·  Principal QA / SDET

Summary

Full-stack engineer who builds and runs SaaS end to end. Since April 2026 I have designed, built, shipped and operated multi-tenant products on a platform of my own, led by evo.ehs, a large enterprise EHS compliance SaaS in production: self-serve signup, Stripe subscription billing, tenant isolation and roles, REST APIs with Node and Python SDKs, React, Next.js and Python front ends, PostgreSQL, and AWS deployment, with nobody to hand any of it to. Before that, twenty years at Autodesk on the teams that shipped Maya and 3ds Max, as Principal QA Engineer, so testing is part of how I build: 11,547 automated tests run every night, and failing tests block the merge.

SaaS, Built End to End  evomedia.net — live, versioned and checkable

evomedia.net is my personal site — no team, no contractors, no vendors. Everything below was designed, written, tested, deployed and is operated by me.

TypeScript · React 19 · Next.js 16 · Vite · Tailwind · Node.js · NestJS · Python · FastAPI · NiceGUI · Prisma · SQLAlchemy · PostgreSQL · Stripe · Qdrant · Docker Compose · nginx · AWS EC2 · GitHub Actions

evo.ehs  a large, enterprise-level multi-tenant EHS compliance SaaS, in production evoehs.com
  • Scale. Nearly 100,000 lines of Python behind 122 pages in NiceGUI, on PostgreSQL with SQLAlchemy and 129 Alembic migrations, and 6,428 PyTest tests. Its workflows and features come from real EHS professionals; all of the UX is mine.
  • What it covers. Environmental permits discovered from EPA and state sources and tracked to expiry; OSHA-aligned incident reporting and management, the OSHA 300 log and 301 export, and incidence rates; CAPA; chemical inventory; training matrices; a compliance score, calendar and reports; audit readiness and audit binders; recurring tasks; Ask AI over each site's own records; and a global-admin console across every tenant.
  • Self-serve onboarding. A three-step public signup at evoehs.com/register: the workspace and its own subdomain, checked for availability; the admin account; the plan, with labels and prices read from one catalogue so the screen cannot advertise a price Stripe does not charge. No card at signup; a single-use verification link, with re-send throttled by IP and silent about whether the address exists.
  • Subscription billing on Stripe. Checkout in subscription mode with a 14-day trial, card or US bank debit. Signature-verified, idempotent webhooks drive a tenant state machine: TRIALING, ACTIVE, PAST_DUE, SUSPENDED. Card changes and cancellations go through the Stripe Billing Portal and back through the webhook, so the page is role-gated on the server.
  • The APIs and data behind it. EPA ECHO, TRI and GHGRP; 40+ state environmental agencies, deepest in Texas (TCEQ) and Minnesota (MPCA); NWS and Open-Meteo weather; Stripe billing; Brevo SMS; and evo.ai for questions in plain language.
evo.platform  the multi-tenant platform under the products (public, MIT) NestJS 12 · Prisma · PostgreSQL · JWT and JWKS · passkeys · Stripe
  • One NestJS 12, Prisma and PostgreSQL service that owns tenants, users, authentication (JWT verified locally against JWKS, passkeys), roles, invites, Stripe billing, email and audit logging for several apps. I designed its API and wrote its Node and Python SDKs, a Next.js/React starter template and an evo new scaffold CLI. Source: github.com/evomedia-net.
  • Serving ProvenSheet, CivilCode and DocketMail today, and Ask AI: evo.ai verifies every caller's platform-issued JWT, so a tenant reaches only its own data. The sharpest defect found there: a unique constraint on (tenant, email) that protected every ordinary user and no platform admin, because SQL treats NULLs as distinct. The rule since: NULL means absent, never a kind.
evo.ai  the AI inside the products FastAPI · LlamaIndex · Qdrant · LiteLLM · Ollama · Langfuse · OpenTelemetry
  • The multi-tenant RAG (retrieval-augmented generation) service three of the products answer questions with, citing their sources, with per-user chat memory. FastAPI, LlamaIndex, Qdrant, LiteLLM. Runs online today and supports a fully air-gapped, on-site install with Ollama, so a customer's data never has to leave their servers. Answers cut from about twelve seconds to about three.
  • Release-gated by evo.ragframework: a judged corpus of 114 questions, deterministic checks plus an LLM judge, compared run against run; all 114 pass. Self-hosted Langfuse traces every question end to end over OpenTelemetry.
Front ends and newer products
  • evomedia.net: hand-written HTML, CSS and JavaScript built with Vite; responsive, with tests for its mobile layout; self-hosted fonts and self-hosted Umami analytics.
  • ProvenSheet: turns the Excel workbook a business runs on into a shared, multi-user web app and proves every formula still computes what Excel computed. Next.js 16, React 19, Tailwind, Prisma, TypeScript.
  • DocketMail: Harris County civil case search for family law, on the District Clerk's public civil-case data API and the USPS Addresses API. React 19, Vite and TypeScript over FastAPI and SQLAlchemy.
  • CivilCode: ask-and-cite search over the Texas statutes, cited to the section with an as-of date. Next.js 16 and React 19 over a second evo.ai instance.
  • evo.polaris, open source: an offline-first polar-alignment app for star trackers, validated against NOAA and Hipparcos data. evo.ablecamera, next to be open source: Canon camera control driven entirely by keyboard, switch, voice or dwell input.

ProvenSheet, DocketMail and CivilCode are early-stage working prototypes.

Operations  the on-call rotation is one person

  • 40 containers across independent Docker Compose stacks behind one nginx edge on AWS EC2: the products, a PostgreSQL per app and a vector store per AI instance, mail, Gitea, Umami, Prometheus and Grafana. Encrypted off-box backups with restore drills; TLS automation; deploy tooling I wrote that verifies the running container after each release, and a deployment check cut from 65 seconds to 14 by running its work in parallel.
  • AWS as an operator: EC2 and AMIs, security groups, Route 53 (A, CNAME, MX, SPF, DKIM), S3 under a one-bucket IAM policy with instance-role authentication, CloudFront and ALB, CloudWatch, and Let's Encrypt multi-SAN certificates renewed automatically.
  • The nginx edge has its own suite: 700 checks asserting the invariants that have actually broken in production, such as a vhost restored without its HSTS header.

Quality, Built In

  • 11,547 automated tests across 12 suites (PyTest, Jest, Vitest, Pester) run every night and publish to evomedia.net/testsuites.html. In GitHub Actions, failing tests block the merge.
  • One issue per defect, one commit per issue, and a regression test verified to fail without the fix. A QA campaign against my own AI system: evomedia.net/qa-engineering.html.
  • Playwright: evo.videostroll (public, MIT), an MCP server and Claude Code skill in which an AI agent drives a real browser through Playwright to record narrated walkthroughs of a site.

Professional Experience

Principal Software QA Engineer  /  Senior QA Engineer  —  Autodesk 2006 – 2026
  • Built, by hand in Python and PowerShell, a hands-off nightly 3ds Max beta release: Jira-built release notes, Turbo virtualization, publishing through Centercode's API, delivery on Akamai and later S3.
  • A stakeholder in the beta customer experience, and the builder of its automated defect loop: reports into Jira through its API, routed by feature to the owning QA, closed on Centercode by a Jira trigger that sent the notes back to the beta user.
  • Built Python and PowerShell automation and API testing tools in Jenkins pipelines with Artifactory; authored and maintained the Jenkinsfiles for over ten years.
  • Core QA for AI MotionMaker and the Autodesk ML Toolkit, first build to release, on Windows and Linux; TechX 2025 CEO demo, TechX 2026 Customer Experience Award, Fast Company 2026 Next Big Things in Tech.
  • Did all of the daily 3ds Max builds and owned the beta release cycle; set up, ran and maintained the Python release-automation repository, writing a lot of its code alongside other developers.
  • Took part in release Go/No-Go calls, and sat on the nomination committee that decided, after code freeze, whether a defect or feature justified re-spinning a build.
Contractor, R&D and QA  —  Autodesk earlier
  • Worked on Character Studio and Physique (the Ally McBeal dancing baby), the initial implementations of mental ray and the TCB rotation controller in 3ds Max, VRML import and export, and 3ds VIZ; R&D on Autodesk Plasma, Autodesk gmax and JSR 184.
  • The full Autodesk history: evomedia.net/autodesk-work.html
Founder, Designer & Developer  —  evomedia.net before Autodesk
  • Design and development studio building websites and e-commerce systems for clients from local businesses to MGM Interactive, Time Warner, Mattel and Platinum Pictures, plus art, gaming assets, animation and television commercial work. Just me for the first couple of years, and four employees once it passed $300K a year.
  • Built and shipped MorphMagic, a facial animation system for Autodesk 3ds Max.

Skills

Front end: React 19, Next.js 16, TypeScript, JavaScript, Vite, Tailwind, HTML and CSS, NiceGUI, responsive layout, WCAG 2.2 AA  ·  Back end & APIs: Node.js, NestJS, Python, FastAPI, REST API design, SDKs (Node, Python), JWT and JWKS, passkeys, webhooks  ·  Data: PostgreSQL, SQL, Prisma, SQLAlchemy, Alembic, Qdrant  ·  SaaS: multi-tenancy and tenant isolation, RBAC, self-serve onboarding, email verification, Stripe Checkout, Billing Portal and webhooks, subscription state  ·  AI: retrieval-augmented generation, vector search, LlamaIndex, LiteLLM, Ollama, LLM-judged evaluation, Langfuse, OpenTelemetry  ·  Cloud & DevOps: AWS (EC2, S3, IAM, Route 53, CloudFront, ALB, CloudWatch), Docker, Docker Compose, nginx, GitHub Actions, Jenkins, Artifactory, Prometheus, Grafana  ·  Testing: PyTest, Jest, Vitest, Pester, Playwright, API testing, regression strategy  ·  Languages: TypeScript, JavaScript, Python, SQL, PowerShell, Bash

Education

Self-taught in software — no degree. GED, then psychology at the University of Missouri, which I left to found evomedia.net.