Poodilo
A toy and miniature poodle breeder and boarding site, with a Supabase-backed admin dashboard for managing litters, puppies, and inquiries.
Context
The Problem
Poodilo breeds and boards toy and miniature poodles, and needed a site where puppy availability, litters, and boarding inquiries could be managed directly instead of tracked by hand across messages and spreadsheets.
My Role
Design
- Designed the puppies, litters, gallery, and boarding pages in Figma
- Designed the admin dashboard for managing litters, puppies, and inquiries
Frontend
- Next.js 16 and React 19 with Radix UI and Framer Motion
- Puppies, litters, gallery, guides, and boarding pages, with React Hook Form and Zod for every form
- Turnstile-protected contact and boarding inquiry forms
Backend
- Supabase Postgres and Auth for admin login and content storage
- Litters, puppies, gallery, blog, FAQs, testimonials, and inquiries each modeled as their own table
- Resend for inquiry confirmation and admin notification emails
Infrastructure & DevOps
- S3-compatible object storage for puppy and gallery images
- Vercel for deployment
Solution & Process
Design Validation
Modeled puppies as records tied to a litter, each with its own availability status, health flags, and traits, so the site shows real availability instead of a static list that goes stale the moment a puppy sells.
Technical Stack Selection
Built on Next.js 16 with the App Router and Supabase for Postgres and authentication. Litters, puppies, gallery images, blog posts, FAQs, testimonials, and both contact and boarding inquiries are separate tables, each editable from the admin dashboard.
Technical Decisions & Trade-offs
Modeled litters and puppies as separate, linked tables instead of one flat puppy list, so a litter carries its own birth date and status while each puppy tracks its own availability, price, and health record independently.
