Express 5 + TS backend service template
Find a file Use this template
Noah Holt 2828a630a6
Some checks failed
/ checks (push) Successful in 35s
/ deploy (push) Failing after 2s
feat: initial backend service template
2026-11-05 01:43:18 -06:00
.forgejo feat: initial backend service template 2026-11-05 01:43:18 -06:00
migrations feat: initial backend service template 2026-11-05 01:43:18 -06:00
src feat: initial backend service template 2026-11-05 01:43:18 -06:00
.dockerignore feat: initial backend service template 2026-11-05 01:43:18 -06:00
.env.example feat: initial backend service template 2026-11-05 01:43:18 -06:00
.gitignore feat: initial backend service template 2026-11-05 01:43:18 -06:00
.nvmrc feat: initial backend service template 2026-11-05 01:43:18 -06:00
.prettierignore feat: initial backend service template 2026-11-05 01:43:18 -06:00
.prettierrc.json feat: initial backend service template 2026-11-05 01:43:18 -06:00
CLAUDE.md feat: initial backend service template 2026-11-05 01:43:18 -06:00
commitlint.config.js feat: initial backend service template 2026-11-05 01:43:18 -06:00
Dockerfile feat: initial backend service template 2026-11-05 01:43:18 -06:00
eslint.config.js feat: initial backend service template 2026-11-05 01:43:18 -06:00
package-lock.json feat: initial backend service template 2026-11-05 01:43:18 -06:00
package.json feat: initial backend service template 2026-11-05 01:43:18 -06:00
README.md feat: initial backend service template 2026-11-05 01:43:18 -06:00
tsconfig.json feat: initial backend service template 2026-11-05 01:43:18 -06:00
vitest.config.ts feat: initial backend service template 2026-11-05 01:43:18 -06:00

${REPO_NAME}

Express 5 + TypeScript backend generated from nholtware/service-template-express.

Endpoints

  • GET /healthz liveness, always 200 once listening
  • GET /readyz readiness: Postgres SELECT 1 and Redis PING for whichever of DATABASE_URL / REDIS_URL are set; 503 + JSON reason otherwise
  • GET / service name, version (git sha), pod, a service_info row, Redis hit counter

Local dev

cp .env.example .env   # then export the vars, or use your shell's env loader
npm ci && npm run dev
npm run lint && npm test

Env is validated at boot (src/lib/config.ts): PORT, SERVICE_NAME (required), LOG_LEVEL, DATABASE_URL?, REDIS_URL?. Migrations: SQL files in migrations/, applied with npm run migrate. Logs: one JSON object per line on stdout (level,time,msg,service,version, plus req.*/res.statusCode/responseTime per request).

Using this template

  1. Generate a repo from this template in Forgejo (public). ${REPO_NAME} is substituted into package.json, this README, .env.example, the CI workflow, and the first migration.
  2. Set 3 Actions secrets on the new repo: REGISTRY_USER (nholtware), REGISTRY_TOKEN (registry push token), GITOPS_TOKEN (ci-bot gitops token).
  3. Add gitops entries: render templates/backend/ (see its README) into manifests/<app>/ and add apps/<app>.yaml in nholtware/gitops.
  4. Push to main. Generating a repo emits no push event, so CI only starts on your first push.