Thank you for your interest in contributing to CoachKit! This guide will help you get started.
By participating in this project, you agree to abide by our Code of Conduct.
- Check if the bug has already been reported in Issues
- If not, create a new issue with:
- A clear, descriptive title
- Steps to reproduce the bug
- Expected vs actual behavior
- Screenshots if applicable
- Your environment (OS, browser, Node version)
- Open an issue with the
enhancementlabel - Describe the feature and its use case
- Explain how it benefits coaches and solopreneurs
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/coachkit.git - Create a branch:
git checkout -b feature/your-feature-name - Install dependencies:
npm install - Make your changes
- Test locally:
npm run dev - Lint:
npm run lint - Commit with a clear message following Conventional Commits:
feat: add email template previewfix: resolve contact deduplication issuedocs: update API configuration guidestyle: improve mobile layout for dashboard
- Push to your fork:
git push origin feature/your-feature-name - Open a Pull Request against the
mainbranch
- Keep PRs focused — one feature or fix per PR
- Update documentation if your change affects usage
- Add screenshots for UI changes
- Ensure no client-specific data, API keys, or credentials are included
- All environment-specific values should use environment variables
- Node.js 18+
- npm or pnpm
- A Supabase project (free tier works)
# Install dependencies
npm install
# Copy environment variables
cp .env.example .env
# Edit .env with your Supabase credentials
# Start development server
npm run devsrc/
├── pages/ # Route-level page components
├── components/ # Reusable UI components
├── contexts/ # React context providers (Auth, Toast)
├── lib/ # Supabase client, utilities
└── types/ # TypeScript type definitions
- TypeScript — All new code should be TypeScript
- Functional Components — Use React hooks, no class components
- TailwindCSS — Use utility classes for styling
- Naming — PascalCase for components, camelCase for functions/variables
- Files — One component per file, named after the component
- 🌍 i18n — Multi-language support
- 💳 Payment Providers — Stripe, PayPal integrations
- 📱 Mobile — React Native companion app
- 🧪 Testing — Unit and e2e test coverage
- 📖 Docs — Tutorials, video guides, API documentation
- ♿ Accessibility — WCAG compliance improvements
Open an issue with the question label, or start a discussion in the Discussions tab.
Thank you for helping make CoachKit better! ⚡