Skip to content

Latest commit

Β 

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


πŸ“½οΈ Demo preview β€” drop your GIF here once recorded

Skill-Bridge demo

Place a demo.gif in /docs/ to replace this placeholder.


πŸ“‹ Table of Contents


πŸ’‘ What is Skill-Bridge?

"Every expert was once a beginner. Every beginner can become an expert."

Skill-Bridge is a cloud-native, peer-to-peer learning platform that eliminates the barrier between people who have knowledge and people who need it.

You sign up, list skills you can teach and skills you want to learn, and our matching algorithm pairs you with someone whose strengths fill your gaps. You meet over WebRTC video, the session is recorded and transcribed, and at the end an AI-generated quiz verifies that learning actually happened β€” awarding XP, reputation badges, and unlocks.


🌟 Features

🀝 Smart Peer Matching

Skill-gap algorithm scores every potential pair on proficiency delta, skill overlap, and timezone. Returns top 5 matches.

πŸ“Ή Live WebRTC Video

Peer-to-peer video calls. No Zoom, no Twilio, no middleman β€” your media stream goes browser-to-browser.

🧠 AI-Generated Quizzes

After every session, Groq + Llama 3.3 70B generates 5 custom MCQs tailored to what was actually taught.

πŸ… Badges & XP

Reputation system rewards both teaching and learning. Climb tiers, unlock badges, build a verifiable skill rΓ©sumΓ©.

πŸ” Searchable Transcripts

Every session is transcribed and indexed in Elasticsearch for full-text search across your learning history.

πŸ”” Real-time Notifications

Supabase Realtime pushes match alerts, session reminders, and quiz results straight to your browser.


πŸ”„ The Learning Flow

flowchart LR
    A[πŸ‘€ User signs up] --> B[Lists skills + role]
    B --> C{Matching Algorithm}
    C -->|Top 5 scored| D[🎯 Match offered]
    D --> E[πŸ“Ή Live WebRTC session]
    E -->|session.completed event| F[Kafka Topic]
    F --> G[🧠 Quiz Service]
    G -->|Groq + Llama 3.3| H[5 MCQs generated]
    H --> I[πŸ“ Learner takes quiz]
    I --> J[Score computed]
    J --> K[πŸ… XP + Badges awarded]
    K --> L[πŸ‘€ Profile updated]

    style A fill:#F58220,stroke:#fff,color:#fff
    style E fill:#1e90ff,stroke:#fff,color:#fff
    style G fill:#9333ea,stroke:#fff,color:#fff
    style K fill:#22c55e,stroke:#fff,color:#fff
Loading

πŸ— Architecture

Skill-Bridge uses a hybrid microservices architecture β€” 5 custom Node.js services backed by Supabase managed services, all running on K3s (Kubernetes).

graph TB
    subgraph "Client Layer"
        FE[React + Vite SPA]
    end

    subgraph "Edge"
        TF[Traefik Ingress<br/>SSL via Let's Encrypt]
    end

    subgraph "Microservices"
        US[User Service<br/>:3001]
        MS[Matching Service<br/>:3002]
        SS[Session Service<br/>:3003]
        QS[Quiz Service<br/>:3004]
        NS[Notification Service<br/>:3005]
    end

    subgraph "Messaging"
        K[Apache Kafka<br/>KRaft mode]
    end

    subgraph "Data Layer"
        SB[(Supabase<br/>Auth + Realtime + Storage)]
        PG1[(PostgreSQL<br/>x4 StatefulSets)]
        RD[(Redis<br/>Cache)]
        ES[(Elasticsearch 8.5<br/>Transcripts)]
    end

    subgraph "External"
        GROQ[Groq API<br/>Llama 3.3 70B]
    end

    FE --> TF
    TF --> US & MS & SS & QS & NS
    US <--> K
    MS <--> K
    SS <--> K
    QS <--> K
    NS <--> K
    US --> SB & PG1 & RD
    MS --> PG1
    SS --> PG1 & ES
    QS --> PG1 & GROQ
    NS --> SB

    style FE fill:#61dafb,color:#000
    style TF fill:#f97316,color:#fff
    style K fill:#000,color:#fff
    style GROQ fill:#F55036,color:#fff
Loading

🎯 CAP Theorem Strategy

Service Strategy Reason
Session Service CP WebRTC room IDs must be consistent across replicas
Quiz Service CP Scores must be accurate for badges
User Service AP Slightly stale profiles are acceptable
Matching Service AP Old matches OK β€” availability priority
Notification Service AP Delayed notification > no notification

🧩 Design Patterns in Play

  • Repository Pattern β†’ Session Service (clean data-access layer)
  • CQRS β†’ Quiz Service (separates command writes from query reads)
  • Circuit Breaker β†’ Notification Service (graceful degradation on failure)

πŸ›  Tech Stack

Backend & Data

Backend

Frontend

Frontend

Infrastructure

Infra

πŸ“‹ Full dependency breakdown (click to expand)

Backend

Technology Purpose
Node.js 20 + Express All 5 microservices
Supabase Auth, managed PostgreSQL, Realtime, Storage
Apache Kafka (KRaft) Event streaming between services
Redis Profile caching (< 1ms reads)
Elasticsearch 8.5 Session transcript full-text search
PostgreSQL Γ—4 Per-service StatefulSet databases
Groq API (Llama 3.3 70B) AI quiz generation

Frontend

Technology Purpose
React 18 + Vite SPA framework
TailwindCSS v4 Utility-first styling
React Router v7 Client-side routing
Supabase JS Auth + Realtime subscriptions
Axios API calls with JWT interceptor
lucide-react Icon system
WebRTC (native) Peer-to-peer video

Infrastructure

Technology Purpose
K3s (Kubernetes) Container orchestration
Docker Containerisation
Helm Package management
Traefik Ingress + SSL termination
cert-manager + Let's Encrypt Automatic SSL
Jenkins CI/CD pipeline
Prometheus + Grafana Metrics + dashboards
Ansible Configuration management
Terraform Infrastructure as Code
DigitalOcean Cloud VPS provider

πŸš€ Getting Started

Prerequisites

node >= 20
docker
kubectl
helm
# optional: k3s or minikube for local dev

Clone & Setup

git clone https://github.com/Asongwelewis/Skill-Bridge.git
cd Skill-Bridge

Environment Variables

Each service needs a .env. Copy from the examples:

cp Services/user-service/.env.example         Services/user-service/.env
cp Services/matching-service/.env.example     Services/matching-service/.env
cp Services/session-service/.env.example      Services/session-service/.env
cp Services/quiz-service/.env.example         Services/quiz-service/.env
cp Services/notification-service/.env.example Services/notification-service/.env
cp frontend/.env.example                      frontend/.env

Fill them in:

SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SECRET_KEY=your_secret_key
KAFKA_BROKER=localhost:9092
GROQ_API_KEY=gsk_your_groq_key        # quiz-service only
ELASTIC_URL=https://localhost:9200    # session-service only

Run Locally

# Install deps for every service
for s in user-service matching-service session-service quiz-service notification-service; do
  (cd Services/$s && npm install)
done
(cd frontend && npm install)

# Start each service in its own terminal
cd Services/user-service          && npm run dev   # β†’ :3001
cd Services/matching-service      && npm run dev   # β†’ :3002
cd Services/session-service       && npm run dev   # β†’ :3003
cd Services/quiz-service          && npm run dev   # β†’ :3004
cd Services/notification-service  && npm run dev   # β†’ :3005
cd frontend                       && npm run dev   # β†’ :5173

πŸ§ͺ Running Tests

cd Services/user-service && npm test
cd Services/matching-service && npm test
cd Services/session-service && npm test
cd Services/quiz-service && npm test
cd Services/notification-service && npm test

☸️ Deploy to Kubernetes

# Create secrets
kubectl create secret generic user-service-secret \
  --from-literal=SUPABASE_URL=https://... \
  --from-literal=SUPABASE_SECRET_KEY=...

# Apply all manifests
kubectl apply -f k8s/

# Or trigger Jenkins pipeline
#   β†’ http://your-vps:8080 β†’ Skill-Bridge β†’ Build Now

πŸ“– API Documentation

All services route through Traefik at http://skillbridge-sen3244.duckdns.org.

πŸ‘€ User Service β€” /api/users
Method Endpoint Description
GET /profiles/me Get my profile
PUT /profiles/me Update my profile
GET /profiles/:id Get any profile
GET /skills/me Get my skills
POST /skills/me Add a skill
DELETE /skills/me/:id Remove a skill
GET /badges/me Get my badges

Implementation note: POST /api/users/skills/me now accepts either skill_id or skill_name plus category so the frontend can create and attach a skill in one flow. The session search route must remain above /:id in Services/session-service/src/routes/sessions.js.

🎯 Matching Service β€” /api/matching
Method Endpoint Description
POST /run/:userId Trigger matching algorithm
GET /matches/me Get my matches
PATCH /matches/:id Accept or decline
πŸ“Ή Session Service β€” /api/sessions
Method Endpoint Description
POST / Schedule a session
GET /me Get my sessions
PATCH /:id/start Go live
PATCH /:id/end End session + trigger quiz
GET /search?q= Full-text transcript search
🧠 Quiz Service β€” /api/quizzes
Method Endpoint Description
GET /session/:sessionId Get quiz for session
POST /:quizId/attempt Submit answers
GET /:quizId/result Get my result
πŸ”” Notification Service β€” /api/notifications
Method Endpoint Description
GET / Get my notifications
PATCH /:id/read Mark as read
PATCH /read-all Mark all read
GET /circuit-status Circuit breaker state

πŸ—Ί Roadmap

  • 5-microservice MVP with Kafka events
  • WebRTC peer-to-peer video
  • AI quiz generation (Groq + Llama 3.3)
  • Elasticsearch transcript search
  • K3s deployment + Jenkins CI/CD
  • Mobile app (React Native)
  • Group sessions (3+ participants)
  • Skill certifications & verified portfolios
  • Multilingual quiz generation (FR + Pidgin)

πŸ‘₯ Team

Role Responsibility
Product Owner / App Lead Microservices, Kafka schemas, Supabase schema, React frontend, API docs
Scrum Master / DevOps Lead Terraform, Ansible, Jenkins, K8s manifests, Prometheus/Grafana, NGINX

Course: SEN3244 β€” Software Architecture Institution: ICT University β€” Faculty of Information & Communication Technologies Instructor: Engr. Tekoh Palma Season: Spring 2026


πŸ“„ License

MIT β€” see LICENSE


Built with ❀️ in YaoundΓ© πŸ‡¨πŸ‡²

"The best way to learn is to teach."

About

A peer-to-peer learning platform where users post skills they want to teach or learn, the system matches them automatically, they conduct live video sessions (WebRTC), and at the end an AI-generated quiz assesses comprehension and awards reputation badges. Every session is recorded, transcribed, and searchable.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages