Discover your next favorite GitHub repository through personalized recommendations
BranchOut is a modern web application that helps developers discover GitHub repositories tailored to their skill level, programming languages, and interests. Using an intuitive Tinder-style swipe interface, users can quickly browse through curated repository recommendations and save the ones they love.
- Smart Recommendations: AI-powered repository suggestions based on your preferences
- Skill-Level Matching: Repositories matched to your experience level (1st-4th year)
- Language-Specific: Filter by your preferred programming languages
- Topic-Based: Discover repos in specific domains (Web Dev, AI, Cybersecurity, etc.)
- Swipe Interface: Tinder-style cards for quick repository browsing
- Keyboard Shortcuts: Use arrow keys or A/D for navigation
- Detailed Views: Click cards for comprehensive repository information
- Real-time Feedback: Instant updates based on your preferences
- Dual Authentication: Local accounts or OAuth (Google, GitHub, etc.)
- Profile Management: Track your preferences and saved repositories
- Admin Dashboard: Administrative tools for user and repository management
- Onboarding: Guided tour for new users
- Save Favorites: Keep track of repositories you're interested in
- Detailed Information: View stars, languages, topics, and descriptions
- Direct Links: Quick access to GitHub repositories
- Organized Collections: Easy access to your saved repositories
- React 18 - Modern UI framework with hooks
- Material-UI (MUI) - Component library for consistent design
- React Router - Client-side routing
- Clerk - Authentication and user management
- Axios - HTTP client for API requests
- Node.js - Runtime environment
- Express.js - Web application framework
- PostgreSQL - Primary database
- WebSocket - Real-time chat functionality
- JWT - Secure authentication tokens
- Vite - Fast build tool and development server
- ESLint - Code linting and quality
- Git - Version control
- Node.js (v16 or higher)
- npm or yarn
- PostgreSQL database
- Git
-
Clone the repository
git clone https://github.com/yourusername/branchout.git cd branchout -
Install frontend dependencies
cd branchout-ui npm install -
Install backend dependencies
cd ../backend npm install -
Environment Setup
Create
.envfiles in both frontend and backend directories:Frontend (.env)
VITE_DATABASE_URL=http://localhost:3000/api VITE_CLERK_PUBLISHABLE_KEY=your_clerk_key_here
Backend (.env)
DATABASE_URL=postgresql://username:password@localhost:5432/branchout JWT_SECRET=your_jwt_secret_here CLERK_SECRET_KEY=your_clerk_secret_here PORT=3000
-
Database Setup
# Create database createdb branchout # Run migrations (if you have them) npm run migrate
-
Start the application
Backend:
cd branchout-api npm start # Open new terminal cd branchout-api bash run.sh (If you use MacOS)
Frontend:
cd branchout-ui npm start -
Open your browser Navigate to
http://localhost:5173to start using BranchOut!
- Sign Up: Create an account using email or OAuth providers
- Set Preferences: Configure your skill level, languages, and interests
- Discover: Start swiping through personalized repository recommendations
- Save Favorites: Swipe right or click the save button on repositories you like
- Explore: Visit your saved repositories and explore new projects
- Discovery: Main feed with repository recommendations
- Preferences: Update your skill level and interests
- Saved Repos: View all your saved repositories
- Profile: Manage your account and view statistics
- About: Learn more about BranchOut
←orA: Pass on current repository→orD: Save current repositorySpace: Open repository detailsEsc: Close modals or exit onboarding
branchout/
├── branchout-ui/ # Frontend React application
│ ├── public/ # Static assets
│ ├── src/
│ │ ├── components/ # Reusable React components
│ │ │ ├── Auth/ # Authentication components
│ │ │ ├── RepoCard/ # Repository card component
│ │ │ ├── SideBar/ # Navigation sidebar
│ │ │ ├── Onboarding/ # User onboarding system
│ │ │ └── ...
│ │ ├── pages/ # Page components
│ │ │ ├── DiscoveryPage/ # Main discovery interface
│ │ │ ├── PreferencesPage/ # User preferences
│ │ │ ├── ProfilePage/ # User profile
│ │ │ └── ...
│ │ ├── assets/ # Images, logos, etc.
│ │ └── App.jsx # Main application component
├── backend/ # Backend API server
│ ├── routes/ # API route handlers
│ ├── models/ # Database models
│ ├── middleware/ # Express middleware
│ └── server.js # Main server file
└── README.md # This file
BranchOut supports two authentication methods:
- Local Authentication: Traditional email/password with JWT tokens
- OAuth: Integration with Clerk for Google, GitHub, and other providers
Key entities include:
- Users: User accounts and preferences
- Repositories: GitHub repository information
- Swipes: User interactions with repositories
- Preferences: User skill levels, languages, and topics
Refer to the installation section for required environment variables.
We welcome contributions to BranchOut! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Write or update tests
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow existing code conventions
- Use meaningful variable and function names
- Write clear commit messages
- Add comments for complex logic
- Bug fixes
- New features
- Documentation improvements
- UI/UX enhancements
- Performance optimizations
- Test coverage
POST /api/auth/login- User loginPOST /api/auth/signup- User registrationPOST /api/auth/logout- User logoutPOST /api/auth/clerkSync- Sync Clerk user data
GET /api/user/profile- Get user profilePUT /api/user/profile- Update user profileGET /api/user/recommendations/:userId- Get personalized recommendations
POST /api/repo/swipe- Record user swipe interactionGET /api/repo/:id- Get repository details
Installation Problems
- Ensure Node.js version is 16 or higher
- Clear npm cache:
npm cache clean --force - Delete
node_modulesand reinstall:rm -rf node_modules && npm install
Database Connection
- Verify PostgreSQL is running
- Check database credentials in
.env - Ensure database exists:
createdb branchout
Authentication Issues
- Verify Clerk keys are correctly set
- Check JWT secret is configured
- Ensure environment variables are loaded
Build Errors
- Update dependencies:
npm update - Check for TypeScript errors if using TS
- Verify all imports are correct
BranchOut is optimized for performance with:
- Code Splitting: Lazy loading of routes and components
- Efficient Rendering: React hooks and memoization
- Optimized Assets: Compressed images and minified code
- Caching: Strategic use of browser and server-side caching
Security measures include:
- JWT Authentication: Secure token-based authentication
- Input Validation: Server-side validation of all inputs
- SQL Injection Prevention: Parameterized queries
- CORS Configuration: Proper cross-origin request handling
- Environment Variables: Sensitive data kept in environment variables
This project is licensed under the MIT License - see the LICENSE file for details.
BranchOut is developed and maintained by passionate developers who believe in making code discovery accessible and enjoyable.
- GitHub API for repository data
- Clerk for authentication services
- Material-UI for the component library
- All contributors who have helped improve BranchOut
If you encounter any issues or have questions:
- Check the Issues page
- Create a new issue with detailed information
- Contact the development team
Happy coding!
Made with love by the BranchOut team
