First off, thank you for considering contributing to ComposeYogi! 🎵
- Code of Conduct
- Getting Started
- Development Setup
- Project Structure
- Making Changes
- Pull Request Process
- Style Guide
- Reporting Bugs
- Requesting Features
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code.
- Fork the repository on GitHub
- Clone your fork locally:
git clone git@github.com:YOUR_USERNAME/ComposeYogi.git cd ComposeYogi - Add upstream remote:
git remote add upstream git@github.com:AppsYogi-com/ComposeYogi.git
- Create a branch for your changes:
git checkout -b feature/your-feature-name
- Node.js 18.17 or later
- npm, yarn, or pnpm
# Install dependencies
npm install
# Start development server
npm run devThe app will be available at http://localhost:3000.
| Command | Description |
|---|---|
npm run dev |
Start dev server with Turbopack |
npm run build |
Create production build |
npm run start |
Start production server |
npm run lint |
Run ESLint |
npm run type-check |
Run TypeScript type checking |
composeyogi.com/
├── app/ # Next.js App Router pages
├── components/
│ ├── compose/ # DAW-specific components
│ └── ui/ # Reusable UI components
├── lib/
│ ├── audio/ # Tone.js audio engine
│ ├── store/ # Zustand state stores
│ ├── persistence/ # IndexedDB operations
│ └── canvas/ # Canvas rendering utilities
├── hooks/ # Custom React hooks
├── types/ # TypeScript type definitions
└── messages/ # i18n translation files
- Check existing issues to see if someone is already working on it
- Open an issue to discuss major changes before implementing
- Keep changes focused — one feature/fix per PR
- TypeScript: All code should be properly typed
- Components: Follow the existing component patterns
- State Management: Use Zustand stores for global state
- Audio: All audio operations should go through
lib/audio/ - Styling: Use Tailwind CSS classes
- Accessibility: Ensure keyboard navigation works
# Type check
npm run type-check
# Lint
npm run lint
# Build to ensure no errors
npm run build-
Update your branch with the latest upstream changes:
git fetch upstream git rebase upstream/main
-
Push your branch to your fork:
git push origin feature/your-feature-name
-
Create a Pull Request on GitHub
-
PR Title Format:
feat: Add new feature— New featurefix: Fix bug description— Bug fixdocs: Update documentation— Documentation onlyrefactor: Refactor code— Code change that neither fixes a bug nor adds a featurestyle: Format code— Formatting, missing semicolons, etc.perf: Improve performance— Performance improvementstest: Add tests— Adding testschore: Update dependencies— Maintenance tasks
-
PR Description should include:
- What changes were made
- Why the changes were made
- Screenshots (for UI changes)
- Related issue numbers
-
Wait for review — Maintainers will review your PR and may request changes
// Use explicit types for function parameters and returns
function calculateBpm(beats: number, seconds: number): number {
return (beats / seconds) * 60;
}
// Use interfaces for object shapes
interface Track {
id: string;
name: string;
type: 'audio' | 'midi' | 'drum';
}
// Use type for unions or simple types
type TrackType = 'audio' | 'midi' | 'drum';// Use function components with TypeScript
interface ButtonProps {
children: React.ReactNode;
onClick?: () => void;
variant?: 'primary' | 'secondary';
}
export function Button({ children, onClick, variant = 'primary' }: ButtonProps) {
return (
<button
onClick={onClick}
className={cn('px-4 py-2 rounded', {
'bg-accent': variant === 'primary',
'bg-muted': variant === 'secondary',
})}
>
{children}
</button>
);
}- Use the design system colors defined in
tailwind.config.ts - Prefer utility classes over custom CSS
- Use
cn()helper fromlib/utils.tsfor conditional classes
When reporting bugs, please include:
- Description: Clear description of the bug
- Steps to Reproduce: Numbered steps to reproduce the issue
- Expected Behavior: What should happen
- Actual Behavior: What actually happens
- Environment:
- Browser and version
- Operating system
- Node.js version (if relevant)
- Screenshots: If applicable
- Console Errors: Any errors from browser dev tools
Use the Bug Report template when creating an issue.
When requesting features, please include:
- Problem: What problem does this feature solve?
- Solution: How do you envision this working?
- Alternatives: Have you considered any alternatives?
- Additional Context: Any mockups, examples, or references
Use the Feature Request template when creating an issue.
If you have questions, feel free to:
- Join our Discord Community
- Open a Discussion
- Ask in the issue you're working on
Thank you for contributing! 🎹✨