Thank you for your interest in contributing to WorkHub! This guide will help you get started.
Please note that this project is governed by a Code of Conduct. By participating, you agree to uphold it.
Before opening an issue, please check if a similar one already exists. When filing a bug report, include:
- A clear and descriptive title
- Steps to reproduce the issue
- Expected behavior vs. actual behavior
- Browser and OS information
- Screenshots if applicable
Feature requests are welcome! Please open an issue with:
- A clear description of the feature
- The problem it solves or the use case it enables
- Any mockups or examples if possible
- Fork the repository and create your branch from
master - Follow the setup guide in README.md to get your local environment running
- Make your changes in a focused, well-scoped branch
- Test your changes locally before submitting
- Submit a pull request with a clear description of what you changed and why
# Fork and clone
git clone https://github.com/YOUR_USERNAME/workhub.git
cd workhub
# Install dependencies
npm install
# Copy environment variables
cp .env.local.example .env.local
cp .firebaserc.example .firebaserc
# Fill in your Firebase and (optional) Gemini API keys
# Start development server
npm run devSee the Getting Started section in the README for full Firebase setup instructions.
- Write clear, self-documenting code
- Keep changes focused — one feature or fix per PR
- Follow existing patterns in the codebase
- Use strict typing — avoid
anywhere possible - Add types to
src/types/index.tsfor shared interfaces - Follow the existing naming conventions (camelCase for variables, PascalCase for components/types)
- Place new UI primitives in
src/components/ui/ - Place feature-specific components in their respective directories (e.g.,
src/components/tasks/) - Use Radix UI + Tailwind CSS for new components (matching existing shadcn/ui pattern)
- Keep components focused — split large components into smaller ones
- Place custom hooks in
src/hooks/ - Follow the optimistic update pattern used in existing hooks (update UI first, then sync with Firestore, rollback on error)
- Use toast notifications for user feedback
- Use Tailwind CSS utility classes
- Support dark mode — use
dark:variants - Follow the existing color patterns and spacing conventions
- Add new Firestore fields as optional (
?) to avoid migration issues - Use
Timestampfrom Firebase for all date/time fields - If adding new collections, update
src/lib/firestore.tsandsrc/types/index.ts - Add necessary composite indexes to
firebase/firestore.indexes.json
Use clear, descriptive commit messages:
Add kanban board drag-and-drop reorderingFix timer not persisting across page navigationUpdate task card to show comment count
Avoid vague messages like "fix bug" or "update code".
If you're unsure about anything, feel free to open an issue with your question. We're happy to help you get started!