smooth-app
전 세계 식품의 성분·영양·정보를 자유롭게 협업하고 공개하는 데이터베이스
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A patient-controlled medical vault that consolidates prescriptions and lab PDFs into an interactive timeline. Features privacy-preserving AI document extraction, verbatim evidence verification, granular time-limited clinician sharing with PIN protection, and an emergency QR card.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗The patient-controlled, privacy-first health record vault.
Turn fragmented prescriptions, lab reports, and clinical documents into a unified, permanent, reviewable timeline that you own and control.
🚀 Live Production App: https://myhealthvault-beryl.vercel.app
Live App • Getting Started • Key Features • Architecture • Testing • Documentation • Contributing
Live Demo Link [https://drive.google.com/drive/folders/1QmHGvWwWQsaxcc7WIwwy6EXzlDG0mFJ-?usp=sharing]
Healthcare records today are deeply fragmented. Every visit to a new clinic, diagnostic laboratory, or specialist forces patients to start their medical story from scratch. Paper prescriptions are stored in folders, lab PDFs are lost in email threads, and critical medical histories are forgotten during emergencies.
MediLink solves this problem by giving patients a single, secure vault where all medical documents are consolidated, digitized, and structured into a continuous chronological history.
[!IMPORTANT] Clinical Safety Boundary: MediLink is strictly an organization and access tool. It does not diagnose conditions, prescribe medications, interpret laboratory values, or provide automated clinical recommendations. Extracted alerts (such as duplicate medications or repeat tests) are rule-based heuristics meant solely for discussion with a licensed healthcare professional.
Unified Medical Timeline & Record Vault
Privacy-Preserving Intake Pipeline
09/10 vs 10/09) are automatically flagged.Human-in-the-Loop Review Gate
[illegible] marks) require an explicit patient confirmation before commit.Zero-Knowledge Clinician Sharing
Emergency Access QR Card
Comprehensive Audit & Access Logging
MediLink is built on a least-privilege, defense-in-depth architecture where security boundaries are enforced at the database and server levels:
flowchart TD
User([Patient / Clinician]) --> Proxy[proxy.ts: Routing & Cookie Refresh]
Proxy --> AuthCheck[lib/auth/session.ts: Session Verification]
subgraph Data Access Layer
AuthCheck --> DAL[lib/data/: PatientRepository]
DAL -->|DEMO_MODE=true| DemoRepo[In-Memory Fictional Data]
DAL -->|DEMO_MODE=false| SupabaseRepo[Supabase PostgreSQL + RLS]
end
subgraph Document Intake Pipeline
Upload[Document Upload: PDF / PNG / JPEG] --> ExtractText[Extract Embedded Text]
ExtractText -->|No text layer| OCR[Vision OCR: Gemini / PaddleOCR]
ExtractText -->|Text present| AI[Structured AI Extraction: Gemini / Groq]
OCR --> AI
AI --> Verify[Verbatim Evidence & Lookalike Check]
Verify --> ReviewGate[Patient Side-by-Side Review]
ReviewGate -->|Atomic confirm_extraction RPC| SupabaseRepo
end
subgraph Secure Sharing Engine
DoctorLink[Public Link + 6-digit PIN] --> TokenHash[SHA-256 Token Lookup]
TokenHash --> PinLockout[Atomic Brute-Force Rate Limiter]
PinLockout --> BcryptCheck[Bcrypt PIN Verification]
BcryptCheck --> ScopedData[Category-Scoped DTOs Only]
end
| Layer | Technology | Details |
|---|---|---|
| Framework | Next.js 16.4 | App Router, Server Actions, Partial Prerendering, proxy.ts routing |
| Frontend | React 19.3 + TypeScript 5 | Modern React compiler conventions, strict types |
| Styling | Tailwind CSS v4 | Custom design tokens, glassmorphism, fluid responsive layouts |
| Components | @base-ui/react + Lucide Icons | Unstyled, accessible UI primitives |
| Database & Auth | Supabase | PostgreSQL, Row Level Security (RLS), GoTrue Auth, Private Storage |
| AI Extraction | Google Gemini 2.5 Flash / Groq | Multimodal vision, structured JSON extraction schema, Groq emergency backup |
| OCR | Gemini Vision / PaddleOCR | Server-side text detection and OCR FastAPI microservice in services/ocr |
| Testing | Vitest + @electric-sql/pglite | 380+ tests; real migrations tested locally against PGlite |
[!TIP] Try the Live App First: Want to explore MediLink without setting up a local environment? Access the hosted production deployment at myhealthvault-beryl.vercel.app.
v22.0.0 or higher (Node 24 recommended)v10.0.0 or highergit clone https://github.com/venuvivek-byte/MediLink.git
cd MediLink
npm install
Copy the example configuration file:
cp .env.example .env.local
Configuration is strictly validated on application startup via Zod in lib/config/schema.ts. Missing or misconfigured variables will halt startup with an informative message.
Leave default settings in .env.local:
DEMO_MODE=true
NEXT_PUBLIC_APP_URL=http://localhost:3000
No Supabase or AI credentials are required.
Set DEMO_MODE=false, supply your Supabase credentials, and generate a 32+ character SESSION_SECRET:
# Generate a cryptographically secure session secret
node -e "console.log(require('crypto').randomBytes(32).toString('base64url'))"
Update your .env.local:
DEMO_MODE=false
NEXT_PUBLIC_APP_URL=http://localhost:3000
SESSION_SECRET=<generated_secret>
NEXT_PUBLIC_SUPABASE_URL=https://<your-project>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=<your-anon-key>
SUPABASE_SERVICE_ROLE_KEY=<your-service-role-key>
AI_PROVIDER=gemini
GEMINI_API_KEY=<your-gemini-key>
GEMINI_MODEL=gemini-2.5-flash
MediLink includes the Supabase CLI as a project dependency:
# Link to your Supabase project
npm run supabase -- link --project-ref <your-project-ref>
# Apply database migrations (001 through 008)
npm run db:push
# Generate TypeScript database types
npm run db:gen-types:linked
# Start local Supabase containers
npm run supabase -- start
# Apply migrations and seed data
npm run db:reset
# Generate TypeScript types from local instance
npm run db:gen-types
npm run dev
Visit http://localhost:3000 in your browser.
http://localhost:3000/share/demo-clinician-share-token (PIN: 482910).http://localhost:3000/emergency/demo-emergency-token.MediLink maintains rigorous test coverage spanning unit tests, API route tests, cryptographic token validations, and database Row Level Security tests run against local PGlite.
Run the test suite:
npm test
Run all validation checks (typecheck, lint, test, build):
npm run check
| Script | Purpose |
|---|---|
npm run dev | Starts the Next.js local development server |
npm run build | Compiles production Next.js application bundle |
npm run start | Starts production server |
npm run typecheck | Validates TypeScript types across the entire codebase (tsc --noEmit) |
npm run lint | Runs ESLint analysis |
npm test | Runs the Vitest test suite |
npm run test:watch | Runs Vitest in interactive watch mode |
npm run check | Executes all quality gates in order (typecheck → lint → test → build) |
npm run db:push | Pushes pending SQL migrations to the linked Supabase database |
npm run db:reset | Resets local database and applies all migrations from scratch |
Additional guides and architecture references are available in the repository:
MediLink is actively maintained by:
This project is licensed under the terms of the MIT License.
Dual-Mode Operation