← back to projects
  • #javascript
  • #business
  • #booking
  • #lucide

Pawfect Strolls

Booking site for a dog-walking service.

year
2025
status
active
https://www.pawfectstrolls.com
open ↗
loading Pawfect Strolls

$ cat ./case-study

$ cat ./case-study/problem

Problem

A local dog walker was getting all their inbound through DMs and texts — losing leads, missing follow-ups, no clean way to publish pricing without screenshotting it onto Instagram. They needed a site where someone could see the services, prices, and book a walk in under a minute on their phone.

$ cat ./case-study/approach

Approach

Static marketing site with a booking form that hits an email handler. Skipped a full booking platform because the operator runs a small route — a contact-style form + a follow-up email covers 95 percent of the use case at 5 percent of the platform fee. Lucide icons + a tight color palette for the visual identity, every touch target sized for phone use.

$ cat ./case-study/stack

Stack notes

Vanilla JS over a framework because the page needs to be instantly fast on a parking-lot 4G signal — clients book between meetings, not at desks. No bundler tax, no hydration cost, no framework runtime to ship.

$ cat ./case-study/what-broke

What broke

First version had the pricing tiers as three side-by-side cards. Looked great on desktop, completely unreadable on the iPhone SE preview width the owner actually browses from. Restacked them vertically with the "most booked" tier highlighted, which is what mobile users care about anyway.

$ cat ./case-study/next-time

What I'd do differently

I would separate the marketing pages from the booking flow more cleanly. Right now they share a layout, which meant one small style fix on the booking form leaked weird padding into the home hero. Worth the extra route file to keep the seams clean.

Marketing + booking site for a Park City dog-walking business. Pricing tiers, contact form, and an About page with the team. Custom domain at pawfectstrolls.com.

$ share

$ next

Task Manager (TS + Auth0)

React + TypeScript task app with Auth0 + URL-driven state.