Your AI-powered guide to finding the perfect open-source project to contribute to.
Features β’ Architecture β’ Getting Started β’ Local Dev (No Docker) β’ API Reference β’ Contributing β’ Troubleshooting
Opensource Compass helps developers β especially beginners β discover open-source repositories that are the perfect fit for them. Instead of drowning in thousands of GitHub repos, you tell the platform your programming languages, domains of interest, and experience level. The AI-powered engine then finds, ranks, and explains why a particular project is a great match for you.
Key capabilities:
- π€ AI-scored repository recommendations tailored to your skills
- π Real-time GitHub repository search and discovery
- π Watchlist with live WebSocket notifications for new issues
- π οΈ AI-generated setup guides to make your first contribution easier
- π Secure GitHub OAuth login (no password needed)
The scoring engine fetches GitHub repositories matching your preferences and scores them:
| Signal | Points | Description |
|---|---|---|
| Good First Issues | +25 | Repository has beginner-friendly issues |
| Recent Activity | +20 | Repository is actively maintained |
| Maintainer Responsiveness | +20 | Maintainer actively responds to issues/PRs |
| Clear Documentation | +15 | Repository has a well-written README |
| Tech Stack Match | up to +20 | Your languages match the repo's stack |
- Discover Page β Browse and search all of GitHub in real-time with your filters active
- Recommendations Page β Get one highly-curated pick with a full scoring breakdown
- Watchlist β Save repos and get notified when new issues are opened (via WebSocket)
- AI Setup Guide β Per-repo AI-generated contribution guide tailored to your experience level
- Settings & Onboarding β Configure languages, domain interests, and experience level
Opensource Compass uses a microservices architecture orchestrated with Docker Compose.
Browser (localhost:3000)
β
βββ REST βββΊ Auth Service (:8080) β GitHub OAuth, JWT issuance
βββ REST βββΊ Core Service (:8083) β Orchestration, scoring, prefs, watchlist
βββ REST βββΊ GitHub Service (:8081) β GitHub API proxy (search, issues)
βββ WS βββΊ Notification Svc (:8084) β Real-time issue alerts
β
Core Service calls:
βββ GitHub Service (:8081)
βββ AI Service (:8082) β LLM (Groq / Gemini)
β
Core Service reads/writes:
βββ Supabase PostgreSQL (cloud database)
| Service | Port | Language | Responsibility |
|---|---|---|---|
| Frontend | 3000 | Next.js / TypeScript | UI, auth state, real-time notifications |
| Auth Service | 8080 | Go (Gin) | GitHub OAuth callback, JWT minting |
| Core Service | 8083 | Go (net/http) | Orchestration, scoring, preferences, watchlist |
| GitHub Service | 8081 | Go (Gin) | GitHub REST API proxy (repo search, issues) |
| AI Service | 8082 | Go (Gin) | LLM calls for issue analysis & setup guides |
| Notification Service | 8084 | Go (net/http) | WebSocket hub for real-time issue alerts |
Estimated time: ~15β20 minutes on your first setup.
Before you start, make sure you have these installed:
| Tool | Version | Where to get it |
|---|---|---|
| Docker Desktop | Latest | https://www.docker.com/products/docker-desktop/ |
| Node.js | 18 or higher | https://nodejs.org/ |
| Git | Any | https://git-scm.com/ |
Go is not required unless you want to run services outside Docker.
git clone https://github.com/Vedant1703/Opensource_Compass.git
cd Opensource_CompassYou need 4 things before you can run the project. Here's exactly where to get each one:
- Go to https://supabase.com and sign up (free).
- Click "New project" β give it a name β set a database password β save the password somewhere safe.
- Wait ~1 minute for the project to be provisioned.
- In your project dashboard go to: Settings β Database β Connection String β URI.
- Copy the URI. It will look like:
postgresql://postgres.<project-ref>:<your-password>@aws-0-ap-southeast-1.pooler.supabase.com:5432/postgres - Replace
<your-password>in the URI with the password you set in step 2.
- Go to https://github.com/settings/developers.
- Click "New OAuth App".
- Fill in the form:
- Application name:
Opensource Compass(or anything you like) - Homepage URL:
http://localhost:3000 - Authorization callback URL:
http://localhost:8080/auth/github/callbackβ This must be exact
- Application name:
- Click "Register application".
- Copy the Client ID shown on the page.
- Click "Generate a new client secret" β copy the secret (it only shows once!).
This is separate from the OAuth app β it gives the app higher API rate limits (5,000 req/hr instead of 60).
- Go to https://github.com/settings/tokens.
- Click "Generate new token (classic)".
- Give it a name like
Opensource Compass. - Select the
public_reposcope (that's all that's needed). - Click "Generate token" β copy it (only shown once!).
Groq is free and gives you fast LLM inference.
- Go to https://console.groq.com and sign up (free, no credit card needed).
- Go to API Keys in the sidebar.
- Click "Create API Key" β give it a name β copy the key.
cp .env.example .envOpen .env and fill in your values:
DATABASE_URL=postgresql://postgres.<ref>:<password>@...
GITHUB_CLIENT_ID=<from step 2b>
GITHUB_CLIENT_SECRET=<from step 2b>
GITHUB_TOKEN=<from step 2c>
JWT_SECRET=<run: openssl rand -hex 32>
LLM_PROVIDER=groq
LLM_MODEL=llama-3.3-70b-versatile
GROQ_API_KEY=<from step 2d>
GEMINI_API_KEY=your_gemini_api_key # leave as-is if using Groq
NEXT_PUBLIC_AUTH_SERVICE_URL=http://localhost:8080
NEXT_PUBLIC_CORE_SERVICE_URL=http://localhost:8083
NEXT_PUBLIC_GITHUB_SERVICE_URL=http://localhost:8081
AUTH_REDIRECT_URL=http://localhost:3000/auth/successGenerate JWT_SECRET (one-time): run
openssl rand -hex 32in your terminal and paste the output.
cp frontend/.env.local.example frontend/.env.localThis file already has the correct defaults β you don't need to change anything unless you're using non-default ports.
docker-compose up --buildThe first build takes 3β5 minutes while Docker downloads Go images and compiles each service. Subsequent starts are much faster.
You should see logs like:
compass_core | Migrations applied successfully
compass_core | Core service running on :8083
compass_auth | Auth service running on :8080
compass_github | Github service running on :8081
compass_ai | AI Service running on port 8082
compass_notification | Notification Service running on :8084
If you see all 5 services running, the backend is ready. β
Open a new terminal (keep Docker Compose running in the first one):
cd frontend
npm install
npm run devYou should see:
β² Next.js 16
- Local: http://localhost:3000
β Ready in 500ms
Visit http://localhost:3000 in your browser.
Click "Sign in with GitHub" and you'll be redirected through GitHub OAuth and then to the onboarding page where you set your preferences.
You can run each service independently for faster iteration. Each service loads environment variables from its own .env.example file.
First, copy the example files for the services you want to run:
cp backend/auth-service/.env.example backend/auth-service/.env
cp backend/core_service/.env.example backend/core_service/.env
cp backend/github-service/.env.example backend/github-service/.env
cp backend/ai-service/.env.example backend/ai-service/.env
cp backend/notification-service/.env.example backend/notification-service/.envFill in the values in each file (they only contain the variables relevant to that service).
Then run each service:
# Terminal 1 β Auth Service
cd backend/auth-service && go run ./cmd/server/...
# Terminal 2 β Core Service
cd backend/core_service && go run ./cmd/server/...
# Terminal 3 β GitHub Service
cd backend/github-service && go run ./cmd/server/...
# Terminal 4 β AI Service
cd backend/ai-service && go run ./cmd/server/...
# Terminal 5 β Notification Service
cd backend/notification-service && go run ./cmd/server/...
# Terminal 6 β Frontend
cd frontend && npm run devNote: When running services locally (not in Docker), service URLs in each
.envshould point tolocalhostinstead of Docker container names. For example,GITHUB_SERVICE_URL=http://localhost:8081instead ofhttp://github-service:8081.
All authenticated endpoints require an Authorization: Bearer <JWT> header. The JWT is obtained after GitHub OAuth login.
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET |
/recommendations |
β | Get AI-scored repository recommendation |
GET |
/repos/search |
β | Search/discover repositories |
GET |
/preferences |
β | Get user preferences |
POST |
/preferences |
β | Save user preferences |
GET |
/watchlist |
β | List watched repositories |
POST |
/watchlist |
β | Add a repo to watchlist |
DELETE |
/watchlist |
β | Remove a repo from watchlist |
GET |
/watchlist/check |
β | Check if a repo is in watchlist |
GET |
/repo/setup-guide |
β | Get AI-generated contribution setup guide |
GET/PATCH |
/users/ |
β | Get or update user profile |
GET |
/db-check |
β | Health check with DB connectivity |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET |
/auth/github |
β | Initiate GitHub OAuth flow |
GET |
/auth/github/callback |
β | GitHub OAuth callback, returns JWT |
GET |
/auth/me |
β | Get current authenticated user |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET |
/repos/search |
β | Search repos by language/domain |
GET |
/repos/:owner/:repo |
β | Get single repo info |
GET |
/issues/good-first |
β | Get good-first-issue count for a repo |
GET |
/repos/:owner/:repo/readme |
β | Get repo README content |
| Protocol | Endpoint | Description |
|---|---|---|
WebSocket |
/ws?user_id=<id> |
Real-time issue notifications for watched repos |
Score = good_first_issues(25) + recent_activity(20) + maintainer_active(20)
+ clear_readme(15) + tech_stack_match(0β20)
Difficulty Classification:
- π’ Beginner β Score β₯ 75
- π‘ Intermediate β Score β₯ 50
- π΄ Advanced β Score < 50
Opensource Compass supports two LLM providers, switchable via environment variable:
| Provider | LLM_PROVIDER |
LLM_MODEL |
Free tier |
|---|---|---|---|
| Groq (recommended) | groq |
llama-3.3-70b-versatile |
β Yes |
| Google Gemini | gemini |
gemini-1.5-flash |
β Yes |
Groq is recommended for its high rate limits and very fast inference.
β οΈ Themixtral-8x7b-32768model was decommissioned by Groq in March 2025. Usellama-3.3-70b-versatileinstead.
Opensource_Compass/
βββ .env.example # Root env template (start here)
βββ docker-compose.yml # Full-stack orchestration
β
βββ frontend/ # Next.js 16 App Router frontend
β βββ .env.local.example # Frontend env template
β βββ app/
β β βββ (auth)/ # Protected pages (require login)
β β β βββ discover/ # Repository discovery + search
β β β βββ recommendations/# AI-curated recommendation
β β β βββ repo/ # Repository detail + setup guide
β β β βββ notifications/ # Real-time notification feed
β β β βββ profile/ # User profile
β β β βββ settings/ # Preferences management
β β βββ auth/ # GitHub OAuth landing page
β β βββ onboarding/ # First-time user setup
β βββ components/ # Reusable UI components
β βββ contexts/ # React contexts (auth, notifications)
β βββ lib/api/ # Typed API client functions
β
βββ backend/
βββ auth-service/ # GitHub OAuth + JWT (Go/Gin)
β βββ .env.example # β Auth service env template
βββ core_service/ # Orchestration, scoring (Go/net/http)
β βββ .env.example # β Core service env template
β βββ db/migrations/ # PostgreSQL migration SQL files
βββ github-service/ # GitHub API proxy (Go/Gin)
β βββ .env.example # β GitHub service env template
βββ ai-service/ # LLM analysis service (Go/Gin)
β βββ .env.example # β AI service env template
β βββ internal/
β βββ llm/ # Groq & Gemini API clients
β βββ analysis/ # Issue analysis logic
β βββ prompts/ # LLM prompt templates
βββ notification-service/ # WebSocket notification hub (Go)
βββ .env.example # β Notification service env template
The frontend makes direct browser-to-backend requests. If you see CORS errors:
- Make sure all backend services are running (
docker-compose up --build) - Make sure you restarted
npm run devafter editingfrontend/.env.local - All
NEXT_PUBLIC_*URLs must uselocalhostnot Docker container names
This means NEXT_PUBLIC_CORE_SERVICE_URL is undefined. Fix:
- Check that
frontend/.env.localexists and containsNEXT_PUBLIC_CORE_SERVICE_URL=http://localhost:8083 - Restart
npm run dev(env changes require a restart)
The mixtral-8x7b-32768 model was removed by Groq. Fix:
- In your root
.env, set:LLM_MODEL=llama-3.3-70b-versatile - Rebuild:
docker-compose up -d --build ai-service
Check that your DATABASE_URL in .env is correct. Common mistakes:
- Forgot to replace
<your-password>in the URL - Using the "Session mode" URL instead of "Transaction mode" (Supabase offers both)
- The Supabase project is paused (free projects pause after 1 week of inactivity β resume it at supabase.com)
- Double-check
GITHUB_CLIENT_IDin.envmatches exactly the Client ID shown in your GitHub OAuth App settings - Make sure the callback URL in your GitHub OAuth App is exactly:
http://localhost:8080/auth/github/callback
- Make sure Docker Desktop is running and has at least 4 GB of RAM allocated
- Try
docker-compose downanddocker-compose up --buildagain - On Mac: Docker Desktop β Settings β Resources β increase Memory to 4 GB+
Contributions are very welcome! Here's how to get started:
- Fork the repository on GitHub
- Clone your fork:
git clone https://github.com/<your-username>/Opensource_Compass.git - Create a feature branch:
git checkout -b feature/my-awesome-feature - Set up your local environment following the Getting Started guide above
- Write your changes and test them with
docker-compose up --build - Commit with a descriptive message:
git commit -m 'feat: add awesome feature' - Push your branch:
git push origin feature/my-awesome-feature - Open a Pull Request on GitHub
We use Conventional Commits:
| Prefix | When to use |
|---|---|
feat: |
New feature |
fix: |
Bug fix |
docs: |
Documentation changes |
refactor: |
Code cleanup (no behavior change) |
chore: |
Dependency updates, config changes |
- All backend services are in Go β follow standard Go formatting (
gofmt) - Frontend is TypeScript/React β follow existing component patterns
- Make sure all services still build:
docker-compose up --build - Keep each service's
.env.exampleup to date if you add new env vars
This project is licensed under the MIT License. See the LICENSE file for details.
Built with β€οΈ by Vedant Kulkarni and contributors
Finding your first open-source contribution shouldn't be hard. That's why we built this.