# Prayer Journal A minimalist web app for journaling daily prayers, tracking answered prayers, and receiving push reminders. Self-hostable via Docker. **Current version: 0.4.0** ## Features - Daily prayer composition with optional "Pray For" person - Mark prayers as answered with notes - Calendar view of past entries - Reflections list with search and filters - Answered prayers gallery - Push notifications via [ntfy](https://ntfy.sh) (no account required) — daily digest and per-prayer reminders - Export prayer log as PDF or DOCX - PWA installable, dark theme by default ## Stack - **Frontend**: Next.js + React, Tailwind CSS, Firebase (auth + Firestore) - **Backend**: Express server (`server.js`) — local JSON storage, cron-based ntfy notifications, DOCX/PDF export - **Container**: Docker, published to `git.necloud.us` ## Docker (recommended) ```bash docker compose up -d ``` The app listens on port `3050` by default. Adjust environment variables in `docker-compose.yml` as needed. ### Environment variables | Variable | Description | |---|---| | `FIREBASE_PROJECT_ID` | Firebase project ID | | `FIREBASE_CLIENT_EMAIL` | Firebase Admin SDK service account email | | `FIREBASE_PRIVATE_KEY` | Firebase Admin SDK private key | | `NODE_ENV` | Set to `production` for Docker deploys | > Store secrets in a `.env` file and reference them in `docker-compose.yml` — do not hardcode private keys in compose files. ## Push notifications (ntfy) ntfy requires no account. Set your topic in the app's Settings, then notifications arrive via the [ntfy app](https://ntfy.sh) or any ntfy-compatible client. - **Daily digest** — morning summary of unprayed prayers - **Per-prayer reminders** — cron-scheduled nudges for individual prayers - **Test notification** — trigger one from the Settings page to verify ## Development ```bash npm install npm run dev ``` App runs at `http://localhost:3000`. ```bash npm run build # production build npm run lint # lint npm test # run tests ``` ## CI / Deployment Pushes to `master` trigger a Gitea Actions workflow (`.gitea/workflows/docker.yml`) that builds and pushes the Docker image to `git.necloud.us`. Secrets required in Gitea repo settings: | Secret | Value | |---|---| | `REGISTRY_USER` | Gitea username | | `REGISTRY_TOKEN` | Gitea access token with package write scope | ## Versioning Semantic versioning — `npm run version:minor` or `npm run version:major` bumps the version and syncs it across the project.