Work · 2025

HAPO

Neighbourhood dog-care exchange, built on trust rather than listings.

PHPMySQLAPIs
Overview

HAPO connects dog owners in the same neighbourhood so they can cover each other for walks and sitting. The hard problem was never the software, it was the trust, so the whole product is built around it: distance-filtered search on a map, messaging that keeps numbers private, reviews, and safety rules published before anyone meets.

OutcomeOwners cover each other instead of paying for it.

How It Went
5 parts

Where it started

Dog owners in the same street will happily cover each other for a walk. The barrier is not scheduling, it is handing a stranger your keys and your dog, and swapping phone numbers before you have met is exactly what stops people signing up. Every existing option treated this as a marketplace problem and answered it with listings and payments. It is not a marketplace problem. It is a trust problem, and trust is a design decision, not a feature you bolt on afterwards.

Keeping addresses private

Anything that shows neighbours to each other has to publish location without publishing where people live, and a map pin on a house is an address. So no real position is ever sent to the browser. An admin draws an area, and each member is placed at a random point inside it, generated once and stored, not recalculated per request. Recalculating would have been the obvious way to do it and would have leaked the true position: request the same profile enough times and the average of the scattered points converges on the real one. Distance filtering runs server side against the true coordinates, so search stays accurate while the client only ever receives the decoy.

Authentication, written rather than installed

PHP 8 and MySQL with no framework, and auth built from scratch: password hashing, sessions, email verification, resets and rate limiting. Writing it was the point. On a site whose whole proposition is that strangers can trust each other, the sign-up path is the product, and it needed to behave exactly as designed rather than as a plugin's defaults happened to.

Messaging that holds numbers back

Conversations happen in the app, so no one has to give out a phone number to ask a question. Numbers get shared when two people decide to share them, which is usually after a walk has already been arranged. That single ordering is what makes the first contact possible at all.

Reviews and rules as the trust signal

Reviews are attached to completed arrangements rather than left open, so the rating means something. The community rules and the moderation behind them were written and published before the first members joined, not added in response to a problem, because rules that arrive after an incident read as damage control and rules that are already there read as a standard.

HAPO

Building something like this? Available for new projects.

Start a Project