Never run out of your medications again.
A medication tracking and planning app with stock monitoring, intake schedules, and reminder notifications.
This app was 100% coded with Claude Opus 4.6 and GPT-5.3 Codex. Use at your own risk.
Your health is your responsibility. This app may contain bugs. Follow your doctor's instructions closely, keep track of your medication supply, and plan ahead for reordering.
Think of this app as a helpful tool, but make all health decisions independently!
Screenshots
- Optional medication lookup in the editor on desktop and mobile
- Supports
RxNorm,openFDA, andEMAwith source labels - Review-and-apply flow with package-size suggestions when available
- Manual entry remains available
- Track exact stock with package profiles (blister, bottle, tube, liquid container, inhaler, injection)
- Display remaining days of supply
- Automatic calculation based on intake schedule
- Manual stock corrections
- One-click refill
- Complete refill history per medication
- Automatic stock updates after each refill
- Daily, weekly, or custom intervals per medication
- Independent schedules for each medication
- Optional timeline filters for dashboard and shared schedule views
- Notifications before stock runs out
- Configurable warning thresholds
- Intake reminders via push notifications
- Calculate medication demand for a trip or date range with package-aware units
- Send demand reports via email or push notification
- Generate medication reports as PDF, Markdown, or plain text
- Include intake history, refill history, and prescription details
- Manage medications for multiple people
- Share schedules via link. Recipients can mark doses as taken, you see it live
- Optionally allow shared links to view and edit intake journal notes for their visible schedule window
- Optionally embed the medication overview directly on shared links via a settings toggle
- Export all your data (medications, dose history, intake journal notes, settings) as JSON
- Review validated import contents before replacing current data
- Optionally download a fresh backup before confirming import
- Import previously exported data with automatic ID remapping
- Choose whether to include sensitive data in exports
- Email via SMTP
- Push notifications via ntfy, Pushover, Gotify, Telegram, Discord & more (Shoutrrr)
- Supports stock warnings and intake reminders
- Fully self-hosted
- SSO via OIDC (Authelia, Authentik, Pocket ID, Keycloak)
- Non-root containers
- Dark mode included 😎
The easiest way to deploy MedAssist-ng is with Docker Compose:
git clone https://github.com/DanielVolz/medassist-ng.git
cd medassist-ng
cp .env.example .env
docker compose -p medassist-ng up -dBefore running docker compose, choose an authentication mode in .env.
For non-local deployments, enable authentication:
AUTH_ENABLED=true
JWT_SECRET=<output-of-openssl-rand-hex-32>
REFRESH_SECRET=<output-of-openssl-rand-hex-32>
COOKIE_SECRET=<output-of-openssl-rand-hex-32>For a local/private-only trial that is not reachable from other networks, explicitly set:
ALLOW_UNAUTHENTICATED=trueProduction startup refuses AUTH_ENABLED=false unless that local-only override is present.
Open http://localhost:4174 and start tracking your medications.
After the containers start, confirm the stack is actually healthy:
- Run
docker compose psand confirm thebackendservice ishealthyand thefrontendservice is running. - Open
http://localhost:4174/api/healthand confirm the backend responds through the frontend proxy with JSON that includes"status":"ok". - Open
http://localhost:4174and confirm the app loads.
GitHub releases also attach a digest-pinned docker-compose.pinned.yml. The published container images now include OCI SBOM/provenance attestations and must pass container smoke tests before release completion.
If you use MedAssist from another device or domain, set PUBLIC_APP_URL to the address people actually use to open the app.
Public deployments must enable authentication. The default Docker Compose setup exposes only the frontend; keep the backend private and put public installations behind HTTPS.
More deployment and security options are documented in docs/CONFIGURATION.md.
Configure the application with environment variables in .env. Keep the basic container settings in the README and use the dedicated docs for the full reference.
| Variable | Default | Description |
|---|---|---|
PUID |
1000 |
User ID for container file permissions |
PGID |
1000 |
Group ID for container file permissions |
PORT |
3000 |
Backend API port |
CORS_ORIGINS |
http://localhost:4174 in .env.example |
Allowed frontend origins; backend defaults also include http://localhost:5173 for local Vite development |
TZ |
Europe/Berlin |
Default timezone for reminders |
AUTH_ENABLED |
false |
Enable authentication; required for public production deployments |
ALLOW_UNAUTHENTICATED |
false |
Explicit local/private-only override for production no-auth startup |
Optional but commonly needed:
| Variable | Default | Description |
|---|---|---|
PUBLIC_APP_URL |
— | Public base URL for notification action and share links |
Detailed configuration references:
- Full configuration reference: docs/CONFIGURATION.md
- Push notifications: docs/PUSH_NOTIFICATIONS.md
- Default user settings: docs/DEFAULT_USER_SETTINGS.md
Development setup and local commands are documented in docs/DEVELOPMENT.md.
For cross-stack maintenance work and pre-PR validation, the repository root now exposes:
npm run check
npm run buildThis project was inspired by MedAssist by njic.









