### meine TODOs

<!-- - [ ] errors in ui zeigen (aktivierbar) -->

- [x] jwt owasp konform
  - **access token**: memory, ein paar wenige Minuten behalten
  - **refresh token**: in Cookie speichern, js kann es mit HttpOnly nicht lesen. nutze auch Secure und SameSite, ein paar Tage behalten. Wenn token abgelaufen error 401, im frontend dann refresh aufrufen
  - noch besser mit private und public key, dabei die keys generieren (würde in makefile auch eingebaut werden) und die keys in JS speichern und bei jwt.. mitgeben.
  - auth.js bei controller: für login, erstellt tokens
  - auth.js bei midleware: für verification, prüft tokens
- [x] performance analysis mit hey "Lasttest gegen geschützten JWT Endpoint mit DB read. kein Netzwerk overhead. kein slowstart."
    <!-- - [ ] rollup-plugin-visualizer https://github.com/btd/rollup-plugin-visualizer
    - [ ] google lighthouse > eher nicht https://github.com/GoogleChrome/lighthouse/blob/main/docs/readme.md -->

  Perform a load test against a JWT-protected endpoint of your system (e.g., using ab, wrk, hey, or k6) and document the results. During the presentation, show how your system behaves under load, what the bottleneck could be, and how many requests/second it can handle.
  - Zeige Unterschied von Kubernetes und lokalem Setup

- [x] nginx aufräumen
  - [x] bisschen mehr zu nginx austesten https://nginx.org/en/docs/beginners_guide.html
- [x] npm packages aufräumen, testen

Hinweise

- error handling nicht immer im UI
- wenn Bild zu gross, keine Fehlermeldung. Maximum 15MB
- mongodb löschen "podman exec -it local-mongo bash \ mongosh mern-social --eval 'db.dropDatabase()' \ mongosh mongodb --eval 'show dbs'"

Kubernetes

- [ ] auf ost kubernetes das pOST laufen lassen
  - [ ] ingress controller config statt das kubectl port-forward
  - [ ] image auf registry hochladen
  - [ ] einrichten mit subdomains statt port
  - [ ] hoffen dass alles läuft wie lokal
- [x] MongoDB data backup (persistent) instead of just saving inside a pod
  - [ ] Mongodb kubernetes anpassen, Deployment oder StatefulSet?
- [ ] Ressourcen wieder limitieren

- [x] TODOs in Dateien lösen (nur wichtige)

- [ ] kubernetes mongodb controller nutzen?? https://github.com/mongodb/mongodb-kubernetes/tree/master/docs/mongodbcommunity

Kubernetes

- [ ] https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ mit verlinktem playground testen

mach ich eher nicht:

- [ ] security measures (CORS) richtig einschränken
- [x] minimize Docker image (without changing packages)
- [ ] just statt makefile testen (pipeline dann anpassen) https://github.com/casey/just > make besser
  - [ ] dev commands dann auch einbauen
- [ ] Frontend Buttons erweitern (aktuell nicht alle umgesetzt)
- [ ] Frontend mehr anpassen für OST : Studiengang, Link zu Studentenportal und mehr.

## Challenge Task FS 2026

Starting this semester, the challenge task (CT) is individual work. With the availability of generative AI tools, a single student can now design, build, and implement what previously required a group of 2-3. This also means every student must **understand the full stack**.

This semester's challenge task is the design and implementation of a distributed system (of your choice) where a **service instance can fail**. The system needs to have the following components:

1. Simple Frontend (e.g., HTML, Vue, React, Svelte) -> React + MUI, client is served with Nginx
1. Load balancer (e.g., Traefik, Nginx, HAProxy, Caddy) -> Kubernetes
1. Two instances of a service (your choice), and during the challenge task presentation, one instance will be shut off -> backend/server
1. JWT-based authentication (login/registration required to use the application, API endpoints protected with JWT) -> login required
1. Database (persistent storage, does not need to be scalable) -> MongoDB

### Requirements

All requirements below must be met in order to pass this lecture.

- [x] Load balancing with multiple instances with failover of a service instance
- [x] Containerized (e.g., with docker)
- [x] Simple frontend
- [x] JWT-based authentication
- [x] Persistent storage (can delete mongodb pod without losing data)
- [x] Use latest stable releases of chosen libraries and frameworks
- [x] A fresh clone of the repository + a single command (`make up`) brings up the entire working system.
