Skip to content
Terrero Labs

SkinTrack+

Structured longitudinal documentation of chronic skin conditions: photos time-indexed against symptoms, medication, and environment.

PrototypeUnder reconstruction · links withheld until rebuilt
Division
HeartWire
Timeline
2025 – present

A timeline for chronic skin conditions, so a consultation starts from a record instead of recall. Images are documentation for the user and their clinician — they are not analysed.

  • Next.js
  • TypeScript
  • PWA

01Problem / user need

Eczema, psoriasis, acne, and contact dermatitis flare episodically and respond to treatment over weeks. A clinic visit captures one point in that cycle, often an unrepresentative one. The patient’s own record is worse: photos scattered through a camera roll, taken under different light and distance, with no symptom, medication, or environmental context attached.

The gap is a structured longitudinal record: images time-indexed against medication changes, symptom severity, and environmental exposure.

02Requirements

#RequirementAcceptance criterionStatus
R0PersistenceImage + context survive upload, app close, and reload on a second deviceFailing at last test — blocking
R1Capture consistencyRepeat captures of one site align in scale and colour under normal conditionsNot yet measured — the defining requirement
R2Image isolationNo user can retrieve another user’s image through any storage pathBlocked on R0
R3Heatmap correctnessCalendar heatmap cells match the underlying recordsNot yet tested

R0 is the whole project right now: a longitudinal tracker that doesn’t persist has nothing to track.

03Architecture

Dashed edges are specified but not verified working. The correlation engine takes no image input.

04Design decisions

No learned image model

Chosen
Correlation rules over symptom, medication, and environmental records. An image model was evaluated and rejected.
Alternative
A trained model for lesion segmentation or classification.
Tradeoff
An image model would need clinical ground truth I can’t obtain and labelled data I don’t have, and would inherit the documented under-representation of darker skin tones in dermatology datasets. Consumer capture is also uncontrolled, so apparent “change” could just be lighting. Cost: the images contribute nothing to the analysis — they are for the user and their clinician, not the model.

In-app camera capture alongside a file picker

Chosen
Both, with an in-app camera path.
Tradeoff
The in-app camera is the only place capture conditions can be constrained (framing guides, a ghost of the previous photo), which is what makes longitudinal comparison possible at all. Cost: browser camera permission flows, iOS Safari differences, and orientation handling.

Client-local persistence in the first shared build

Chosen
Ship a browser-local build for early feedback before the backend was complete.
Tradeoff
Got the app in front of testers sooner. Cost, realised: no data survived — no cohort, no adherence numbers, no image corpus. Persistence is now a release gate, not a follow-up.

4.5Scope & role

PendingIndependent project. Tester count and surviving feedback from the first shared build are not yet documented.

05Implementation

  • Next.js PWA with in-app camera capture and photo upload, symptom and medication logging, time-indexed records, and a calendar heatmap.
  • Image processing: none in the product. No segmentation, classification, change detection, or measurement runs on user images.
  • Backend: server persistence is specified but not verified end-to-end.
  • Hardware: none.

06Verification

PendingNothing is measured yet, and most of it is blocked on R0. Order: end-to-end persistence across two devices; storage isolation (direct path, guessed path, expired signed URL, unauthenticated — expect 0 of 4); row isolation; then capture consistency in scale and colour.

07Failures / iterations

  • Shipped a client-local build; the data didn’t survive. A tracking product without verified persistence isn’t testable, because the thing under test is the record.
  • Evaluated ML for lesion analysis and rejected it, for the reasons above. A documented decision not to build something is stronger than a half-built feature.

08Limitations

  • Not a diagnostic tool and not a medical device. Performs no analysis, classification, or assessment of any image; does not screen for skin cancer or diagnose any condition. Not evaluated under any FDA pathway.
  • Images are stored for the user’s own reference and are not model input. Any new, changing, asymmetric, or bleeding lesion warrants a dermatologist’s evaluation.
  • Any output is a correlation in one user’s self-reported records — unvalidated, with no clinical review.
  • Persistence is unverified. Capture is uncalibrated, so apparent change between photos may be a capture artifact.
  • No retained usage data from the first test period, so there is no cohort.