A dermatologist in your pocket. SkinIQ scans a photo of your skin and classifies the condition using a deep learning model trained on the HAM10000 dataset, then pairs the result with personalized skincare routines and longitudinal progress tracking.
π Live demo: skin-iq.vercel.app
Medical Disclaimer: SkinIQ is not a medical device and does not provide medical advice. Results are for informational purposes only. The underlying model was trained on dermoscopy images β not standard camera photos β and has meaningful accuracy limitations. Always consult a qualified dermatologist for any skin concern.
- Skin scan β upload or capture a photo; the ML backend classifies the condition and returns skin type, skin tone, detected condition, and clinical urgency
- Skincare routines β personalized morning and evening routine steps based on your skin type, with a daily completion tracker
- Routine calendar β monthly calendar with adherence visualization (morning / evening / both / none) and streak tracking
- Scan history β all past scans stored per-user with thumbnails, date, and full details on tap
- Progress tracking β view scan history over time to observe how your skin changes
- Achievements β streak milestones unlock badges (3, 7, 14, 30 days) (coming soon)
- SkinCare AI chat β conversational assistant for skincare questions (coming soon)
- Authentication β email/password sign-up and sign-in via Supabase Auth
| Layer | Technology |
|---|---|
| Framework | React 18 + TypeScript |
| Build tool | Vite 5 |
| Styling | Tailwind CSS 3, ShadCN UI |
| Animation | Framer Motion |
| Charts | Recharts 2.12 |
| Routing | React Router 6 |
| Backend client | Supabase JS SDK v2 |
| Layer | Technology |
|---|---|
| API framework | FastAPI |
| Model | EfficientNet-B3 (PyTorch) |
| Weights host | HuggingFace Hub (sgupta7049/skiniq-efficientnet-b3) |
| Inference runtime | CPU-only PyTorch 2.3 |
| Deployment | Railway (Docker) |
| Service | Role |
|---|---|
| Supabase | PostgreSQL database, Auth, Row Level Security, Edge Functions |
| Vercel | Frontend hosting |
| Railway | FastAPI backend hosting |
| HuggingFace Hub | Model weight storage and download |
Browser (Vercel)
β
βββ React SPA
β βββ Supabase JS SDK βββΊ Supabase (Auth + Postgres + RLS)
β β βββ profiles
β β βββ skin_scan_history
β β βββ routine_logs
β β βββ chat_history
β β βββ achievements
β β
β βββ fetch βββΊ FastAPI (Railway)
β βββ POST /predict β base64 image
β β βββ EfficientNet-B3 (weights from HuggingFace Hub)
β βββ GET /health
The frontend sends a base64-encoded image to the FastAPI /predict endpoint. The backend runs EfficientNet-B3 inference and returns a structured JSON response. Results are then saved to Supabase by the frontend.
| Property | Value |
|---|---|
| Architecture | EfficientNet-B3 |
| Dataset | HAM10000 (Skin Cancer MNIST) |
| Task | 7-class skin condition classification |
| Validation accuracy | ~63% |
| Macro F1 | 0.66 |
| Input size | 224 Γ 224 px, ImageNet normalization |
| Weights | HuggingFace Hub: sgupta7049/skiniq-efficientnet-b3 |
| Code | Condition | Clinical Urgency |
|---|---|---|
akiec |
Actinic Keratosis | Moderate |
bcc |
Basal Cell Carcinoma | High |
bkl |
Benign Keratosis | Low |
df |
Dermatofibroma | Low |
mel |
Melanoma | High |
nv |
Melanocytic Nevus | Low |
vasc |
Vascular Lesion | Low |
- Dermoscopy vs. camera photos: HAM10000 was captured using dermoscopes β specialized medical imaging devices. SkinIQ accepts standard camera photos. This domain gap meaningfully degrades real-world accuracy.
- 63% validation accuracy on a 7-class problem means roughly 1 in 3 predictions is incorrect even under ideal conditions.
- Class imbalance: HAM10000 is heavily skewed toward
nv(melanocytic nevus). The model may over-predict that class. - Skin tone bias: HAM10000 underrepresents darker skin tones. Performance on deeper skin tones is likely lower than the reported aggregate metrics.
- Not a diagnostic tool. Do not use SkinIQ output to make health decisions.
- Node.js 18+
- Python 3.11+
- A Supabase project (supabase.com)
git clone https://github.com/Shubh3005/SkinIQ.git
cd SkinIQ
npm installcp .env.example .envEdit .env:
VITE_SUPABASE_URL=https://<your-project>.supabase.co
VITE_SUPABASE_ANON_KEY=<your-anon-public-key>
VITE_AI_ENDPOINT=http://localhost:8000Use the anon public key from Supabase Dashboard β Project Settings β API. Never use the service_role key in frontend code.
In the Supabase SQL editor, run in order:
supabase/migrations/001_schema.sql
supabase/migrations/002_rls.sql
Also disable email confirmation for local development: Supabase Dashboard β Authentication β Providers β Email β Confirm email: OFF.
cd backend
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000Model weights are downloaded automatically from HuggingFace Hub on first startup (~85 MB). No environment variables required.
# from project root
npm run devApp runs at http://localhost:5173.
The backend/ directory contains a Dockerfile. Deploy via Railway:
- Create a new Railway project pointed at the
backend/directory - Railway builds and runs the Docker image automatically
- Copy the Railway public URL and set it as
VITE_AI_ENDPOINTin Vercel
Model weights download from HuggingFace Hub on container startup. No volumes or secrets required.
SkinIQ/
βββ src/
β βββ pages/
β β βββ Index.tsx # Home β routine calendar
β β βββ SkinAnalyzer.tsx # Scan page
β β βββ Profile.tsx # Profile + scan history
β β βββ SkinCareAI.tsx # AI chat
β β βββ Auth.tsx # Sign in / register
β βββ components/
β β βββ routine-calendar/ # Calendar, daily steps, useRoutineCalendar hook
β β βββ skin-analyzer/ # Camera, results, useSkinAnalysis hook
β β βββ profile/ # Scan history card, profile forms
β βββ contexts/
β βββ AuthContext.tsx
βββ backend/
β βββ main.py # FastAPI app, lifespan model loading
β βββ model.py # EfficientNet-B3 inference, HuggingFace download
β βββ requirements.txt
β βββ Dockerfile
βββ supabase/
βββ migrations/
β βββ 001_schema.sql # 5 tables: profiles, skin_scan_history, chat_history, achievements, routine_logs
β βββ 002_rls.sql # Row Level Security policies
βββ functions/ # Edge functions (fallback predict, history)
MIT