Comprehensive Technical Reference for Healthcare Innovation Platform
A complete medical assistant ecosystem combining Flutter mobile app, web-based emergency viewer, and AI-powered backend services
| Repository | Links | Purpose |
|---|---|---|
| Mediassist+ - backend | Mediassist+ - backend | Core Backend |
| Report_scan -backend | Report_scan -backend | Reports store & scanning , summary genration(Hindi+English) |
| Face_api | face_api | Stores user face in vector form in multi_dimen. for more accurecy |
| Mediassist -frontend | frontend | Flutter frontend use attractive ui widgets |
| Sos-View -for doctors | For Doctors/hospitals web app | website for doctors for scaaning and retriving the data |
| Mediassist+ - Online_bot | Mediassist+ - online_bot | Well trained Doctor like symptom analysis and recommending right advices |
- Executive Summary
- System Architecture
- Technology Stack
- Repository Structure
- Flutter Mobile Application
- Emergency Viewer PWA
- HuggingFace Space Backend
- Key Features Deep Dive
- Data Flow & Integration
- Setup & Deployment
- Related Repositories
- Future Roadmap
MedAssist+ is a comprehensive, offline-first medical super-app ecosystem that combines:
- Flutter Mobile App (medassist_plus): Personal health vault with 37 screens
- Emergency Viewer (emergency-viewer): Web-based PWA for medical first responders
- AI Backend (hf_space): HuggingFace Space hosting RAG chatbot & OCR services
| Feature | Benefit |
|---|---|
| Offline-First | Works without internet connectivity |
| Emergency QR/NFC | Instant access to critical medical data in emergencies |
| AI-Powered | Intelligent chatbot + document summarization |
| Privacy-Focused | Local-first storage with biometric security |
| Family Management | Manage health records for entire family |
| Multilingual | Hindi + English support |
- 🎯 79+ Dart files in organized architecture
- 📱 37 Flutter screens covering complete healthcare journey
- 🤖 Dual chatbot system: Online (RAG) + Offline (rule-based)
- 🚨 Crash detection using sensors + AI
- 📄 OCR scanning for medical receipts & documents
- 🔐 Biometric security (fingerprint & face recognition)
┌─────────────────────────────────────────────────────────────────┐
│ MedAssist+ Ecosystem │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ FRONTEND LAYER │
│ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ Flutter Mobile App │ │ Emergency Viewer │ │
│ │ (Android/iOS) │ │ (Web PWA) │ │
│ │ │ │ │ │
│ │ - 37 Screens │ │ - QR Scanner │ │
│ │ - 79+ Dart Files │ │ - Face Recognition │ │
│ │ - Offline Chatbot │ │ - Profile Viewer │ │
│ │ - Local Storage │ │ - HTML/CSS/JS │ │
│ └──────────┬───────────┘ └──────────┬───────────┘ │
│ │ │ │
└──────────────┼──────────────────────────────────┼───────────────┘
│ │
│ HTTP/REST APIs │
│ │
┌──────────────┼──────────────────────────────────┼───────────────┐
│ API LAYER ▼ ▼ │
│ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ HuggingFace Space │ │ Backend Services │ │
│ │ (FastAPI + AI) │ │ (Node.js/Python) │ │
│ │ │ │ │ │
│ │ - RAG Chatbot API │ │ - User Auth │ │
│ │ - Receipt OCR │ │ - Profile Sync │ │
│ │ - Doc Summarizer │ │ - Emergency DB │ │
│ │ - FAISS Vector DB │ │ - MongoDB │ │
│ └──────────────────────┘ └──────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ DATA LAYER │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌───────────────────┐ │
│ │ SQLite │ │ SharedPrefs │ │ FAISS Index │ │
│ │ (Local DB) │ │ (Key-Value) │ │ (Vector Search) │ │
│ └─────────────┘ └──────────────┘ └───────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘
-
MVVM Pattern (Model-View-ViewModel)
- Models: Data structures (models/)
- Views: Flutter widgets (screens/)
- ViewModels: Providers for state (providers/)
-
Repository Pattern
- Services abstract data sources (services/)
- Separates business logic from UI
-
Singleton Pattern
- Shared service instances
- Prevents duplicate API calls
-
Offline-First
- Local data with background sync
- Works without network
| Category | Technology | Version | Purpose |
|---|---|---|---|
| Framework | Flutter | 3.19+ | Cross-platform mobile development |
| Language | Dart | 3.7.2+ | Main programming language |
| State Management | Provider | 6.0.0 | Reactive state management |
| Local Database | SQLite (sqflite) | - | Persistent local storage |
| Secure Storage | flutter_secure_storage | 9.0.0 | Encrypted key-value storage |
| HTTP Client | Dio | 5.4.0 | API requests with interceptors |
| Biometric Auth | local_auth | 2.3.0 | Fingerprint/Face authentication |
| QR Generation | qr_flutter | 4.1.0 | Emergency QR codes |
| NFC | nfc_manager | 3.3.0 | NFC tag operations |
| ML | google_mlkit_face_detection | 0.11.1 | Face recognition |
| Sensors | sensors_plus | 4.0.2 | Accelerometer/Gyroscope for crash detection |
| Camera | camera | 0.11.1 | Photo capture |
| GPS | geolocator | 10.1.0 | Location services |
| File Handling | file_picker | 10.1.9 | Document uploads |
| Animations | lottie, flutter_animate | 1.2.0, 4.5.0 | Smooth UI animations |
| i18n | flutter_localizations, intl | - | Hindi + English |
| Background Tasks | flutter_background_service | 5.0.4 | Crash detection monitoring |
| PDF Viewer | flutter_pdfview | 1.2.7 | Display medical documents |
Total Dependencies: 30+ packages
| Technology | Purpose |
|---|---|
| HTML5 | Semantic markup structure |
| CSS3 | Modern styling with animations |
| Vanilla JavaScript | Core logic (no frameworks) |
| html5-qrcode (2.3.8) | QR code scanning library |
| Tabler Icons | Beautiful icon set |
| Animate.css (4.1.1) | Pre-built animations |
| MediaPipe | Camera utilities |
Size: < 45 KB total (extremely lightweight!)
| Technology | Purpose |
|---|---|
| FastAPI | Modern Python web framework |
| Python | 3.11+ |
| FAISS (CPU) | Vector similarity search |
| Sentence Transformers | Text embeddings (paraphrase-MiniLM-L6-v2) |
| Flan-T5-Small | Lightweight language model |
| LoRA Adapters | Fine-tuned medical responses |
| Uvicorn | ASGI production server |
| Pydantic | Data validation |
| Tesseract OCR | Receipt text extraction |
health_scan/
│
├── 📱 medassist_plus/ # Main Flutter Application
│ │
│ ├── android/ # Android platform config
│ ├── ios/ # iOS platform config
│ ├── linux/ # Linux desktop support
│ ├── macos/ # macOS desktop support
│ ├── windows/ # Windows desktop support
│ ├── web/ # Web platform support
│ │
│ ├── assets/ # Static resources
│ │ ├── animations/ # Lottie JSON files
│ │ ├── images/ # PNG/JPG images
│ │ ├── wallpapers/ # Lock screen wallpapers
│ │ └── chatbot/ # Offline chatbot knowledge base
│ │ ├── combined_dataset.json
│ │ ├── medical_chatbot_dataset_1000.json
│ │ ├── symptom_Description.csv
│ │ ├── symptom_precaution.csv
│ │ ├── Symptom-severity.csv
│ │ └── format_dataset.csv
│ │
│ ├── fonts/ # Custom fonts (Poppins)
│ │
│ ├── lib/ # Main Dart source code
│ │ │
│ │ ├── main.dart # App entry point
│ │ ├── app_theme.dart # Theme configuration
│ │ ├── app_lock_gate.dart # Biometric lock wrapper
│ │ ├── background_service.dart # Background crash detection
│ │ ├── language_provider.dart # Language switching
│ │ │
│ │ ├── screens/ # 37 UI Screens
│ │ │ ├── splash_screen.dart
│ │ │ ├── onboarding_screen.dart
│ │ │ ├── onboarding_flow.dart
│ │ │ ├── login_screen.dart
│ │ │ ├── register_screen.dart
│ │ │ ├── home_dashboard.dart # Main dashboard
│ │ │ ├── profile_creation.dart
│ │ │ ├── profile_creation_screen.dart
│ │ │ ├── medical_summary.dart
│ │ │ ├── medical_summary_screen.dart
│ │ │ ├── medical_records_screen.dart
│ │ │ ├── qr_generator.dart
│ │ │ ├── qr_nfc_screen.dart
│ │ │ ├── emergency_qr_screen.dart
│ │ │ ├── emergency_info_screen.dart
│ │ │ ├── emergency_contacts_screen.dart
│ │ │ ├── emergency_access.dart
│ │ │ ├── emergency_access_screen.dart
│ │ │ ├── emergency_access_settings_screen.dart
│ │ │ ├── chatbot_screen.dart # Offline chatbot
│ │ │ ├── online_chatbot_screen.dart # RAG chatbot
│ │ │ ├── crash_detection_screen.dart
│ │ │ ├── crash_detection_settings.dart
│ │ │ ├── family_management_screen.dart
│ │ │ ├── family_member_profile_screen.dart
│ │ │ ├── receipt_store_screen.dart
│ │ │ ├── receipt_detail_screen.dart
│ │ │ ├── face_scan_screen.dart
│ │ │ ├── face_register_success.dart
│ │ │ ├── fingerprint_scan_screen.dart
│ │ │ ├── settings_screen.dart
│ │ │ ├── security_privacy_screen.dart
│ │ │ ├── help_support_screen.dart
│ │ │ └── ... (12 more screens)
│ │ │
│ │ ├── providers/ # State Management (8 providers)
│ │ │ ├── user_profile_provider.dart
│ │ │ ├── auth_provider.dart
│ │ │ ├── medical_record_provider.dart
│ │ │ ├── chat_provider.dart
│ │ │ ├── app_lock_provider.dart
│ │ │ ├── emergency_id_provider.dart
│ │ │ └── emergency_access_settings_provider.dart
│ │ │
│ │ ├── services/ # Business Logic
│ │ │ ├── api_service.dart
│ │ │ ├── auth_service.dart
│ │ │ ├── profile_service.dart
│ │ │ ├── rag_chat_service.dart # Online chatbot
│ │ │ ├── offline_chat_service.dart # Offline chatbot
│ │ │ ├── receipt_service.dart # OCR scanning
│ │ │ ├── medical_record_service.dart
│ │ │ ├── crash_detection_service.dart
│ │ │ ├── family_service.dart
│ │ │ └── ... (more services)
│ │ │
│ │ ├── models/ # Data Structures (5 models)
│ │ │ ├── user.dart
│ │ │ ├── user_profile.dart
│ │ │ ├── family_member.dart
│ │ │ ├── emergency_contact.dart
│ │ │ └── medical_record.dart
│ │ │
│ │ ├── chatbot/ # Offline Chatbot Engine
│ │ │ └── chatbot_engine.dart
│ │ │
│ │ ├── constants/ # Configuration
│ │ │ └── api_config.dart # API endpoints
│ │ │
│ │ ├── data/ # Static data
│ │ │ └── daily_tips.dar
│ │ │
│ │ └── l10n/ # Localization
│ │ ├── app_localizations.dart
│ │ ├── app_localizations_en.dart # English
│ │ ├── app_localizations_hi.dart # Hindi
│ │ └── app_localizations_es.dart # Spanish
│ │
│ ├── test/ # Unit & widget tests
│ ├── pubspec.yaml # Dependencies manifest
│ ├── analysis_options.yaml # Lint rules
│ ├── l10n.yaml # i18n config
│ └── README.md
│
├── 🌐 emergency-viewer/ # Web-based Emergency Viewer PWA
│ ├── index.html # Main HTML page (184 lines)
│ ├── style.css # Styles (1000+ lines)
│ ├── script.js # Logic (632 lines)
│ └── README.md
│
├── 🚀 hf_space/ # HuggingFace Space (AI Backend)
│ ├── api.py # FastAPI main app
│ ├── tinyllama_rag_chatbot.py # RAG implementation
│ ├── doctor_engine.py # Rule-based responses
│ ├── small_llm.py # Lightweight LLM
│ ├── receipt_scanner.py # OCR service
│ ├── streamlit_app.py # Alternative UI
│ ├── requirements.txt # Python dependencies
│ ├── flan_lora/ # LoRA adapters
│ └── README.md
│
├── 🧠 chatbot/ # Experimental Chatbot Variants
│ ├── bert_bot/ # BERT intent classifier
│ ├── rag_bot/ # Original RAG (migrated to hf_space)
│ └── hybrid_chatbot.py
│
├── 📄 ai_summarizer/ # Document Summarization Service
│ ├── app.py # Gradio app
│ ├── api.py # API endpoints
│ └── modules/
│ ├── ocr_reader.py
│ └── summarizer.py
│
├── 🔧 medassist-backend/ # Node.js Backend Services
│ ├── config/
│ ├── controllers/
│ ├── models/
│ ├── middleware/
│ └── server.js
│
├── 📜 HACKATHON_DOCUMENTATION.md # Detailed bilingual docs (1300+ lines)
├── 📜 README.hack.md # Quick reference
└── 📜 railway.toml # Deployment config
Total: ~300+ files across all components
- Files: 79+ Dart files
- Screens: 37 UI screens
- Providers: 8 state managers
- Services: 14+ business logic services
- Models: 5 data structures
- Lines of Code: ~15,000+ (estimated)
| Screen | File | Purpose |
|---|---|---|
| Splash | splash_screen.dart | App launch animation |
| Onboarding | onboarding_screen.dart | First-time user guide |
| Onboarding Flow | onboarding_flow.dart | Multi-step onboarding |
| Login | login_screen.dart | User authentication |
| Register | register_screen.dart | New user signup |
| Screen | Purpose |
|---|---|
| Home Dashboard | Central hub with all features |
| Profile Creation | Create/edit medical profile |
| Medical Summary | Health overview dashboard |
| Medical Records | Document management |
| Screen | Purpose |
|---|---|
| QR/NFC Screen | Generate emergency codes |
| Emergency QR | Display QR for scanning |
| Emergency Info | Critical medical data |
| Emergency Contacts | Manage contacts list |
| Emergency Access | Doctor access portal |
| Emergency Access Settings | Configure sharing |
| Crash Detection | Accident monitoring |
| Screen | File | Chatbot Type |
|---|---|---|
| Offline Chatbot | chatbot_screen.dart | Rule-based, works offline |
| Online Chatbot | online_chatbot_screen.dart | RAG-based, requires internet |
- Family Management
- Family Member Profile
- Receipt Store (medical bills)
- Receipt Detail (OCR results)
- Face Scan (enrollment)
- Fingerprint Scan
- Settings
- Security & Privacy
- Help & Support
// Example: UserProfileProvider
class UserProfileProvider extends ChangeNotifier {
UserProfile? _profile;
UserProfile? get profile => _profile;
Future<void> updateProfile(UserProfile newProfile) async {
_profile = newProfile;
await _saveToLocalStorage();
await _syncWithBackend();
notifyListeners(); // Triggers UI rebuild
}
Future<void> fetchLatestProfile() async {
final remote = await ProfileService.fetchProfile();
final local = await _loadFromLocalStorage();
_profile = _mergeProfiles(local, remote);
notifyListeners();
}
}8 Providers:
UserProfileProvider- Medical profile dataAuthProvider- JWT token managementMedicalRecordProvider- Document managementChatProvider- Chatbot conversation stateAppLockProvider- Biometric lock settingsEmergency IdProvider- Generate unique IDsEmergencyAccessSettingsProvider- Emergency sharing configThemeProvider+LanguageProvider- UI customization
class RagChatService {
static const String API_URL = 'https://huggingface.co/spaces/YOUR_SPACE/chat';
Future<String> sendMessage(String question) async {
final response = await dio.post(
API_URL,
data: {'question': question},
);
return response.data['answer'];
}
}class CrashDetectionService {
static const double CRASH_THRESHOLD = 25.0; // m/s²
StreamSubscription? _accelSubscription;
void startMonitoring() {
_accelSubscription = accelerometerEvents.listen((event) {
double magnitude = _calculateMagnitude(event);
if (magnitude > CRASH_THRESHOLD) {
_triggerEmergencyAlert();
}
});
}
void _triggerEmergencyAlert() async {
// 1. Get GPS coordinates
Position position = await Geolocator.getCurrentPosition();
// 2. Show 30-second cancellation dialog
bool cancelled = await _showCancellationDialog();
if (!cancelled) {
// 3. Send SMS to emergency contacts
await _sendAlerts(position);
}
}
}class UserProfile {
String name;
String emergencyId; // Unique 8-char ID
String bloodGroup; // A+, B+, O-, etc.
String? dateOfBirth;
String? phone;
String? email;
String? photoUrl;
List<String> medicalConditions; // Diabetes, Hypertension, etc.
List<String> allergies; // Penicillin, Peanuts, etc.
List<String> pastSurgeries;
List<String> currentMedications;
List<EmergencyContact> emergencyContacts;
Map<String, dynamic> toJson() => {
'name': name,
'emergencyId': emergencyId,
'bloodGroup': bloodGroup,
'medicalConditions': medicalConditions,
// ... more fields
};
factory UserProfile.fromJson(Map<String, dynamic> json) {
return UserProfile(
name: json['name'],
emergencyId: json['emergencyId'],
// ... parse all fields
);
}
}Knowledge Base Files:
combined_dataset.json- Merged medical Q&Amedical_chatbot_dataset_1000.json- 1000+ medical conversationssymptom_Description.csv- 200+ symptom descriptionssymptom_precaution.csv- Precautionary adviceSymptom-severity.csv- Severity ratingsformat_dataset.csv- Formatted responses
Algorithm:
class ChatbotEngine {
String generateResponse(String userMessage) {
// 1. Extract medical keywords
List<String> keywords = _extractKeywords(userMessage);
// 2. Search CSV knowledge base
var matches = _searchSymptoms(keywords);
// 3. Rank by relevance
matches.sort((a, b) => b.score.compareTo(a.score));
// 4. Generate response
return _formatResponse(matches.first);
}
}A minimalist, ultra-lightweight Progressive Web App designed for medical first responders to instantly access patient emergency information by scanning QR codes or using face recognition.
- Total Size: < 45 KB (incredibly fast load times)
- Boot Time: < 150 ms on mid-range Android
- Lighthouse PWA Score: > 0.95
- No Backend Required: Fully static deployment
Features:
- QR Camera scanner
- Face recognition modal
- Manual ID input
- Upload QR image
- Profile display card
Key Sections:
<header>
MedAssist+ branding + status indicator
</header>
<section id="scanner-section">
- QR camera interface
- Face scan button
- Upload QR image button
- Manual emergency ID input
</section>
<section id="profile-section">
- Patient name, blood group
- Allergies, medical conditions
- Emergency contacts (clickable phone numbers)
- Debug section
</section>
<div id="face-modal">
- Camera preview
- Face guide overlay
- Capture button
- Camera switching
</div>Design Highlights:
- Color Scheme: Medical blue (#00a8cc) + Teal (#00d4aa)
- Animations: Pulse rings, scanning effects, heartbeat
- Responsive: Mobile-first with 768px & 480px breakpoints
- Glassmorphism: Modern frosted-glass effects
- Dark Mode Ready: Pre-configured for future dark theme
CSS Variables:
:root {
--primary-color: #00a8cc;
--secondary-color: #00d4aa;
--accent-color: #ff6b6b;
--success-color: #51cf66;
--shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.15);
--border-radius: 16px;
}Key Animations:
@keyframes pulse { /* Background pulse rings */ }
@keyframes scan { /* QR scanning line */ }
@keyframes heartbeat { /* Logo heartbeat */ }
@keyframes blink { /* Status indicator */ }Core Functions:
// 1. QR Scanning
async function startScanner() {
html5QrCode = new Html5Qrcode("qr-reader");
await html5QrCode.start(
{ facingMode: "environment" },
config,
qrCodeSuccessCallback
);
}
// 2. Extract Emergency ID from QR
function extractEmergencyId(text) {
// Supports multiple formats:
// - JSON: {"type":"MEDICAL_PROFILE","data":{"emergencyId":"..."}}
// - V1: V1:ID:MED-1234
// - URL: /emergency/view/MED-1234
// - Direct: MED-1234
}
// 3. Fetch Profile from Backend
async function fetchProfile(emergencyId) {
// Try 6 different API endpoints for compatibility:
const endpoints = [
`/api/emergency/${emergencyId}`,
`/api/users/emergency/${emergencyId}`,
`/api/qr/emergency/${emergencyId}`,
// ... 3 more fallbacks
];
for (const endpoint of endpoints) {
try {
const data = await fetch(BACKEND_URL + endpoint);
if (data.ok) return displayProfile(data);
} catch {}
}
}
// 4. Face Recognition
async function captureAndIdentify() {
const imageData = await imageCapture.grabFrame();
const response = await fetch('/api/face/identify', {
method: 'POST',
body: JSON.stringify({ image_data: dataUrl })
});
if (response.match) {
displayProfile(response.profile);
}
}
// 5. Display Profile
function displayProfile(profile) {
profileCard.innerHTML = `
<h3>${profile.user.name}</h3>
<p><strong>Blood Group:</strong> ${profile.user.bloodGroup}</p>
<p><strong>Allergies:</strong> ${profile.user.allergies.join(', ')}</p>
<p><strong>Conditions:</strong> ${profile.user.medicalConditions.join(', ')}</p>
<!-- Emergency contacts with clickable phone links -->
`;
}Static Hosting Options:
- GitHub Pages
- Firebase Hosting
- Vercel / Netlify
- Cloudflare Pages
Example Command:
# Local development
npx serve -l 5500 emergency-viewer
# Lighthouse audit
npx lighthouse http://localhost:5500 --preset pwaHosted on HuggingFace Spaces (free tier), this FastAPI backend provides:
- AI chatbot using RAG (Retrieval-Augmented Generation)
- Medical receipt OCR scanning
- Document summarization
# api.py - FastAPI Application
from fastapi import FastAPI
from tinyllama_rag_chatbot import generate_answer, retrieve_passages
from receipt_scanner import scan_receipt, summarize_receipt
app = FastAPI()
@app.post("/chat")
async def chat(request: ChatRequest):
answer = generate_answer(request.question)
return {"answer": answer}
@app.post("/passages")
async def get_passages(request: PassageRequest):
passages = retrieve_passages(request.query, top_k=8)
return {"passages": passages}
@app.post("/receipt/scan_and_summarize")
async def scan_and_summarize(file: UploadFile):
ocr_data = scan_receipt(file)
summary = summarize_receipt(ocr_data)
return {"ocr_data": ocr_data, "summary": summary}Pipeline:
User Question
↓
┌─────────────────┐
│ Encode to │ (Sentence Transformer)
│ Vector │ paraphrase-MiniLM-L6-v2
│ [embeddings] │
└────────┬────────┘
↓
┌─────────────────┐
│ FAISS Search │ Find top-8 similar passages
│ Vector DB │
└────────┬────────┘
↓
┌─────────────────┐
│ Concatenate │ Build context from passages
│ Context │
└────────┬────────┘
↓
┌─────────────────┐
│ LLM Generation │ Flan-T5-Small + LoRA
│ │ max_new_tokens=120
└────────┬────────┘
↓
Final Answer
Code Implementation:
# tinyllama_rag_chatbot.py
from sentence_transformers import SentenceTransformer
import faiss
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
# Initialize models
embedder = SentenceTransformer('sentence-transformers/paraphrase-MiniLM-L6-v2')
llm = AutoModelForSeq2SeqLM.from_pretrained('google/flan-t5-small')
tokenizer = AutoTokenizer.from_pretrained('google/flan-t5-small')
# Load FAISS index
index = faiss.read_index('medical_faiss.index')
def retrieve_passages(query: str, top_k=8):
# Encode query
query_vector = embedder.encode([query])
# Search FAISS
distances, indices = index.search(query_vector, top_k)
# Return passages
return [corpus[idx] for idx in indices[0]]
def generate_answer(question: str):
# Retrieve
passages = retrieve_passages(question, top_k=8)
# Summarize passages
context = "\n".join([summarize(p) for p in passages[:3]])
# Generate
prompt = f"{context}\n\nPatient: {question}\n\nDoctor:"
inputs = tokenizer(prompt, return_tensors='pt')
outputs = llm.generate(**inputs, max_new_tokens=120)
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
return answer + "\n\n⚠️ This is not professional medical advice."# receipt_scanner.py
import pytesseract
from PIL import Image
def scan_receipt(image_bytes):
# OCR extraction
image = Image.open(io.BytesIO(image_bytes))
raw_text = pytesseract.image_to_string(image)
# Parse structured data
hospital = extract_hospital_name(raw_text)
date = extract_date(raw_text)
items = extract_line_items(raw_text)
total = extract_total_amount(raw_text)
return {
"hospital_name": hospital,
"date": date,
"items": items,
"total": total,
"raw_text": raw_text
}
def summarize_receipt(data):
items_text = ", ".join([f"{item['name']}: ₹{item['price']}"
for item in data['items']])
return f"""
Hospital: {data['hospital_name']}
Date: {data['date']}
Items: {items_text}
Total: ₹{data['total']}
"""HuggingFace Space Configuration:
# README.md (in hf_space/)
---
title: MedAssist+ RAG Chatbot
emoji: 🩺
colorFrom: indigo
colorTo: blue
sdk: docker
app_file: api.py
pinned: false
---Auto-Deploy:
- Push to
mainbranch → HuggingFace auto-builds Docker container - Runs on free CPU tier
- Auto-scaled based on usage
ID Generation:
// Emergency ID Provider
String generateEmergencyId() {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
final random = Random.secure();
return List.generate(8, (i) => chars[random.nextInt(chars.length)]).join();
}
// Example: "MED-A7B2"QR Encoding:
QrImageView(
data: jsonEncode({
'type': 'MEDICAL_PROFILE',
'data': {
'emergencyId': user.emergencyId,
'name': user.name,
'bloodGroup': user.bloodGroup,
'emergencyUrl': 'https://medassist.me/emergency/view/${user.emergencyId}'
}
}),
version: QrVersions.auto,
size: 300.0,
backgroundColor: Colors.white,
)Use Case Scenario:
Accident → Paramedic scans QR → Sees:
- Blood Type: O+
- Allergies: Penicillin
- Emergency Contact: +91-9876543210
- Condition: Type-2 Diabetes
→ Provides appropriate emergency care
Physics:
- Monitors accelerometer events (x, y, z axes)
- Calculates magnitude:
sqrt(x² + y² + z²) - Threshold: 25 m/s² (normal movement: < 10 m/s²)
Implementation:
void _onAccelerometerData(AccelerometerEvent event) {
double magnitude = sqrt(
event.x * event.x +
event.y * event.y +
event.z * event.z
);
if (magnitude > CRASH_THRESHOLD) {
_crashDetected = true;
_lastCrashTime = DateTime.now();
// Start 30-second countdown
_showCancellationDialog();
}
}
Future<void> _sendEmergencyAlerts() async {
Position position = await Geolocator.getCurrentPosition();
String message = '''
🚨 EMERGENCY ALERT 🚨
Crash detected for ${user.name}
Location: https://maps.google.com/?q=${position.latitude},${position.longitude}
Time: ${DateTime.now()}
Blood Type: ${user.bloodGroup}
Allergies: ${user.allergies.join(', ')}
''';
for (var contact in user.emergencyContacts) {
await sendSMS(contact.phone, message);
}
}Dual System:
- Online (RAG): Intelligent, contextual responses
- Offline (Rule-based): Fast, deterministic answers
Comparison:
| Feature | Online RAG | Offline Rule-Based |
|---|---|---|
| Internet Required | ✅ Yes | ❌ No |
| Response Quality | ⭐⭐⭐⭐⭐ High | ⭐⭐⭐ Medium |
| Response Time | 2-5 seconds | < 0.5 seconds |
| Knowledge Base | 10,000+ passages | 200+ symptoms |
| Technology | FAISS + Flan-T5 | CSV lookup + regex |
Example Conversation (Online RAG):
User: "मुझे सिरदर्द और बुखार है" (I have headache and fever)
Bot: "आपके लक्षणों के आधार पर, यह सामान्य फ्लू या वायरल संक्रमण हो सकता है।
सुझाए गए उपाय:
1. Paracetamol 500mg हर 6 घंटे में लें
2. पर्याप्त आराम करें (8+ घंटे की नींद)
3. तरल पदार्थ - कम से कम 3 लीटर पानी/दिन
परीक्षण (यदि 3+ दिन तक जारी रहे):
- CBC (Complete Blood Count)
- Malaria test (यदि बुखार 102°F+)
⚠️ यदि लक्षण बिगड़ते हैं या 3 दिनों में सुधार नहीं होता है,
तो तुरंत डॉक्टर से परामर्श लें।
यह पेशेवर चिकित्सा सलाह नहीं है।"
// Upload PDF Report
File pdfFile = await FilePicker.getFile();
// Send to AI Summarizer API
final response = await dio.post(
'https://huggingface.co/spaces/YOUR_SPACE/summarize',
data: FormData.fromMap({
'file': await MultipartFile.fromFile(pdfFile.path),
}),
);
// Display Summary
String summary = response.data['summary'];
/*
Example Output:
{
"test_type": "Blood Test - Lipid Profile",
"date": "2024-01-15",
"key_findings": [
"Total Cholesterol: 220 mg/dL (High)",
"LDL Cholesterol: 145 mg/dL (High)",
"HDL Cholesterol: 42 mg/dL (Low)",
"Triglycerides: 180 mg/dL (Borderline High)"
],
"summary": "Your lipid profile shows elevated cholesterol levels. Recommend dietary changes and exercise. Consult cardiologist for medication assessment.",
"recommendations": [
"Reduce saturated fats",
"Increase fiber intake",
"30 min cardio daily",
"Follow-up in 3 months"
]
}
*/┌─────────────────────────────────────────────────────────────────┐
│ STEP 1: Patient Setup (Flutter App) │
└─────────────────────────────────────────────────────────────────┘
│
▼
Patient creates profile in app
│
▼
Generate emergency ID: "MED-A7B2"
│
▼
Create QR code with profile data
│
▼
Save to phone lock screen / print card
│
┌─────────────────────────────────────────────────────────────────┐
│ STEP 2: Emergency Situation (Accident) │
└─────────────────────────────────────────────────────────────────┘
│
▼
Crash detection triggers alert
│
▼
Send GPS location to emergency contacts
│
▼
Display QR code on lock screen (auto-triggered)
│
┌─────────────────────────────────────────────────────────────────┐
│ STEP 3: First Responder (Emergency Viewer) │
└─────────────────────────────────────────────────────────────────┘
│
▼
Paramedic opens https://medassist.me/emergency
│
▼
Scan QR code from patient's phone
│
▼
Extract emergencyId: "MED-A7B2"
│
▼
Fetch from backend: GET /api/emergency/MED-A7B2
│
▼
Display profile:
- Name: John Doe
- Blood: O+
- Allergies: Penicillin
- Condition: Diabetic (insulin)
- Emergency Contact: +91-9876543210
│
▼
Paramedic provides appropriate emergency care
Flutter App ←→ Backends
┌─────────────────────┐
│ Flutter App │
└──────────┬──────────┘
│
├─────→ HuggingFace Space API
│ - POST /chat (chatbot)
│ - POST /receipt/scan (OCR)
│ - POST /passages (RAG)
│
├─────→ MedAssist Backend
│ - POST /api/auth/login
│ - GET /api/users/profile
│ - PUT /api/users/profile
│ - GET /api/emergency/{id}
│ - POST /api/face/identify
│
└─────→ Local Storage
- SQLite (medical records)
- SharedPreferences (settings)
- flutter_secure_storage (tokens)
# Clone repository
git clone https://github.com/YOUR_USERNAME/health_scan.git
cd health_scan/medassist_plus
# Install dependencies
flutter pub get
# Run on connected device
flutter run
# Build APK (Android)
flutter build apk --release
# Build iOS
flutter build ios --release
# Run tests
flutter testEnvironment Setup:
// lib/constants/api_config.dart
class ApiConfig {
static const String HF_SPACE_URL = 'https://YOUR_SPACE.hf.space';
static const String BACKEND_URL = 'https://api.medassist.me';
static const String EMERGENCY_VIEWER_URL = 'https://emergency.medassist.me';
}Option 1: GitHub Pages
cd emergency-viewer
# Commit files
git add .
git commit -m "Deploy emergency viewer"
git push origin main
# Enable GitHub Pages in repo settings
# Choose branch: main, folder: /emergency-viewerOption 2: Firebase Hosting
npm install -g firebase-tools
firebase login
firebase init hosting
firebase deploycd hf_space
# Create Space on HuggingFace.co
# - Name: medassist-rag-chatbot
# - SDK: Docker
# - Visibility: Public
# Push to HuggingFace
git remote add hf https://huggingface.co/spaces/YOUR_USERNAME/medassist-rag-chatbot
git push hf main
# Auto-builds and deploys!GitHub: https://github.com/YOUR_USERNAME/health_scan
- Description: Main monorepo containing all MedAssist+ code
- Stars: [Add stars count]
- Contributors: Rohit + Cascade AI
- License: MIT
| Repository | Description | Technologies | Link |
|---|---|---|---|
| medassist-mobile | Flutter mobile app | Flutter, Dart | github.com/.../medassist-mobile |
| emergency-viewer-pwa | Web emergency viewer | HTML/CSS/JS | github.com/.../emergency-viewer |
| medassist-rag-api | AI chatbot backend | FastAPI, Python | huggingface.co/spaces/.../medassist-rag |
| medassist-backend | User auth & profile API | Node.js, MongoDB | github.com/.../medassist-backend |
| ai-summarizer | Document summarization | Python, Gradio | github.com/.../ai-summarizer |
| Technology | Official Docs | GitHub |
|---|---|---|
| Flutter | https://flutter.dev | https://github.com/flutter/flutter |
| FastAPI | https://fastapi.tiangolo.com | https://github.com/tiangolo/fastapi |
| FAISS | https://faiss.ai | https://github.com/facebookresearch/faiss |
| Sentence Transformers | https://sbert.net | https://github.com/UKPLab/sentence-transformers |
| Flan-T5 | HuggingFace Models | https://huggingface.co/google/flan-t5-small |
| html5-qrcode | Docs | https://github.com/mebjas/html5-qrcode |
- Google Health: Healthcare design patterns
- Apple Health: Privacy-first approach
- MyChart: Medical records management
- ICE (In Case of Emergency): Emergency contact standards
- WHO Medical Guidelines: Medical content accuracy
- Multi-modal LLM (text + image analysis)
- Personalized health predictions using ML
- Voice-based chatbot (speech-to-text + TTS)
- Medical image analysis (X-rays, MRI scans)
- Wearable device sync (Fitbit, Apple Watch)
- Hospital/clinic EHR integration (HL7 FHIR)
- Pharmacy prescription auto-fill
- Insurance claim automation
- Doctor consultation marketplace
- Support groups for chronic conditions
- Health challenges & gamification
- Medication adherence tracking with reminders
- Web dashboard (Flutter Web)
- Smart TV app for elderly users
- WhatsApp bot integration
- Alexa/Google Home skill
- Hospital admin portal
- Bulk patient onboarding
- Analytics dashboard
- HIPAA compliance certification
- End-to-end encryption for all data
- Blockchain-based medical records
- Federated learning for privacy-preserving AI
- GraphQL API instead of REST
- Real-time sync with WebSockets
| Metric | Count |
|---|---|
| Total Files | 300+ |
| Dart Files | 79+ |
| Lines of Dart Code | ~15,000 |
| Python Files | 20+ |
| Lines of Python | ~5,000 |
| JavaScript Files | 1 (632 lines) |
| CSS Lines | 1,000+ |
| Total Dependencies | 40+ packages |
| Category | Features Implemented | Percentage |
|---|---|---|
| Authentication | 5/5 | 100% |
| Profile Management | 8/8 | 100% |
| Emergency Features | 7/7 | 100% |
| AI Chatbot | 2/2 | 100% |
| Medical Records | 6/6 | 100% |
| Family Management | 4/4 | 100% |
| Security | 5/5 | 100% |
| Localization | 2/3 | 67% (Hindi, English ready; Spanish partial) |
- Rohit - Lead Developer (Mobile, Backend, AI)
- Cascade AI - Pair Programming Assistant
Flutter Ecosystem:
- Provider by Remi Rousselet
- QR Flutter by Luke Freeman
- Google ML Kit team
- All maintainers of 30+ packages
Python/AI:
- FastAPI by Sebastián Ramírez
- HuggingFace Transformers team
- Facebook AI Research (FAISS)
- Sentence Transformers by Nils Reimers
Web Technologies:
- html5-qrcode by Minhaz
- Tabler Icons community
- Animate.css by Daniel Eden
- Medical knowledge base compiled from public medical literature
- Symptom databases from WHO & CDC
- Treatment protocols from medical journals
- HuggingFace for free Space hosting
- Google for ML Kit & Maps APIs
- Open-source community
MIT License - see LICENSE file
Medical Disclaimer: This application is for educational and informational purposes only. It does not constitute professional medical advice, diagnosis, or treatment. Always consult qualified healthcare providers for medical decisions.
GitHub Issues: Report bugs or request features
Documentation: Full docs
Email: medassist.support@example.com
Built with ❤️ for better healthcare accessibility
Last Updated: January 2026
Version: 1.0.0
Build: 2026.01