I wanted to ship a pet health tracker without standing up auth, a database, or a single server endpoint. The constraint I gave myself: no backend at all.
The result is PetHealthLog - a local-first PWA where every record (vaccines, weight, photos, multi-pet profiles) lives in the browser, and a "vet-ready" PDF is generated client-side.
The architecture, briefly
- No accounts. No auth flow, no password reset, no OAuth callback hell. State lives on the device.
- No server. Storage is local (localStorage + IndexedDB for photos). There is no row in a database with someone's pet on it, because there is no database.
- Offline by default. A service worker caches the shell (network-first for HTML so updates still ship, cache fallback when offline). Reminders, charts, photos, export - all client-side.
- PDF export in the browser. The vet summary is assembled and printed locally, so no document ever touches a server.
-
Payments without a backend. When I switch monetization on, it is PayPal Subscriptions via the JS SDK -
createSubscriptionreturns a plan ID,onApproveunlocks locally. No server round-trip for the basic flow. - Static hosting. Deploys to Cloudflare Pages as static assets. Hosting cost trends toward zero.
The honest tradeoff
Local-first means no cross-device sync out of the box - your records live where you created them. For a personal pet log that's an acceptable, even desirable tradeoff: the data stays yours, the attack surface is tiny, and there's no infra to maintain or breach.
It also collapses the entire "growth" stack. No signup funnel, no churn from forgotten passwords, no GDPR data-subject request to service - because I'm not the data controller, the user's own device is.
Why I think this pattern is underrated
Most small consumer utilities don't need the cloud. We reach for backends out of habit. For a tool whose value is remembering small private facts, local-first is faster to build, cheaper to run, and a stronger privacy story than any policy page.
The differentiator I lead with: the private, offline pet record - your data stays yours. Free, 8 languages.
Live: https://pethealthlog.pages.dev
Happy to go deeper on the service-worker caching or the client-side PDF approach in the comments.
Top comments (0)