Skip to main content

First developer setup

Run setup from the motherrepo root, where 0daysetup.sh and compose.yaml reside. Programs run in Docker containers. Tmux displays container terminals rather than starting separate Node or .NET applications.

If Git, Docker, or the repository is missing, follow first installation. For an existing healthy machine, use daily commands. Plain restart does not rebuild production artifacts or run schema initialization. Use the explicit production publication procedure for compiled code changes.

Read documentation before setup​

bash docsStarter.sh

This requires Docker but no .env. Open the printed localhost URL. Ctrl+C removes only this disposable documentation container. An independent Architecture checkout supports the same command.

Prepare configuration and access​

  1. Obtain access to the private motherrepo and required submodule repositories. Each submodule has separate permissions.
  2. Restore a checked configuration archive through secrets management. Restore fills missing files and preserves existing files.
  3. For a new empty installation, copy .env.example to .env and complete required values. Never copy the template over an existing configuration.
  4. Keep a unique ECS_INSTANCE_ID for a new instance. Preserve the old identity and encryption keys for retained data.
  5. Complete Cloudflare ingress and ownership prerequisites. Prepare account login and Microsoft Graph or Google Cloud access.

The root .env is a hidden text file. Do not give it a .txt suffix or execute it with source .env. The runtime passes selected settings to each consumer. Do not edit generated ECS_EFFECTIVE_* values.

Choose an explicit memory budget before setup. The standard full selection uses ECS_MEMORY_GIB=40. The full Microsoft, Google, and FormGen selection uses 44 GiB. Host and build reserves are additional. Read capacity prerequisites.

Choose infrastructure placement​

ConfigurationResult
ECS_DEPLOYMENT_MODE=fulllocal, ECS_REMOTE_SIMULATION=falseSelected infrastructure runs locally. Missing selectors preserve this default.
ECS_DEPLOYMENT_MODE=partialRemote, ECS_REMOTE_SIMULATION=trueThe remote configuration path uses genuine local services and values.
ECS_DEPLOYMENT_MODE=partialRemote, ECS_REMOTE_SIMULATION=falseOnly Kafka, ClamAV, Collabora, Tika, and Qdrant use remote services.

fulllocal with simulation true is invalid. Simulation does not reduce the local resource requirement.

Real remote mode needs three reachable Kafka advertised endpoints, cluster identity, app/admin credentials, and prepared service endpoints. It also needs authenticated scanner/extractor transport and a restricted Office callback. The laptop setup does not provision Coolify services or copy Kafka/Qdrant data. Complete remote preparation first.

Check capacity and run setup​

Before a cold start, inspect existing load:

uptime
docker ps
tmux list-sessions
bash memmonitor.sh

On Linux/WSL, also inspect free -h. On macOS, inspect Docker Desktop resources and Activity Monitor. No tmux session is not an application error. Exit the monitor with Ctrl+C.

Choose which single complete MailGen stack can remain active before cold bootstrap. Preserve unrelated services. Setup refuses another running MailGen instance instead of stopping it for you.

With the completed root configuration:

bash 0daysetup.sh
bash devstack.sh status

Setup prepares host tools and selected submodules. The recGen submodule (VoiceNextWeb) is part of the submodule set: clone-submodules.sh initializes it on its saved or default main branch and pulls it like the other repositories, 0daysetup.sh clones it when missing, and pusher.sh includes it. Its recGen/.env is part of the envzipper.sh archive. docker/runtime/setup.py preserves existing credentials, adds calculated URLs and missing generated secrets, checks ownership and memory, and prepares proxy/client routing.

It then builds and starts production execution, including FormGen and docs-mcp profiles. Provider flags select additional services. Placement comes from the two environment selectors.

This is not a reset. If setup stops, correct the reported prerequisite and rerun. Setup complete and Stack ready are startup checkpoints. Also open the printed Account and BFF URLs and check first login. A running container does not prove mailbox sync.

Host certificate setup applies to the machine that runs setup. WSL trust does not automatically configure Windows or another browser host. No separate host pnpm dev, manual backend tmux process, or mandatory manual certgen.sh step is needed for this route.

The legacy --profiles-only helper does not prepare Docker. Do not use obsolete --chbranch or --pinned options.

Continue development​

The successful setup retains production execution. A normal restart resumes saved modes. To choose a fresh development start, use bash startDevServers.sh without --prod. Review execution modes before changing a working installation.

If ECS_APPLICATION_SOURCE_ROOT selects a reviewed snapshot, the runtime uses that source. Editing the working checkout will not necessarily change the application. Keep a production source pin until an agreed release replaces it.

Use daily commands for scoped recovery, logs, and unchanged-container resume. An environment archive does not replace database, object-store, or key backups. Remote mode rejects reset even in simulation. Never switch placement to bypass that protection.