- Backend entrypoint:
cmd/netronome. - Feature packages:
internal/(agent, monitor, speedtest, scheduler, notifications, tailscale, etc.). - Reusable helpers:
pkg/. - Web UI:
web/src(Vite + React), build output inweb/dist. - Tests and harnesses:
test/plusdistrib/docker/docker-compose*.ymlfor e2e stacks. - Long-form docs:
docs/andai_docs/.
make build: installs web deps, builds the UI, embeds assets, compilesbin/netronome.make run: builds and runsserve --config config/config.toml.make dev: starts Vite + Go watcher (air) in tmux.make watch: runs Go watcher only (prompts to installairif missing).make docker-build/make docker-run: build and run a Docker image.pnpm -C web dev|build|lint: frontend dev server, production build, lint.go test ./...: backend unit tests../test/test-local.sh: local dockerized scenario tests.
- Go:
gofmtorgoimports, Go 1.25 target. - TypeScript: 2-space indentation, PascalCase components, camelCase utilities.
- Tailwind tokens should align with
web/tailwind.config.*. - Lint:
pnpm -C web lint(ESLint).
- Go tests live alongside code as
*_test.go. - Prefer table-driven tests for new backend logic.
- Scenario scripts live in
test/; add fixtures undertest/data/. test/also contains docker-compose scenarios, SSL cert scripts, and base-URL test harnesses.- If you skip tests, note why in the PR description.
- Conventional Commits:
feat|fix|refactor|build|ci|chore|docs|style|perf|test. - Keep changes scoped; avoid unrelated refactors and mass formatting.
- PRs must include: summary, test commands run, and screenshots for UI changes.
- For issue-driven fixes, review attached screenshots/log images before coding.
- Use
pnpmonly; do not addpackage-lock.json.
- Keep secrets out of Git; use
.envand redactconfig/config.toml. - Avoid committing real GeoLite databases or generated logs.
- SQLite
.dbfiles are gitignored; do not commit them. - Document any config changes in
docs/when behavior changes.