Quantera is an AI-powered medical report ingestion and assistant platform. The server ingests PDFs and images, extracts text via OCR, uses an LLM to parse structured medical data, stores embeddings and test values, and provides a conversational AI assistant (RAG) for both general and medical-specific questions.
client/ — React + Vite frontend (dashboard, chat UI, uploads)server/ — Express API, ingestion, agent, controllers, and modelsstreamlit/ — analysis notebooks and dashboards| Field | Value |
|---|---|
| test@gmail.com | |
| Password | test123 |
/api/upload (authenticated)./api/ask endpoint uses embeddings + recent conversation memory to answer user questions — medical questions trigger RAG over saved reports.The application UI follows a simple, user-friendly flow. Below are the typical screens and actions (images are stored in client/public):





CSV/PDF Upload
|
v
Express Backend --------- MySQL Database
| |
├─ Ingest Router ├─ Medical Reports
├─ File Controller ├─ Parsed Test Values
├─ OCR (Tesseract) ├─ Embeddings
├─ LLM Parser ├─ Chat History
├─ Agent Controller ├─ User Profiles
├─ Embeddings Generator └─ Trends Data
├─ Auth Middleware
└─ Notifications
|
v
React + Vite Frontend (Dashboard, Chat, Upload, Trends)
|
├─ Home / Landing Page
├─ Upload UI (Drag & Drop)
├─ Dashboard (Charts, Analytics)
├─ AI Assistant (RAG Chat)
├─ Trends / Reports
└─ User Profile
|
v
Streamlit Analytics (Optional)
|
├─ Data Exploration
├─ Report Summaries
├─ Trend Analysis
└─ User Insights
External Integrations:
|
├─ LLM APIs (Google Gemini, Groq, OpenAI)
├─ Tesseract OCR + Poppler
├─ Email / SMTP (nodemailer)
└─ Speech Services (Azure Cognitive)
flowchart TD
%% User
User["User / Healthcare Provider"]
%% Presentation Layer
subgraph Presentation["Presentation Layer"]
UI["UI Components & Dashboard"]
Chat["AI Chat Interface"]
Charts["Analytics & Trends"]
end
%% Application Layer
subgraph Application["Application Layer (Express Server)"]
API["REST API Endpoints"]
File["File Upload & Processing"]
OCR["OCR Engine (Tesseract / Poppler)"]
Parser["LLM Parser (Text → Structured JSON)"]
Agent["RAG Agent & Intent Detection"]
Embed["Embedding Generator"]
Auth["Authentication Middleware (JWT)"]
end
%% Data Layer
subgraph Data["Data Layer (MySQL Database)"]
Reports["Medical Reports"]
Tests["Extracted Test Values"]
Vectors["Embeddings"]
History["Chat History"]
Users["User Profiles"]
end
%% External Services
subgraph External["External Services"]
LLM["LLM APIs (OpenAI / Gemini / Groq)"]
OCRTools["Tesseract & Poppler"]
Email["SMTP / Email Service"]
Speech["Speech Services"]
end
%% Flow
User --> UI
UI --> Chat
UI --> Charts
Chat --> API
Charts --> API
API --> Auth
API --> File
File --> OCR
OCR --> Parser
Parser --> LLM
Parser --> Reports
Parser --> Tests
Reports --> Embed
Embed --> Vectors
API --> Agent
Agent --> Vectors
Agent --> History
API --> Users
API --> Email
OCR --> OCRTools
Parser --> LLM
API --> Speech
%% Styling (Black & White)
classDef default fill:#ffffff,stroke:#000000,stroke-width:1px,color:#000000
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | React 18.x, Vite 5.x, Axios | UI, fast bundling, API calls |
| Server | Node.js 18+, Express.js 4.18+ | REST API and routing |
| Authentication | JWT, jsonwebtoken | Secure token-based auth |
| File Handling | Multer, Tesseract.js, pdf-poppler | File upload, OCR, PDF conversion |
| LLM / AI | Google Gemini, Groq, OpenAI | Text parsing and embeddings |
| Embeddings | @xenova/transformers | Local transformer embeddings |
| Database | MySQL 5.7+, mysql2 | Relational storage for reports & data |
| nodemailer | Email notifications | |
| Security | bcryptjs | Password hashing |
| Analytics | Streamlit, pandas, matplotlib | Dashboards and data visualization |
| Dev Tools | nodemon, dotenv | Auto-reload and env management |
POST /api/register — user signupPOST /api/login — user signinPOST /api/send-mail — trigger emailsPOST /api/upload — authenticated file upload (images/PDFs)POST /api/ask — ask the AI assistant (authenticated)GET /api/trends — user-specific trends and analytics (authenticated)pdf-poppler)reportModel to your DB)PORT — server port (default 5000)JWT_SECRET — JWT signing secretMYSQL_HOST — MySQL hostMYSQL_USER — MySQL userMYSQL_PASSWORD — MySQL passwordMYSQL_DATABASE — MySQL database nameGEMINI_API_KEY — Google Gemini key (optional)GROQ_API_KEY — Groq.ai key (optional)OPENAI_API_KEY — OpenAI key (optional)GROQ_API_KEY — Groq API key (used by agentController / tag generation)cd server
npm install
# run the server (or use nodemon)
node server.js
cd client
npm install
npm run dev
cd streamlit
python -m pip install -r requirements.txt
streamlit run app.py
/api/upload with a valid JWT and multipart/form-data containing file.server/models/reportModel.js contains DB access patterns; update connection settings and schema to match your MySQL setup.Please open issues for bugs or feature requests. Pull requests are welcome — keep changes focused and include tests where appropriate.
JavaScript
39.6%
Python
30.5%
CSS
29.4%
Quantera is an AI-powered medical report ingestion and assistant platform. The server ingests PDFs and images, extracts text via OCR, uses an LLM to parse structured medical data, stores embeddings and test values, and provides a conversational AI assistant (RAG) for both general and medical-specific questions.
client/ — React + Vite frontend (dashboard, chat UI, uploads)server/ — Express API, ingestion, agent, controllers, and modelsstreamlit/ — analysis notebooks and dashboards| Field | Value |
|---|---|
| test@gmail.com | |
| Password | test123 |
/api/upload (authenticated)./api/ask endpoint uses embeddings + recent conversation memory to answer user questions — medical questions trigger RAG over saved reports.The application UI follows a simple, user-friendly flow. Below are the typical screens and actions (images are stored in client/public):





CSV/PDF Upload
|
v
Express Backend --------- MySQL Database
| |
├─ Ingest Router ├─ Medical Reports
├─ File Controller ├─ Parsed Test Values
├─ OCR (Tesseract) ├─ Embeddings
├─ LLM Parser ├─ Chat History
├─ Agent Controller ├─ User Profiles
├─ Embeddings Generator └─ Trends Data
├─ Auth Middleware
└─ Notifications
|
v
React + Vite Frontend (Dashboard, Chat, Upload, Trends)
|
├─ Home / Landing Page
├─ Upload UI (Drag & Drop)
├─ Dashboard (Charts, Analytics)
├─ AI Assistant (RAG Chat)
├─ Trends / Reports
└─ User Profile
|
v
Streamlit Analytics (Optional)
|
├─ Data Exploration
├─ Report Summaries
├─ Trend Analysis
└─ User Insights
External Integrations:
|
├─ LLM APIs (Google Gemini, Groq, OpenAI)
├─ Tesseract OCR + Poppler
├─ Email / SMTP (nodemailer)
└─ Speech Services (Azure Cognitive)
flowchart TD
%% User
User["User / Healthcare Provider"]
%% Presentation Layer
subgraph Presentation["Presentation Layer"]
UI["UI Components & Dashboard"]
Chat["AI Chat Interface"]
Charts["Analytics & Trends"]
end
%% Application Layer
subgraph Application["Application Layer (Express Server)"]
API["REST API Endpoints"]
File["File Upload & Processing"]
OCR["OCR Engine (Tesseract / Poppler)"]
Parser["LLM Parser (Text → Structured JSON)"]
Agent["RAG Agent & Intent Detection"]
Embed["Embedding Generator"]
Auth["Authentication Middleware (JWT)"]
end
%% Data Layer
subgraph Data["Data Layer (MySQL Database)"]
Reports["Medical Reports"]
Tests["Extracted Test Values"]
Vectors["Embeddings"]
History["Chat History"]
Users["User Profiles"]
end
%% External Services
subgraph External["External Services"]
LLM["LLM APIs (OpenAI / Gemini / Groq)"]
OCRTools["Tesseract & Poppler"]
Email["SMTP / Email Service"]
Speech["Speech Services"]
end
%% Flow
User --> UI
UI --> Chat
UI --> Charts
Chat --> API
Charts --> API
API --> Auth
API --> File
File --> OCR
OCR --> Parser
Parser --> LLM
Parser --> Reports
Parser --> Tests
Reports --> Embed
Embed --> Vectors
API --> Agent
Agent --> Vectors
Agent --> History
API --> Users
API --> Email
OCR --> OCRTools
Parser --> LLM
API --> Speech
%% Styling (Black & White)
classDef default fill:#ffffff,stroke:#000000,stroke-width:1px,color:#000000
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | React 18.x, Vite 5.x, Axios | UI, fast bundling, API calls |
| Server | Node.js 18+, Express.js 4.18+ | REST API and routing |
| Authentication | JWT, jsonwebtoken | Secure token-based auth |
| File Handling | Multer, Tesseract.js, pdf-poppler | File upload, OCR, PDF conversion |
| LLM / AI | Google Gemini, Groq, OpenAI | Text parsing and embeddings |
| Embeddings | @xenova/transformers | Local transformer embeddings |
| Database | MySQL 5.7+, mysql2 | Relational storage for reports & data |
| nodemailer | Email notifications | |
| Security | bcryptjs | Password hashing |
| Analytics | Streamlit, pandas, matplotlib | Dashboards and data visualization |
| Dev Tools | nodemon, dotenv | Auto-reload and env management |
POST /api/register — user signupPOST /api/login — user signinPOST /api/send-mail — trigger emailsPOST /api/upload — authenticated file upload (images/PDFs)POST /api/ask — ask the AI assistant (authenticated)GET /api/trends — user-specific trends and analytics (authenticated)pdf-poppler)reportModel to your DB)PORT — server port (default 5000)JWT_SECRET — JWT signing secretMYSQL_HOST — MySQL hostMYSQL_USER — MySQL userMYSQL_PASSWORD — MySQL passwordMYSQL_DATABASE — MySQL database nameGEMINI_API_KEY — Google Gemini key (optional)GROQ_API_KEY — Groq.ai key (optional)OPENAI_API_KEY — OpenAI key (optional)GROQ_API_KEY — Groq API key (used by agentController / tag generation)cd server
npm install
# run the server (or use nodemon)
node server.js
cd client
npm install
npm run dev
cd streamlit
python -m pip install -r requirements.txt
streamlit run app.py
/api/upload with a valid JWT and multipart/form-data containing file.server/models/reportModel.js contains DB access patterns; update connection settings and schema to match your MySQL setup.Please open issues for bugs or feature requests. Pull requests are welcome — keep changes focused and include tests where appropriate.
JavaScript
39.6%
Python
30.5%
CSS
29.4%