gitextract_b2npil12/ ├── .dockerignore ├── .editorconfig ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── dependabot.yml │ └── workflows/ │ ├── ci.yml │ ├── docker-release.yml │ └── pr-labels.yml ├── .gitignore ├── .pre-commit-config.yaml ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── SECURITY.md ├── assets/ │ └── drawio/ │ └── architecture.drawio ├── deploy/ │ ├── clusterrole.yaml │ ├── clusterrolebinding.yaml │ ├── configmap.yaml │ ├── ingress.yaml │ ├── kustomization.yaml │ ├── ns.yaml │ ├── persistentvolume.yaml │ ├── service.yaml │ ├── serviceaccount.yaml │ └── statefulset.yaml ├── docker-compose.yaml ├── kubelab-backend/ │ ├── .gitignore │ ├── README.md │ ├── entrypoint.sh │ ├── example-hook-script.sh │ ├── go.mod │ ├── go.sum │ ├── hooks/ │ │ └── hooks.go │ ├── main.go │ ├── modd.conf │ ├── pb_migrations/ │ │ ├── 1671835039_created_hooks.js │ │ ├── 1671926343_updated_hooks.js │ │ ├── 1685691966_created_sessions.js │ │ ├── 1686128320_updated_users.js │ │ ├── 1686128357_created_labs.js │ │ ├── 1686128492_updated_sessions.js │ │ ├── 1686128857_updated_sessions.js │ │ ├── 1686129123_created_exercises.js │ │ ├── 1686129154_updated_labs.js │ │ ├── 1686129166_updated_sessions.js │ │ ├── 1686144343_updated_labs.js │ │ ├── 1686311410_updated_sessions.js │ │ ├── 1686311431_updated_sessions.js │ │ ├── 1686311476_created_exercise_sessions.js │ │ ├── 1686311483_updated_exercises.js │ │ ├── 1686311638_updated_exercise_sessions.js │ │ ├── 1686311654_updated_lab_sessions.js │ │ ├── 1686311927_created_user_exercise_score.js │ │ ├── 1686312000_updated_user_exercise_score.js │ │ ├── 1686312029_updated_user_exercise_score.js │ │ ├── 1686312069_updated_user_exercise_score.js │ │ ├── 1686312095_updated_user_exercise_score.js │ │ ├── 1686312146_updated_user_exercise_score.js │ │ ├── 1686312270_deleted_user_exercise_score.js │ │ ├── 1686312735_updated_labs.js │ │ ├── 1686312758_updated_exercises.js │ │ ├── 1686485128_updated_labs.js │ │ ├── 1686485135_updated_lab_sessions.js │ │ ├── 1686485142_updated_exercises.js │ │ ├── 1686485148_updated_exercise_sessions.js │ │ ├── 1686568901_updated_exercise_sessions.js │ │ ├── 1686568909_updated_lab_sessions.js │ │ ├── 1686569025_updated_lab_sessions.js │ │ ├── 1686569075_updated_lab_sessions.js │ │ ├── 1686569086_updated_lab_sessions.js │ │ ├── 1686569099_updated_lab_sessions.js │ │ ├── 1686569141_updated_exercise_sessions.js │ │ ├── 1686600246_updated_exercise_sessions.js │ │ ├── 1686600263_updated_exercise_sessions.js │ │ ├── 1686990480_updated_exercise_sessions.js │ │ ├── 1686990524_updated_lab_sessions.js │ │ ├── 1687092568_updated_labs.js │ │ ├── 1687092574_updated_exercises.js │ │ ├── 1687092614_updated_exercises.js │ │ ├── 1687092623_updated_labs.js │ │ ├── 1687116582_updated_exercises.js │ │ ├── 1687116588_updated_labs.js │ │ ├── 1687200869_updated_users.js │ │ ├── 1687200885_updated_exercises.js │ │ ├── 1687201122_updated_users.js │ │ ├── 1687201342_updated_exercises.js │ │ ├── 1687201352_updated_labs.js │ │ ├── 1687208987_created_material.js │ │ ├── 1687209270_updated_material.js │ │ ├── 1687209711_deleted_material.js │ │ ├── 1692004564_created_plans.js │ │ ├── 1692004578_created_features.js │ │ ├── 1692004634_updated_plans.js │ │ ├── 1692004755_updated_plans.js │ │ ├── 1692006976_updated_users.js │ │ ├── 1692013150_updated_users.js │ │ ├── 1692013264_updated_plans.js │ │ ├── 1692013276_updated_plans.js │ │ ├── 1692013682_updated_features.js │ │ ├── 1692029251_created_faqs.js │ │ ├── 1692030049_created_companies.js │ │ ├── 1692030210_updated_companies.js │ │ ├── 1697824916_updated_users.js │ │ ├── 1697824932_updated_users.js │ │ ├── 1697982589_created_exercise_logs.js │ │ ├── 1697982994_updated_exercise_logs.js │ │ ├── 1697983253_updated_exercise_logs.js │ │ ├── 1697983426_updated_exercise_session_logs.js │ │ ├── 1697983434_updated_exercise_session_logs.js │ │ ├── 1697983470_updated_users.js │ │ ├── 1697983479_updated_exercise_sessions.js │ │ ├── 1697983500_updated_lab_sessions.js │ │ ├── 1697983560_updated_exercise_session_logs.js │ │ ├── 1697984665_updated_exercise_session_logs.js │ │ ├── 1697984707_updated_exercise_session_logs.js │ │ ├── 1697986578_created_notifications.js │ │ ├── 1697987216_updated_notifications.js │ │ ├── 1697988059_updated_users.js │ │ ├── 1697992209_updated_exercise_session_logs.js │ │ ├── 1697992245_updated_notifications.js │ │ ├── 1697992793_updated_notifications.js │ │ └── 1697995266_updated_users.js │ ├── pkg/ │ │ ├── controller/ │ │ │ ├── exercise.go │ │ │ ├── handler.go │ │ │ ├── lab.go │ │ │ ├── sessions.go │ │ │ └── util.go │ │ ├── env/ │ │ │ └── env.go │ │ ├── helm/ │ │ │ └── helm.go │ │ ├── k8s/ │ │ │ ├── config.go │ │ │ ├── deployment.go │ │ │ ├── ingress.go │ │ │ ├── namespace.go │ │ │ ├── pod.go │ │ │ ├── resourcequota.go │ │ │ ├── secret.go │ │ │ └── service.go │ │ └── util/ │ │ └── helpers.go │ └── vcluster-values.yaml ├── kubelab-fill/ │ ├── example_users.csv │ ├── upload.py │ └── users_import.py ├── kubelab-score/ │ ├── score.csv │ └── score_calculation.py └── kubelab-ui/ ├── .dockerignore ├── .env.example ├── .eslintignore ├── .eslintrc.cjs ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .vscode/ │ └── settings.json ├── Dockerfile ├── README.md ├── next-env.d.ts ├── package.json ├── playwright.config.ts ├── postcss.config.cjs ├── src/ │ ├── app.css │ ├── app.d.ts │ ├── app.html │ ├── app.postcss │ ├── hooks.client.ts │ ├── lib/ │ │ ├── components/ │ │ │ ├── Console.svelte │ │ │ ├── base/ │ │ │ │ ├── BackButton.svelte │ │ │ │ ├── Badges.svelte │ │ │ │ ├── Card.svelte │ │ │ │ ├── Desktop.svelte │ │ │ │ ├── Nav.svelte │ │ │ │ ├── PlaceholderComponent.svelte │ │ │ │ ├── SideOver.svelte │ │ │ │ └── ToggleConfetti.svelte │ │ │ ├── dashboard/ │ │ │ │ ├── Chart.svelte │ │ │ │ ├── RunningExercises.svelte │ │ │ │ └── data.ts │ │ │ ├── labs/ │ │ │ │ ├── Exercise.svelte │ │ │ │ └── Lab.svelte │ │ │ ├── landingpage/ │ │ │ │ ├── Companies.svelte │ │ │ │ ├── Cta.svelte │ │ │ │ ├── Faq.svelte │ │ │ │ ├── Features.svelte │ │ │ │ ├── Footer.svelte │ │ │ │ ├── Header.svelte │ │ │ │ └── Hero.svelte │ │ │ └── markdown/ │ │ │ ├── CodeComponent.svelte │ │ │ ├── CodeSpanComponent.svelte │ │ │ ├── LinkComponent.svelte │ │ │ └── ListComponent.svelte │ │ ├── config.ts │ │ ├── mock-data.ts │ │ ├── pocketbase/ │ │ │ ├── generated-types.ts │ │ │ ├── index.ts │ │ │ └── ui.ts │ │ ├── stores/ │ │ │ ├── codeView.ts │ │ │ ├── data.ts │ │ │ ├── layout_store.ts │ │ │ ├── loading.ts │ │ │ ├── metadata.ts │ │ │ ├── sidebar.ts │ │ │ ├── tableView.ts │ │ │ ├── terminal.ts │ │ │ └── theme.ts │ │ ├── terminal.ts │ │ ├── types.ts │ │ ├── utils/ │ │ │ ├── clickOutside.ts │ │ │ ├── enums.ts │ │ │ ├── interfaces.ts │ │ │ └── time.ts │ │ └── xterm.css │ ├── routes/ │ │ ├── +layout.svelte │ │ ├── +layout.ts │ │ ├── +page.svelte │ │ ├── +page.ts │ │ ├── admin/ │ │ │ └── [id]/ │ │ │ ├── +page.svelte │ │ │ └── +page.ts │ │ ├── app/ │ │ │ ├── +layout.svelte │ │ │ ├── +page.svelte │ │ │ ├── +page.ts │ │ │ └── profile/ │ │ │ └── +page.svelte │ │ ├── labs/ │ │ │ ├── +layout.svelte │ │ │ ├── +page.svelte │ │ │ ├── +page.ts │ │ │ └── [id]/ │ │ │ ├── +page.svelte │ │ │ ├── +page.ts │ │ │ └── [id]/ │ │ │ ├── +layout.svelte │ │ │ ├── +layout.ts │ │ │ └── +page.svelte │ │ ├── login/ │ │ │ └── +page.svelte │ │ └── material/ │ │ ├── +layout.svelte │ │ └── +page.svelte │ └── styles/ │ ├── prism.css │ └── xterm.css ├── svelte.config.js ├── tailwind.config.cjs ├── tsconfig.json └── vite.config.ts