Mirobody
인간 건강의 표준 레지스트리, 약 2천 개 임상·생활 지표를 하나의 언어로 정리
실험 보고서 사진이나 PDF를 추가하세요
Add a photo or PDF of any lab report. ReportSaathi reads every value, flags what's out of range, explains it in English, Hindi or Marathi, and follows your family's results across labs.
건강Python · TypeScriptGitHub @whatalshifa온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Reads Indian lab report photos and PDFs, tracks each value over time, and explains it in plain English, Hindi or Marathi. Next.js · FastAPI · Postgres · Claude
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Live site: report-saathi-six.vercel.app · open the app straight away at /dashboard, no sign-up needed.
Your family's lab reports, explained. Add a PDF or a phone photo of a lab report from any Indian lab. ReportSaathi reads every value, flags the ones outside the lab's own range, explains them in plain English, Hindi or Marathi, and lines up reports from different labs into one timeline you can take to your doctor. Every value links back to the exact spot on the report it was read from, so you can check the AI instead of trusting it.
Honest note: the live site runs in demo mode. Reading new reports needs an Anthropic API key, and the public deployment has none, so uploads are paused there. Everything else works on Meera, a made-up person with three sample reports from two labs; her explanations and doctor brief were written in advance. Set
ANTHROPIC_API_KEYon the API and uploads switch on. The API also sleeps on Render's free plan when idle: the first visit outside office hours can take about 50 seconds, and the site says so while it waits.
| The app's dashboard | A report, explained |
|---|---|
| One timeline across labs | A one-page doctor brief |
| Explanations in Hindi (and Marathi) | On a phone, in dark mode |
The full feature list, phase by phase, is in docs/FEATURES.md.
| Route | What's there |
|---|---|
/ | The landing page: the product explained with Meera's real sample report, trends and brief |
/dashboard | The app. Signed out, it opens on the sample family at once; the first click into a report starts a private demo account (deleted after 24 hours) |
/reports, /reports/[id] | Every report in the family; one report's summary, all results, the original file and the explanation |
/profiles/[id] | A person's health timeline: every test across labs, with trend charts |
/briefs, /briefs/[id] | Doctor briefs, with print and private share links |
/family, /account | Family members; the account, "download all my data" and delete |
/shared#<token> | What a doctor opens from a share link, without an account |
/accuracy, /privacy | How reading accuracy is measured; what is kept and why |
flowchart LR
subgraph Browser
W[Next.js pages<br/>landing, app shell]
end
subgraph Vercel
N[Next.js server<br/>pages + /api/* forwarder]
end
subgraph Render
A[FastAPI]
J[Background jobs<br/>read, explain, brief]
end
W -- "pages" --> N
W -- "/api/* with the sign-in cookie" --> N
N -- "forwards /api/*" --> A
A -- "encrypted files" --> S[(S3-compatible bucket)]
A -- "reports, values, users" --> D[(Postgres)]
A -. "queue" .-> J
J -- "read the report,<br/>write explanations" --> C[Claude API]
J -- "flags, units, trends:<br/>plain Python" --> D
The browser only ever talks to the website, which forwards /api/* to FastAPI
(frontend/next.config.ts), so the sign-in cookie is first-party and there is no CORS to set up. An
upload is checked by its bytes, encrypted and saved, and the API answers at once; a background job sends
it to Claude, then plain Python flags each value, matches it to the test catalog and converts units. The
page polls until the report is ready. Timelines are computed by code; explanations and briefs are written
by Claude.
The full walkthrough, written for someone new to these tools, is in docs/ARCHITECTURE.md. Why each technology was picked is in docs/DECISIONS.md.
You need Python 3.11+ and Node 22+. An Anthropic API key is optional: without one the app runs in demo mode, exactly like the live site.
Backend (terminal 1):
cd backend
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements-dev.txt
cp .env.example .env # optional: add ANTHROPIC_API_KEY to read real uploads
alembic upgrade head # creates the database tables (SQLite)
uvicorn app.main:app --reload # API on http://localhost:8000, interactive docs at /docs
Frontend (terminal 2):
cd frontend
npm install
cp .env.example .env.local
npm run dev # http://localhost:3000
Open http://localhost:3000 and choose Try the sample family, or create an account and add the sample reports from the dashboard.
In development an encryption key for uploaded files is created in backend/.dev-master-key. Keep it:
without it, saved files can't be opened. In production set RS_MASTER_KEY and RS_ENV=production.
Every setting is listed in backend/.env.example and frontend/.env.example.
Or everything with Docker (also starts Postgres):
cp backend/.env.example backend/.env
docker compose up --build # http://localhost:3000
cd backend && ruff check . && pytest # 336 tests
cd frontend && npm run lint && npm run build
cd frontend && npx playwright test # 46 browser tests, 88 runs on a computer and a phone
GitHub Actions runs all of this on every push and pull request, plus the database migrations against a real Postgres.
docs/DEPLOY.md covers every setting and two routes: Render + Vercel + Neon on free
tiers, or AWS (Amplify, App Runner, RDS, S3, KMS). A scheduled workflow
(.github/workflows/keep-warm.yml) keeps the free API awake on weekdays from 09:30 to 18:30 IST.
backend/
app/
main.py FastAPI app, health check
api/ auth, demo, profiles, reports, shares; deps.py holds the ownership checks
services/ reading (extraction, claude, processing, jobs), flagging, catalog, trends,
writing (explanations, briefs), crypto, storage, sharing, export, names, ...
models.py, schemas.py database tables and the JSON shapes the API returns
alembic/ database migrations
accuracy/ the accuracy test on real reports
tests/ pytest
frontend/
src/app/ routes: the landing page (/), the app (/dashboard and the rest), error,
loading and 404 pages, the share image, icons, manifest, robots and sitemap
src/components/ the app's screens and shared pieces
src/components/shell/ the app frame: sidebar, phone tab bar, the signed-in or sample-family state
src/components/landing/ the landing page's product demos
src/lib/api.ts typed calls to the backend, with retries while a sleeping server wakes
src/proxy.ts sends signed-out visitors to sign in before a private page
e2e/ Playwright tests
docs/ architecture, decisions, deploying, accuracy, features, screenshots
ReportSaathi is a learning project. It can misread a report, and it is not medical advice.