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:
- Landing — two clear actions: Analyze (new photo) or Check Results (resume via code).
- 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.
- Check Results — enter a 10-character code (alphabet restricted to A/B/C/D) to retrieve a prior analysis.
- 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.