- Create a branch from
main. - Make changes locally.
- Run:
npm install
npm run db:bootstrap:local
npm run typecheck
npm run test
npm run format
npm run lint
npm run buildIf you changed user-facing flows or browser interactions, also run:
npm run test:e2e- Open a pull request.
- Wait for CI to pass.
- Review the preview deployment if one is enabled for the repository.
- Merge to
main.
Merges to main are intended to trigger a production deploy.
- Keep CHANGELOG.md and package.json in sync when preparing a release PR.
- Use
0.x.xfor normal minor/patch releases while the project is still pre-1.0. - If the release is a major milestone or materially changes the product scope, bump the middle digit such as
0.2.0. - Otherwise, use a patch release such as
0.1.1. - Ask explicitly which release level is intended if it is not obvious from the scope of the work.
Start here:
- Put schema changes in src/lib/db/schema.ts
- Generate or add the matching SQL migration in drizzle
- Run
npm run db:migrate - Do not leave the code expecting a schema change that is not represented by a migration
The app checks the latest applied migration at runtime and fails early if the local database is behind.
- Keep changes focused.
- Include tests when you change behavior.
- Run
npm run formatbeforenpm run lint. This repo has been seeing avoidable AI-generated formatting drift, and Biome lint is much cleaner after formatting first. - If a change affects Twitch auth, EventSub, playlist mutations, or migrations, call that out in the PR description.
- If a change affects deployment or Cloudflare bindings, update the docs in the same PR.
Recommended repository settings:
- protect
main - require pull requests for merge
- require the CI workflow to pass
- require at least one review before merge
- restrict direct pushes to
main