Pet Portal
A boarding resort is two products wearing one name. Owners want to book a stay and settle a bill without calling the front desk. Staff want the day — who is arriving, which runs are free, what is still owed. Both sides read and write the same records.
One system for two opposite users
The client came to this already frustrated with what the industry was selling them. The platforms on offer were clunky to move through, thin on the features a working resort actually depends on, and nearly silent on customer interaction — no straightforward way to reach an owner mid-stay, confirm a change, or handle a request without picking up the phone.
A resort that boards and daycares dogs is really two products wearing one name. Owners want to book a stay, prove their dog's shots are current, and settle a bill without ringing the front desk. Staff want the opposite of a website — they want the day: who is arriving, which runs are free, whose agreement is unsigned, what is still owed.
Most operators run that split across a point-of-sale system, a paper file per dog, and a phone. The records drift apart, and the front desk becomes the integration layer. Pet Portal is built so both audiences read and write the same records — a reservation, a pet, a kennel, an invoice — rather than keeping parallel copies that have to be reconciled.
Both sides of the counter
Sixteen requirement documents scope the system, from authentication through to reporting. Each maps to a feature area built against the same Postgres schema.
- 01
Owner portal
Dashboard of upcoming stays, pet profiles with vaccination expiry tracking, booking requests, invoices, and digital agreement signing — so routine questions never become phone calls.
- 02
Staff dashboard
The day at a glance: arrivals and departures, check-in and check-out, customer approval queue, and the resort's own services and pricing.
- 03
Reservations and kennels
Booking requests flow into a reservation calendar backed by a kennel model, so occupancy and availability come from the same records the front desk works from.
- 04
Invoicing and payments
Invoices generate off completed stays and are paid by card through Square’s Web Payments SDK, with payment status tracked against the reservation.
- 05
Records and agreements
Vaccination records, emergency contacts, activity logs and signed waivers live against the pet and the customer rather than in a filing cabinet.
- 06
Messaging and email
In-app messaging between resort and owner, plus transactional email delivered through Resend from Supabase Edge Functions.
A small stack, chosen to stay small
- Frontend
- React 18 and TypeScript 5.7 in strict mode, built with Vite 6 on Bun. React Router v7 with lazy-loaded routes.
- State and forms
- TanStack Query v5 for server state via per-feature hooks; React Hook Form with Zod schemas for validation.
- Interface
- shadcn/ui on Radix primitives, styled with Tailwind CSS v4.
- Backend
- Supabase throughout — Postgres, Auth, Storage and Edge Functions — across 23 migrations.
- Payments
- Square Web Payments SDK, loaded directly rather than through a package, with separate sandbox and production locations.
- Delivery
- Netlify for the frontend, Supabase for the backend and functions.
In progress
Fifteen of the sixteen requirement areas are specified and built — auth and onboarding, pets, customers, services, kennels, reservations, activity logs, agreements, invoicing, Square payments, email, messaging, staff management and admin settings. Reports and analytics is still in draft. The platform is being built for River Dogs Resort in Sacramento, California, and this entry will be updated as it goes live.