First off, thank you for considering contributing to Overlay Studio! It's people like you that make Overlay Studio such a great tool.
- Code of Conduct
- How Can I Contribute?
- Development Setup
- Project Structure
- Coding Guidelines
- Commit Guidelines
- Pull Request Process
- Adding New Assets
- Reporting Bugs
- Suggesting Enhancements
This project and everyone participating in it is governed by our commitment to fostering an open and welcoming environment. By participating, you are expected to uphold this code:
- Be respectful and inclusive
- Welcome newcomers and help them get started
- Accept constructive criticism gracefully
- Focus on what is best for the community
- Show empathy towards other community members
Before creating bug reports, please check the existing issues to avoid duplicates. When you create a bug report, include as many details as possible:
- Use a clear and descriptive title
- Describe the exact steps to reproduce the problem
- Provide specific examples (screenshots, code snippets)
- Describe the behavior you observed and what you expected
- Include your environment details (OS, browser, Node.js version)
Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion:
- Use a clear and descriptive title
- Provide a detailed description of the suggested enhancement
- Explain why this enhancement would be useful
- List any similar features in other applications if applicable
Unsure where to begin? Look for issues labeled:
good first issue- Simple issues perfect for newcomershelp wanted- Issues where we need community helpbug- Bug fixes are always appreciatedenhancement- Feature improvements
- Node.js 18.x or higher
- npm, yarn, pnpm, or bun
- Git
-
Fork the repository on GitHub
-
Clone your fork locally
git clone https://github.com/YOUR_USERNAME/OverlayStudio.git cd OverlayStudio -
Add the upstream repository
git remote add upstream https://github.com/Pepps233/OverlayStudio.git
-
Install dependencies
npm install
-
Create a branch for your changes
git checkout -b feature/your-feature-name
-
Start the development server
npm run dev
-
Open your browser at http://localhost:3000
git fetch upstream
git checkout main
git merge upstream/mainOverlayStudio/
├── public/
│ ├── assets/ # Static assets (backgrounds, overlays, cosmetics)
│ └── *.svg/webp # Public images and icons
├── src/
│ ├── app/ # Next.js App Router pages
│ │ ├── layout.tsx # Root layout
│ │ ├── page.tsx # Home page
│ │ └── globals.css # Global styles
│ └── components/ # React components
│ ├── canvas/ # Canvas editor components
│ └── *.tsx # UI components
├── .gitignore
├── package.json
├── tsconfig.json
└── tailwind.config.ts
src/components/canvas/CanvasEditor.tsx- Main canvas editor logicsrc/components/canvas/AssetLibrary.tsx- Asset selection and managementsrc/components/canvas/PreviewPanel.tsx- Banner preview functionalitysrc/components/canvas/Toolbar.tsx- Upload and toolbar controlssrc/app/page.tsx- Main landing page
- Use TypeScript for all new files
- Define proper interfaces and types
- Avoid using
anytype unless absolutely necessary - Use meaningful variable and function names
- Use functional components with hooks
- Keep components small and focused
- Use
"use client"directive for client components - Implement proper error boundaries where needed
- Use Tailwind CSS utility classes
- Follow the existing color scheme (violet/purple theme)
- Ensure responsive design (mobile-first approach)
- Support both light and dark modes
interface ButtonProps {
onClick: () => void;
label: string;
disabled?: boolean;
}
export default function Button({ onClick, label, disabled = false }: ButtonProps) {
return (
<button
onClick={onClick}
disabled={disabled}
className="px-4 py-2 bg-violet-600 text-white rounded-lg"
>
{label}
</button>
);
}- Optimize images (use WebP format when possible)
- Use
useCallbackanduseMemofor expensive operations - Implement proper loading states
- Avoid unnecessary re-renders
We follow the Conventional Commits specification:
<type>(<scope>): <subject>
<body>
<footer>
- feat: A new feature
- fix: A bug fix
- docs: Documentation changes
- style: Code style changes (formatting, missing semicolons, etc.)
- refactor: Code refactoring without changing functionality
- perf: Performance improvements
- test: Adding or updating tests
- chore: Maintenance tasks, dependency updates
feat(canvas): add rotation control for layers
fix(export): resolve PNG transparency issue
docs(readme): update installation instructions
style(toolbar): improve button spacing
refactor(asset-library): simplify asset loading logic- Ensure your code follows the coding guidelines
- Update documentation if you're changing functionality
- Add tests if applicable
- Update the README.md if needed
- Ensure the build passes (
npm run build) - Write a clear PR description explaining:
- What changes you made
- Why you made them
- How to test them
- Any breaking changes
Use the same format as commit messages:
feat: add layer rotation feature
fix: resolve canvas zoom issue on mobile
docs: improve contributing guidelines
- My code follows the project's coding guidelines
- I have performed a self-review of my code
- I have commented my code where necessary
- I have updated the documentation accordingly
- My changes generate no new warnings
- I have tested my changes thoroughly
- Any dependent changes have been merged
- Place images in
public/assets/background/ - Recommended size: 1584 × 396 px
- Use optimized formats (WebP, JPEG)
- Update
AssetLibrary.tsxto include the new asset
const backgrounds = [
// ... existing backgrounds
{ name: "Your City", path: "/assets/background/your-city.jpg" },
];- Place images in
public/assets/overlay/ - Use PNG format with transparency
- Optimize file size
- Update
AssetLibrary.tsx
- Place images in
public/assets/cosmetic/ - Use PNG format with transparency
- Keep consistent sizing
- Update
AssetLibrary.tsx
- Check the existing issues
- Try the latest version
- Collect relevant information
**Describe the bug**
A clear description of what the bug is.
**To Reproduce**
Steps to reproduce:
1. Go to '...'
2. Click on '...'
3. See error
**Expected behavior**
What you expected to happen.
**Screenshots**
If applicable, add screenshots.
**Environment:**
- OS: [e.g., macOS, Windows, Linux]
- Browser: [e.g., Chrome, Safari, Firefox]
- Version: [e.g., 22]
**Additional context**
Any other relevant information.**Is your feature request related to a problem?**
A clear description of the problem.
**Describe the solution you'd like**
What you want to happen.
**Describe alternatives you've considered**
Other solutions you've thought about.
**Additional context**
Screenshots, mockups, or examples.# Run development server
npm run dev
# Build for production
npm run build
# Run linter
npm run lintPort already in use:
# Kill the process using port 3000
lsof -ti:3000 | xargs kill -9Dependencies out of sync:
rm -rf node_modules package-lock.json
npm installContributors will be recognized in:
- GitHub contributors page
- Project documentation
- Release notes (for significant contributions)
- GitHub Issues: For bugs and feature requests
- Discussions: For questions and general discussion
- Pull Requests: For code review and collaboration
By contributing to Overlay Studio, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to Overlay Studio! 🎉
Your efforts help make this project better for everyone. We appreciate your time and expertise!