Coffee brew logging application built on ATProto
Development is on Tangled, and is mirrored to GitHub:
# Using Nix
nix run
# Or with Go
templ generate
go run ./cmd/arabicaAccess at http://127.0.0.1:18910 (arabica) or http://127.0.0.1:18920 (oolong)
--known-dids <file>- Path to file with DIDs to backfill on startup (one per line)
PORT- Server port (default: 18910)SERVER_PUBLIC_URL- Public URL for reverse proxy deployments (e.g., https://arabica.example.com)ARABICA_DB_PATH- OAuth session database path. Defaults to <XDG_DATA_HOME or ~/.local/share>/arabica/arabica.db. Only needed to override the default location.ARABICA_PROFILE_CACHE_TTL- Profile cache duration (default: 1h)OAUTH_CLIENT_ID- OAuth client ID (optional, uses loopback mode if not set)OAUTH_REDIRECT_URI- OAuth redirect URI (optional)SECURE_COOKIES- Set to true for HTTPS (default: false)LOG_LEVEL- Logging level: debug, info, warn, error (default: info)LOG_FORMAT- Log format: console, json (default: console)
- Go 1.26+
- Templ:
go install github.com/a-h/templ/cmd/templ@latest - just (optional but recommended); run helpers
in
justfile
- Create
roles.jsonwith moderator roles. Env var:ARABICA_MODERATORS_CONFIG=roles.json - (Optional) Create
known-dids.txtwith one DID per line. Flag:-known-dids known-dids.txt
With Nix:
nix develop
templ generate
go run ./cmd/arabicaWithout Nix, there are run helpers in justfile:
just run # dev server: debug logging, hot reload, moderator config
just test # run tests (regenerates templ first)
just templ-watch # run with live template regenerationCSS and JS are bundled in-process at server startup — no external build step
needed. For development set ARABICA_DEV=1 to enable CSS+JS hot reload and
unlock dev-only signup providers (e.g. pds.rip on /join/create).
When deploying behind a reverse proxy (nginx, Caddy, Cloudflare Tunnel, etc.),
set the SERVER_PUBLIC_URL environment variable to your public-facing URL:
# Example with nginx reverse proxy
SERVER_PUBLIC_URL=https://arabica.example.com
SECURE_COOKIES=true
PORT=18910
# The server listens on 127.0.0.1:18910
# But OAuth callbacks use https://arabica.example.com/oauth/callbackThe SERVER_PUBLIC_URL is used for OAuth client metadata and callback URLs,
ensuring the AT Protocol OAuth flow works correctly when the server is accessed
via a different URL than it's running on.
MIT