No website, a generic checkout, and a business invisible online
Dunkin' Doggies is a dog swimming pool in Hull, owned and run by one person. I took the business from no website at all to a complete digital presence: brand and site, a custom booking journey, a self-service customer portal, the serverless API underneath, and the analytics on top. Research, design, build, and ongoing maintenance, end to end.

Dunkin' Doggies · brand, site, custom booking & customer portal · live
A business that needed to actually exist online
Dunkin' Doggies is a dog swimming pool in Hull, owned and run by one person. Customers book private swim sessions for their dogs. When I came on board, the business had no website at all. Bookings ran directly through their payment provider's generic, off-the-shelf online booking channel: a single hosted page with no branding, no marketing, no analytics, no retention.
It worked, just about. But it left the business invisible online and entirely shaped by someone else's template. Nothing to find on Google, nothing to point an ad at, no way to tell its own story, no reason for a customer to come back beyond remembering the URL.
The brief grew from there. It started as "we need a proper website" and became something larger: build the whole digital presence from scratch. From the brand and the pages a customer first lands on, through the moment they book and pay, to the account they come back to as a regular.
I owned all of it.
No website, a generic checkout, and a market full of bad examples
Before any building, I looked hard at where the business actually was, and at the wider market it sat in. The honest picture had two parts: the business itself had no real online presence, and the comparable businesses that did have sites mostly weren't doing themselves any favours. Three gaps shaped what I built.
No website, no story
Nothing on Google beyond a business listing. No about page, no service pages, nowhere to send an ad. Customers had to already know the business existed to find their way to the booking page.
A generic hosted booking page
Bookings ran through their payment provider's off-the-shelf online channel: a single page that worked but was unbranded, impersonal, and gave the business no control over the journey or the data around it.
Competitors with half-built sites
Comparable businesses elsewhere in the UK mostly had dated DIY sites, basic booking widgets, no online payment, no loyalty, no analytics. A low bar, and a clear opportunity.
The job wasn't to fix a bad website. It was to build a coherent journey from first click to loyal regular, where none of that existed yet, with no legacy to preserve, but also no foundation to build on.
One digital presence, built in deliberate layers
Rather than a single deliverable, the project is a stack of layers, each solving a stage of the customer's journey. Each was scoped, built and shipped in turn, so the business got value early rather than waiting for a big-bang launch.
A branded website, built from the ground up
A full research, design, and build process produced a production-ready site in Webflow with a cohesive brand: a confident dark palette with teal water accents and a clean, characterful type system. Not a template. A considered identity for the business, fast and good-looking on mobile and desktop.
A custom booking experience that feels native to the site
I replaced the third-party widget with my own multi-step booking journey: service selection, date and time, dog details, payment, confirmation. Built to match the brand exactly and load instantly. Returning customers get a fast-track flow and can pick which of their dogs are swimming that day.
A personalised customer portal
A self-service account area where customers manage their details and dogs, view bookings, and track loyalty rewards. Per-dog profiles, achievement badges (first solo swim, 5 swims, 10 swims), and a points-based loyalty scheme make the portal feel like it belongs to the dog as much as the owner.
A serverless API layer I own end to end
Behind the scenes, a set of serverless functions handle payments, bookings, customer records, loyalty, and authentication, talking to Square so the frontend stays fast and fully under my control. This is what lets the business add bespoke features a packaged plugin would block.
Analytics and conversion tracking
Server-side tracking feeds GA4 and the Meta Conversions API. The business can finally see where customers and ad spend are working: the difference between guessing and knowing, and the foundation for growing bookings deliberately.

The custom booking journey · service, date, dog details, payment, confirmation
Choosing the right foundation, even when it meant reversing myself
Once the first version of the site was live, bookings ran through an embedded scheduling widget, the most common option for small service businesses. It worked. But customers started telling us it felt slow, especially on mobile. One nearly gave up partway through booking. A baseline Lighthouse audit confirmed it: the widget was loading an entire separate web app inside the page and dragging everything down.
This became the highest-stakes technical call in the whole project.
The business had moved between booking platforms more than once chasing the right fit, including a move I'd previously recommended. When that platform's own tools turned out to be just as unfit for purpose, I had to re-evaluate honestly, including overturning my own earlier advice. The clean answer was to consolidate everything (payments, bookings, customers, loyalty, gift cards) behind a single well-built API, with the customer's history already living there. One backend. No stranded data. No separate payment processor to maintain.
I also talked the business out of a full platform rebuild that would have thrown away well-suited work for marginal gain.
Reversing your own recommendation is uncomfortable, but defending advice the evidence no longer supports would have cost the business. Equally, knowing when not to rebuild is part of the judgement. I advised against migrating the whole site to a heavier platform because the current setup was fast, low-maintenance, and well-suited to a business this size.
Good judgement includes recommending against new work.
Research first. Deliberate scope. Verify, then release.
The thing this project really demonstrates is a way of working. Every layer followed the same disciplined arc: evidence in, tight scope, careful verification, then a controlled release, so the business kept getting better without ever being put at risk.
Understand the landscape, measure the baseline
Competitor and market analysis to understand the landscape, plus hard performance measurement (baseline Lighthouse audits), so every decision was driven by evidence rather than a hunch, including being willing to reverse my own earlier platform advice when the data demanded it.
A booking journey built around real behaviour
A cohesive visual identity and a booking journey designed around how customers actually behave. The custom UI styled to feel like a native part of the site, not a bolted-on tool.
Tight first versions, shipped in sequence
Each capability shipped as a tight, deliberate first version. Core booking flow first, then accounts, then loyalty and gift cards, rather than over-promising one enormous launch. A conscious corrective to the natural pull toward over-ambitious scope.
Replaced the old stack, measured the impact
The platform replaced the previous stack and went live to real paying customers. Before/after audits were captured the same morning so the impact was measured, not assumed. Booking journey, portal, payments, and tracking all running together.
Staging, verification, version control
New work now ships through a staging environment and is checked against a structured verification matrix (payment declines, automatic rollbacks, edge cases) before a deliberate one-step release. The project is under version control, and recurring mistakes are logged so they're not repeated.
Numbers, not vibes
Because the work was measured at every step, the impact isn't a matter of opinion. The booking page went from a failing-grade experience to a fast, stable one. The business gained a retention layer it never had, and customers adopted it almost immediately. And where 2025's bookings spiked on press attention and then fell away when it faded, 2026 holds a steady baseline the business generates itself rather than borrows.
The retention layer is the clearest portal-attributable result. Before launch the business had no loyalty programme at all; within the first month, around 90% of customer visits were enrolled. The business already had a healthy base of returning customers, roughly half of monthly visits, but nothing capturing or rewarding them. The portal turned informal loyalty into something the business can see, measure, and build on.
Booking page comparison
The clearest single comparison is the booking page against the original third-party widget that started the project.
| Metric | Original widget | Custom build | Change |
|---|---|---|---|
| Performance score | 56 | 69 | +13 |
| Cumulative Layout Shift | 0.471 | 0.006 | ~99% better |
| Largest Contentful Paint | 3.0s | 2.9s | Improved |
| Total Blocking Time | 580ms | 960ms | Regressed, then addressed |
Full-site performance
Measuring the full site against the previous version showed steady gains across form factors, with the biggest mobile win on blocking time (the metric closest to "how frozen does this feel").
| Metric | Before (mob.) | After (mob.) | Δ desktop |
|---|---|---|---|
| Performance | 68 | 70 | 83 → 85 |
| First Contentful Paint | 2.5s | 2.5s | 0.9s → 0.7s |
| Total Blocking Time | 1,470ms | 1,120ms | 0ms → 90ms |
| Speed Index | 2.7s | 2.5s | 0.9s → 0.7s |
| SEO | 100 | 100 | 100 → 100 |
A real positive impact on the business
Working with Josh has been a fantastic experience from start to finish. He designed and built a professional, user friendly website for my business and seamlessly integrated our booking system into the website too. This has transformed how we manage appointments and interact with our customers.
His attention to detail, technical expertise, and ability to understand exactly what my business needed based off the information given to him has made the entire process straight forward and stress free. The finished website not only looks great but also functions flawlessly, helping us present a professional image and making it easier than ever for customers to book our services.
I would highly recommend Josh to any business looking for a reliable, knowledgeable, and talented web developer. His work has had a real positive impact on my business, and I couldn't be happier with the results.
James HusseyOwner, Dunkin' Doggies
The retention layer the business never had
The customer portal is where the project goes beyond "a nice website". It turns one-off bookers into recognised regulars.
Per-dog profiles
Each dog gets its own profile, so the portal feels personal and the business knows exactly who's swimming, even for multi-dog households.
Badges & loyalty
Visual achievement badges sit alongside a real points-based loyalty scheme. Every fifth qualifying swim is free. One motivates, one rewards.
Self-service
Bookings, dogs, addresses, saved cards, passwords, all managed by the customer, secured with authentication I built specifically for the portal.
Bespoke booking
"Add more dogs at checkout", promo-code validation, the kind of specific feature owning the journey makes possible and a plugin would block.
A platform with room to grow
Because the foundation is owned rather than rented, the business isn't capped by anyone else's roadmap. Planned next phases turn the portal into a companion product.
App foundation
Move the portal to a standalone progressive web app, installable on a phone.
Engagement
Push notifications, offline polish, and swim tracking framed around dog health.
Native
A native wrapper for the App Store and Play Store from the same codebase.
Productise
Package the approach as a repeatable offer for similar small businesses.
The toolkit behind the work
A pragmatic stack chosen to keep the frontend fast, the backend maintainable, and the business free of lock-in.
The lessons that outlast the project
A digital presence is a journey, not a page
The real value came from treating first impression, booking, and retention as one connected experience, rather than fixing the booking page in isolation. The layers reinforce each other.
Owning the foundation beats renting it
Building against an API took more effort up front than embedding a widget, but it meant the business was never blocked on a feature again, and the experience finally performed.
Good judgement includes saying "don't build this"
Reversing my own platform advice when evidence changed, and advising against an unnecessary rebuild, both served the business better than defending a position would have.
Ship in deliberate layers
Tight, well-scoped v1s shipped in sequence got value in front of customers sooner and kept a one-person business's project from ever stalling under its own ambition.