Gayathri Sukumar

Work

G3 — a family health app, built local-first

SwiftUI and SwiftData on iOS, with no server and no account. An exercise in how much discipline a one-person app can carry.

Swift · SwiftUI · SwiftData · CloudKit

A private iOS app for one household: cycle tracking for several members, a journal behind its own PIN, and medical appointments with practice contacts. About 6,000 lines of Swift across 48 files.

Why it exists

My daughter started tracking her cycle, and every app I looked at was built for one adult user and sent her data somewhere. I wanted something that held two people’s data, on the device, and nowhere else.

The parts worth talking about

One roster, different features per person. Cycles, Journal and Appointments each started with their own idea of who “the family” was — three lists that quietly disagreed. They now share a single Profile model carrying per-feature flags, so adding a grandparent who only needs appointments is one row, not three.

Booked versus needs-booking. The appointment model separates a confirmed slot from care that is merely due, because they need completely different notice: a booked slot wants a nudge two days out, while an annual physical needs three months’ warning to get into the diary at all. Most of the perceived usefulness of the app comes from that one distinction.

Unverified data stays flagged. Clinic phone numbers carry a isVerified flag and a note on why a lookup was uncertain. Showing an unchecked number as fact is how someone ends up calling the wrong clinic about a mammogram.

Verification

266 assertions over the cycle prediction, appointment planning, journal filter and PIN policy logic, running under the plain Swift toolchain with no simulator or SDK. The README splits what was verified by running it from what was not — the Face ID path, CSV export and the photo picker are explicitly untested, and saying so is more useful than implying full coverage.

← All work