←all work
01April 2025 - Present /CTO · infra

Happy Pet Tech

Cloud software for pet businesses: grooming salons, mobile groomers, boarding, daycare, pet shops and vet clinics, live in five countries. I'm the CTO, and I also run the infrastructure.

Next.jsNode.jsExpressMongoDBAWSGitLab CI/CD
visit live↗
5countries live
6business types
4.9customer rating
Happy Pet Tech dashboard: screenshot of happypet.tech
happypet.tech · screenshot, 1 October 2026

Happy Pet Tech is cloud software for pet businesses. A grooming salon, a mobile groomer, a boarding place, a daycare, a pet shop or a vet clinic signs up and runs the business from it: bookings, customers and their pets, staff, WhatsApp, billing, stock and reports. Customers are live in India, the UAE, Australia, the Philippines and Thailand.

I joined as CTO in April 2025. I own the architecture, and I also run the infrastructure, so the deploy setup, the servers and the uptime are mine too.

How it is built

The web app is Next.js. Behind it is a Node.js and Express API on MongoDB, with Redis for queues and shared state, and Socket.IO for live updates in the browser.

Everything runs from one codebase. What makes that possible is that the differences between businesses live in data:

  • Per business and per branch. Every record carries a company and a branch. A company can have many branches, and branches can differ: one can run boarding with named rooms, another without. Booking types can be switched on per branch.
  • Per country. A country record holds the tax type and default rates (GST in India, VAT in the UAE), the currency, the dial code and phone number rules, and the words for address fields. When a business signs up it gets its own copy of its country’s taxes, which it can edit. I wrote about this in One SaaS, many countries.
  • Roles. Permissions sit on roles, not people, down to single actions like “view a customer” and “export the customer list”.

The phone is the main device

Most of our users are on their feet. So in June 2026 the web app itself became the phone app. It installs to the home screen, opens in its own window, and receives push notifications through Firebase.

The responsive work covered 117 of 175 screens in two weeks, by fixing the two base components that 127 modals were built on, and turning wide tables into cards. Screens that are not ready show a clear “best on desktop” page instead of a broken layout. The story is in Making a 175-screen web app work on a phone, and the push notification bugs are in Web push with Firebase Cloud Messaging.

WhatsApp

Pet businesses in our markets talk to customers on WhatsApp, so we built it into the product on Meta’s Cloud API. Each business connects its own number and gets a shared inbox, approved message templates, broadcasts and automatic booking messages. The inbox updates live over a socket, and every incoming message also goes out as a push notification.

Two posts cover what that took: building the inbox and message templates.

Running it

Every deploy used to take the API down for 4 to 5 seconds. It now runs as a PM2 cluster with two workers, reloads one worker at a time, and drains running requests before a worker stops. GitLab CI runs lint and the test suite on every push. Details in Our deploys caused 5 seconds of downtime.

Errors are handled so that a groomer never sees a database message. Every API response carries a short reference code that a customer can read out to support. That is in Never show a database error to a user.

Around the product

The help centre at help.happypet.tech has 104 articles and its own search engine, which puts the right article in the top 3 for 100% of our test searches. Pages open in about 0.1 seconds. The marketing site scores 90 on PageSpeed with real-user Core Web Vitals passing. All three have their own posts: help site speed, help search and the marketing site.

Where it stands

Live and growing in five countries. Recent work has gone into the phone experience, WhatsApp automation, and the help centre, so a new business can set itself up and find answers without a call.

The goal is software a two-person grooming salon can afford and run from a phone.
features
Bookings for Every Kind of Pet BusinessGrooming appointments, mobile grooming with routes and a driver list, boarding with rooms and check-in, daycare, vet appointments with in-patient stays and lab reports, and a business's own booking types like training or pet taxi. Customers can also book online, and requests wait for approval instead of taking a slot.
WhatsApp Inside the ProductA business connects its own WhatsApp number. The team answers customers from a shared inbox, sends approved templates when the 24 hour window has closed, runs broadcasts, and the system sends booking messages by itself.
Billing, Inventory and ReportsInvoices, estimates, subscriptions, customer wallets, credit notes and sales returns; stock with suppliers, purchase orders, batches and expiry dates, and a sync with the shop's Shopify store; reports and analytics per branch.
Works From a PhoneThe web app is the phone app. It installs to the home screen, sends push notifications, and most screens are built for a phone first, because our users are next to a dog, not at a desk.
challenges
One Codebase, Six Kinds of BusinessA booking for a groomer is a calendar slot. For a clinic it connects to a consultation and a lab report. For boarding it is a room and a check-in. The platform handles all of them from one codebase, with per-business and per-branch settings deciding what each account sees, and every record scoped to a company and a branch on a shared MongoDB.
Five Countries, One BuildTax names and rates, currency, phone number rules, address wording and payment methods all live on a country record, not in code. Each business gets its own copy of its country's tax rates, and every tax edit writes a snapshot, so an old invoice never changes when a rate is edited.
No Quiet Hour to DeployCustomers from Manila to Dubai are never all closed at once, and every deploy used to cost 4 to 5 seconds of downtime. The API now runs as a PM2 cluster that reloads one worker at a time, cron jobs run on one worker only, and live updates go through Redis so they reach every worker.
← all work nextPet Parent App →