Files

162 lines
5.2 KiB
Markdown
Raw Permalink Normal View History

# Recurring Checklist — Self-hosted Web Version
A small Node.js web app that anyone on your network can hit from a browser.
Designed to run on a **Synology NAS** via Docker (Container Manager). Every
Sunday at 3:00 PM it emails you a digest of who checked off what — and what
got missed — then resets the lists for the next week.
```
Users → http://nas-ip:3000 → tick boxes → server stores state
↓
Sun 3:00 PM cron
↓
Gmail SMTP → digest email → you
```
---
## What's where
| File | Purpose |
| --- | --- |
| `server.js` | Express server, REST API, scheduler, email |
| `public/` | Static frontend (HTML/CSS/JS) served by Express |
| `data/` | Persisted state (`checklists.json`) — **must be a volume mount** |
| `.env.example` | Copy to `.env` and fill in |
| `Dockerfile` | Builds the container image |
| `docker-compose.yml` | One-command deploy |
---
## 1. Set up a Gmail App Password (for the digest email)
1. Sign in to the Google account you want to send from (your own, or a
dedicated one — both work).
2. Turn on 2-Step Verification at <https://myaccount.google.com/security>.
3. Once 2-Step is on, go to <https://myaccount.google.com/apppasswords>.
4. Create an app password called "Recurring Checklist". Google gives you a
16-character string like `abcd efgh ijkl mnop`. Save it.
5. You'll paste that into `SMTP_PASS` in `.env` (with or without spaces, both work).
> Don't want to use Gmail? Any SMTP works. Office 365, Fastmail, your own
> Postfix on the Synology — just swap the `SMTP_*` vars in `.env`.
---
## 2. Deploy on Synology with Container Manager
These steps assume **DSM 7.2+** with Container Manager installed.
### A. Copy the `server/` folder to the NAS
Drop this whole folder into something like
`/volume1/docker/recurring-checklist/` using File Station, SMB, rsync —
whatever's easiest. The folder must end up with `Dockerfile`,
`docker-compose.yml`, `server.js`, `public/`, etc.
### B. Create the `.env` file on the NAS
In that folder, copy `.env.example` to `.env` and edit it:
```bash
cp .env.example .env
nano .env
```
Fill in:
- `ADMIN_PASSWORD` — a password you'll use to manage lists in the browser.
- `REPORT_EMAIL` — your inbox.
- `SMTP_USER` — the Gmail address you set up in step 1.
- `SMTP_PASS` — the 16-character app password.
- `SMTP_FROM` — `Recurring Checklist <yourgmail@gmail.com>` is fine.
- `REPORT_TZ` — your local timezone (default `America/New_York`).
- `REPORT_CRON` — `0 15 * * 0` = Sunday at 3:00 PM. Leave alone unless you
want to change the time.
### C. Open Container Manager → Project → Create
1. **Project name:** `recurring-checklist`
2. **Path:** browse to `/volume1/docker/recurring-checklist/`
3. **Source:** "Use existing docker-compose.yml"
4. Click **Next** through the rest and **Done**. Container Manager will
build the image (takes 30–90 seconds the first time) and start it.
### D. Open it in a browser
From any device on your network:
```
http://<your-nas-ip>:3000
```
You'll be asked for a name (your name shows up in the weekly email).
That's it — start checking things off.
### E. Log in as admin to create lists
- Top-right of the page → **🔒 Admin** → enter the `ADMIN_PASSWORD` from `.env`.
- A new bar appears under the list tabs. Pull it down (click or swipe) to
reveal **+ Add List**, **Rename**, **Delete**, **Export/Import JSON**,
and **Send Digest Now** (use this to test email).
- In **Add Task**, build out your Startup and Shutdown lists.
- Click 🔓 Admin again to leave admin mode so the controls hide again.
---
## 3. Test the email before Sunday
While logged in as admin, hit **Send Digest Now** in the menu drawer.
You should get an email within a few seconds. If not, check the container
logs in Container Manager (it'll print the SMTP error).
---
## 4. Optional: HTTPS via Synology reverse proxy
In **Control Panel → Login Portal → Advanced → Reverse Proxy**:
| Source | Destination |
| --- | --- |
| `https://checklist.your-domain.com` (443) | `http://localhost:3000` |
Synology handles the Let's Encrypt cert. The app itself only listens on
plain HTTP inside the container — TLS terminates at DSM.
---
## 5. Running outside Docker (e.g. for local development)
```bash
cd server
npm install
cp .env.example .env # then edit
npm start
```
Open <http://localhost:3000>.
---
## Backups
Everything that matters lives in `data/checklists.json`. Add that path
(`/volume1/docker/recurring-checklist/data`) to your Hyper Backup task
and you're set.
---
## Troubleshooting
- **Email never arrives.** Inside Container Manager, click the container →
Log. Look for `[digest] Failed: ...`. Common causes:
- Wrong Gmail app password.
- 2-Step Verification not enabled on the Gmail account.
- Synology firewall blocking outbound port 587.
- **"Wrong password" when trying admin login.** Check `ADMIN_PASSWORD` in
`.env` and that you restarted the container after editing.
- **Port 3000 is taken.** Edit `docker-compose.yml` and change the left
side of the port mapping (e.g. `"8088:3000"`), then redeploy.
- **State got messed up.** Stop the container, edit
`data/checklists.json` directly, restart.