# Repository Guidelines

## Project Structure & Module Organization
- `node-api/`: Node.js Express service (ES modules).
  - `src/app.js`: Express app bootstrap; static files served from `public/`.
  - `src/routes/`: API (`api.js`) and RADIUS hooks (`radius.js`).
  - `src/services/`: DB (`db.js`), RADIUS/CoA (`radius.js`).
  - `src/utils/attrs.js`, `src/sse.js`.
  - `index.js`: entrypoint (schema ensure + server).
- `frontend/`: Vue 3 + Vite SPA.
  - `src/`: `App.vue`, components, `styles.css`.
  - `index.html` and built assets in `dist/` (ignored).
- `postgres/init/`: SQL schema files.
- `freeradius/`: server configuration used by docker.
- `docker-compose.yml`: local stack (node, postgres, freeradius).

## Build, Test, and Development Commands
- `npm run dev`: build frontend, start full stack with Docker.
- `npm run restart`: rebuild + recreate containers.
- `npm run logs`: follow service logs; `npm run down`: stop stack.
- Frontend dev (hot-reload): `npm --prefix frontend run dev` (proxy to `:3000`).
- Manual guest cleanup: `POST /api/guests/disable-yesterday`.

## Coding Style & Naming Conventions
- JavaScript/Node (ESM), Vue SFCs, 2-space indent, semicolons, single quotes.
- Filenames: kebab-case for files, PascalCase for Vue components, camelCase for vars/functions.
- Keep modules small and colocate helpers in `src/utils/` or `src/services/`.
- No formatter configured; match existing style.

## Testing Guidelines
- No test harness checked in. If adding tests:
  - API: Jest + Supertest under `node-api/tests/`.
  - Frontend: Vitest under `frontend/src/__tests__/`.
  - Prefer small, fast unit tests; name with `*.test.js`.

## Commit & Pull Request Guidelines
- Follow Conventional Commits where practical (e.g., `feat:`, `fix:`, `chore:`, `style:`). Examples in history: `chore(git): …`, `style(ui): …`.
- PRs should include:
  - Summary, rationale, and scope.
  - Linked issue (if any) and screenshots/GIFs for UI changes.
  - Notes on migrations (`postgres/init`) or env changes.

## Security & Configuration Tips
- Do not commit secrets; `.env` is ignored. Configure `RADIUS_SECRET`, PG creds, VLAN/bandwidth via env.
- DB schema is auto-ensured at startup; initial SQL runs from `postgres/init/` when the volume is new.
- SSE endpoints stream events at `/api/events`; be mindful of long-lived connections.

