Thank you for your interest in contributing to PulsarTrack! This guide will help you get started with the contribution process.
- Browse the Issues page
- Look for issues labeled
good first issueorhelp wanted - Read the issue description carefully to understand the requirements
- Comment on the issue to let maintainers know you'd like to work on it
- Wait for confirmation from a maintainer before starting work
- Rust (latest stable) with wasm32-unknown-unknown target
- Node.js 20.x or higher
- npm or yarn package manager
- Git
git clone https://github.com/greyforreal/pulsartrack.git
cd pulsartrackContracts:
cargo build --workspaceInstall Dependencies:
# From the repository root — this links shared workspace packages
npm installBackend:
cd backend
# Dependencies already installed via root workspace install aboveFrontend:
cd frontend
# Dependencies already installed via root workspace install above
cp .env.example .env.localCreate a new branch from main using this naming pattern:
feat/short-description- For new featuresfix/short-description- For bug fixesdocs/short-description- For documentation changesrefactor/short-description- For code refactoringtest/short-description- For test additions or fixes
Example: fix/wallet-connection-timeout
-
Create a new branch:
git checkout -b fix/your-issue-description
-
Make your changes following our code style guidelines
-
Run tests locally before committing:
# Format contracts (required — CI runs cargo fmt --all -- --check) cargo fmt --all # Test contracts cargo test --workspace # Test backend cd backend npm test # Test frontend cd frontend npm test npm run test:e2e
-
Commit your changes with a clear commit message:
git add . git commit -m "fix: description of what was fixed"
Follow the conventional commits format:
feat:- A new featurefix:- A bug fixdocs:- Documentation changestest:- Adding or updating testsrefactor:- Code refactoring without changing functionalitychore:- Maintenance tasks
Example: fix: resolve wallet connection timeout issue
# Build all contracts
cargo build --workspace
# Run all contract tests
cargo test --workspace
# Run tests for a specific contract
cargo test -p campaign-contractNote: Soroban test snapshots (
contracts/*/test_snapshots/) are generated build artifacts and are git-ignored. Runningcargo testmay create or modify these files locally — this is expected and they should not be committed.
cd backend
# Lint
npm run lint
# Type check
npm run typecheck
# Run tests
npm test
# Build
npm run buildcd frontend
# Type check
npm run typecheck
# Lint code
npm run lint
# Run unit tests
npm test
# Run E2E tests
npm run test:e2e
# Build
npm run build- Ensure all tests pass locally
- Update documentation if you've changed functionality
- Make sure your branch is up to date with
main:git fetch origin git rebase origin/main
-
Push your branch to your fork:
git push origin your-branch-name
-
Go to the repository on GitHub and click "New Pull Request"
-
Fill out the PR template with:
- Clear description of the changes
- Reference to the issue number (e.g., "Closes #123")
- Any relevant testing notes
- An entry in
CHANGELOG.mdunder[Unreleased]for user-facing changes or breaking changes (seeVERSIONING.mdfor versioning rules)
-
Submit the pull request
This repository uses CI-gated auto-merge. Your PR must meet these requirements:
Required Status Checks:
- Contracts CI - All contract tests must pass
- Backend CI - Backend type check, build, and tests must pass
- Frontend CI - Frontend type check, lint, build, and tests must pass
- E2E Tests - End-to-end tests must pass
Additional Requirements:
- PR must be up to date with the
mainbranch - No merge conflicts
- At least one approval from a maintainer
Once all checks pass and you have approval, the PR will be automatically merged.
-
Delete your local branch:
git branch -d your-branch-name
-
Update your local main branch:
git checkout main git pull origin main
- Follow standard Rust formatting with
rustfmt - Use meaningful variable and function names
- Add documentation comments for public APIs
- Run
cargo fmt --allbefore committing to ensure all files pass the CI formatting check (cargo fmt --all -- --check) - Run
cargo clippybefore committing
- Follow the existing ESLint configuration
- Use TypeScript strict mode
- Prefer functional components in React
- Add JSDoc comments for complex functions
If you have questions or need help:
- Check existing issues and discussions
- Ask in the issue you're working on
- Create a new discussion in the GitHub Discussions section
Please be respectful and professional in all interactions. We are building an inclusive community where everyone feels welcome to contribute.
Thank you for contributing to PulsarTrack!