Thank you for your interest in contributing to TaskNebula! This document provides guidelines and instructions for contributing.
- Node.js 22+ (LTS)
- pnpm 9+
- PostgreSQL 16+
- Git
-
Fork and clone the repository
git clone https://github.com/neuraparse/taskNebula.git cd tasknebula -
Install dependencies
pnpm install
-
Setup environment variables
cp apps/web/.env.example apps/web/.env.local cp packages/db/.env.example packages/db/.env
-
Start PostgreSQL (using Docker)
docker-compose up -d postgres
-
Run database migrations
pnpm db:generate pnpm db:migrate
-
Start development server
pnpm dev
taskNebula/
├── apps/
│ └── web/ # Next.js application
├── packages/
│ ├── config/ # Shared configurations
│ ├── types/ # TypeScript types
│ └── db/ # Database schema (Drizzle)
├── turbo.json # Turborepo configuration
└── pnpm-workspace.yaml # pnpm workspace configuration
feature/- New featuresfix/- Bug fixesdocs/- Documentation updatesrefactor/- Code refactoringtest/- Test additions or updates
Example: feature/add-timeline-view
We follow Conventional Commits and enforce them via commitlint on every commit:
<type>(<scope>): <description>
[optional body]
[optional footer]
Allowed types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringperf: Performance improvementtest: Adding or updating testsbuild: Build system / dependency changesci: CI configuration changeschore: Maintenance tasksrevert: Reverting a previous commitinfra: Infrastructure (Docker, Nginx, healthchecks, deploy)ai: AI agents, prompts, model integrationintegrations: Third-party integrations (GitHub, Slack, Sentry, webhooks, ...)
Examples:
feat(kanban): add drag and drop support
fix(auth): resolve session timeout issue
docs(readme): update installation instructions
infra(docker): tighten container healthchecks
integrations(github): add HMAC-signed webhook delivery
The repository ships with Husky hooks that run automatically after pnpm install (via the prepare script):
pre-commitrunslint-staged:*.{ts,tsx}→eslint --fix+prettier --write*.{js,cjs,mjs,jsx,json,md,yml,yaml}→prettier --write
commit-msgrunscommitlintagainstcommitlint.config.cjsto enforce the conventional-commit format above.
If a hook prevents your commit, fix the reported issue and re-stage; do not bypass with --no-verify unless you have a very good reason and call it out in the PR.
- We use Prettier for code formatting
- We use ESLint for linting
- Hooks auto-format staged files on commit; you can also run:
pnpm formatto format the whole repopnpm lintto check for issues
- All code must be properly typed with TypeScript
- Run
pnpm type-checkto verify types - Avoid using
any- use proper types orunknown
# Run all tests
pnpm test
# Run tests in watch mode
pnpm test:watch
# Run tests with coverage
pnpm test:coverage-
Create a feature branch
git checkout -b feature/your-feature-name
-
Make your changes
- Write clean, well-documented code
- Add tests for new features
- Update documentation as needed
-
Commit your changes
git add . git commit -m "feat: add your feature"
-
Push to your fork
git push origin feature/your-feature-name
-
Create a Pull Request
- Provide a clear description of the changes
- Reference any related issues
- Ensure all CI checks pass
- Code follows project style guidelines
- Tests added/updated and passing
- Documentation updated
- Type checking passes (
pnpm type-check) - Linting passes (
pnpm lint) - No console errors or warnings
- Commit messages follow conventional commits
When reporting bugs, please include:
- Description: Clear description of the bug
- Steps to Reproduce: Detailed steps to reproduce the issue
- Expected Behavior: What you expected to happen
- Actual Behavior: What actually happened
- Environment: OS, Node version, browser, etc.
- Screenshots: If applicable
We welcome feature requests! Please:
- Check if the feature has already been requested
- Provide a clear use case
- Explain how it aligns with TaskNebula's vision
- Consider contributing the feature yourself!
- Update README.md for user-facing changes
- Update inline code comments for complex logic
- Add JSDoc comments for public APIs
- Update type definitions as needed
- Be respectful and inclusive
- Provide constructive feedback
- Focus on what is best for the community
- Show empathy towards other community members
- Discord: Join our Discord (coming soon)
- GitHub Discussions: Ask questions and share ideas
- GitHub Issues: Report bugs and request features
By contributing to TaskNebula, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to TaskNebula! 🌌