Inspiration A community health worker in a village with no signal cannot wait for a cloud model. If they only take a photo and upload later, the patient is already gone. Existing skin apps are built for one person with an iPhone. Existing health systems collect forms. Neither answers the question that matters during the visit: routine review, watch closely, or refer this week?

That is what VisitEdge is for — edge AI on the village phone.

What it does VisitEdge lets a health worker finish a field visit on the phone, with no internet.

They record the visit, get Low / Medium / High priority, and print an advice slip. An optional skin close-up is classified on the device. They can ask local AI about the condition, still offline. Visits wait in a village queue. When a signal appears, high-risk syncs first to Clinic. There the doctor writes the prescription on the slip and marks the visit done.

This is decision support, not a diagnosis. It does not replace a clinician.

Airplane-mode test: open the app once online, turn on Airplane Mode, run a visit. Priority still appears. Nothing is sent to the cloud until sync.

How I built it React 18 + TypeScript + Vite + Tailwind — one-handed phone UI. TensorFlow.js — MobileNet on HAM10000, lazy-loaded, runs in the browser. A risk engine combines the scan with a symptom checklist to set priority. Dexie / IndexedDB stores visits and photos on the device. vite-plugin-pwa (Workbox) precaches the app and the model so the next visit works offline. Optional POST /api/sync on Vercel; Clinic still works on the same phone if that route is missing. Vitest covers the risk engine, guidance, queue, Ask, and the slip. Ask uses a locked knowledge base on the phone — no extra chat model. Model: MobileNet fine-tuned on HAM10000, converted to TensorFlow.js by maltseasy/Skin-Lesion-Classifier (MIT). HAM10000: Tschandl et al., Scientific Data (2018).

Challenges Offline is the product. Camera, model, queue, Ask, and the slip all have to work with the radios off. The PWA must cache a large model. Camera needs HTTPS except on localhost.

Do not pretend to diagnose. The app speaks in priority and next steps, not a disease name as a fact. Ask does not name medicines.

Same phone, two jobs. For the hackathon, Queue and Clinic share the device. A live clinic would be a second screen after sync.

Naming. The first name was taken. VisitEdge names the visit and where the model runs, so the product can grow past skin.

What I learned A field tool is a queue, not a single scan. Save now, sync high-risk first, hand over a slip, let clinic finish. Edge AI only matters if the answer exists before the worker walks away.

What’s next More visit types on the same queue. A clinic inbox on a second device. Stronger on-device models. The name is already built for that.

Built With

  • css
  • dexie
  • edgeai
  • ham10000
  • indexeddb
  • mobilenet
  • offline-first
  • pwa
  • react
  • router
  • tailwind
  • tensorflow.js
  • typescript
  • vercel
  • vite
  • vitest
  • workbox
Share this project:

Updates