First off, thank you for considering contributing to FirstIssue.dev!
This project is built to help students find their first open source contribution, and what better way to start than contributing here!
- Code of Conduct
- How Can I Contribute?
- Getting Started
- Development Setup
- Project Structure
- Making Your First Contribution
- Pull Request Guidelines
- Style Guide
- Need Help?
This project follows a Code of Conduct. By participating, you are expected to uphold this code. Please be respectful and inclusive.
- Be welcoming to newcomers
- Be respectful of differing viewpoints
- Accept constructive criticism gracefully
- Focus on what is best for the community
- Check if the bug has already been reported in Issues
- If not, create a new issue with a clear title and description
- Include steps to reproduce the bug
- Add screenshots if applicable
- Check if the feature has already been suggested
- Create a new issue with the
enhancementlabel - Describe the feature and why it would be useful
- Fix typos or unclear explanations
- Add examples or tutorials
- Translate documentation
- Look for issues labeled
good first issueorhelp wanted - Comment on the issue to let us know you're working on it
- Follow the development setup guide below
- Node.js (v18 or higher)
- npm or yarn
- Git
- A GitHub account
- A Supabase account (free tier works)
-
Fork the repository
- Click the "Fork" button on the top right of this repo
-
Clone your fork
git clone https://github.com/YOUR_USERNAME/firstissue.dev.git cd firstissue.dev -
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env
Fill in your Supabase credentials:
VITE_SUPABASE_URL=your_supabase_url VITE_SUPABASE_ANON_KEY=your_supabase_anon_key -
Start the development server
npm run dev
-
Open in browser
- Visit
http://localhost:5173
- Visit
firstissue.dev/
├── public/ # Static assets
├── src/
│ ├── assets/ # Images, logos
│ ├── components/ # Reusable UI components
│ │ ├── Navbar.jsx
│ │ ├── Footer.jsx
│ │ └── ...
│ ├── contexts/ # React Context providers
│ │ └── AuthContext.jsx
│ ├── lib/ # External service configs
│ │ └── supabase.js
│ ├── pages/ # Page components
│ │ ├── LandingPage.jsx
│ │ ├── ExplorePage.jsx
│ │ └── ...
│ ├── App.jsx # Main app with routes
│ ├── main.jsx # Entry point
│ └── index.css # Global styles
├── docs/ # Documentation
├── index.html # HTML template
├── package.json
├── vite.config.js
└── tailwind.config.js
- Look for issues labeled
good first issueorfirst-timers-only - Read the issue description carefully
- Comment "I'd like to work on this" to claim it
git checkout -b feature/your-feature-name
# or
git checkout -b fix/bug-description- Write clean, readable code
- Follow the existing code style
- Test your changes locally
git add .
git commit -m "feat: add your feature description"Commit message format:
feat:- New featurefix:- Bug fixdocs:- Documentation changesstyle:- Code style changes (formatting)refactor:- Code refactoringtest:- Adding tests
git push origin feature/your-feature-name- Go to your fork on GitHub
- Click "Compare & pull request"
- Fill in the PR template
- Submit!
Use a clear, descriptive title:
feat: add dark mode togglefix: resolve login redirect issueUpdate codeFixed stuff
Include:
- What changes you made
- Why you made them
- Screenshots (for UI changes)
- Related issue number (e.g., "Closes #123")
- Code runs without errors
- No console warnings
- Tested on different screen sizes
- Code follows project style guide
- Use functional components with hooks
- Use meaningful variable names
- Add comments for complex logic
- Keep components small and focused
- Use Tailwind utility classes
- Follow the color scheme:
#222831- Dark background#393E46- Secondary background#00ADB5- Accent color#EEEEEE- Light text
- Components:
PascalCase.jsx(e.g.,Navbar.jsx) - Utilities:
camelCase.js(e.g.,helpers.js) - Pages:
PascalCase.jsx(e.g.,ExplorePage.jsx)
- Comment on the issue you're working on
- Reach out to maintainers
- Check the docs folder
**Thank you for contributing! Every contribution, no matter how small, makes a difference. **