Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

💊 Sig — Multi-User Medication Reminder

GitHub stars License MIT PRs Welcome 4 languages

Sig is a simple, caring medication reminder that lives on your phone. Set up your meds in seconds, get gentle nudges when it's time, and share it with family — each person's data stays private. No complex setup required. Just you, your health, and a little digital nudge.

Live demo: is81.net/sig

📖 Dev Story: 中文 · English

📱 iPhone users: After opening in Safari, tap Share → Add to Home Screen to enable push notifications even when the browser is closed.

Features

  • 👥 Multi-user — Register / login with JWT authentication
  • 💊 Medication CRUD — Add drug name, dosage, time slots, notes
  • 🔔 Web Push — Receive system notifications even when the browser is closed (iOS PWA supported)
  • 🌐 i18n — 中文 / English / 日本語 / Español
  • 📱 PWA — Add to home screen for native app experience
  • 🗄️ SQLite — Zero-config database via sql.js (WebAssembly)
  • 🌙 Dark mode — Auto-detected via prefers-color-scheme
  • Daily auto-resettaken status resets at midnight
  • 🛡️ Rate limiting & security headers — Built-in protection for auth endpoints

Tech Stack

Layer Technology
Frontend Vanilla HTML/CSS/JS (SPA, no framework)
Backend Node.js + Express (ESM)
Database SQLite via sql.js (WebAssembly, no native deps)
Auth bcryptjs + jsonwebtoken (JWT)
Push Web Push API + Service Worker + web-push (VAPID)
Scheduling node-cron
Process pm2

Project Structure

sig/
├── index.html              # SPA frontend
├── sw.js                   # Service Worker (push receiver)
├── manifest.json           # PWA manifest
├── locales/
│   ├── zh-CN.json / en.json / ja.json / es.json
│   └── i18n.js             # i18n module
├── docs/                   # Dev story & screenshots
└── server/
    ├── server.js           # Express entry (port 3001)
    ├── db.js               # SQLite init & queries
    ├── .env.example        # Config template
    ├── middleware/auth.js   # JWT middleware
    ├── routes/
    │   ├── auth.js         # Register / login
    │   ├── reminders.js    # CRUD + toggle
    │   ├── push.js         # Push subscription & test
    │   └── stats.js        # Public stats
    ├── services/
    │   ├── scheduler.js    # node-cron: 30s check + daily reset
    │   └── push.js         # web-push sender
    └── utils/validate.js   # Input validation

Quick Start

cd sig/server
cp .env.example .env        # Edit .env with your config
npm install
npm start                   # http://localhost:3001

Generate VAPID keys for Web Push:

npx web-push generate-vapid-keys
# Copy the output to VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY in .env
# Also update the public key in index.html (search for applicationServerKey)

Deployment

See CLAUDE.md in the repo root for full IIS + pm2 deployment guide.

Privacy

Your data stays on your server. All medication records, user accounts, and push subscription tokens are stored in your own SQLite database. No data is shared with the developer or any third party. If you use the hosted demo at is81.net/sig, data resides on that server only.

  • 🔒 All user passwords are hashed with bcrypt, JWT tokens expire after 7 days
  • 🔐 HTTPS is required in production — Web Push and secure authentication depend on it
  • 🗄️ All data stored locally in SQLite — no cloud, no analytics, no tracking
  • 🔔 Push notifications are sent via standard Web Push protocol (your browser vendor may route them through their servers)
  • 📍 The live demo at is81.net/sig is a personal instance — data is not shared or sold

License

MIT

About

Sig is a simple, caring medication reminder that lives on your phone. Set up your meds in seconds, get gentle nudges when it's time, and share it with family — each person's data stays private. No complex setup required. Just you, your health, and a little digital nudge.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages