Udemy course recommender system based on learning roadmaps and existing skills. Select a roadmap, mark the skills you already know, and get personalized course recommendations — ranked using a hybrid Reciprocal Rank Fusion approach that combines semantic search with full-text search.
Built as an undergraduate thesis project (S1 Informatika, Universitas Jenderal Soedirman, 2025).
- Choose a roadmap — pick a learning path (e.g. Backend Developer, Frontend Developer)
- Mark your skills — check off skills you already have
- Get recommendations — the system queries Udemy courses and ranks results using Hybrid RRF
The hybrid search pipeline combines two retrieval strategies:
- Semantic search — vector similarity using PostgreSQL
pgvector, matching course descriptions to the user's skill gaps conceptually - Full-text search — PostgreSQL
tsvector/tsqueryfor keyword-based matching - Reciprocal Rank Fusion (RRF) — merges and re-ranks results from both strategies into a single unified ranking
This approach outperforms either strategy alone, especially for cases where keyword matching fails but semantic similarity is high (or vice versa).
| Layer | Technology |
|---|---|
| Framework | Next.js 15 (App Router) |
| Language | TypeScript |
| Database | PostgreSQL + TypeORM |
| Auth | Clerk |
| UI | shadcn/ui + Radix UI + Tailwind CSS |
| Charts | Recharts |
| Testing | Cypress (E2E) |
| Deployment | Vercel |
- Roadmap selection with skill tracking
- Hybrid course recommendation (semantic + full-text + RRF)
- User authentication via Clerk
- Recommendation history logging
- Responsive UI with dark mode support
- Node.js 18+
- PostgreSQL with
pgvectorextension enabled - Clerk account (for auth)
# Clone the repo
git clone https://github.com/dalhaqq/course-compass.git
cd course-compass
# Install dependencies
npm install
# Copy environment variables
cp .env.example .env
# Fill in your DATABASE_URL, CLERK_SECRET_KEY, NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
# Run database migrations
npx typeorm migration:run
# Start development server
npm run devOpen http://localhost:3000.
# Open Cypress test runner
npm run cypress
# Run all E2E tests headlessly
npm run cy:run:all
# Run specific test suites
npm run cy:run:auth
npm run cy:run:recommendationcourse-compass/
├── app/ # Next.js App Router pages and server actions
├── components/ # Reusable UI components (shadcn/ui + custom)
├── entities/ # TypeORM entity definitions
├── hooks/ # Custom React hooks
├── lib/ # Database connection, utilities
├── types/ # TypeScript type definitions
├── cypress/ # E2E test specs
└── recommendation_logs/ # Logged recommendation outputs
MIT