diff --git a/README.md b/z1/README.md
similarity index 100%
rename from README.md
rename to z1/README.md
diff --git a/backend/Dockerfile b/z1/backend/Dockerfile
similarity index 100%
rename from backend/Dockerfile
rename to z1/backend/Dockerfile
diff --git a/backend/server.js b/z1/backend/server.js
similarity index 100%
rename from backend/server.js
rename to z1/backend/server.js
diff --git a/docker-compose.yaml b/z1/docker-compose.yaml
similarity index 100%
rename from docker-compose.yaml
rename to z1/docker-compose.yaml
diff --git a/frontend/index.html b/z1/frontend/index.html
similarity index 100%
rename from frontend/index.html
rename to z1/frontend/index.html
diff --git a/frontend/style.css b/z1/frontend/style.css
similarity index 100%
rename from frontend/style.css
rename to z1/frontend/style.css
diff --git a/prepare-app.sh b/z1/prepare-app.sh
similarity index 100%
rename from prepare-app.sh
rename to z1/prepare-app.sh
diff --git a/remove-app.sh b/z1/remove-app.sh
similarity index 100%
rename from remove-app.sh
rename to z1/remove-app.sh
diff --git a/start-app.sh b/z1/start-app.sh
similarity index 100%
rename from start-app.sh
rename to z1/start-app.sh
diff --git a/stop-app.sh b/z1/stop-app.sh
similarity index 100%
rename from stop-app.sh
rename to z1/stop-app.sh
diff --git a/z2/README.md b/z2/README.md
new file mode 100644
index 0000000..7055b1c
--- /dev/null
+++ b/z2/README.md
@@ -0,0 +1,45 @@
+# ZKT Zadanie 2 - Kubernetes
+
+## Opis aplikacie
+Aplikacia predstavuje TODO list, kde pouzivatel moze pridavat, upravovat a mazat ulohy. Data su ukladane do databazy
+MongoDB.
+
+Aplikacia pozostava z backendu (Node.js) a databazy (MongoDB), ktore su nasadene v Kubernetes klastri.
+
+## Pouzite kontajnery
+- Node.js (backend + frontend)
+- MongoDB (databaza)
+
+## Kubernetes objekty
+- Namespace – izolacia aplikacie
+- Deployment – backend aplikacia
+- StatefulSet – MongoDB databaza
+- Service – komunikacia medzi komponentami
+- PersistentVolume – trvale ulozisko
+- PersistentVolumeClaim – poziadavka na ulozisko
+
+## Virtualne siete a zvazky
+- Service "web-service" spristupnuje aplikaciu
+- Service "mongo" umoznuje komunikaciu s databazou
+- MongoDB pouziva volume /data/db
+
+## Konfiguracia kontajnerov
+- backend bezi na porte 3000
+- MongoDB bezi na porte 27017
+- komunikacia prebieha cez nazvy sluzieb (mongo)
+
+## Spustenie
+
+./prepare-app.sh
+./start-app.sh
+
+## Zastavenie
+
+./stop-app.sh
+
+## Pristup k aplikacii
+
+http://localhost:30007
+
+## Poznamka
+Aplikacia bola upravena zo zadania c.1 pre nasadenie do Kubernetes.
diff --git a/z2/app/Dockerfile b/z2/app/Dockerfile
new file mode 100644
index 0000000..27a2a2d
--- /dev/null
+++ b/z2/app/Dockerfile
@@ -0,0 +1,11 @@
+FROM node:18
+
+WORKDIR /app
+
+COPY . .
+
+RUN npm init -y && npm install express mongoose cors
+
+EXPOSE 3000
+
+CMD ["node", "server.js"]
diff --git a/z2/app/index.html b/z2/app/index.html
new file mode 100644
index 0000000..4de4669
--- /dev/null
+++ b/z2/app/index.html
@@ -0,0 +1,83 @@
+
+
+
+ TODO LIST
+
+
+
+
+
+
TODO List - Kubernetes
+
+
+
+
+
+
+
+
+
+
+
diff --git a/z2/app/server.js b/z2/app/server.js
new file mode 100644
index 0000000..51bc409
--- /dev/null
+++ b/z2/app/server.js
@@ -0,0 +1,59 @@
+const express = require('express');
+const mongoose = require('mongoose');
+const cors = require('cors');
+const path = require('path');
+
+const app = express();
+
+app.use(express.json());
+app.use(cors());
+
+
+app.use(express.static(path.join(__dirname)));
+
+mongoose.connect('mongodb://mongo:27017/todo');
+
+const Task = mongoose.model('Task', {
+ text: String,
+ due: String
+});
+
+
+app.get('/', (req, res) => {
+ res.sendFile(path.join(__dirname, 'index.html'));
+});
+
+
+app.get('/tasks', async (req, res) => {
+ const tasks = await Task.find();
+ res.json(tasks);
+});
+
+
+app.post('/tasks', async (req, res) => {
+ const task = new Task({
+ text: req.body.text,
+ due: req.body.due
+ });
+ await task.save();
+ res.send("ok");
+});
+
+
+app.delete('/tasks/:id', async (req, res) => {
+ await Task.findByIdAndDelete(req.params.id);
+ res.send("deleted");
+});
+
+
+app.put('/tasks/:id', async (req, res) => {
+ await Task.findByIdAndUpdate(req.params.id, {
+ text: req.body.text,
+ due: req.body.due
+ });
+ res.send("updated");
+});
+
+app.listen(3000, () => {
+ console.log("backend bezi na porte 3000");
+});
diff --git a/z2/app/style.css b/z2/app/style.css
new file mode 100644
index 0000000..12eb1a9
--- /dev/null
+++ b/z2/app/style.css
@@ -0,0 +1,65 @@
+body {
+ font-family: Arial;
+ background: #f4f6f8;
+ margin: 0;
+ padding: 0;
+}
+
+.container {
+ background: white;
+ padding: 20px;
+ border-radius: 10px;
+ width: 400px;
+ margin: 50px auto; /* vycentrovanie */
+ box-shadow: 0 0 10px rgba(0,0,0,0.1);
+}
+
+h1 {
+ text-align: center; /* nadpis na stred */
+}
+
+input {
+ padding: 8px;
+ margin: 5px 0;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+button {
+ padding: 8px;
+ margin-top: 5px;
+ cursor: pointer;
+ width: 100%;
+}
+
+#list {
+ margin-top: 15px;
+}
+
+.task {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ background: #eee;
+ padding: 8px;
+ margin-top: 5px;
+ border-radius: 5px;
+}
+
+.task span {
+ text-align: left; /* zarovnanie dolava */
+}
+
+.buttons button {
+ margin-left: 5px;
+}
+
+.delete {
+ background: red;
+ color: white;
+}
+
+.edit {
+ background: orange;
+ color: white;
+}
diff --git a/z2/k8s/deployment.yaml b/z2/k8s/deployment.yaml
new file mode 100644
index 0000000..d16b220
--- /dev/null
+++ b/z2/k8s/deployment.yaml
@@ -0,0 +1,21 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: web-deployment
+ namespace: my-app-ns
+spec:
+ replicas: 2
+ selector:
+ matchLabels:
+ app: web
+ template:
+ metadata:
+ labels:
+ app: web
+ spec:
+ containers:
+ - name: web
+ image: my-web-app
+ imagePullPolicy: Never
+ ports:
+ - containerPort: 3000
diff --git a/z2/k8s/namespace.yaml b/z2/k8s/namespace.yaml
new file mode 100644
index 0000000..0c880a1
--- /dev/null
+++ b/z2/k8s/namespace.yaml
@@ -0,0 +1,4 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+ name: my-app-ns
diff --git a/z2/k8s/service.yaml b/z2/k8s/service.yaml
new file mode 100644
index 0000000..0fe1058
--- /dev/null
+++ b/z2/k8s/service.yaml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: web-service
+ namespace: my-app-ns
+spec:
+ type: NodePort
+ selector:
+ app: web
+ ports:
+ - port: 80
+ targetPort: 3000
+ nodePort: 30007
diff --git a/z2/k8s/statefulset.yaml b/z2/k8s/statefulset.yaml
new file mode 100644
index 0000000..a0f2219
--- /dev/null
+++ b/z2/k8s/statefulset.yaml
@@ -0,0 +1,72 @@
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: mongo-pv
+spec:
+ capacity:
+ storage: 1Gi
+ accessModes:
+ - ReadWriteOnce
+ hostPath:
+ path: /data/mongo
+
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: mongo-pvc
+ namespace: my-app-ns
+spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 1Gi
+
+---
+# 🔥 TOTO JE TEN DÔLEŽITÝ SERVICE
+apiVersion: v1
+kind: Service
+metadata:
+ name: mongo
+ namespace: my-app-ns
+spec:
+ selector:
+ app: mongo
+ ports:
+ - port: 27017
+ targetPort: 27017
+
+---
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+ name: mongo
+ namespace: my-app-ns
+spec:
+ serviceName: "mongo"
+ replicas: 1
+ selector:
+ matchLabels:
+ app: mongo
+ template:
+ metadata:
+ labels:
+ app: mongo
+ spec:
+ containers:
+ - name: mongo
+ image: mongo
+ ports:
+ - containerPort: 27017
+ volumeMounts:
+ - name: mongo-storage
+ mountPath: /data/db
+ volumeClaimTemplates:
+ - metadata:
+ name: mongo-storage
+ spec:
+ accessModes: ["ReadWriteOnce"]
+ resources:
+ requests:
+ storage: 1Gi
diff --git a/z2/prepare-app.sh b/z2/prepare-app.sh
new file mode 100755
index 0000000..40e5d33
--- /dev/null
+++ b/z2/prepare-app.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+echo "building docker image..."
+
+docker build -t my-web-app ./app
+
+echo "done"
diff --git a/z2/start-app.sh b/z2/start-app.sh
new file mode 100755
index 0000000..205b7e0
--- /dev/null
+++ b/z2/start-app.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+echo "starting app..."
+
+kubectl apply -f k8s/namespace.yaml
+kubectl apply -f k8s/statefulset.yaml
+kubectl apply -f k8s/deployment.yaml
+kubectl apply -f k8s/service.yaml
+
+echo "app started"
diff --git a/z2/stop-app.sh b/z2/stop-app.sh
new file mode 100755
index 0000000..2f3dab9
--- /dev/null
+++ b/z2/stop-app.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+echo "stopping app..."
+
+kubectl delete -f k8s/service.yaml
+kubectl delete -f k8s/deployment.yaml
+kubectl delete -f k8s/statefulset.yaml
+kubectl delete -f k8s/namespace.yaml
+
+echo "app stopped"