# frontend — conventions (TypeScript)

All conventions in the root `CLAUDE.md` apply here. The naming and structure rules carry over; the
Python-only rules do not. Specifically:

- **No leading `_`** on any name, and **no barrels** (`index.ts` that only re-exports).
- **Single-purpose file naming** — a one-export file is named after its export.
- **Type everything** under strict `tsconfig`; model data with typed interfaces, not untyped
  objects (the TS equivalent of "no bare dicts").
- **Comments are ONE line each, no exceptions** (`//` — never stack into a multi-line block); keep
  only WHY/gotcha, delete restating or dead-code comments. JSDoc blocks are exempt.
- **No gratuitous blank lines** — never stack 2+ blanks; keep imports tight.
- **Does not apply (Python-only):** `@typechecked`, pydantic `BaseModel`, the no-relative-imports
  rule (the frontend uses the `@/` path alias and local relative imports), and `p-private`.

Known gaps to fix over time, not perpetuate: `no-underscore-names` / `p-private` are currently
backend-only, and `eslint.config.mjs` still suggests a `_` prefix to silence unused-variable
warnings — remove the unused binding instead of prefixing it.
