Point the README's developer setup at the CTXD runbook
The Quick start procedure moves to CTXD (mealquest / RUNBOOKS.MD, "Local development"), corrected there. It had also gone stale: it omitted MEALQUEST_GOOGLE_CLIENT_ID and MEALQUEST_GOOGLE_CLIENT_SECRET_FILE, without which the service refuses to start. Task e81ed994-a510-48e6-9cf6-e76d5d81f56c. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,61 +11,14 @@ single Go service with the React PWA embedded in the binary.
|
|||||||
> `/health`, embedded PWA skeleton, Makefile, Dockerfile, CI). The planned
|
> `/health`, embedded PWA skeleton, Makefile, Dockerfile, CI). The planned
|
||||||
> application is described in [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).
|
> application is described in [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md).
|
||||||
|
|
||||||
## Quick start
|
## Running it locally
|
||||||
|
|
||||||
Requirements: Go 1.25 and Node.js `^22.22.2 || ^24.15.0 || >=26.0.0` — that
|
The developer setup (prerequisites, Authentik and Google clients, the
|
||||||
is, 22.22.2 or later on the 22 line, 24.15.0 or later on the 24 line, or 26.0.0
|
`MEALQUEST_*` environment, `make dev` and the optional SearXNG sidecar) is
|
||||||
or later. Node.js 23, 24.0–24.14 and 25 are not supported: this is the
|
runbook information and lives in CTXD: project `mealquest`, file
|
||||||
`engines` range of jsdom in the committed lockfile, the strictest of all the
|
`RUNBOOKS.MD`, section "Local development". Configuration is read only from
|
||||||
web dependencies.
|
the environment, and the service refuses to start, naming every missing or
|
||||||
|
invalid variable.
|
||||||
```sh
|
|
||||||
(cd web && npm ci)
|
|
||||||
mkdir -p ~/.mealquest-dev # outside the repository: it holds a secret
|
|
||||||
chmod 700 ~/.mealquest-dev
|
|
||||||
head -c 32 /dev/urandom | base64 > ~/.mealquest-dev/secret_key
|
|
||||||
chmod 600 ~/.mealquest-dev/secret_key
|
|
||||||
export MEALQUEST_HTTP_ADDR=:8080
|
|
||||||
export MEALQUEST_PUBLIC_URL=http://localhost:5173
|
|
||||||
export MEALQUEST_DATA_DIR="$HOME/.mealquest-dev"
|
|
||||||
export MEALQUEST_SHUTDOWN_TIMEOUT=10s
|
|
||||||
export MEALQUEST_SECRET_KEY_FILE="$HOME/.mealquest-dev/secret_key"
|
|
||||||
# Authentik OAuth2/OpenID provider for MealQuest (redirect URI:
|
|
||||||
# $MEALQUEST_PUBLIC_URL/auth/callback). Save its client secret to the file.
|
|
||||||
export MEALQUEST_OIDC_ISSUER=https://auth.example.com/application/o/mealquest/
|
|
||||||
export MEALQUEST_OIDC_CLIENT_ID=mealquest
|
|
||||||
export MEALQUEST_OIDC_CLIENT_SECRET_FILE="$HOME/.mealquest-dev/oidc_client_secret"
|
|
||||||
export MEALQUEST_OIDC_ALLOWED_GROUPS=mealquest-admin
|
|
||||||
# Optional: sessions end after MEALQUEST_SESSION_IDLE unused (default 720h)
|
|
||||||
# and always MEALQUEST_SESSION_MAX after sign-in (default 4320h).
|
|
||||||
# export MEALQUEST_SESSION_IDLE=720h
|
|
||||||
# export MEALQUEST_SESSION_MAX=4320h
|
|
||||||
# Optional: comma-separated IPs/CIDRs of reverse proxies whose
|
|
||||||
# X-Forwarded-For/-Proto headers are honoured (production: Traefik). Unset
|
|
||||||
# trusts no peer, which is right for local development.
|
|
||||||
# export MEALQUEST_TRUSTED_PROXY=10.60.1.33
|
|
||||||
# Optional: a SearXNG instance the Settings screen suggests as the recipe
|
|
||||||
# search URL until one is saved.
|
|
||||||
# export MEALQUEST_SEARXNG_URL=http://localhost:8888
|
|
||||||
export MEALQUEST_DEFAULT_TZ=America/New_York
|
|
||||||
make dev
|
|
||||||
```
|
|
||||||
|
|
||||||
`make dev` runs the Go server on `:8080` and the Vite dev server on `:5173`
|
|
||||||
(which proxies `/api`, `/auth` and `/media` to `:8080`). Open
|
|
||||||
http://localhost:5173. Configuration is environment-only and fails fast:
|
|
||||||
every variable above is required except the commented-out session
|
|
||||||
lifetimes (when set they must be positive, with MAX at least IDLE),
|
|
||||||
trusted proxy list (every entry must be an IP or CIDR), the SearXNG URL
|
|
||||||
(an absolute `http://` or `https://` URL without credentials, a query or a
|
|
||||||
fragment) and `MEALQUEST_DEFAULT_TZ`, and
|
|
||||||
secrets are read only from files named by `*_FILE` variables. `MEALQUEST_PUBLIC_URL`, `MEALQUEST_OIDC_ISSUER` and the
|
|
||||||
endpoints the issuer advertises must be `https://`; plain `http://` is
|
|
||||||
accepted only for `localhost`, `127.0.0.1` and `[::1]`.
|
|
||||||
`MEALQUEST_DEFAULT_TZ` is the IANA zone the household settings are created
|
|
||||||
with on first boot: until those settings exist, boot fails unless it is a
|
|
||||||
valid IANA zone. Later boots ignore it, set or not (change the zone in
|
|
||||||
household settings instead).
|
|
||||||
|
|
||||||
## Common commands
|
## Common commands
|
||||||
|
|
||||||
@@ -78,7 +31,8 @@ household settings instead).
|
|||||||
|
|
||||||
## Where to read next
|
## Where to read next
|
||||||
|
|
||||||
- [AGENTS.md](AGENTS.md) — house rules, approved dependencies, conventions.
|
- [AGENTS.md](AGENTS.md) — house rules, approved dependencies, the quality
|
||||||
|
floor every change must pass, repository layout, conventions.
|
||||||
- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) — architecture of record.
|
- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) — architecture of record.
|
||||||
- [design/MealQuest Requirements.md](design/MealQuest%20Requirements.md) — product requirements.
|
- [design/MealQuest Requirements.md](design/MealQuest%20Requirements.md) — product requirements.
|
||||||
- [design/MealQuest UI Designs/design_handoff_mealquest/README.md](design/MealQuest%20UI%20Designs/design_handoff_mealquest/README.md) — UI handoff.
|
- [design/MealQuest UI Designs/design_handoff_mealquest/README.md](design/MealQuest%20UI%20Designs/design_handoff_mealquest/README.md) — UI handoff.
|
||||||
|
|||||||
Reference in New Issue
Block a user