feat(signup): add Gleam signup service gated by shared invite code

A small Gleam HTTP server in signup/ exposes POST /signup that validates
a shared INVITE_CODE env var, then PUTs a user document to CouchDB's
_users database using the existing admin credentials. The frontend gets
back 201 + the username and is expected to call /_session itself to
obtain the AuthSession cookie (chosen over server-side cookie forwarding
because vaquant.at and couch.apoena.dev are different sites and the
cross-site cookie path is fragile under modern browser privacy modes).

Wired into docker-compose as a second service, reachable on
signup-couch.apoena.dev with its own Traefik labels and the same
hardcoded UUID network attachment as couchdb. Reuses COUCHDB_USER /
COUCHDB_PASSWORD for the admin call. INVITE_CODE must be set in Coolify
env vars.
This commit is contained in:
Julien Calixte
2026-06-01 22:16:29 +02:00
parent 67787bdf31
commit c3c75787f4
6 changed files with 324 additions and 0 deletions

13
signup/gleam.toml Normal file
View File

@@ -0,0 +1,13 @@
name = "coolcouch_signup"
version = "0.1.0"
target = "erlang"
[dependencies]
gleam_stdlib = ">= 0.59.0 and < 2.0.0"
gleam_http = ">= 4.0.0 and < 5.0.0"
gleam_httpc = ">= 4.0.0 and < 5.0.0"
gleam_json = ">= 3.0.0 and < 4.0.0"
gleam_erlang = ">= 1.0.0 and < 2.0.0"
envoy = ">= 1.0.0 and < 2.0.0"
mist = ">= 4.0.0 and < 6.0.0"
wisp = ">= 1.6.0 and < 2.0.0"