Local multi-application development server.
source/ Elixir application (code, tests, config)
specs/ Domain specs (what the system is and why)
workflow/ Proposals, plans, and blueprints (CDD pipeline)
playbook/ Coding conventions and code review checklist
research/ Distilled external knowledge
transcripts/ Cleaned call transcripts and meeting notes
experiments/ Prototypes and POCs
docs/ External-facing content
brew install caddyCreate a resolver file so .test domains resolve to localhost:
sudo bash -c 'echo "nameserver 127.0.0.1" > /etc/resolver/test'Caddy automatically generates SSL certificates for local domains. Trust its root CA so browsers accept the certificates:
caddy trustBates ships two binaries: batesd (the server, a Mix release) and
bates (a thin escript client for control commands). From source/:
mix deps.get
mix escript.build # produces source/bates (the CLI)
MIX_ENV=prod mix release batesd # produces source/_build/prod/rel/batesd/Run the daemon in the foreground:
_build/prod/rel/batesd/bin/batesdPass --config <path> to override the default config location
(~/.config/bates/config.toml). Ctrl-C shuts the daemon down.
The bates escript talks to the running daemon via the JSON API.
With bates and batesd both on $PATH:
bates status
bates env myappThe configuration file is defined in TOML format.
[test_server]
environment = { SECRET = "Shh…" }
root = "/apps/test_server"
command = "bundle exec rackup -p $PORT"This repo follows Context-Driven Development. Every decision, conversation, and research finding is written down in the repo. Agents and humans navigate the same context.