Flexible payment plans for veterinary clinics. Pet owners split vet bills into biweekly installments over 12 weeks — no credit checks, no interest, no loan origination.
- Clinic enrolls pet owner with vet bill amount ($500–$25,000)
- Owner pays 25% deposit via debit card (Stripe Checkout)
- Remaining 75% splits into 6 biweekly ACH installments via Stripe
- Clinics receive payouts after each successful installment via Stripe Connect
Competitive platform fee for owners. Revenue share for participating clinics.
FuzzyCat is not a lender — no credit checks, no interest, no loan origination.
- Split vet bills into manageable biweekly payments
- Secure payment processing via Stripe
- Real-time payment tracking and history
- Automated email/SMS reminders
- Revenue share on processed payments
- Dashboard with client management and reporting
- Automated payout tracking via Stripe Connect
- Onboarding wizard for Stripe Connect setup
- Full payment lifecycle management
- Collection monitoring and escalation tools
- Audit trail for all payment state changes
| Layer | Technology |
|---|---|
| Runtime | Bun (dev + CI), Node.js (Vercel production) |
| Frontend | Next.js 16 (App Router) + Tailwind CSS v4 + shadcn/ui |
| Backend | Next.js API routes + tRPC |
| ORM | Drizzle ORM (server/db/schema.ts) |
| Database | PostgreSQL via Supabase |
| Payments | Stripe Checkout (deposits), Stripe ACH (installments), Stripe Connect (payouts) |
| Auth | Supabase Auth (role-based: owner, clinic, admin) |
| Linting | Biome |
| Testing | Bun test runner + Playwright E2E |
| Email / SMS | Resend / Twilio |
| Monitoring | Sentry + PostHog + Vercel Analytics |
| Hosting | Vercel + Supabase |
git clone <repo-url>
cd fuzzycat
bun installcp .env.example .env.localFill in your credentials — see .env.example for all required and optional variables. Key services:
- Supabase: Project URL, anon key, service role key, database URL
- Stripe: Secret key, publishable key, webhook secret
- Resend: API key for transactional email
- Twilio: Account SID, auth token, phone number for SMS
bunx drizzle-kit push # Push schema to database
bun run db:seed # Seed with sample data (optional)bun run dev # http://localhost:3000app/ # Next.js App Router
(marketing)/ # Public pages (home, how-it-works, privacy, terms)
(auth)/ # Auth pages (login, signup, forgot-password, MFA)
owner/ # Pet owner portal (payments, plans, enrollment, settings)
clinic/ # Clinic portal (dashboard, clients, reports, payouts)
admin/ # Admin portal (dashboard, plans, payments, settings)
api/ # API routes
webhooks/ # Stripe + Sentry webhooks
cron/ # Scheduled jobs (collect-payments, process-payouts)
health/ # Health check endpoint
trpc/ # tRPC handler
components/ # Shared UI components (shadcn/ui based)
lib/ # Shared utilities (env, auth, stripe, logger)
server/
db/ # Drizzle ORM schema and database connection
routers/ # tRPC routers (enrollment, payment, payout, plan)
services/ # Business logic (enrollment, payment, collection, payout, audit)
trpc.ts # tRPC context, procedures, and middleware
drizzle/ # Generated SQL migrations
e2e/ # Playwright E2E test suites
scripts/ # Utility scripts (seed, admin creation, QA, E2E setup)
| Command | Description |
|---|---|
bun run dev |
Start dev server with Turbopack |
bun run build |
Production build |
bun run typecheck |
TypeScript type checking (tsc --noEmit) |
bun run check |
Biome lint + format check |
bun run check:fix |
Biome auto-fix |
bun run test |
Unit tests (Bun test runner) |
bun run test:e2e |
Playwright E2E tests |
bun run ci |
Full CI suite (Biome + typecheck + circular deps + secrets) |
bunx drizzle-kit push |
Push schema to database |
bunx drizzle-kit generate |
Generate SQL migrations |
bunx drizzle-kit studio |
Open Drizzle Studio (DB browser) |
bun run test # Run all unit testsTests use Bun's built-in test runner with mock.module() for dependency mocking. External services (Stripe, Supabase) are fully mocked — no real API calls in tests.
bun run e2e:setup-users # Create test users in Supabase
bun run test:e2e # Run all Playwright test suites
bun run test:e2e:local # Run against localhost
bun run test:e2e:prod # Run against productionDeployed on Vercel with Supabase for database and auth.
- Connect repository to Vercel
- Set all environment variables from
.env.examplein Vercel dashboard - Configure Stripe webhooks to point to your Vercel deployment
- Set up Vercel Cron for scheduled payment collection and payout processing
Proprietary. All rights reserved.