Thank you for your interest in contributing to Upstream Pulse! This document provides guidelines and information for contributors.
This project follows the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code.
You don't need to write code to contribute. But because this is an open-source project that can be deployed by anyone, it's important to use the right channel depending on what you need.
Use these for requests and bugs that improve the software for everyone:
| I want to... | Template |
|---|---|
| Add a new upstream project or org to the codebase | Request New Project |
| Report a bug in data collection, sync, or parsing logic | Data Collection Bug |
| Suggest a feature or report a dashboard UI issue | Feedback |
Want to check what's already tracked? See docs/upstream-projects.md for the full list.
If your issue is about your team's specific dashboard instance — wrong seat counts, a person missing from the team list, identity merge requests, or stale data — these should not be filed as public GitHub issues because they contain internal team information.
Instead, contact your dashboard administrator — you can find their info on the About page of your dashboard. Admins can fix team member records, trigger re-syncs, and adjust identity mappings directly.
The rest of this guide is for developers who want to contribute code changes.
- Use GitHub Issues to report bugs or request features
- Check existing issues before creating a new one
- Include steps to reproduce for bug reports
- Provide as much context as possible
- Fork the repository
- Create a feature branch from
main:git checkout -b feature/your-feature-name
- Make your changes following the coding standards below
- Test your changes locally
- Commit with clear, descriptive messages
- Push to your fork and open a Pull Request
- Keep PRs focused and reasonably sized
- Describe what the PR does and why
- Reference any related issues
- Ensure the build passes before requesting review
- Node.js 20+
- Docker & Docker Compose
# Clone your fork
git clone https://github.com/your-username/upstream-pulse.git
cd upstream-pulse
# Set up environment
cp .env.example .env
# Edit .env with your credentials
# Start services
docker-compose up -d postgres redis
# Install and run backend
cd backend
npm install
npm run db:migrate
npm run dev
# Install and run frontend (separate terminal)
cd frontend
npm install
npm run dev| Command | Description |
|---|---|
npm run dev |
Start backend + frontend concurrently |
npm run dev:backend |
Start backend only |
npm run dev:frontend |
Start frontend only |
npm run build |
Build both backend and frontend |
npm run db:migrate |
Run database migrations |
npm run db:studio |
Open Drizzle Studio (DB GUI) |
Upstream Pulse uses a centralized org registry (backend/src/shared/config/org-registry.ts) that declares every supported upstream organization. To add a new org:
- Add an entry to the
ORG_REGISTRYarray with the org's GitHub slug, governance model, and (optionally) community repo details. - If the org has structured leadership data (steering committee, maintainers list, WG YAML), configure the
communityRepoandleadershipFilesfields so the leadership collector knows what to parse. - Submit a PR — the system will automatically pick up the new org on the next scheduled run.
For a detailed walkthrough with field-by-field explanations and testing instructions, see docs/adding-an-org.md.
- Use TypeScript for all new code
- Enable strict mode
- Prefer
constoverlet; avoidvar - Use explicit return types for public functions
- Use Fastify for HTTP routes
- Use Drizzle ORM for database queries
- Use Winston for logging
- Follow the existing module structure under
backend/src/modules/
- Use React functional components with hooks
- Use TanStack Query for data fetching
- Use Tailwind CSS for styling
- Follow the component structure under
frontend/src/components/
- Use present tense ("Add feature" not "Added feature")
- Keep the first line under 72 characters
- Reference issues when applicable (e.g., "Fix #123")
upstream-pulse/
├── backend/ # Fastify API server + BullMQ workers
│ └── src/
│ ├── jobs/ # BullMQ job definitions and workers
│ ├── modules/ # Feature modules (api, collection, identity, etc.)
│ ├── scripts/ # Database seeds and utility scripts
│ └── shared/ # Config (incl. org registry), database, types, utilities
├── frontend/ # React + Vite dashboard
│ └── src/
│ ├── components/ # Reusable UI components
│ └── pages/ # Route-level page components
├── deploy/ # OpenShift deployment manifests and scripts
└── docs/ # Additional documentation
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.