MedAssist-ng Logo

MedAssist-ng

Never run out of your medications again.
A medication tracking and planning app with stock monitoring, intake schedules, and reminder notifications.

React 19 TypeScript Fastify SQLite Docker

Backend Tests 454/454 Frontend Tests 611/611

### 🤖 AI-Generated Code > This app was 100% coded with [Claude Opus 4.6](https://www.anthropic.com/claude) and [GPT-5.3 Codex](https://openai.com/index/gpt-5/). Use at your own risk. ### ⚠️ Disclaimer > **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!** - [Features](#features) - [Screenshots](#screenshots) - [Getting Started](#getting-started) - [Configuration](#configuration) - [Development](#development) # Features

MedAssist-ng Dashboard

Screenshots
Dashboard Overview with stock status, reorder reminders, and upcoming schedules. Dashboard
Medication Detail View medication details, stock information, and intake schedule. Medication Detail Modal
Medications & Edit Form Manage your medications with the edit form and refill feature. Medications Edit Form
Demand Calculator (Planner) Calculate how many pills you need for a specific date range. Planner - Demand Calculator
Shared Schedule Share your medication schedule with others via a public link. Shared Schedule
Mobile Views
Dashboard
Mobile Dashboard
Medications
Mobile Medications
Schedule
Mobile Schedule
### Medication Setup - Optional medication lookup in the editor on desktop and mobile - Supports `RxNorm`, `openFDA`, and `EMA` with source labels - Review-and-apply flow with package-size suggestions when available - Manual entry remains available ### Smart Inventory - 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 correction supports profile-specific stock semantics (sealed units + loose stock for blister, discrete capacity/current stock for bottle, inhaler, and injection, amount-based stock for tube and liquid container) ### Medication Refill - One-click refill with package-aware refill options for discrete containers and amount-based packages - Complete refill history per medication - Automatic stock updates after each refill ### Flexible Schedules - Daily, weekly, or custom intervals per medication - Independent schedules for each medication - Optional timeline filters for dashboard and shared schedule views ### Stock Alerts & Reminders - Notifications before stock runs out - Configurable warning thresholds - Intake reminders via push notifications ### Trip Planner - Calculate medication demand for a trip or date range with package-aware units - Send demand reports via email or push notification ### Reports - Generate medication reports as PDF, Markdown, or plain text - Include intake history, refill history, and prescription details ### Multi-Person Support - Manage medications for multiple people - Share schedules via link. Recipients can mark doses as taken, you see it live - Optionally embed the medication overview directly on shared links via a settings toggle ### Data Export & Import - Export all your data (medications, dose history, settings) as JSON - Import previously exported data with automatic ID remapping - Choose whether to include sensitive data in exports ### Notifications - Email via SMTP - Push notifications via ntfy, Pushover, Gotify, Telegram, Discord & more ([Shoutrrr](https://containrrr.dev/shoutrrr/)) - Supports stock warnings and intake reminders ### Privacy & Security - Fully self-hosted - SSO via OIDC (Authelia, Authentik, Pocket ID, Keycloak) - Non-root containers - Dark mode included 😎 # Getting Started The easiest way to deploy MedAssist-ng is with Docker Compose: ```bash git clone https://github.com/DanielVolz/medassist-ng.git cd medassist-ng cp .env.example .env docker compose -p medassist-ng up -d ``` Open `http://localhost:4174` and start tracking your medications. # Configuration 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. ### Initial Configuration | 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` | Allowed frontend origins | | `TZ` | `Europe/Berlin` | Default timezone for reminders | Optional but commonly needed: | Variable | Default | Description | |----------|---------|-------------| | `PUBLIC_APP_URL` | — | Public base URL for notification action links | Detailed configuration references: - Full configuration reference: [docs/CONFIGURATION.md](docs/CONFIGURATION.md) - Push notifications: [docs/PUSH_NOTIFICATIONS.md](docs/PUSH_NOTIFICATIONS.md) - Default user settings: [docs/DEFAULT_USER_SETTINGS.md](docs/DEFAULT_USER_SETTINGS.md) # Development Development setup and local commands are documented in [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md). For cross-stack maintenance work and pre-PR validation, the repository root now exposes: ```bash npm run check npm run build ``` # Acknowledgements This project was inspired by [MedAssist](https://github.com/njic/medassist) by njic.