← Back to Work
Business Project

Tailblazing Dog Walking

Year2026
DisciplinesDesign, Development, Deployment
Tailblazing Dog Walking screenshot 1
1 / 57
Overview

By far the most complicated booking system I've built. Where a normal booking site checks whether a slot is free, this one has to resolve three services that coincide with each other, all provided by one person. Group and solo walks run at set published times; day care runs between an opening and closing time chosen per day; boarding runs across nights, with handover hours set per calendar day. Either leg of a booking can be driven by the admin or handled by the dog owner, so every booking also places up to two collection or drop-off jobs into the day. A collection must sit inside a published collection window. Each of those services reserves real time. A day care drop-off can't be booked over a walk, a walk can't be published over a booked collection, and two handovers can't be at the door at once. Capacity is layered on top and kept separate: a group walk caps at four dogs, the house caps at three at any moment across day care and boarding, and walk dogs never count against the house limit. Booking is race-safe. Every path runs inside a single database transaction that locks every day the booking touches, so two people booking at the same moment are handled one at a time. Overlapping handovers are refused by the database itself, so the same time can never be claimed twice even under true concurrent load. The whole engine is covered by an automated suite of over 200 assertions, including concurrency tests run against a real PostgreSQL instance with genuinely parallel transactions.

Software & Infrastructure

TypeScript, Next.js 16 (App Router, Server Components), React 19, Node.js, PostgreSQL, Neon (serverless Postgres, connection pooling), PostgreSQL advisory locks and GiST exclusion constraints (concurrency safety), Stripe (Checkout, webhooks, refunds), JWT auth (jose) with bcryptjs password hashing and OTP email verification, Brevo (transactional email, domain-verified sending), Cloudinary (image hosting), postcodes.io (UK postcode geocoding and distance calculation), Netlify (serverless deployment, CI/CD), GitHub (version control, automatic deploys on push), GitHub Actions (scheduled cron for reminder emails and data-retention sweep), HTML5, CSS3, HTTPS/TLS, environment-based secret management

Outcome

Customers pick a service, enter each dog's details, choose a day from a calendar showing live availability, and pay a £10 deposit through Stripe Checkout to confirm. Walks are booked into published set times and shared with other clients' dogs up to four in total. Walks are an hour but reserve an additional 30 minutes before and after for handovers. Day care is booked as a drop-off and pick-up time, up to eight hours apart. Boarding runs on nights set by admin with handovers chosen from available handover hours on respective days. Customer driven handovers run throughout admin set daycare availability ranges, or boarding handover hours. Admin driven handovers run when they are in the respective range for their service as well as a collection availability range. Collections reserve 15 minutes before and after. For each booking the customer chooses who performs handover from admin set availability. Postcodes are geocoded through postcodes.io to work out the distance, with collection free inside a 2 mile radius. Emails fire automatically on every booking event. The admin panel runs the business. A month is drafted and then published in one action, with tabs for walks, day care, boarding, and a read-only view of a whole day across every service. Availability can be added, closed, reopened, deleted or have its times edited. Availability slots with bookings can't be deleted or edited to not cover any bookings but they can be closed. Each day shows what it contains: the dogs on each walk, who is arriving and leaving and when, who is driving each leg, and how many dogs are sleeping over. The admin can book clients in by hand with no deposit, which creates whatever availability the booking needs while still refusing anything that would clash. They can reschedule, cancel or refund any booking and read the full record of every answer a customer gave. They can edit the site's content, services, prices, gallery and contact details without touching code. Built with GDPR-compliant data handling.

Next Project
Stroud Complementary Therapies