Rewrite to accurately reflect current stack (Next.js + Express/JSON server), Docker deployment, ntfy push notifications, and Gitea CI setup. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2.4 KiB
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 (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)
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
.envfile and reference them indocker-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 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
npm install
npm run dev
App runs at http://localhost:3000.
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.