Arseniy K.

Project · 2026

← All work

Clario

Local-first symptom diary. A fine-tuned Gemma model reads the patient’s own timeline (notes, labs, photos) and flags patterns that are easy to miss in a 15-minute appointment.

Submission, Google $100K hackathon

Entity F1 0.42 → 0.71 after fine-tuning

  • Python
  • FastAPI
  • React
  • SQLCipher
  • Ollama
  • Gemma LoRA
A closed laptop with a ring of private health notes orbiting a padlock above it

Overview

Clario is a local-first symptom diary for people on a long diagnostic path. A fine-tuned Gemma model reads the patient’s own timeline and surfaces patterns across it. Data is encrypted at rest, with no account, no cloud, and no telemetry: nothing leaves the machine except a localhost call to a model the user runs themselves.

The problem

  • Patients keep years of scattered data (photos, voice memos, notes) that every appointment starts without
  • Health data has to stay private, so no cloud inference
  • Spotting patterns that only show up over years of entries

What we built

  • Fine-tuned Gemma LoRA served locally through Ollama
  • FastAPI backend with a SQLCipher-encrypted database, React UI, one local process on one URL
  • No account, no cloud, no telemetry by design

Results

  • Fine-tuned extractor lifted entity F1 from 0.42 to 0.71 and accuracy on standard medical codes (HPO) from 0.31 to 0.66, on 200 hand-checked examples
  • Submitted to the Google $100K hackathon
  • Runs fully local and encrypted at rest

How it works

One local FastAPI process serves a React app on the user’s own machine. Entries (text, photos, voice memos, medical documents) go into a SQLCipher database whose key is derived from a passphrase with Argon2id.

A background worker asks a local Gemma model through Ollama to pull symptoms out of each entry, embeds them, and maps each one to a standard HPO code by vector search. The timeline becomes a graph of symptoms that co-occur or precede each other.

The extraction model is a QLoRA fine-tune of Gemma trained on about 500 synthetic diary entries and tested on held-out diseases. Red-flag questions such as dosing or emergencies are caught before the model runs. It never names a diagnosis: it answers with hedged pointers that cite the patient’s own entries.