What it is
Enfy is an app for nurses and healthcare providers to manage their work: patient records, clinical assessment, wound care, scheduling, and finances. It is a PWA built for fieldwork, where the connection is poor and hands are busy, with two bets that define the product: recording the visit by voice, with AI help, and working offline.
AI in the visit
The core idea is simple to describe and hard to do responsibly: the nurse records audio describing what they observed in the patient, and the system fills in the clinical assessment from it. Under the hood, the audio goes to an Edge Function that transcribes with Whisper and extracts structured data with a GPT model, returning a JSON with vital signs, comorbidities, wound characteristics, and so on.
The detail that separates a toy from a clinical tool is what comes after the model. In healthcare, a fabricated value is dangerous, so the extraction passes through a defensive sanitization layer before it gets anywhere near the form. The rule is “omission is the default”: the model may only fill a field that was actually mentioned, and the server checks, term by term, whether it appears in the transcription. Values outside the expected clinical vocabulary are discarded, fields with a high risk of hallucination only get in with an explicit mention, and dates are converted to ISO format with validation.
And none of it is saved automatically. The AI proposes, the human decides. The suggested changes appear in a review drawer, split between what is new and what changed, and the nurse accepts or rejects each field before merging it into the form. It is the same stance I bring to any use of AI: useful where it earns its keep, audited by humans, never a black box. In a medical record, that stops being a preference and becomes a requirement.
Genuinely offline-first
A nurse works in the patient’s home, at a clinic, in places with no signal. So the app cannot depend on the network for what matters. A new patient, with the whole assessment and even the wound photos, is created and stored locally in IndexedDB through Dexie, with a sync status. When the connection comes back, a sync manager uploads everything to Supabase in order: the patient, the normalized tables for each clinical category, and the photos to Storage. A network listener triggers the sync on its own when reconnecting.
The lesson of offline-first is that the hard part is not storing locally, it is coming back: deciding what syncs, in what order, and what to do when the photo uploaded but the record did not. Keeping the local state as the source of truth until the sync confirms is what made it reliable.
Wound care
The richest clinical part is wounds. The location is marked on an interactive body map, with front and back views and nearly thirty anatomical regions. The photo is captured by the device’s camera, preferring the rear one, with compression before upload. Each wound stores characteristics in clinical vocabulary (perilesion, edges, bed, exudate, odor, etiology, and dimensions), and the following evolutions build a timeline with a photo gallery to track healing.
Architecture
The frontend is React 19 with Vite and React Router, packaged as an installable PWA. The backend is Supabase: Postgres with RLS, Auth, Storage, and Edge Functions in Deno. Isolation is per user, with RLS binding every row to its owner through profile_id = auth.uid(). Billing is a Stripe subscription, with a set of Edge Functions handling the subscription, payment methods, and webhooks, and a gate that unlocks the app based on its status. Deployment is on AWS, with S3 and CloudFront, through GitHub Actions.
Status
It is in a testing phase, with nurses using the app in real visits to validate the idea, and the feedback so far has been positive. Subscription billing is already in place, but the focus right now is listening to the people who use it, tuning the voice flow and the clinical assessment to the real way bedside care actually works.