Thank you for considering contributing to Final Year Projects Hub!
We welcome contributions from developers of all skill levels. This guide will help you get started.
- 🎯 Ways to Contribute
- ⚙️ Technical Requirements
- 🚀 Development Setup
- 🏗️ Project Architecture
- 📝 Adding Your Project
- 🐛 Bug Reports
- ✨ Feature Requests
- 💻 Code Contributions
- 🔧 Troubleshooting Common Issues
- 📋 Pull Request Guidelines
- 🎨 Code Style Guide
- 🧪 Testing Guidelines
- 📚 Documentation
There are many ways you can contribute to this project:
| Contribution Type | Description | Skill Level |
|---|---|---|
| 📁 Add Your Project | Share your final year project | Beginner |
| 🐛 Report Bugs | Help identify issues | Beginner |
| 💡 Suggest Features | Propose new ideas | Beginner |
| 📖 Improve Documentation | Enhance guides and docs | Beginner |
| 🎨 Design Improvements | UI/UX enhancements | Intermediate |
| 💻 Code Contributions | Bug fixes, new features | Intermediate-Advanced |
| 🧪 Write Tests | Add test coverage | Intermediate-Advanced |
| ♿ Accessibility | Improve a11y compliance | Intermediate |
| 🌐 Translations | Add i18n support | Intermediate |
{
"node": ">=18.17.0",
"npm": ">=9.0.0",
"packageManager": "npm | yarn | pnpm"
}- Node.js:
18.xor20.x(LTS versions) - Package Manager:
pnpm(fastest) ornpm - Code Editor: VS Code with recommended extensions
- Git: Latest version
This project uses the latest stable versions:
| Package | Version | Notes |
|---|---|---|
| Next.js | 15.2.4 |
App Router (not Pages Router) |
| React | 18.3.1 |
Client & Server Components |
| TypeScript | ^5.x |
Strict mode enabled |
| Tailwind CSS | 4.1.9 |
Latest with new features |
| Radix UI | ~1.x |
Accessible component primitives |
⚠️ Important: This project was initially scaffolded with v0 and uses Next.js 15 (App Router). If you encounter compatibility issues with older tutorials or examples targeting Next.js 14 or Pages Router, please refer to the official migration guide.
Verify your environment:
# Check Node.js version (should be 18.x or higher)
node --version
# Check npm version
npm --version
# Check Git version
git --version# Fork the repository on GitHub, then clone your fork
git clone https://github.com/YOUR_USERNAME/final-year-projects-hub.git
cd final-year-projects-hub
# Add upstream remote
git remote add upstream https://github.com/avinash201199/final-year-projects-hub.git
# Verify remotes
git remote -v# Using npm (recommended)
npm install
# Using yarn
yarn install
# Using pnpm (fastest)
pnpm installCreate a .env.local file (if needed for future features):
# Currently no env variables required
# This file is for future configurationnpm run devVisit http://localhost:3000 to see the app running.
Check that everything works:
- ✅ App loads without errors
- ✅ Projects display correctly
- ✅ Search and filtering work
- ✅ Dark mode toggle works
- ✅ No console errors
final-year-projects-hub/
├── app/ # Next.js App Router
│ ├── layout.tsx # Root layout with providers
│ ├── page.tsx # Home page
│ ├── globals.css # Global styles & CSS variables
│ ├── about/ # About page
│ ├── contact/ # Contact page
│ ├── contribute/ # Contribution guide page
│ └── project/[id]/ # Dynamic project detail pages
│
├── components/ # React components
│ ├── header.tsx # Site header with navigation
│ ├── footer.tsx # Site footer
│ ├── project-card.tsx # Project card component
│ ├── search-filter.tsx # Search & filter UI
│ ├── spotlight.tsx # Global search modal
│ ├── theme-provider.tsx # Dark mode provider
│ ├── theme-toggle.tsx # Theme switcher button
│ └── ui/ # shadcn/ui components
│
├── data/
│ └── projects.json # Project data storage
│
├── public/
│ ├── projects/ # Project screenshots
│ └── profile/ # Contributor avatars
│
├── lib/
│ └── utils.ts # Utility functions
│
├── styles/
│ └── globals.css # Additional global styles
│
└── hooks/ # Custom React hooks
- Next.js 15 with App Router (Server & Client Components)
- React 18 with Concurrent Features
- TypeScript for type safety
- Tailwind CSS 4.x (utility-first CSS)
- CSS Variables for theming
- shadcn/ui components built on Radix UI
- React hooks (
useState,useMemo,useEffect) - URL state for search/filters
- Local storage for theme preference
projects.json → Server Component → Client Component → UI
- Create an Issue First: Open an issue with your project details
- Wait for Approval: A maintainer will review and approve
- Then Proceed: Only after approval, follow the steps below
Screenshot Requirements:
- Dimensions: 1200x630px (16:9 ratio) recommended
- Format: JPG, PNG, or WebP
- Size: Max 500KB (compress if needed)
- Quality: High-resolution, clear UI
- Content: Show main features, avoid generic stock images
Tools for Compression:
# Add to public/projects/
cp /path/to/your-screenshot.jpg public/projects/my-project-name.jpgNaming Convention:
- Use lowercase
- Replace spaces with hyphens
- Be descriptive but concise
- Example:
ai-code-review.jpg,weather-app.png
Open data/projects.json and add your project entry:
{
"id": 999,
"title": "Your Amazing Project",
"description": "Brief one-line description (max 120 characters)",
"category": "Web Development",
"techStack": ["React", "Node.js", "MongoDB", "Docker"],
"github": "https://github.com/username/repo",
"live": "https://your-demo.com",
"image": "/projects/your-project.jpg",
"contributors": ["Your Name", "Teammate Name"],
"featured": false,
"fullDescription": "Detailed multi-line description explaining what your project does, the problem it solves, key features, and technical highlights. This appears on the project detail page."
}Field Specifications:
| Field | Type | Required | Notes |
|---|---|---|---|
id |
number | ✅ | Use next available number |
title |
string | ✅ | Max 80 characters |
description |
string | ✅ | Max 120 characters |
category |
string | ✅ | Must match existing categories |
techStack |
array | ✅ | 3-8 technologies recommended |
github |
string | ✅ | Valid GitHub URL |
live |
string | URL or empty string "" | |
image |
string | ✅ | Path: /projects/filename.jpg |
contributors |
array | ✅ | 1-5 names |
featured |
boolean | ✅ | Always false for new projects |
fullDescription |
string | ✅ | 200-500 words |
Valid Categories:
- Machine Learning
- Web Development
- Mobile Development
- IoT
- Data Science
- Blockchain
- Cybersecurity
- Game Development
- AR/VR
- Cloud Computing
# Start dev server
npm run dev
# Check these:
# ✓ Your project appears on homepage
# ✓ Clicking opens detail page
# ✓ Image loads correctly
# ✓ All links work
# ✓ Search finds your project
# ✓ Filter by category worksEnsure projects.json is valid:
# Check JSON syntax
cat data/projects.json | jq . > /dev/null && echo "Valid JSON" || echo "Invalid JSON"
# Or use online validator
# https://jsonlint.com/# Create a feature branch
git checkout -b add-project-your-name
# Stage changes
git add data/projects.json public/projects/your-image.jpg
# Commit with descriptive message
git commit -m "Add: [Your Project Name] - Brief description
- Added project screenshot
- Updated projects.json with project details
- Tested locally
Closes #ISSUE_NUMBER"
# Push to your fork
git push origin add-project-your-name-
Go to your fork on GitHub
-
Click "Compare & pull request"
-
Fill the PR template:
## Description Adding my final year project: [Project Name] ## Type of Change - [x] Add new project - [ ] Bug fix - [ ] New feature - [ ] Documentation ## Checklist - [x] Followed project JSON structure - [x] Added optimized screenshot (<500KB) - [x] Tested locally - [x] Checked for typos - [x] Linked related issue: Closes #123 ## Screenshots [Attach preview of your project card]
-
Wait for review (usually 1-3 days)
-
Address any feedback
-
Celebrate when merged! 🎉
Found a bug? Help us fix it!
- Search Existing Issues: Check if already reported
- Update Dependencies: Run
npm installto get latest - Clear Cache: Try
rm -rf .nextthen restart dev server - Reproduce: Ensure it's reproducible
**Describe the Bug**
A clear description of what the bug is.
**To Reproduce**
Steps to reproduce:
1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See error
**Expected Behavior**
What you expected to happen.
**Screenshots**
If applicable, add screenshots.
**Environment**
- OS: [e.g., macOS 14, Windows 11, Ubuntu 22.04]
- Browser: [e.g., Chrome 120, Firefox 121, Safari 17]
- Node Version: [e.g., 18.17.0]
- Package Manager: [e.g., npm 9.8.0]
**Additional Context**
Any other relevant information.Have an idea? We'd love to hear it!
**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**
Mockups, examples, or references.
**Implementation Complexity**
- [ ] Simple (few lines of code)
- [ ] Medium (new component/page)
- [ ] Complex (architectural changes)
**Would you like to implement this?**
- [ ] Yes, I can work on this
- [ ] No, just suggesting- Design enhancements
- Accessibility improvements
- Responsive design fixes
- Animation and transitions
- New pages or components
- Enhanced search/filtering
- Performance optimizations
- PWA features
- Fix reported issues
- Edge case handling
- Cross-browser compatibility
- Mobile responsiveness
- Improve README
- Add code comments
- Create guides
- Update this file
# 1. Sync with upstream
git checkout main
git pull upstream main
# 2. Create feature branch
git checkout -b feature/your-feature-name
# or
git checkout -b fix/bug-description
# 3. Make changes
# Edit files, add features, fix bugs
# 4. Test thoroughly
npm run dev
# Test all affected functionality
# 5. Check for errors
npm run build
npm run lint
# 6. Commit with clear message
git add .
git commit -m "feat: Add new search filter
- Implemented category-based filtering
- Added keyboard shortcuts (Cmd+K)
- Updated UI for better UX
Closes #123"
# 7. Push to your fork
git push origin feature/your-feature-name
# 8. Create Pull Request
# Go to GitHub and create PRWe follow Conventional Commits:
<type>(<scope>): <subject>
<body>
<footer>
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style (formatting, no logic change)refactor: Code refactoringperf: Performance improvementstest: Adding testschore: Maintenance tasks
Examples:
# Good ✅
git commit -m "feat(search): Add fuzzy search with keyboard shortcuts"
git commit -m "fix(ui): Resolve dark mode contrast issue on cards"
git commit -m "docs: Update contribution guidelines"
# Bad ❌
git commit -m "fixed stuff"
git commit -m "updates"
git commit -m "changes"# Clear node_modules and reinstall
rm -rf node_modules package-lock.json
npm installSymptom: Errors mentioning Next.js 14 APIs or deprecated features
Solution:
# This project uses Next.js 15 (App Router)
# Check your version
npm list next
# Should show: next@15.2.4
# If different, update:
npm install next@latest react@latest react-dom@latest# Check Tailwind version (should be 4.x)
npm list tailwindcss
# Restart dev server
npm run dev
# If issue persists, clear Next cache
rm -rf .next
npm run dev# Check TypeScript version
npm list typescript
# Should be 5.x
# Generate fresh types
rm -rf .next
npm run devCheck:
- File path is correct:
/projects/your-image.jpg - File exists in
public/projects/ - File size < 500KB
- File format is JPG, PNG, or WebP
- No special characters in filename
# Check for JSON syntax errors
cat data/projects.json | jq .
# Check for TypeScript errors
npx tsc --noEmit
# Run build locally
npm run build# Kill process on port 3000
# macOS/Linux:
lsof -ti:3000 | xargs kill -9
# Windows:
netstat -ano | findstr :3000
taskkill /PID <PID> /F
# Or use different port
npm run dev -- -p 3001If you're stuck:
- Check Existing Issues: Someone might have had the same problem
- Ask in Discussions: GitHub Discussions
- Create an Issue: Provide details about your environment and error
- Code follows project style guide
- All tests pass (when applicable)
- No console errors or warnings
- Tested on Chrome, Firefox, and Safari
- Tested on mobile viewport
- Dark mode works correctly
- Images are optimized
- JSON is valid (if modified)
- TypeScript has no errors
- Build succeeds locally
## Description
Brief description of changes
## Type of Change
- [ ] 📁 Project addition
- [ ] 🐛 Bug fix
- [ ] ✨ New feature
- [ ] 📖 Documentation update
- [ ] 🎨 UI/UX improvement
- [ ] ♿ Accessibility improvement
- [ ] ⚡ Performance improvement
## Related Issues
Closes #(issue number)
## Testing
How has this been tested?
## Screenshots (if applicable)
Before | After
## Checklist
- [ ] Tested locally
- [ ] No console errors
- [ ] Responsive on mobile
- [ ] Dark mode works
- [ ] Follows code style
- [ ] Updated documentation (if needed)- Automated Checks: CI/CD runs automatically
- Code Review: Maintainer reviews within 1-3 days
- Feedback: Address any comments or requests
- Approval: PR approved by maintainer
- Merge: Changes merged to main branch
- Deploy: Automatically deployed to production
✅ DO:
- Keep PRs focused and small
- Respond to feedback promptly
- Be patient and respectful
- Test thoroughly before submitting
- Update your PR if main changes
❌ DON'T:
- Submit multiple unrelated changes
- Make changes after approval
- Close and reopen the same PR
- Spam with comments
- Take feedback personally
// ✅ Good: Use function components with TypeScript
interface ProjectCardProps {
project: Project
featured?: boolean
}
export function ProjectCard({ project, featured = false }: ProjectCardProps) {
return <div>{project.title}</div>
}
// ❌ Bad: Avoid default exports (except for pages)
export default function ProjectCard(props) {
return <div>{props.project.title}</div>
}// Components: PascalCase
ProjectCard.tsx
SearchFilter.tsx
// Utilities: camelCase
formatDate.ts
calculateScore.ts
// Constants: UPPER_SNAKE_CASE
export const MAX_PROJECTS = 100
export const DEFAULT_CATEGORY = "all"
// Types/Interfaces: PascalCase
interface Project { }
type ProjectCategory = string// Import order:
// 1. React/Next
// 2. External libraries
// 3. Internal components
// 4. Utils/hooks
// 5. Types
// 6. Styles
import { useState, useMemo } from "react"
import Link from "next/link"
import { Search } from "lucide-react"
import { ProjectCard } from "@/components/project-card"
import { formatDate } from "@/lib/utils"
import type { Project } from "@/types"// 1. Imports
// 2. Types/Interfaces
// 3. Component
// 4. Styles (if any)
import { useState } from "react"
interface Props {
title: string
}
export function MyComponent({ title }: Props) {
// 1. Hooks
const [state, setState] = useState("")
// 2. Computed values
const computed = useMemo(() => {}, [])
// 3. Event handlers
const handleClick = () => {}
// 4. Effects
useEffect(() => {}, [])
// 5. Render
return <div>{title}</div>
}// ✅ Good: Use semantic class ordering
<div className="flex items-center justify-between w-full h-16 px-4 bg-background text-foreground border-b border-border">
// ✅ Good: Use theme variables
<div className="bg-card text-card-foreground">
// ❌ Bad: Hardcoded colors
<div className="bg-white text-black dark:bg-slate-900 dark:text-white">
// ✅ Good: Responsive design
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
// ✅ Good: Extract repeated classes to components// ✅ Good: Explain WHY, not WHAT
// Debounce search to prevent excessive API calls
const debouncedSearch = useMemo(() => debounce(search, 300), [])
// ❌ Bad: Obvious comments
// Set state to true
setState(true)
// ✅ Good: Document complex logic
/**
* Calculates project relevance score based on:
* - Title match (3 points)
* - Description match (2 points)
* - Tech stack match (1 point)
*/
function calculateRelevance(project: Project, query: string): number {
// Implementation
}Before submitting a PR, test these scenarios:
- Homepage loads without errors
- Projects display correctly
- Search works (try various queries)
- Category filtering works
- Project detail pages load
- All links navigate correctly
- Images load properly
- Desktop (1920x1080)
- Laptop (1366x768)
- Tablet (768x1024)
- Mobile (375x667)
- Mobile landscape
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
- Keyboard navigation works
- Tab order is logical
- Focus indicators visible
- Images have alt text
- Sufficient color contrast
- Light mode displays correctly
- Dark mode displays correctly
- Theme toggle works
- Theme persists on reload
We plan to add:
- Unit tests with Jest
- Component tests with React Testing Library
- E2E tests with Playwright
- Visual regression tests
Documentation is as important as code! Help us by:
- Fixing Typos: Even small fixes matter
- Clarifying Instructions: Make things clearer
- Adding Examples: Show don't tell
- Updating Guides: Keep docs current
- Adding Diagrams: Visual aids help
- Translating: Help non-English speakers
# Use clear hierarchical headings
## Add descriptive section titles
### Include code examples
```bash
# Always add comments to bash commands
npm install # Install dependenciesUse formatting for emphasis
Use blockquotes for important notes
- Use bullet points for lists
- Keep points concise
- Be consistent
| Use | Tables |
|---|---|
| For | Structured data |
---
## 🌟 Recognition
### Contributors Wall of Fame
All contributors are automatically added to:
- [Contributors graph](https://github.com/avinash201199/final-year-projects-hub/graphs/contributors)
- Project README
- Release notes (for significant contributions)
### Contribution Levels
| Level | Contributions | Recognition |
|-------|---------------|-------------|
| 🌱 **Seedling** | 1-3 PRs | Contributor badge |
| 🌿 **Growing** | 4-10 PRs | Special mention in README |
| 🌳 **Established** | 11-25 PRs | Maintainer consideration |
| 🏆 **Core** | 25+ PRs | Core contributor status |
---
## 📞 Get Help
<div align="center">
### Need Assistance?
[](https://github.com/avinash201199/final-year-projects-hub/issues)
[](https://github.com/avinash201199/final-year-projects-hub/discussions)
[](mailto:letscode@lets-code.co.in)
**Response Time**: Usually within 24-48 hours
</div>
---
## 📄 License
By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE).
---
<div align="center">
### Thank You! 🙏
**Your contributions make this project better for everyone.**
[](https://github.com/avinash201199/final-year-projects-hub/graphs/contributors)
**Happy Contributing!** 🚀
</div>