A personal health journal

One honest record of your health.

hale keeps meals, drinks, symptoms, measurements, meds and bathroom events on one timeline. Snap a photo, say it out loud, or tap once — and look back at a record you actually kept, instead of five apps you gave up on.

The hale timeline on a phone: today's water, meals, poo and weight at the top, then blood pressure 118/76, tea, water, a chicken salad, a mild headache with a note, and more, newest first. The hale timeline on a phone in dark mode, with today's entries newest first.
The hale capture screen: one-tap quick logs for pee, poo, water and weight, and photo, voice or text capture. The hale capture screen in dark mode.

What it does

Log it the moment it happens.

The screens above are the real app, running with a day of sample entries.

01

Capture anything

A photo of your plate, a voice note about how you slept, a line of text — or one tap for water, pee, poo and weight. hale timestamps it on the spot.

02

Works without signal

Captures go into an on-device queue first and upload when you're back online, so a dead zone never costs you an entry.

03

Structured for you

An AI model turns a photo or voice note into proposed entries — a lunch, a coffee, a headache with its severity. Quick taps skip the model entirely.

04

You confirm what counts

Proposals wait in the Inbox until you confirm, edit or reject them. Nothing the model guessed becomes part of your record on its own.

05

See the day, and the pattern

One timeline, newest first, with today's water, meals and weight at the top. Step through day by day, or open the table to scan by type.

06

Plain, kind words

Bristol scale, symptom severity and doses are there when you want them, in everyday labels — never a clinical form to fill in.

How it works

From a snapshot to an entry.

  1. 01 — CAPTURE

    Snap, say or tap

    Use the big button from anywhere in the app. hale installs to your home screen as an app.

    PhotoVoiceTextQuick log
  2. 02 — PARSE

    The model proposes

    Your capture is read by the AI model the server is configured with, and comes back as one or more typed entries with a confidence.

    MealDrinkSymptomMeasurementMed
  3. 03 — REVIEW

    You keep the record

    Confirm, fix or reject each proposal in the Inbox. Confirmed entries join the timeline at the time they happened.

    ConfirmEditReject

Your data

A health record belongs to the person it describes.

hale runs on a server you control. No ads, no analytics, no data broker in the loop.

Where it lives

Entries in a SQLite (libSQL) database, photos and voice notes in S3-compatible storage — both on the server you run.

Which model reads it

Any OpenAI-compatible endpoint you point it at, including a local Ollama. Leave it unset and hale still works, without AI parsing.

Who gets in

Sign-in is invite-only: an allowlist of email addresses decides who has an account. Each person sees only their own entries.

Get started

Run it yourself today.

There's no public sign-up yet. With access to the repository, hale runs locally with Bun in four commands.

From a checkout
bun install
cp .env.example .env    # local sign-in bypass is on by default
bun run db:migrate      # create the SQLite schema
bun run dev             # app on http://localhost:52811

Add an OpenAI-compatible model in .env to turn on photo and voice parsing. docker compose up runs the full stack instead.