A full-stack health assessment platform that enables doctors to run AI-powered triage, generate structured clinical notes, check drug interactions, and send patients smart intake forms — all from a single dashboard.
| Role | Password | |
|---|---|---|
| 👨⚕️ Doctor | demo@gmail.com |
demo1234 |
The demo account has pre-loaded patients and assessment history so you can explore the full dashboard without setting anything up.
- Credit-based Assessment — Patients receive 500 AI credits upon registration, which are consumed out to run their assessments using our AI system (No actual payment integration required to start) Smart Intake Form — Mobile-friendly, branded form accessible via email link; optionally runs independent of doctor integration
- Image Upload System — Attach a photo of a rash, wound, or eye for visual AI analysis
- Assessment Management — Review and analyze AI-assessed triage colors natively alongside generated SOAP note reports, differential diagnosis ICD-10 codes, and drug interaction warnings
- Add Patients — Build your patient list natively to allow simple integration natively
- Assessment History — Browse all past generated AI reports per patient with full output preserved seamlessly
- Triage Classification — RED (emergency) / YELLOW (urgent) / GREEN (self-care) with numeric urgency score and clinical reasoning
- SOAP Notes — Structured Subjective / Objective / Assessment / Plan output in clinical language
- Differential Diagnosis — Ranked conditions with ICD-10 codes and confidence levels
- Follow-up Questions — OPQRST-guided clarifying questions generated dynamically based on presenting symptoms
- Drug Interaction Checking — OpenFDA data cross-referenced with LLM synthesis; severity-ranked (Minor / Moderate / Major)
- Vision Analysis — Patient photos analysed by Claude Vision; findings injected into the full assessment
- Medical Chatbot — Conversational assistant for general clinical questions
- React 19 with TypeScript — UI library
- Vite — Build tool
- Tailwind CSS — Utility-first styling
- Framer Motion — Animations
- React Router — Client-side routing
- Sonner — Toast notifications
- Lucide React — Icons
- Node.js + Express 5 — API server
- MongoDB Atlas + Mongoose — Database
- JWT + bcrypt — Auth & password hashing
- SendGrid — Transactional email (HTTPS-based, works on Render free tier)
- Razorpay — Payment processing
- Python + FastAPI — AI API server
- Groq (Llama 3.3 70B) — Primary LLM for triage, assessment, drug analysis
- Anthropic Claude — Vision analysis
- ChromaDB / FAISS — Vector database for RAG
- OpenFDA API — Drug interaction data
- Node.js ≥ 18, Python ≥ 3.10, MongoDB Atlas account, Groq API key, SendGrid account
git clone https://github.com/adityajain-27/Nirog-AI.git
cd Nirog-AIcd backend
npm install
cp .env.example .env # fill in your values
npm run dev # http://localhost:5000cd frontend
npm install
# create .env.local with VITE_NODE_URL and VITE_PYTHON_URL
npm run dev # http://localhost:5173cd files
pip install -r requirements.txt
cp .env.example .env # add GROQ_API_KEY
uvicorn api_server:app --reload --port 8000Optimised for deployment on MongoDB Atlas, Render (backend + AI), and Vercel (frontend).
- Create a free M0 cluster at cloud.mongodb.com
- Create a database user and whitelist all IPs (
0.0.0.0/0) or Render IPs - Copy the connection string into
MONGODB_URI
- Create a new Web Service on render.com
- Set root directory to
files/ - Start command:
uvicorn api_server:app --host 0.0.0.0 --port 8000 - Add environment variable:
GROQ_API_KEY - Copy the service URL → you'll need it for
PYTHON_AI_URL
- Create a second Web Service on Render
- Set root directory to
backend/ - Start command:
node app.js - Add all environment variables from
backend/.env.example
- Import the repo into vercel.com
- Set root directory to
frontend/ - Add environment variables:
VITE_NODE_URL— your Render backend URLVITE_PYTHON_URL— your Render AI server URL
| Variable | Description | Example |
|---|---|---|
MONGODB_URI |
MongoDB Atlas connection string | mongodb+srv://... |
JWT_SECRET |
Long random string for JWT signing | openssl rand -hex 32 |
PYTHON_AI_URL |
Deployed AI server URL | https://your-ai.onrender.com |
APP_URL |
Frontend URL (for intake email links) | https://your-app.vercel.app |
SENDGRID_API_KEY |
SendGrid API key | SG.xxxxxxxx |
SENDGRID_VERIFIED_SENDER |
Verified sender email in SendGrid | you@example.com |
| Variable | Description |
|---|---|
GROQ_API_KEY |
API key from console.groq.com |
| Variable | Description |
|---|---|
VITE_NODE_URL |
Backend base URL |
VITE_PYTHON_URL |
AI server base URL |
Symptoms + Image + Medications
│
├── [1] RAG Agent Retrieve clinical guidelines from vector DB
├── [2] Triage Agent Assign RED / YELLOW / GREEN urgency
├── [3] Vision Agent Analyse uploaded image (Claude Vision)
├── [4] Follow-up Agent Generate OPQRST-guided clinical questions
├── [5] Assessment Agent Generate SOAP note + differential diagnosis
└── [6] Drug Agent Flag interactions via OpenFDA + LLM
- Register / Login — Create a doctor account
- Add Patients — Build your patient list with medical history and allergies
- Run Assessment — Enter symptoms and medications; let the AI generate a full report
- Send Intake — Click "Send Intake Form" on any patient to email them a link
- View Reports — Open any assessment in history for the full AI output including SOAP notes and drug warnings
- Chat — Use the medical chatbot for quick clinical references
- Open Email Link — Tap the link sent by your doctor (no account needed)
- Fill In Symptoms — Describe your current symptoms in detail; optionally add medications and a photo
- Submit — Your doctor's dashboard is updated automatically with the AI report
POST /assess Full pipeline assessment (text)
POST /assess/image Full pipeline assessment (text + image)
POST /followup Generate follow-up questions only
POST /chat Medical chatbot
POST /drug-check Standalone drug interaction check
GET /health Health check
Example:
curl -X POST http://localhost:8000/assess \
-H "Content-Type: application/json" \
-d '{
"symptoms": "chest pain radiating to left arm, sweating for 30 minutes",
"medications": ["warfarin 5mg", "metoprolol 50mg"]
}'POST /api/auth/register
POST /api/auth/login
GET /api/patients [auth]
POST /api/patients [auth]
PUT /api/patients/:id [auth]
DELETE /api/patients/:id [auth]
POST /api/doctor/assess [auth]
GET /api/doctor/assessments [auth]
POST /api/intake/send [auth]
GET /api/intake/:token [public]
POST /api/intake/:token/submit [public]
POST /api/contact
Nirog-AI/
├── frontend/
│ └── src/app/
│ ├── pages/ # 30+ route-level pages
│ ├── components/ # Reusable UI components
│ ├── services/api.ts # API client
│ └── routes.tsx # React Router config
│
├── backend/
│ ├── app.js
│ ├── routes/ # auth, doctor, patients, intake, contact, billing
│ ├── models/ # Mongoose schemas
│ └── middlewares/auth.js # JWT guard
│
└── files/
├── api_server.py
├── agents/ # 6 specialised AI agents
└── utils/ # session.py · llm_client.py
- JWT-based authentication for all doctor routes
- Password hashing with bcrypt
- Tokenised, time-limited intake links (expire after 7 days)
- Protected API routes via middleware
- CORS configuration
- SendGrid HTTPS API used for email (avoids SMTP exposure)
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/YourFeature) - Commit your changes (
git commit -m 'Add YourFeature') - Push to the branch (
git push origin feature/YourFeature) - Open a Pull Request
This project is licensed under the MIT License.
Built at Phantasia 3.0 (24-hour Hackathon) — 🥈 2nd Place
| Name | Role | GitHub |
|---|---|---|
| Aditya Jain (Lead) | Project architecture · Full-stack backend · Deployment | @adityajain-27 |
| Samay Parashar | AI agent pipeline · AI integration | @samay722 |
| Sweety | Frontend development · UI design · Testing & QA | @Sweety3106 |
| Hardik Agrawal | Frontend development · UI design · Testing & QA | @hardik-agrawal10 |
For support, email adityaalba27@gmail.com or open an issue in the repository.
⭐ Star this repository if you find it helpful!
Nirog AI is for research and educational purposes only. It does not constitute medical advice and must not replace the judgment of a qualified healthcare professional.