First off, thank you for considering a contribution to HubAssist! This document outlines how to get a development environment running and the conventions we follow for branches, commits, and pull requests.
- Code of Conduct
- Development Setup
- Branch Naming
- Commit Message Format
- Pull Request Process
- Reporting Issues
Be respectful, inclusive, and constructive. Harassment of any kind will not be tolerated.
- Node.js ≥ 18.x and npm
- PostgreSQL ≥ 14
- Rust toolchain (
rustup) with thewasm32v1-nonetarget - Stellar CLI ≥ 23.x (for contract work)
git clone https://github.com/Hub-Assist/Hub-Assist.git
cd Hub-Assist
# Backend
cd backend && cp .env.example .env && npm install
# Frontend
cd ../frontend && cp .env.example .env.local && npm install# Backend (http://localhost:3001)
cd backend && npm run start:dev
# Frontend (http://localhost:3000)
cd frontend && npm run dev
# Contracts (build all)
cd contracts && stellar contract build# Backend
cd backend && npm test
# Frontend
cd frontend && npm test
# Contracts
cd contracts && cargo testUse the following prefix conventions to make intent clear at a glance:
| Prefix | When to use | Example |
|---|---|---|
feat/ |
A new feature | feat/membership-token-mint |
fix/ |
A bug fix | fix/cors-origin-validation |
refactor/ |
A code refactor without behavior change | refactor/auth-service-cleanup |
docs/ |
Documentation only changes | docs/contributing-guide |
test/ |
Adding or fixing tests | test/booking-service-unit-tests |
chore/ |
Build, CI, or tooling changes | chore/upgrade-nest-10 |
perf/ |
A performance improvement | perf/query-optimisation |
Use lowercase, hyphen-separated names. Keep them short and descriptive.
We follow the Conventional Commits specification:
<type>(<optional scope>): <short summary>
<optional body>
<optional footer>
- feat: a new feature
- fix: a bug fix
- docs: documentation only changes
- style: changes that do not affect meaning (white-space, formatting, etc.)
- refactor: code change that neither fixes a bug nor adds a feature
- perf: a code change that improves performance
- test: adding missing tests or correcting existing tests
- build: changes to the build system or dependencies
- ci: changes to CI configuration files and scripts
- chore: other changes that don't modify src or test files
feat(auth): add WebAuthn biometric login flow
fix(bookings): prevent double-booking when timezone differs
docs(readme): document Vercel deployment process
refactor(users): split user service into auth and profile concerns
ci(contracts): add testnet deployment workflow
- Wrap the body at 72 characters.
- Explain what changed and why, not how (the diff covers how).
- Reference issues in the footer:
Closes #123orRefs #456. - Note breaking changes with
BREAKING CHANGE: <description>in the footer.
- Fork the repository and create your feature branch from
main. - Make your changes in small, focused commits that follow the format above.
- Add tests for any new behavior. Make sure existing tests still pass.
- Lint and format your code:
- Backend:
npm run lint && npm run format - Frontend:
npm run lint - Contracts:
cargo fmt && cargo clippy
- Backend:
- Update documentation if your change affects user-facing behavior, configuration, or APIs.
- Open a Pull Request against
mainusing the PR template that auto-loads. - Link the related issue(s) in the PR description (
Closes #123). - Request review from a maintainer. Address review feedback by pushing new commits — do not force-push to your branch until approval is given.
- Once approved and CI is green, a maintainer will merge using squash and merge by default.
Every PR runs the GitHub Actions CI workflow, which must pass before merge:
- Backend build (
npm run build) - Frontend build (
npm run build) - Contracts build (
cargo build --target wasm32v1-none --release)
- Bugs: open an issue using the "Bug report" template.
- Features: open an issue using the "Feature request" template.
- Security vulnerabilities: report privately via GitHub Security Advisories. Do not open a public issue.
Thanks for helping make HubAssist better! 🎉