Features β’ Demos β’ Tech Stack β’ Architecture β’ Installation β’ API Docs β’ Contributing β’ License
PushClash is a full-stack web application that helps developers gain insights about GitHub profiles, LeetCode profiles, and portfolio websites with a twist of humor. The platform offers five main services: GitHub profile roasting, LeetCode profile analysis, head-to-head profile battles for both platforms, and portfolio website analysis.
The project combines powerful API integrations with Google's Gemini AI to generate personalized, entertaining feedback that's both funny and insightful. The application is designed with a clean, modern UI and responsive design to provide an excellent user experience across all devices.
- Enter any GitHub username to receive a detailed, humorous analysis
- AI-powered insights on coding habits, repository quality, and commit patterns
- Personalized feedback on strengths and areas for improvement
- Compare two GitHub users head-to-head in a coding showdown
- AI-generated battle report analyzing strengths and weaknesses
- Entertaining commentary with a clear winner declaration
- Enter any LeetCode username for a customized roast
- Detailed breakdown of problem-solving statistics and rankings
- Humorous commentary on coding skills and problem-solving patterns
- Compare two LeetCode profiles in a coding skills competition
- Side-by-side stats comparison of solved problems and difficulty levels
- AI-generated analysis of who has superior problem-solving abilities
- Submit any portfolio URL for comprehensive technical assessment
- Evaluation of design, content, performance, and technical implementation
- Detailed feedback with actionable improvement suggestions
roast.mp4
battle.mp4
https://github.com/user-attachments/assets/leetcode-roast-preview
https://github.com/user-attachments/assets/leetcode-battle-preview
portfolio.mp4
- Framework: React.js (Vite)
- Routing: React Router v6
- Styling: Tailwind CSS
- Animations:
- TypeWriter Effect
- dotLottie for loading states
 
- State Management: React Hooks
- Notifications: React Toastify
- Deployment: Vercel
- Runtime: Node.js
- Framework: Express.js
- AI Integration: Google Generative AI (Gemini)
- Web Scraping: Puppeteer
- API Integration: GitHub API, LeetCode API
- Deployment: Render
PushClash follows a client-server architecture:
βββββββββββββββββββ       βββββββββββββββββββ      βββββββββββββββββββββ
β                 β       β                 β      β                   β
β  React Frontend βββββββββΊ  Node Backend   ββββββββΊ   External APIs   β
β     (Vite)      β       β  (Express.js)   β      β (GitHub, LeetCode,β
β                 β       β                 β      β     Gemini)       β
βββββββββββββββββββ       βββββββββββββββββββ      βββββββββββββββββββββ
- Frontend: Handles UI rendering, user interactions, and API calls to the backend
- Backend: Processes requests, communicates with external APIs, and returns formatted data
- External Services:
- GitHub API: Fetches user data, repositories, and statistics
- LeetCode API: Fetches user statistics and problem-solving data
- Gemini AI: Generates personalized roasts and battle analysis
- Puppeteer: Performs website scraping for portfolio analysis
 
- Node.js (v14+)
- npm or yarn
- GitHub Personal Access Token
- Google Gemini API Key
# Navigate to frontend directory
cd Frontend
# Install dependencies
npm install
# Create .env file with API endpoints
echo "VITE_ROAST_BASE_URL=http://localhost:3000" > .env
echo "VITE_PROFILE_IMAGE_API_BASE_URL=http://localhost:3000" >> .env
# Start development server
npm run dev# Navigate to backend directory
cd Backend
# Install dependencies
npm install
# Create .env file with required API keys
cat << EOF > .env
GITHUB_TOKEN=your_github_personal_access_token
GEMINI_API_KEY=your_gemini_api_key
PORT=3000
EOF
# Start development server
npm run devPushClash/
βββ Frontend/     # React frontend application
β   βββ public/                # Static assets
β   βββ src/                   # Source files
β   β   βββ assets/           # Images and static resources
β   β   βββ components/       # Reusable React components
β   β   βββ pages/            # Page components
β   β   β   βββ Home.jsx      # Landing page
β   β   β   βββ Roast.jsx     # GitHub profile roasting
β   β   β   βββ Battle.jsx    # GitHub profile battle
β   β   β   βββ LeetCode.jsx  # LeetCode profile roasting
β   β   β   βββ LeetCodeBattle.jsx # LeetCode profile battle
β   β   β   βββ Portfolio.jsx # Portfolio analysis
β   β   βββ App.jsx           # Main application component
β   β   βββ main.jsx          # Entry point
β   β   βββ index.css         # Global styles
β   βββ index.html            # HTML template
β   βββ package.json          # Frontend dependencies
β   βββ tailwind.config.js    # Tailwind CSS configuration
β
βββ Backend/      # Node.js backend application
β   βββ routes/                # API route definitions
β   β   βββ battle.js         # Battle endpoints
β   β   βββ github.js         # GitHub API endpoints
β   β   βββ portfolio.js      # Portfolio analysis endpoints
β   β   βββ roast.js          # Roast generation endpoints
β   βββ services/              # Business logic layer
β   β   βββ ai-service.js     # Gemini AI integration
β   β   βββ github-service.js # GitHub API service
β   βββ utils/                 # Utility functions
β   β   βββ text-utils.js     # Text processing utilities
β   βββ index.js               # Application entry point
β   βββ package.json           # Backend dependencies
β
βββ README.md                   # Project documentation
GET /github/profile-image/:username
Returns the profile image URL for a GitHub user.
GET /github/user/:username
Returns detailed user profile information.
POST /api/roast
Generates an AI-powered roast for a GitHub user.
Request Body:
{
  "username": "githubUsername"
}POST /api/leetcode-roast
Generates an AI-powered roast for a LeetCode user.
Request Body:
{
  "username": "leetcodeUsername"
}POST /api/battle
Compares two GitHub users with humorous analysis.
Request Body:
{
  "username1": "firstGithubUsername",
  "username2": "secondGithubUsername"
}POST /api/leetcode-battle
Compares two LeetCode users with humorous analysis.
Request Body:
{
  "username1": "firstLeetCodeUsername",
  "username2": "secondLeetCodeUsername"
}POST /api/portfolio/icon
Fetches the favicon for a given website URL.
Request Body:
{
  "url": "https://example.com"
}POST /api/portfolio/roast
Creates a humorous critique of a portfolio website.
Request Body:
{
  "url": "https://example.com",
  "scrapeData": { /* Website analysis data */ }
}POST /api/scrape
Analyzes a website's performance, accessibility, and SEO.
Request Body:
{
  "url": "https://example.com"
}- Navbar: Navigation component with adaptive dark/light mode support
- Home: Landing page with feature highlights and getting started guide
- Roast: GitHub profile analysis page with typewriter effect for results
- Battle: Head-to-head comparison tool for GitHub profiles
- LeetCode: LeetCode profile analysis with problem-solving statistics
- LeetCodeBattle: Head-to-head comparison tool for LeetCode profiles
- Portfolio: Website analysis page with technical assessment features
- Footer: Contains attribution and developer contact information
- GitHub Service: Handles all GitHub API integrations for fetching user data
- AI Service: Manages interactions with Google Gemini for generating content
- Web Scraping Service: Uses Puppeteer to analyze website content and performance
- LeetCode Service: Integrates with LeetCode API for user statistics
- Connect your GitHub repository to Vercel
- Configure build settings:
- Build Command: npm run build
- Output Directory: dist
- Install Command: npm install
 
- Build Command: 
- Add environment variables for API endpoints
- Deploy
- Connect your GitHub repository to Railway or Render
- Configure build settings:
- Build Command: npm install
- Start Command: npm start
 
- Build Command: 
- Add environment variables for API keys and tokens
- Deploy
Contributions are welcome! Here's how you can contribute:
- Fork the repository
- Create a new branch (git checkout -b feature/amazing-feature)
- Make your changes
- Commit your changes (git commit -m 'Add some amazing feature')
- Push to the branch (git push origin feature/amazing-feature)
- Open a Pull Request
Please make sure to update tests as appropriate and adhere to the existing coding style.
This project is licensed under the MIT License - see the LICENSE file for details.
Nabarup Roy
- Website: nabaruproy.me
- GitHub: @NabarupDev
- LinkedIn: Nabarup Roy
- GitHub API for providing the data
- LeetCode API for providing coding statistics
- Google Gemini AI for powering the intelligent roasts
- All open-source libraries and tools used in this project

