
My Cartoon Pet
AI-enabled pet design SaaS where users upload a pet photo, generate a cartoon mascot-style design, preview it on merchandise, and save results to a private gallery.
- Next.js
- TypeScript
- Supabase
- Postgres
- RLS
- Private storage
- Stripe
- Vercel
- Built the upload, auth, generation, gallery, and billing architecture with Next.js, Supabase, Postgres, private storage, RLS, Stripe, and Vercel.
- Implemented a secure upload flow with signed URLs, ownership checks, quota handling, and private result storage.
- Used AI coding agents for implementation and debugging, then reviewed diffs, verified tests, and kept production gated until real generation QA passes.
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 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.
- Gallery results re-list with freshly signed URLs, so they outlive any single link.
- Not publicly launched.
- Real generation QA still needs Vercel environment variables and a Supabase migration.
- No live link until the upload-to-result flow is verified.




