MedicalVault
A private, self-hosted family medical record server with AI-powered document summaries.
MedicalVault is a secure web application where families or small medical practices can create patient profiles, upload medical records, and keep labs, medications, allergies, and documents organized per patient. Scanned documents are processed by a background worker that performs OCR, then uses the OpenAI API to summarize the document and extract medical facts into a human-reviewed queue.
It ships as a ready-to-run Docker image with Compose deployment files, so everything runs on your own infrastructure — a database (SQL Server or MySQL) and local file storage you control. The product covers authentication with roles, an admin dashboard, patient access permissions, a patient timeline, audit logs, and doctor visit packet export. MedicalVault is explicitly not a diagnostic tool — AI output is educational information only and should be reviewed by a patient, caregiver, or licensed medical professional.
Key Features
- Authentication and roles – login with role-based access plus per-patient access permissions for family members or staff.
- Patient profiles – family member/patient records with labs, medications, allergies, documents, and a unified patient timeline.
- Document upload – upload scanned or digital records; files are stored locally in the vault's document storage that you back up and control.
- OCR pipeline – a background worker extracts text from uploaded scans and stores it alongside the document.
- AI summaries and extraction – OpenAI-powered document summaries and medical-fact extraction, flowing into a review queue so humans approve what gets recorded.
- Audit logs – activity tracking across the vault.
- Doctor visit packet export – compile a patient's relevant history into a downloadable packet to bring to appointments.
- Choice of database – run against SQL Server 2022 or MySQL 8.4, selected through configuration; separate persistent volumes per provider.
System Requirements
| Requirement | Details |
|---|---|
| Docker Engine with Compose v2 | Required on the host machine (docker compose commands must work); use Docker Desktop on Windows or macOS |
| Database container | SQL Server 2022 or MySQL 8.4 image, started automatically by Compose according to your provider selection |
| OpenAI API key (optional) | Needed for AI summaries and fact extraction; can also be entered later through the application's setup UI |
| Web browser | Any current desktop browser to reach the web interface at port 5266 |
| Persistent storage | Docker volumes for uploaded documents, setup settings, data-protection keys, and the database |
Installation
MedicalVault is distributed as a prebuilt container image (stoxellosupport/medicalvault:latest). Your Stoxello distribution provides the Compose deployment file and an environment template (.env.example) — no build step is needed. An OpenAI API key is optional at startup: it can be configured later through the application's first-run setup UI.
- Create a folder for MedicalVault and copy the Compose file and
.env.examplefrom your Stoxello distribution into it. - Rename
.env.exampleto.env. - In
.env, setDATABASE_PROVIDERtosqlserverormysql, and choose strong values forMSSQL_SA_PASSWORD(SQL Server) orMYSQL_PASSWORD/MYSQL_ROOT_PASSWORD(MySQL). Optionally setOPENAI_API_KEYandOPENAI_MODELto activate AI features immediately. - Start the stack with
docker compose up -d. Compose starts only the selected database alongside the web app. - Browse to http://localhost:5266 and complete first-run setup.
- To stop while keeping all data:
docker compose down. To remove containers and persisted volumes:docker compose down --volumes.
# Prepare configuration
Copy-Item .env.example .env
# edit .env -> DATABASE_PROVIDER=sqlserver (or mysql),
# set strong passwords, optionally OPENAI_API_KEY
# Start MedicalVault and its database
docker compose up -d
# open http://localhost:5266
# Stop (keeps data) / stop and delete persisted volumes
docker compose down
docker compose down --volumes
Usage
Sign in and use the admin dashboard to manage users and roles, then create patient/family profiles and grant per-patient access permissions. Upload medical records from the patient's Documents area; the background worker picks them up for OCR and AI processing, and extracted facts land in the review queue for approval before becoming part of the record. Track labs, medications, and allergies in their dedicated tables, review events chronologically on the patient timeline, and consult the audit log for activity history. When it is time for an appointment, generate a doctor visit packet export containing the relevant history. Remember that AI-generated output is educational only and must not be treated as a diagnosis.
Configuration
Configuration is environment-only via the .env file consumed by Docker Compose; it is deliberately not editable from the application's Setup or Settings pages. DATABASE_PROVIDER selects sqlserver or mysql and also drives the Compose profile so only the chosen database starts. Provide MSSQL_SA_PASSWORD when using SQL Server, or MYSQL_PASSWORD and MYSQL_ROOT_PASSWORD when using MySQL. OPENAI_API_KEY enables AI features and may be left blank to be entered through the setup UI instead; OPENAI_MODEL chooses the model used for summaries and extraction (default gpt-4.1-mini). These map to the application-side settings Database__Provider, ConnectionStrings__SqlServer/ConnectionStrings__MySql, and MedicalVault__DocumentStorageRoot (document storage inside the container, /app/App_Data/MedicalVault/Documents).
Persistent Docker volumes (medicalvault-app-data, medicalvault-sql-data, medicalvault-mysql-data) hold uploaded files, setup settings, data-protection keys, and the database. Switching providers does not migrate existing records between databases. Keep .env private — it contains credentials and API keys.