← all projects
AI Health App

Dondie

AI-powered nail health analysis app. Capture nail images and get health indicators, severity assessments, and personalized recommendations.

Vision AI integration using GPT-4o-mini for nail health analysis with camera capture, health indicator detection, and recommendation generation.

React
TypeScript
Express
OpenAI

Problem Statement

Nail appearance can hint at health signals — pallor in the nail bed is a recognized indicator of possible anemia/low hemoglobin — but most people can't interpret it, and clinical screening isn't something you do casually. The opportunity: a phone-camera tool that gives a preliminary, privacy-respecting read on nail health indicators and points users to a professional when warranted.

Proposed Solution

Dondie is an AI nail-health analysis web app. Point your camera at a nail, and a vision model (GPT-4o-mini) returns health indicators with severity scoring (Low/Medium/High) and personalized recommendations. It's framed explicitly as preliminary insight, not medical advice, with a privacy promise that photos aren't stored.

Full Solution Details

A tight four-screen flow:

  1. Landing — two clear actions: Analyze (new photo) or Check Results (resume via code).
  2. Analyze — a getting-ready state, instructions + privacy notice ("we do not store your nail photos"), then a camera capture using the file-input camera interface; shows a Preview ("is this photo okay?"), uploads with a real progress bar, then calls the analysis service.
  3. Check Results — enter a 10-character code (alphabet restricted to A/B/C/D) to retrieve a prior analysis.
  4. Results — polls the analysis service; shows a loading indicator while {pending:true}, an error state with a retry path on {error}, and a structured results UI when ready.

Technical Documentation

Frontend — React + TypeScript SPA. Capture uses the device camera via a file input (WebRTC-style camera interface); the photo is uploaded to a separate file service (the author's own Storex, S3-compatible) which returns a URL; the app then calls the analysis backend with that URL and receives a code. The code is the handle for an async polling flow — the UI polls until results resolve, and the same code lets a user return later (decoupling capture from result retrieval). The results UI is intentionally built so individual result sections can be toggled/removed easily.

Backend — Node + Express + MongoDB, integrating OpenAI (GPT-4o-mini vision). It accepts an image URL, runs vision analysis, stores the job under a generated code, and exposes a poll endpoint returning {pending:true} / {error} / full analysis.

Tech Stack

React, TypeScript, WebRTC/camera capture (frontend); Node.js, Express, MongoDB, OpenAI GPT-4o-mini vision (backend); Storex file service (S3-compatible) for image storage.

System Design

Camera capture ──► Preview (confirm) ──► upload (progress bar)
        │                                      │
        │                                      ▼
        │                          Storex file service → image URL
        │                                      │
        ▼                                      ▼
   Analysis backend  ◄── POST image URL ── returns { code }
        │  GPT-4o-mini vision
        ▼
   Job stored by code in MongoDB
        ▲
   Results page polls by code → {pending} | {error} | full analysis
   (code also re-entered later on "Check Results")

Smart Architectural Decisions

  • Code-based async polling decouples capture from results. Returning a short code instead of blocking on the (slow) vision call means a user can close the app and come back, and the capture device need not be the result-viewing device — a clean pattern for long-running AI work.
  • Reuses his own Storex file service. Rather than re-implementing uploads, Dondie consumes Storex via presigned-style public upload — composing his own infrastructure across projects.
  • Privacy-first + medical-disclaimer framing. Explicitly not storing photos and labeling output as preliminary (not medical advice) shows responsible product design for a health-adjacent tool.
  • Removable result sections. The results UI is structured so any analysis section can be hidden — pragmatic given the model's output may need curating.

Impacts

A working, privacy-conscious AI vision app that turns a phone camera into a preliminary nail-health screen with severity scoring and recommendations — demonstrating an end-to-end capture → upload → vision-analysis → poll pipeline.

Demonstrated Skills

Camera/WebRTC capture + image upload UX (preview, progress); multimodal LLM integration (GPT-4o-mini vision); async code-based polling architecture for long-running jobs; service composition (consuming his own Storex); responsible health-tech product framing (privacy, disclaimers); full-stack React + Express + MongoDB.

Notes

  • Multimodal AI: vision-based analysis (not just text LLM) shows breadth beyond chat-style integrations.
  • Right async pattern: the code-based polling design (capture → code → poll, resumable on any device) is a thoughtful way to handle slow vision inference and reads as solid architecture.
  • Ecosystem composition: Dondie consumes his own Storex file service — evidence he builds reusable infrastructure and wires his projects together.
  • Responsible framing: privacy promise + "not medical advice" disclaimer demonstrates maturity for health-adjacent products.
  • Note: this is a WIP/experimental app; the public demo uses a public-bucket upload token (low sensitivity), but rotating any embedded tokens before showcasing is worth a mention.
Ask me anything