Welcome, and thanks for your interest in contributing. This document is your starting point — it covers the contribution workflow, coding standards, and PR guidelines. Deeper references are linked throughout.
| Document | Purpose |
|---|---|
| This file | Workflow, standards, PR guidelines |
CONTRIBUTOR_SETUP.md |
Full local environment setup from scratch |
CONTRIBUTOR_DEVELOPMENT_WORKFLOW_GUIDE.md |
End-to-end workflow reference |
CONTRIBUTOR_ARCHITECTURE_DEEP_DIVE.md |
System architecture and component internals |
ARCHITECTURE_OVERVIEW.md |
High-level architecture walkthrough |
Companion guides:
docs/GIT_WORKFLOW.md— the full branching strategy, commit conventions, and PR process, with a command cheat sheetdocs/CONTRIBUTOR_TROUBLESHOOTING.md— solutions for common build, test, database, and Git problemsdocs/API_ERROR_REFERENCE.md— every error response the listener API returnsdocs/adr/README.md— Architecture Decision Records
- Be respectful and inclusive
- Give constructive, specific feedback
- Show empathy — everyone is learning
Before you start, make sure you have:
- Rust (stable) + WebAssembly target:
rustup target add wasm32-unknown-unknown - Stellar CLI:
cargo install --locked stellar-cli --features opt - Node.js 22 (used by both listener and dashboard in CI)
- Git
For a detailed walkthrough including platform-specific notes, see CONTRIBUTOR_SETUP.md.
Requires Docker Desktop (or Docker Engine + Compose on Linux). No Node.js install needed.
git clone https://github.com/YOUR-USERNAME/Notify-Chain.git
cd Notify-Chain
git remote add upstream https://github.com/Core-Foundry/Notify-Chain.git
cp .env.example .env
# Edit .env — set CONTRACT_ADDRESSES to your deployed contract ID
docker compose up --buildDashboard → http://localhost:5173 · Listener API → http://localhost:8787
git clone https://github.com/YOUR-USERNAME/Notify-Chain.git
cd Notify-Chain
git remote add upstream https://github.com/Core-Foundry/Notify-Chain.git
cd listener && npm install && cp .env.example .env && npm run migrate
cd ../dashboard && npm install && cp .env.example .envMinimum listener/.env:
STELLAR_RPC_URL=https://soroban-testnet.stellar.org:443
CONTRACT_ADDRESSES=[{"address":"YOUR_CONTRACT_ID","events":["*"]}]Full setup details: CONTRIBUTOR_SETUP.md
- Browse open issues. New? Look for
good first issue. - Comment:
I would like to work on this issue. - Wait to be assigned — don't open a PR for unassigned work.
- Once assigned, submit a draft PR or progress update within 5 days. Post an update if you need more time.
Always start from an up-to-date main:
git checkout main
git fetch upstream
git merge upstream/main
git push origin main
git checkout -b <branch-name>Branch naming:
| Prefix | Use |
|---|---|
feature/ |
New features |
fix/ |
Bug fixes |
docs/ |
Documentation |
refactor/ |
Refactoring |
test/ |
Tests only |
chore/ |
Maintenance |
For the complete branching strategy — including naming rules, what to avoid, and how to recover from common mistakes — see
docs/GIT_WORKFLOW.md.
- Follow the existing code style in each component directory.
- Add comments for non-obvious logic.
- Update docs when behavior changes.
- Write tests for all new logic and bug fixes.
Making a significant architectural change? Read the Architecture Decision Records first — they document why the current design is what it is. If your change alters one of those decisions, add a new ADR using
docs/adr/0000-template.mdand reference it in your PR.
Hit a problem? Check docs/CONTRIBUTOR_TROUBLESHOOTING.md before opening an issue.
Contracts (Rust)
cd contract
cargo fmt --all # format
cargo fmt --all -- --check # verify clean
cd contracts/hello-world && cargo test # unit testsListener (TypeScript)
cd listener
npm run lint
npm run typecheck
npm testDashboard (TypeScript)
cd dashboard
npm run lint
npm run build # includes TypeScript check
npm testFollow Conventional Commits:
feat: new feature
fix: bug fix
docs: documentation only
test: tests only
refactor: no behavior change
chore: maintenance
Examples:
git commit -m "feat: add retry queue for failed notifications"
git commit -m "fix: resolve event parsing issue in listener"
git commit -m "test: add payload validation edge cases"git push -u origin <branch-name>Then open a PR on GitHub against main. GitHub will pre-fill the PR template — fill it out completely.
- Format with
cargo fmt --allbefore every commit - Add
///doc comments on all public functions and structs - Use
#[contracterror]for custom errors - Every public function needs a test
npm run lintmust pass with zero warnings- Use TypeScript — no
anyunless genuinely unavoidable - Unit test all new service logic
- Follow existing file and naming conventions in the directory you're editing
Match commit convention: feat: add slack notification channel
The PR template will prompt you for:
- Overview of what changed and why
- Linked issue number
- Key files modified
- Verification commands you ran
- Manual test instructions
- Branch is up to date with
main - All tests pass locally
- Lint/format checks pass
- Docs updated if behavior changed
- PR scope is focused on a single issue
- CI runs automatically — wait for green before requesting review.
- Address feedback promptly and push to the same branch (the PR updates automatically).
- Keep the scope tight — don't mix unrelated changes in one PR.
- Reviewers will test locally for significant changes.
Dependabot opens PRs weekly (Mondays) for outdated dependencies across all four ecosystems. Config is in .github/dependabot.yml.
When reviewing Dependabot PRs: check the changelog for breaking changes, wait for CI to pass, and review the migration guide for major version bumps.
- Search existing issues first.
- Open a new issue for bugs or feature requests.
- Join discussions on GitHub.
By contributing, you agree your work will be licensed under the MIT License.