Case Study · No. 05
TapMyPet
A pet tag you tap with a phone, a profile page the owner can change any time, and a storefront, bookkeeping and referral program behind it. My own product, built from nothing.
The situation
A collar tag carries a phone number at best, stamped into metal and usually worn halfway to illegible. Someone who finds a lost pet and genuinely wants to help has exactly one move: call that number and hope it still belongs to the owner. And the owner cannot change a single character of it, because it is engraved.
There was no product here before I built one. The gap was the whole problem: the tag is the only thing on a lost pet, and it is the least useful part of the system.
What I built
A custom WordPress theme that is a storefront and a platform at once, with no page builder and no e-commerce plugin underneath it. The shop side has products with variations and stock, a cart that works for guests, PayPal Orders API v2 checkout called directly rather than through an SDK, a Philippine address cascade from province to city to barangay, shipping zones, promo codes, order tracking, and review requests sent by token after an order ships.
The platform side is the point of the product. Buy a tag, claim it, and you get a pet profile page you own and can edit: identity, breed, markings, weight, microchip number, medical notes, vet details, and how to reach you. A stranger who taps the tag reads that page.
Behind both sits an owner dashboard, a separate admin area at /manage/ for running the business, a referral program with tracked conversions and payouts, in-dashboard notifications, hourly cron sweeps for review requests and abandoned carts, and BIR bookkeeping for an 8% gross income tax filer.
A real decision
Claiming a tag needs two things: the code, and a PIN. The code is in the tag's URL, and that URL is public by design, since the entire point is that a stranger can scan it. Which means the URL cannot be the proof of ownership. Anyone who photographs a tag in a vet's waiting room, or guesses a short code, would otherwise be able to claim someone else's pet.
So the PIN is printed on the tag and its packaging and never encoded on the chip. Holding the physical object is what proves the tag is yours. The chip carries the public half, and the paper carries the private half.
Lost Mode, and what it refuses to do
Switching a profile to Lost Mode changes what the page does when a finder opens it: the browser asks them to share their location, and only if they agree does the owner get an email and a dashboard notification with a map link. A decline sends nothing. That is the browser's own permission prompt doing the deciding, not the site.
The drop-off location an owner can offer is handled with the same caution. It is fetched when the finder clicks to reveal it, rather than baked into the page's HTML, so scraping every profile URL does not harvest every opted-in owner's chosen meeting point for free. One click is the only friction a real finder meets, and it is not pretending to stop a determined scraper, only casual collection at scale.
The edge that took the most care
A customer can cancel their own order after it has been paid, not just while it is pending. That means cancelling has to undo everything being paid set in motion: the stock decrement, the promo code usage, and the activation codes generated for the tags in that order.
That last one is the sharp edge. Leave it out and real, claimable code and PIN pairs sit in the table for physical tags that were never produced, indistinguishable from legitimately purchased ones to anyone who comes across them. Referral commission is deliberately left alone by the reversal, because a commission is only ever credited once an order reaches delivered, which a cancelled order never did.
The outcome
Live, with four tag products from ₱99 to ₱599, and the whole path works end to end: buy a tag, receive it, claim it with the code and PIN, fill in the profile, and a finder's tap reaches the owner. PayMongo credentials have a home in the settings ahead of that integration; checkout runs on PayPal today.
This is a young product and the numbers say so. What is built is the system, including the unglamorous parts most side projects skip: the tax worksheet, the refund reversal, the abandoned-cart sweep.
Tech stack
Need something like this built?
Tell me what your operation actually does all day, and I'll tell you honestly what's worth building. No jargon, no "let's circle back."