Inspiration

I built Pett for my two cats, who have accumulated more medical paperwork than I have. Their prescriptions, vet notes, vaccination dates, and test results ended up scattered across emails, papers, and my unreliable memory. When we switched veterinary hospitals, I had to answer the same questions all over again. I wanted one place to keep their care up to date, then hand the vet a clean PDF instead of giving a rambling oral history of two cats in an exam room.

What it does

Pett keeps everything about a pet's care in one place: profiles, health records, vaccinations, medications, reminders, documents, photos, weight tracking, and food. The app is organized around three tabs — My Pets, Health, and Documents — and the health flow is the point: capture what matters, surface the next thing due, record what happened, and keep the history trustworthy. When you need it, Pett exports a vet-ready PDF summary.

Everything syncs across your own devices through iCloud, and the app keeps working when it can't reach the network.

How we built it

Pett is a native iOS app, SwiftUI-first. SwiftData owns app data, with CloudKit as the sync and backup authority. Firebase Auth owns identity — Sign in with Apple, Google, and email. RevenueCat powers the Care+ subscription through a single care_plus entitlement, with monthly and yearly App Store products behind one offering.

Two details I enjoyed building: a Live Activity that puts a Pett badge in the Dynamic Island while you capture App Store screenshots, and a small 3D charm on the About screen, rendered in RealityKit from a USDZ model lit by a code-generated HDR studio.

Challenges we ran into

The hardest personal challenge was continuing when I felt stuck, useless, or uninspired.

The hardest technical challenge was persistence. SwiftData and CloudKit are a good pairing right up until iCloud is unavailable, a schema changes, or a restore goes sideways. Most of the difficult work went into fallback, recovery, and degraded-mode paths, so that a bad sync never costs someone their pet's history.

The hardest product decision was cutting household sharing. I had designed it and largely built it, but finishing it meant months more solo work — including a live data migration against real accounts — for something no one was asking for yet. So I shelved it, removed it from main, and tagged the full implementation so it can come back when it earns its place. Deleting working code I was attached to was harder than writing it.

Accomplishments that we're proud of

Pett covers the whole path, from recording care at home to handing a veterinarian a clean summary of it. I am proud that the persistence layer is built to fail safely rather than optimistically. And I am proud of the cut: shipping a focused single-user v1 on time instead of shipping half a sharing feature late.

What we learned

I learned that pet care software is less straightforward than it looks. Every pet and household has different routines, and people want to track different things. Pett needs to adapt to that variety, and I'm still learning what owners need. I also learned that the scope you remove is as much a design decision as the scope you add.

What's next for Pett

Release Pett, learn from other pet owners, and improve the workflows they actually use. Shared household care is the first thing I want to bring back, and it is waiting at a tag. The goal remains the same: all their care, in one place.

Built With

Share this project:

Updates

Submission history