Contributing
Getting Started
- Fork the repo:
gh repo fork indigoai-us/hq - Clone your fork:
git clone https://github.com/YOUR-USERNAME/hq.git - Install dependencies:
npm ci - Build:
npm run build - Create a branch:
git checkout -b feature/my-feature
Branch Strategy
| Branch | Purpose |
|---|---|
main | Production. Always deployable. |
feature/* | New features. Branch from main. |
fix/* | Bug fixes. Branch from main. |
docs/* | Documentation changes. |
Making Changes
Code changes
- Make changes in the appropriate package under
packages/orapps/ - Build the affected package:
npm run build --workspace packages/hq-cloud - Run typecheck:
npm run typecheck - Test your changes locally (see Testing guide)
- Commit with clear, descriptive message
Template changes
- Edit files in
template/ - Test by running the installer locally:
node packages/create-hq/dist/index.js ~/test-hq - Verify the change works in a fresh HQ instance
Documentation changes
- Edit MDX files in
apps/docs/src/content/docs/ - Preview locally:
npm run dev --workspace apps/docs - Verify at http://localhost:4321
Commit Messages
Follow conventional commits:
feat: add new worker scaffold commandfix: correct journal hash on Windowsdocs: update cloud sync architecture pagechore: bump dependenciesFormat: type: short description
Types: feat, fix, docs, chore, refactor, test, style
Pull Requests
Creating a PR
git push origin feature/my-featuregh pr create --title "feat: my feature" --body "Description of changes"PR Checklist
- Code builds without errors (
npm run build) - TypeScript passes (
npm run typecheck) - Tests pass (if applicable)
- No secrets or PII in committed files
- Documentation updated if needed
- Commit messages follow conventional format
Review Process
- Open PR against
main - CI runs automatically (build + typecheck)
- Core team reviews
- Address feedback
- Squash merge when approved
Code Style
- TypeScript for all packages
- ES Modules (type: “module” in package.json)
- Strict mode enabled in tsconfig
- No default exports — use named exports
- Prefer
async/awaitover raw promises - Use
interfaceovertypefor object shapes - Error handling: throw typed errors, catch at boundaries
Architecture Decisions
When proposing significant changes:
- Open an issue describing the problem and proposed solution
- Get feedback before implementing
- Document architectural decisions in PR description
- Update relevant docs pages
Areas for Contribution
| Area | Examples |
|---|---|
| New sync strategies | Copy strategy, two-way merge |
| PWA features | Offline mode, push notifications, Monaco editor |
| CLI commands | New module management features |
| Testing | Unit tests, integration tests, E2E |
| Documentation | Tutorials, examples, API reference improvements |
| Template content | New workers, knowledge bases, commands |
Questions?
- Open a GitHub issue for bugs and feature requests
- Check the docs site for architecture and usage guides
- Review existing PRs for code patterns and conventions