The production stage was running npm ci --omit=dev against a macOS- generated lockfile on linux/alpine, which caused exit code 1. Switch to installing only the three packages the server actually needs (express, cors, docx) so the lockfile is irrelevant in that stage. Also upgrades to node:22-alpine (current LTS) to clear the Node 20 deprecation warning on GitHub Actions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Prayer Journal
A todo-list style prayer app. Add prayer requests, record how God answered them, filter between active and answered, and tag entries for organization. Data persists to a mounted Docker volume.
Running with Docker
Pull the pre-built image (recommended)
docker compose up -d
The docker-compose.yml pulls ghcr.io/nmemmert/prayer:latest automatically. Open http://localhost:3000.
Build locally
docker compose up --build -d
Data persistence
Prayer data is stored in /data/prayers.json inside the container, mounted as the named Docker volume prayer-data. Data survives container restarts and image updates.
To inspect or back up your data:
# Print current prayers
docker compose exec prayer cat /data/prayers.json
# Copy to host
docker cp $(docker compose ps -q prayer):/data/prayers.json ./prayers-backup.json
To wipe all data:
docker compose down -v
Using a host-bind mount instead of a named volume
Replace the volumes block in docker-compose.yml:
volumes:
- ./prayer-data:/data
CI / CD
Pushes to main trigger a GitHub Actions workflow (.github/workflows/docker.yml) that:
- Builds the Docker image (multi-stage: Node 20 → Node 20 slim)
- Pushes to GitHub Container Registry (
ghcr.io/nmemmert/prayer) - Tags the image as
latest, the branch name, and the short commit SHA
Pull requests run the build step only (no push).
The GITHUB_TOKEN secret is used automatically — no additional secrets are required.
Development
npm install
npm start # React dev server on :3000 (uses localStorage, no backend)
node server.js # API server on :4000 (reads/writes data/prayers.json)
For full local dev with the backend:
node server.js &
REACT_APP_API_BASE=http://localhost:4000 npm start
Stack
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript |
| Backend | Node.js, Express |
| Data | JSON file on a Docker volume |
| Images | GitHub Container Registry (ghcr) |
| CI/CD | GitHub Actions |