Customer app (installable PWA)

Your customer portal doubles as an installable app — no App Store, no Play Store, no build step. When a customer opens their portal on a phone, the browser offers to add it to their home screen; from then on it opens full-screen with your logo and brand colour, a bottom tab bar (Home · Book · Visits · Invoices · Pets), and a friendly offline screen when signal drops.

  • Check availability — customers pick a service type (only the ones you run appear: Groomer, Walker and/or Sitter), see your next open days, tap a day for times, and tap a time to request it. Deposits are collected in the same flow if the service needs one.
  • Everything in one place — upcoming visits, invoices to pay, pets and vaccination reminders, and their own details.
  • Next visit, with where it stands — the Home screen names the next visit that is actually going to happen and carries its status beside it: Pending while you have not answered it yet, Confirmed once you have. A cancelled visit is never offered as the next one.
  • Your branding — the app name, icon and colour all follow Settings → General (app name, theme colour, background). Works the same on a bespoke single site and on a multisite subdomain.

Nothing to switch on: it’s live wherever the portal is. To let customers actually submit requests, enable Settings → Bookings → Online booking requests; with it off, the availability screen still shows openings and asks them to contact you.

Install hints: Android/Chrome shows an “Add to your phone” button in the app; iPhone/iPad use Safari’s Share → Add to Home Screen. The prompt can be dismissed and won’t nag.

Example

A dog-walking client opens the link you texted, taps “Add to Home Screen”, then next week taps the app icon, opens Book, sees Thursday has 4 free slots, picks 2pm and sends the request — all without a phone call.

FAQ

A customer’s photo used to fail with no explanation.
That should be over. The framing step means their phone crops and re-saves the picture before it is sent, so the two things that used to fail silently — an iPhone HEIC that no website can read, and a twelve-megapixel original that trips the upload limit — both arrive as a small JPEG. A phone with scripting switched off still uploads the file the old way.

A customer got “Unsafe app blocked” from Google Play Protect on Android.
That warning is about the wrapper, not about your site. When somebody installs the app on Android, Chrome asks Google to build them a small Android package for it — a WebAPK — and Play Protect is objecting to the age of Google’s own wrapper, not to anything you or your customer has done. Tapping “Install anyway” is safe: it is your own website, and nothing about it changes. It should also be far rarer from 2.496.0. Chrome rebuilds that package whenever the app’s details change, and the details used to include the plugin version — so every update to Pet Central quietly asked Android to reinstall the app, and each reinstall was another chance for Play Protect to object. The version is gone from those details now, so Android is only asked to reinstall when something real changes: the business name, its colours or its icon.

Does updating Pet Central reinstall the app on everybody’s phone?
Not any more, and it never should have. Android checks for a rebuild at most once a day, and only when somebody opens the app — but before 2.496.0 it always found a reason, because the app’s icon address carried the plugin version and that changed with every release. iPhones were never affected; they have no equivalent package.

The Home screen showed a visit that had been cancelled.
Fixed in 2.738.0. The Next visit card took the first booking in the future and asked nothing else about it, so a cancelled one won on date alone — and the customer was being offered a visit that the bookings list two taps away had already crossed out. It now skips anything cancelled, and shows the status of the visit it does name so there is no doubt either way.

Where do cancelled visits go on the customer’s Visits screen?
Into Past, straight away, rather than sitting under Upcoming until their date goes by. They are not hidden — somebody who has just cancelled should be able to see that it worked, and a booking that vanishes completely reads as a mistake. They are simply not called upcoming, because they are not.

What statuses can a customer see on a visit?
Pending while it is a request you have not answered, Confirmed once you have, Cancelled if it was called off, and Completed afterwards. A visit paid for in advance says Prepaid and still counts as upcoming — the money arriving early does not mean the visit has happened.

Do I need to publish anything to an app store?
No. It installs straight from the browser (a PWA). There are no store fees or approvals, and updates are instant because it’s served from your site.

Does it clash with the staff app?
No. The staff app and the customer app are separate and scoped apart, so a phone can have either (or both) without them interfering.

What shows for a groomer vs a walker vs a sitter?
The availability screen only offers the service types you actually run and have services for. A groomer-only business shows just grooming; a business running all three shows all three as tappable pills.

What happens offline?
Account pages need a connection (so balances and bookings are always current), but instead of a broken page the app shows a tidy “You’re offline” screen with a Try again button.