The production stage was using an ad-hoc npm install without package.json, which could pull unexpected package versions and lost the lockfile guarantee. Moved all React/build/test/type packages to devDependencies so the production stage can use npm install --omit=dev cleanly, installing only express, cors, and docx — exactly what server.js needs. Regenerated lockfile to match. 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 |