Skip to content

or-carmeli/KubeQuest

Repository files navigation

☸️ KubeQuest

A Kubernetes learning and interview practice game for DevOps engineers.

Practice real-world Kubernetes scenarios, sharpen your troubleshooting skills, and prepare for CKA-level interviews — through interactive quizzes, incident simulations, and daily challenges.

Live Demo License: BSL 1.1 CI Security React Vite Supabase Docker


Live Demo

kubequest.online — no registration required, works instantly in guest mode.


Demo

KubeQuest Demo

Screenshots

KubeQuest preview


How It Works

  1. Pick a topic — Workloads, Networking, Config & Security, Storage & Helm, or Troubleshooting
  2. Choose a difficulty — Easy, Medium, or Hard (levels unlock as you progress)
  3. Answer questions — multiple choice with instant feedback and detailed explanations
  4. Practice incidents — step through multi-step real-world failure scenarios (CrashLoopBackOff, ImagePullBackOff, misconfigured NetworkPolicy, and more)
  5. Track your progress — score, accuracy, streaks, weak areas, and achievements

Features

  • 🚨 Incident Mode — multi-step Kubernetes failure scenarios with step-by-step diagnosis and scoring
  • 🧠 Topic Quizzes — 5 topics × 3 difficulty levels, progressively unlocked
  • 🔥 Daily Challenge — 5 fresh questions every day
  • 🎲 Mixed Quiz — random questions across all topics
  • 🎯 Interview Mode — mandatory timer, hints disabled, exam pressure
  • 📖 Kubernetes Guide — built-in cheatsheet for quick lookup while practicing
  • 🗺️ Roadmap View — visual learning path through all topics and levels
  • 📉 Weak Area Card — surfaces your lowest-accuracy topic automatically
  • ↩️ Quiz Resume — continue where you left off after refresh or navigation
  • 🏆 Leaderboard — global top scores
  • 🏅 Achievements — milestone-based reward system
  • 🌐 Hebrew / English — full bilingual support with RTL layout
  • 👤 Guest Mode — no account needed; sign up to sync progress across devices
  • 📊 Real-Time Monitoring — live system status page with service health checks, uptime history, and incident tracking (docs)

Tech Stack

Layer Technology
Frontend React 18 + Vite 5
Auth & Database Supabase (PostgreSQL + Auth)
Deployment Vercel

Architecture

CI/CD Pipeline

flowchart LR
    DEV(["👩‍💻 Developer"])

    subgraph GH["GitHub"]
        REPO[("main / dev / feat/*")]
        CI["CI\nBuild Check"]
        DOCK["Docker\nBuild & Push"]
        SEC["Security Scan\nnpm audit · Trivy · CodeQL"]
        BOT["Dependabot\nweekly updates"]
    end

    GHCR["📦 GHCR\nghcr.io/or-carmeli/kubequest"]
    VERCEL["🚀 Vercel\nAuto Deploy"]

    DEV -->|git push| REPO
    REPO -->|on PR| CI
    REPO -->|push to main| DOCK
    REPO -->|push to main| SEC
    REPO -->|push to main| VERCEL
    BOT -.->|opens PRs| REPO
    DOCK --> GHCR
Loading

Runtime Architecture

flowchart TD
    USER(["👤 User"])

    subgraph VERCEL["Vercel Edge Network"]
        SPA["React SPA"]
    end

    subgraph SB["Supabase"]
        AUTH["Auth Service"]
        DB[("PostgreSQL")]
        EDGE["Edge Functions"]
        CRON["pg_cron"]
    end

    subgraph K8S["Kubernetes — Optional"]
        ING["Ingress + TLS"] --> SVC["ClusterIP Service"] --> PODS["Pods ×2-10"]
        HPA["HPA"] -.->|autoscales| PODS
    end

    GHCR["📦 GHCR"] -.->|kubectl apply| K8S

    USER -->|HTTPS| SPA
    SPA -->|auth| AUTH
    SPA -->|read / write| DB
    CRON -->|every 60s| EDGE
    EDGE -->|health checks| DB
    EDGE -->|health checks| AUTH
    SPA -->|status page| DB
Loading

Production runs on Vercel + Supabase. The k8s/ manifests and Docker image on GHCR enable self-hosting on any Kubernetes cluster.


Local Development

Prerequisites

  • Node.js 18+
  • A free Supabase account (optional — guest mode works without it)

Setup

git clone https://github.com/or-carmeli/KubeQuest.git
cd KubeQuest
npm install
cp .env.example .env   # add your Supabase credentials
npm run dev            # → http://localhost:5173

Environment Variables

VITE_SUPABASE_URL=https://your-project-id.supabase.co
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key_here

Auth, leaderboard, and cross-device sync require a Supabase project. All other features work without credentials.

Available Scripts

npm run dev      # development server
npm run build    # production build
npm run preview  # preview production build locally

Docker

KubeQuest is a Single Page Application (SPA) — React handles all navigation client-side from a single index.html file. The web server must serve index.html for every URL so React can take over routing.

The Dockerfile uses a multi-stage build to keep the production image small and clean:

Stage 1 — Builder  (node:20-alpine)
  npm ci              → install dependencies
  npm run build       → compile React source → static HTML/CSS/JS in /dist

Stage 2 — Runner   (nginx:alpine)
  copies /dist        → only the built output (no Node.js, no source code)
  serves via nginx    → fast, lightweight web server with SPA routing

Final image size: ~25MB (vs ~500MB if Node.js were included).

docker build -t kubequest .
docker run -p 8080:80 kubequest
# → http://localhost:8080

Supabase Setup

Create a user_stats table:

Column Type
user_id uuid — unique, references auth.users
username text
total_answered int4
total_correct int4
total_score int4
max_streak int4
current_streak int4
completed_topics jsonb
achievements jsonb
topic_stats jsonb
updated_at timestamptz

Enable Row Level Security:

create policy "Users can manage own stats"
on public.user_stats
for all
to public
using (auth.uid() = user_id);

Kubernetes Deployment

The k8s/ directory contains production-ready manifests to deploy KubeQuest on any Kubernetes cluster.

k8s/
  namespace.yaml    # Isolated namespace: kubequest
  deployment.yaml   # 2 replicas, resource limits, liveness & readiness probes
  service.yaml      # ClusterIP service (internal traffic only)
  ingress.yaml      # Nginx Ingress with TLS via cert-manager + HTTP→HTTPS redirect
  hpa.yaml          # HorizontalPodAutoscaler: scale 2→10 pods at 70% CPU
# Deploy to a cluster
kubectl apply -f k8s/

Requires: nginx ingress controller + cert-manager installed in the cluster.


Project Structure

src/
  App.jsx              # Main application (UI + state)
  api/
    quiz.js            # Quiz, daily, incident, leaderboard RPCs
    monitoring.js      # System status monitoring RPCs
  content/
    topics.js          # Quiz questions by topic and level
    incidents.js       # Incident Mode scenarios
    dailyQuestions.js  # Daily Challenge question pool
  components/
    RoadmapView.jsx
    WeakAreaCard.jsx
  utils/
    quizPersistence.js # localStorage helpers for quiz resume
supabase/
  migrations/          # Database schema and RPCs
  functions/
    health-check/      # Edge Function — real-time service health checks
docs/
  monitoring.md        # Monitoring system documentation

Changelog

See CHANGELOG.md for the full release history.


Contributing

Contributions are welcome — new questions, bug fixes, UI improvements. See CONTRIBUTING.md for setup instructions and question format guidelines.


License

BSL 1.1 © 2026 Or Carmeli

Releases

No releases published

Packages

 
 
 

Contributors