Lab Log

Track, analyze, and act on longitudinal lab results with provenance-aware reference ranges, trend detection, scheduling reminders, and full-text search.


Inspiration

Most personal health apps either lock you into a single lab’s ecosystem or aggressively monetize your data. Meanwhile, patients get handed PDFs or images of their results and are left to manually transcribe numbers, guess at trends, and remember when to re-test. That’s error-prone and stressful.

We wanted to build something patient-centric, transparent, and flexible: an app that extracts, structures, and interprets lab data automatically while always making it clear what’s authentic versus AI-inferred.


What It Does

Lab Log turns messy lab reports into a searchable, longitudinal dashboard.

  • OCR + AI parsing: Upload any PDF/image, get normalized JSON with test names, values, units, reference ranges, categories, and doctor specialties.
  • Reference range provenance: Clear distinction between authentic ranges (from actual reports) and AI-inferred ones (marked with a *).
  • Severity & trend detection: Inclusive out-of-range checks and trend analysis (linear fit, recent deltas).
  • Automatic scheduling: Follow-up reminders created whenever results are abnormal or trending sharply.
  • Full-text search: Instantly filter through years of tests by keyword or category.
  • Qualitative handling: Supports textual results (“Positive”, “Negative”, titers) without generating false alerts.

How We Built It

  • Frontend: React + TypeScript + Vite + Tailwind for a clean, interactive dashboard with Recharts visualizations.
  • Backend: Supabase for auth, storage, and database.
  • Edge Functions: Deno + TypeScript (ask-ai) enforces a strict JSON schema prompt to the AI model.
  • OCR: External API wrapper (ocr.space) extracts raw text prior to structuring.
  • Data Flow: Upload → OCR → Edge Function (AI) → JSON → Provenance logic → Supabase → Dashboard.

Challenges We Ran Into

  • Reference ranges aren’t standardized: Some labs omit them, others format them oddly. Designing provenance logic (authentic vs AI-inferred) was key.
  • Qualitative vs quantitative results: Needed a system to avoid misleading alerts for tests like “Glucose: Negative.”
  • Trend logic: Balancing simplicity (linear fit, deltas) with interpretability for end-users.
  • Transparency: Communicating “why” a value is flagged required careful UI decisions (e.g., tooltip stars instead of extra columns).

Accomplishments That We’re Proud Of

  • Built a transparent provenance model for medical data (authentic > inferred, with automatic override).
  • Created a scheduling system that acts on health data, not just stores it.
  • Designed a simple but powerful UI where anyone can search their health history across years of lab reports.

What We Learned

  • Healthcare data is messy but pattern-rich. Structuring it is non-trivial, but once normalized, it unlocks powerful insights.
  • UX matters: patients need clarity, not clutter, when it comes to ranges, trends, and alerts.
  • Transparency builds trust — showing what’s inferred vs authentic makes the app more usable and reliable.

What’s Next

  • Fuzzy search and result highlighting.
  • Export/import utilities (CSV, JSON).
  • A test suite for range parsing & trend detection.
  • Consent-aware integrations with EHR APIs.
  • Privacy-first deployment model (on-device or self-hosted).

Built With

React, TypeScript, Tailwind, Vite, Supabase, Deno, OCR.space, Recharts

Built With

Share this project:

Updates