Backend (Fastify + TS): FluentForms webhook -> NocoDB row + QR + MailerSend email; PIN auth; scan/lookup/redeem with per-code serialization; reusable QR codes with count-based check-in; admin search. App (Expo, one codebase): Android APK + iPhone PWA. Login, camera scanner (native + web barcode-detector split), green/red overlay with sound + haptics, admin lookup/redeem. Session token persisted per device. Ops: multi-stage Dockerfile serving API + PWA same-origin, compose bound to 127.0.0.1; Forgejo Actions runner + tag-triggered signed APK build for Obtainium. Docs in README.md and INSTALL.md. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
20 lines
744 B
YAML
20 lines
744 B
YAML
services:
|
|
camptickets:
|
|
build: .
|
|
image: camptickets:latest
|
|
container_name: camptickets
|
|
env_file: .env
|
|
environment:
|
|
# Container always listens on 8080 internally; the host mapping below is
|
|
# what nginx proxies to. Keep this fixed regardless of .env PORT.
|
|
PORT: "8080"
|
|
HOST: "0.0.0.0"
|
|
ports:
|
|
# Bind to localhost only — nginx (on the host) terminates TLS for
|
|
# scan.beartariacampgrounds.com and proxies to this port.
|
|
- "127.0.0.1:${HOST_PORT:-8091}:8080"
|
|
# NocoDB runs elsewhere (its own container/host). If it is on THIS host,
|
|
# host.docker.internal resolves to the host gateway.
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
restart: unless-stopped
|