
My Cartoon Pet
AI-enabled SaaS product where users upload a pet photograph, generate cartoon mascot-style artwork, preview designs on merchandise, and manage results through a private gallery.
- Next.js
- TypeScript
- Supabase
- Postgres
- SQL
- Row Level Security
- Stripe
- Vercel
- Built and launched the public beta: guided upload and generation flow, pet profiles, private gallery, Stripe subscription billing, and signed-URL private storage on Next.js, Supabase, and Vercel.
- Designed the relational data layer: SQL migrations, Row Level Security on every user-owned table, and Postgres functions that enforce ownership and generation quotas atomically.
- Built internal founder analytics, scorecards, and reliable webhook-driven automation, working with AI coding assistants through written specs, repository audits, tests, and release gates.
Case study: build notes and ownership
- Three-step upload: authorize, a signed PUT to private storage, then a commit that verifies the stored file and enforces per-plan limits atomically in Postgres.
- Server-only generation: an atomic quota-check-and-create SQL function runs before any paid AI call. Failed generations are recorded without consuming quota.
- Stripe Checkout and a billing portal, with a signature-verified webhook as the single source of truth for plan status.
- An append-only product-events ledger and an email outbox with unique event keys, retries, and a reconciliation pass, so automation never double-sends or silently drops work.
- Founder analytics. Tracks product events and produces reviewable scorecards for activation, generation success, and quality signals. Built as a server-only analytics layer on an append-only Postgres event ledger.
- Improvement Graph. Connects customer outcomes, activation and quality metrics, countermetrics, data sources, ownership, and review cadence into one measurement and decision framework. Missing data is flagged rather than treated as zero.
- Reliable automation. Reduces duplicate or missed work in billing and email automation. Uses idempotent webhook processing, an email outbox, and reconciliation checks so confirmations send exactly once.
- Public beta with no paying customers yet.
- Final generation-quality review is still in progress.
- Merchandise previews are live, but ordering and fulfillment are gated for a limited release.




