Kontri helps you discover open‑source projects and contribution opportunities that match your skills and interests. It leverages the GitHub API to surface beginner‑friendly issues and recommend repositories tailored to you.
🫵 Visit Kontri to explore open-source projects and start contributing today!
- Personalized recommendations by languages, frameworks, interests, and experience level
- Beginner‑friendly issue discovery (good first issues, etc.)
- Live data from GitHub for repository search and stats
- Analyze starred and followed repositories
- Exclude repositories you've already contributed to (approximation)
- Basic collaborative filtering using your stars and followed users
- Modern UI with Vue 3 + Vite + Tailwind, state managed by Pinia
- Node.js v18+ (v20+ recommended)
- npm
- GitHub OAuth App (Client ID/Secret)
- Clone and install
git clone https://github.com/kyto64/Kontri.git
cd Kontri
npm install- Create env files from examples
# Backend
cp backend/.env.development.example backend/.env.development
# Frontend
cp frontend/.env.development.example frontend/.env.development- Configure environment variables
- Backend (
backend/.env.development)JWT_SECRET(any secure string)GH_CLIENT_ID/GH_CLIENT_SECRET(GitHub OAuth App)SERVICE_URL(your frontend origin, e.g. http://localhost:3000)ALLOWED_ORIGINS(CORS allowlist, e.g. http://localhost:3000)PORT(3001 recommended for local dev)GITHUB_TOKEN(optional; PAT to raise search rate limits)
- Frontend (
frontend/.env.development)VITE_API_BASE_URL(e.g. http://localhost:3001)
- Start development servers
npm run dev- Frontend: http://localhost:3000
- Backend API: http://localhost:3001 (dev)
Notes:
- Dev server proxies
/apitohttp://localhost:3001(seefrontend/vite.config.ts). - In production containers the backend listens on
PORT=3000to match Fly.iointernal_port=3000.
- Frontend requests
GET /api/auth/github/urland redirects user to GitHub - GitHub redirects back to
SERVICE_URL/auth/github/callbackwithcode - Frontend posts
codetoPOST /api/auth/github/callback - Backend exchanges access token, fetches user info, and returns a JWT
- Frontend stores JWT in
localStorageand includes it on subsequent API calls
Scopes:
user:email,read:user,public_repo
Base path: /api
-
Auth
GET /auth/github/urlPOST /auth/github/callback(body:{ code })GET /auth/me(JWT required)POST /auth/logout(JWT required)
-
GitHub search
GET /github/repositories/search?language&minStars&maxStars&hasGoodFirstIssues&topicsGET /github/repositories/:owner/:repoGET /github/repositories/:owner/:repo/issues?labelsGET /github/repositories/:owner/:repo/good-first-issues
-
Recommendations
POST /recommendations/generate(sendskillsand optionalfilters)GET /recommendations/trending/:language?limitGET /recommendations/healthPOST /recommendations/generate/personalized(JWT required)
-
Skill analysis (JWT required)
POST /skills/analyzeGET /skills/my-analysisDELETE /skills/my-analysisGET /skills/status
-
Contribution history (JWT required)
GET /contribution-history(current user)GET /contribution-history/:username(public info)GET /contribution-history/stats/summary
-
Health check
GET /health
See docs/API.md for details and docs/OPENAPI.json for the OpenAPI sketch.
- Frontend: Vue 3, TypeScript, Vite, Tailwind CSS, Pinia, Vue Router
- Backend: Node.js, Express, TypeScript, Zod, GitHub API
Kontri/
├── frontend/ # Vue 3 + Vite
│ └── src/{components,views,stores,services,types,...}
├── backend/ # Express + TypeScript API
│ └── src/{routes,services,types,middleware}
├── docs/ # Documentation (API/environment/etc.)
├── package.json # Workspaces (frontend, backend)
└── README.md
# install deps
npm install
# dev (frontend + backend)
npm run dev
# one side only
npm run dev:frontend
npm run dev:backend
# build (frontend -> backend)
npm run build
# type check
npm run type-checkFly.io deployment ready (frontend app: kontri, backend app: kontri-api).
Backend listens on PORT=3000 in production. See DEPLOYMENT.md for secrets and config.
Contributions welcome. See CONTRIBUTING.md.
MIT License — see LICENSE.
Found a vulnerability? See SECURITY.md for responsible disclosure.
Bug reports and feature requests: https://github.com/kyto64/Kontri/issues
Made with ❤️ for the OSS community

