Thank you for your interest in contributing to Brain-Storm! We welcome contributions from the community to help make blockchain education accessible to everyone.
All contributors are expected to follow our Code of Conduct. By participating, you agree to uphold this code. Please report unacceptable behaviour to the maintainers.
- Fork the repository on GitHub.
- Clone your fork locally:
git clone https://github.com/<your-username>/Brain-Storm.git - Follow the Developer Setup Guide to set up your environment.
- Create a new branch from
mainfor your change (see naming conventions below). - Make your changes, add tests, and open a pull request.
| Prefix | When to use |
|---|---|
feat/ |
New feature — e.g. feat/api-key-rotation |
fix/ |
Bug fix — e.g. fix/xss-sanitization |
docs/ |
Documentation only — e.g. docs/contract-guide |
chore/ |
Maintenance, tooling, deps — e.g. chore/upgrade-nestjs |
refactor/ |
Code restructure with no behaviour change |
test/ |
Adding or fixing tests |
Branch names must be lowercase and use hyphens, not underscores.
We enforce Conventional Commits via commitlint. Every commit message must follow this structure:
<type>(<scope>): <short summary>
[optional body]
[optional footer(s)]
| Type | Description |
|---|---|
feat |
A new feature |
fix |
A bug fix |
docs |
Documentation changes only |
style |
Formatting, missing semicolons — no logic change |
refactor |
Code change that is neither a fix nor a feature |
test |
Adding or correcting tests |
chore |
Build process, dependency updates, tooling |
perf |
Performance improvement |
ci |
CI/CD configuration changes |
Use the affected module: auth, courses, users, stellar, contracts, frontend, docs, etc.
feat(auth): add API key authentication for service-to-service calls
fix(courses): strip HTML from description before saving
docs(contracts): add end-to-end credential issuance flow
chore(deps): upgrade @stellar/stellar-sdk to v13
Breaking changes must include BREAKING CHANGE: in the footer:
feat(auth)!: remove legacy /v0 endpoints
BREAKING CHANGE: All clients must migrate to /v1 endpoints.
- Keep PRs small and focused — one logical change per PR.
- Fill in the PR template completely.
- Ensure all CI checks pass before requesting review.
- Link the related issue using
Closes #<issue-number>in the PR description. - Request at least one review from a maintainer.
- Address all review comments before merging.
- PRs are merged via squash merge to keep a clean history.
Before submitting your PR, verify:
- Code follows the style guide (
npm run lintpasses). - All existing tests pass (
npm run test). - New tests are added for new behaviour.
- Commits follow Conventional Commits format.
- Documentation is updated if behaviour changes.
- No secrets or PII are committed.
- PR description clearly explains the what and why.
# Install dependencies
npm install
# Run backend in watch mode
npm run dev:backend
# Run tests
cd apps/backend && npm test
# Lint
npm run lintSee docs/development-setup.md for the full setup guide.
If you discover a security vulnerability, do not open a public issue. Follow our Security Policy for responsible disclosure.
All REST endpoints are prefixed with /v1. Before introducing any breaking change you must follow the process in docs/api-versioning.md. In short:
- Implement the change under a new prefix (
/v2/...) — never modify/v1in place. - Mark the old endpoint deprecated in Swagger (
@ApiOperation({ deprecated: true })). - Add
DeprecationandSunsetresponse headers to the old endpoint. - Use a
feat!:orBREAKING CHANGE:commit so Release Please bumps the major version. - Keep both versions running for at least 90 days before removing
/v1.
See docs/api-versioning.md for the full strategy, deprecation timeline, and migration examples.