nmemmertandClaude Sonnet 4.6 daa7eb1a0d Fix Docker build: upgrade to node:22-alpine, install only server deps
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>
2026-07-21 09:04:39 -04:00

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

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:

  1. Builds the Docker image (multi-stage: Node 20 → Node 20 slim)
  2. Pushes to GitHub Container Registry (ghcr.io/nmemmert/prayer)
  3. 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
S
Description
No description provided
Readme
1.3 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 73.3%
JavaScript 15.6%
CSS 8%
Dockerfile 1%
HTML 0.7%
Other 1.4%