Coding conventions
Commits
The repo follows Conventional Commits. The type and scope drive the automated changelog and version bump (see Releases).
type(scope): short description
- detail
- detail| Type | When |
|---|---|
feat | New feature (bumps minor) |
fix | Bug fix (bumps patch) |
docs | Documentation only |
test | Tests |
refactor | No behavior change |
chore | Tooling, deps |
ci | CI/CD |
Branching
Trunk-based: everything is a short-lived branch off main, opened as a PR, reviewed, and squash-merged. Branch names: feat/..., fix/..., docs/..., chore/..., ci/....
TypeScript
strictis on. Noany- useunknownif you must.- Prefer early returns over nested conditionals.
- Intent-revealing names; booleans start with
is/has/can/should. - The domain layer imports no framework code - keep it pure.
Comments
Default to none. Code should read for itself via clear names and small functions. A comment earns its place only when it explains a non-obvious why - a hidden constraint or an invariant a reader could not infer from the code.
Linting and types
npm run lint and npm run typecheck must pass before a PR is mergeable - CI enforces both. ESLint uses the flat config (eslint.config.js) and is pinned to v9 for eslint-config-expo compatibility.