Skip to content

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
TypeWhen
featNew feature (bumps minor)
fixBug fix (bumps patch)
docsDocumentation only
testTests
refactorNo behavior change
choreTooling, deps
ciCI/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

  • strict is on. No any - use unknown if 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.

Spend together, settle simply.