diff --git a/bank/Caddyfile b/bank/Caddyfile
new file mode 100644
index 0000000..90e49e4
--- /dev/null
+++ b/bank/Caddyfile
@@ -0,0 +1,27 @@
+# Caddyfile za MiTM demo aplikacijo
+# Za HTTPS demo z avtomatskimi SSL certifikati
+
+# HTTP verzija - za MiTM demo (paketi vidni v Wireshark)
+:8080 {
+ reverse_proxy localhost:8081
+ log {
+ output file /var/log/caddy/mitm-demo-http.log
+ format console
+ }
+}
+
+# HTTPS verzija - za primerjavo (paketi šifrirani)
+# OPOMBA: Za lokalno testiranje uporabite localhost namesto domene
+localhost:8443 {
+ reverse_proxy localhost:8081
+ tls internal # Uporabi Caddy-jeve self-signed certs za localhost
+ log {
+ output file /var/log/caddy/mitm-demo-https.log
+ format console
+ }
+}
+
+# Za resnično domeno z Let's Encrypt certifikati:
+# vasa-domena.com {
+# reverse_proxy localhost:8081
+# }
\ No newline at end of file
diff --git a/bank/README.md b/bank/README.md
new file mode 100644
index 0000000..0fdef01
--- /dev/null
+++ b/bank/README.md
@@ -0,0 +1,154 @@
+# 🏦 SecureBank Demo - MiTM Napadalna Aplikacija
+
+Preprosta Go spletna aplikacija za demonstracijo razlike med HTTP in HTTPS pri prenosu občutljivih podatkov (MiTM napadi).
+
+## 🎯 Namen aplikacije
+
+Ta aplikacija je namenjena **izobraževalnim** namenom za prikaz:
+- Kako so podatki vidni v HTTP prometu
+- Kako HTTPS ščiti podatke pred prisluškovalci
+- Praktična uporaba Wireshark-a za analizo mrežnega prometa
+
+## 🚀 Hitri zagon
+
+### 1. Zaženite Go aplikacijo
+```bash
+go run main.go -port 8081
+```
+
+### 2. Testiraj HTTP (nezaščiten)
+Odprite brskalnik: `http://localhost:8081`
+
+### 3. Zagon s Caddy za HTTPS
+```bash
+# Namestite Caddy (če še ni nameščen)
+# Na Ubuntu/Debian:
+sudo apt install caddy
+
+# Na macOS:
+brew install caddy
+
+# Zaženite Caddy z našo konfiguracijo
+caddy run --config Caddyfile
+
+# Aplikacija bo dostopna na:
+# HTTP: http://localhost:8080 (preko Caddy proxy)
+# HTTPS: https://localhost:8443 (z avtomatskimi SSL certifikati)
+```
+
+## 🔍 MiTM Demo navodila
+
+### Korak 1: HTTP analiza
+1. **Zaženite Wireshark**
+ ```bash
+ sudo wireshark
+ ```
+
+2. **Nastavite filtre:**
+ - Vmesnik: `Loopback: lo`
+ - Filter: `http and tcp.port == 8080`
+
+3. **Testirajte prenose:**
+ - Prijavite se z: `admin` / `admin123`
+ - Opazujte pakete v Wireshark-u
+
+4. **Poiščite POST request:**
+ - Desni klik na paket → Follow → HTTP Stream
+ - Videli boste geslo v običajnem besedilu!
+
+### Korak 2: HTTPS primerjava
+1. **Nastavite Wireshark filter:**
+ ```
+ tcp.port == 8443
+ ```
+
+2. **Dostopajte do HTTPS verzije:**
+ ```
+ https://localhost:8443
+ ```
+
+3. **Primerjajte pakete:**
+ - Videli boste samo TLS handshake
+ - Aplikacijski podatki so šifrirani
+ - Gesla niso več vidna!
+
+## 👤 Demo uporabniki
+
+| Uporabniško ime | Geslo | Opis |
+|-----------------|----------|------|
+| `admin` | `admin123` | Administrator |
+| `janez` | `geslo123` | Običajen uporabnik |
+
+## 📂 Struktura projekta
+
+```
+server/
+├── main.go # Glavna Go aplikacija
+├── Caddyfile # Caddy konfiguracija
+├── templates/ # HTML predloge
+│ ├── home.html
+│ ├── login.html
+│ ├── register.html
+│ └── dashboard.html
+└── static/
+ └── style.css # CSS styling
+```
+
+## 🛠️ Comandni argumenti
+
+```bash
+go run main.go -port 8081 # Nastavi drug port
+```
+
+## ⚠️ Varnostna opozorila
+
+**Ta aplikacija je namenoma NEZAŠČITENA in vsebuje varnostne luknje:**
+
+- ❌ Gesla se shranjujejo v običajnem besedilu
+- ❌ Ni session managementa
+- ❌ Ni CSRF zaščite
+- ❌ Ni proper input validacije
+- ❌ Ni rate limiting-a
+
+**NE UPORABLJAJTE V PRODUKCIJI!** To je samo demonstracijska aplikacija.
+
+## 🎓 Za prezetnje
+
+### Ključne točke za predstavo:
+1. **HTTP telovi** - pokažite kako so gesla vidna
+2. **TLS Encryption** - razložite razliko v Wireshark-u
+3. **Headers analiza** - pokažite HTTP vs HTTPS headers
+4. **Certificate validation** - pokažite browser warnings za self-signed certs
+
+### Dodatni filtri za Wireshark:
+```
+# Samo POST requesti
+http.request.method == POST
+
+# Form data
+urlencoded-form
+
+# TLS paketi
+tls
+```
+
+## 🔧 Troubleshooting
+
+**Problem:** Caddy se ne zažene
+**Rešitev:** Preverite če port 8080/8443 ni že zaseden:
+```bash
+lsof -i :8080
+lsof -i :8443
+```
+
+**Problem:** Browser SSL warning
+**Rešitev:** To je normalno za self-signed certifikate. Kliknite "Advanced" → "Proceed to localhost"
+
+**Problem:** Wireshark ne vidi paketov
+**Rešitev:** Poskusite filter `tcp.port == 8081` (direct Go app port)
+
+## 📚 Dodatni viri
+
+- [Caddy dokumentacija](https://caddyserver.com/docs/)
+- [Wireshark User Guide](https://www.wireshark.org/docs/wsug_html_chunked/)
+- [OWASP TLS Guidelines](https://owasp.org/www-project-cheat-sheets/cheatsheets/Transport_Layer_Protection_Cheat_Sheet.html)
\ No newline at end of file
diff --git a/bank/build.sh b/bank/build.sh
new file mode 100644
index 0000000..ae91220
--- /dev/null
+++ b/bank/build.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# SecureBank - Build Script
+# Ustvari standalone izvršilne datoteke z vključenimi resources
+
+echo "🏗️ SecureBank - Build processo"
+echo "================================"
+
+# Preveri če obstajajo potrebni direktoriji
+if [ ! -d "templates" ] || [ ! -d "static" ]; then
+ echo "❌ Napaka: Manjkajo templates/ vagy static/ direktoriji!"
+ echo " Poženite script iz /bank direktorija"
+ exit 1
+fi
+
+# Ustvari build direktorij
+mkdir -p dist
+
+echo "📦 Building za Linux (amd64)..."
+GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o dist/securebank-linux ./
+echo "✅ Linux binary: dist/securebank-linux"
+
+echo "📦 Building za Windows (amd64)..."
+GOOS=windows GOARCH=amd64 go build -ldflags="-s -w" -o dist/securebank-windows.exe ./
+echo "✅ Windows binary: dist/securebank-windows.exe"
+
+echo "📦 Building za macOS (amd64)..."
+GOOS=darwin GOARCH=amd64 go build -ldflags="-s -w" -o dist/securebank-macos ./
+echo "✅ macOS binary: dist/securebank-macos"
+
+echo "📦 Building za macOS (ARM64 - M1/M2)..."
+GOOS=darwin GOARCH=arm64 go build -ldflags="-s -w" -o dist/securebank-macos-arm64 ./
+echo "✅ macOS ARM binary: dist/securebank-macos-arm64"
+
+echo ""
+echo "🎉 Build process končan!"
+echo ""
+echo "📁 Izvršilne datoteke v dist/ direktoriju:"
+ls -la dist/
+echo ""
+echo "🚀 Testiranje:"
+echo " ./dist/securebank-linux -port 8080"
+echo ""
+echo "📋 Opozorilo:"
+echo " - Vsi HTML, CSS in JS fajli so vključeni v binary"
+echo " - Binary lahko kopirate kjerkoli - ne potrebuje dodatnih datotek"
+echo " - Za deployment samo kopirajte binary datoteko"
\ No newline at end of file
diff --git a/bank/go.mod b/bank/go.mod
new file mode 100644
index 0000000..aa87cb2
--- /dev/null
+++ b/bank/go.mod
@@ -0,0 +1,3 @@
+module secure-bank-demo
+
+go 1.25.5
diff --git a/bank/launch_browsers.sh b/bank/launch_browsers.sh
new file mode 100644
index 0000000..9bdd37d
--- /dev/null
+++ b/bank/launch_browsers.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+echo "🌐 Starting browsers with HTTPS certificate bypass..."
+echo ""
+
+# Chrome with certificate bypass
+if command -v google-chrome &> /dev/null; then
+ echo "🔧 Starting Chrome with certificate bypass..."
+ google-chrome --ignore-certificate-errors-on-localhost https://localhost:8443 &
+ echo "✅ Chrome started"
+elif command -v chromium &> /dev/null; then
+ echo "🔧 Starting Chromium with certificate bypass..."
+ chromium --ignore-certificate-errors-on-localhost https://localhost:8443 &
+ echo "✅ Chromium started"
+fi
+
+# Firefox (will need manual exception)
+if command -v firefox &> /dev/null; then
+ echo "🔧 Starting Firefox..."
+ firefox https://localhost:8443 &
+ echo "ℹ️ Firefox started - you'll need to accept the security exception manually"
+fi
+
+echo ""
+echo "📋 URLs for testing:"
+echo " HTTP: http://localhost:8080"
+echo " HTTPS: https://localhost:8443"
+echo ""
+echo "💡 For permanent setup, add security exceptions in browser settings"
\ No newline at end of file
diff --git a/bank/main.go b/bank/main.go
new file mode 100644
index 0000000..c04fbba
--- /dev/null
+++ b/bank/main.go
@@ -0,0 +1,213 @@
+package main
+
+import (
+ "embed"
+ "flag"
+ "fmt"
+ "html/template"
+ "io/fs"
+ "log"
+ "net/http"
+ "sync"
+)
+
+//go:embed templates/*
+var templatesFS embed.FS
+
+//go:embed static/*
+var staticFS embed.FS
+
+// User struktura za uporabniške podatke
+type User struct {
+ ID int
+ Username string
+ Password string
+ Email string
+ FullName string
+}
+
+// In-memory shranjevanje uporabnikov
+var (
+ users = make(map[string]*User)
+ usersMux = &sync.RWMutex{}
+ lastID = 0
+)
+
+// Template cache
+var templates *template.Template
+
+func init() {
+ // Privzeti uporabniki
+ addUser("jnovak", "secure123", "janez.novak@securebank.si", "Janez Novak")
+ addUser("mpetric", "banking456", "maja.petric@securebank.si", "Maja Petrič")
+}
+
+func addUser(username, password, email, fullName string) {
+ usersMux.Lock()
+ defer usersMux.Unlock()
+ lastID++
+ users[username] = &User{
+ ID: lastID,
+ Username: username,
+ Password: password,
+ Email: email,
+ FullName: fullName,
+ }
+}
+
+func main() {
+ // Nastavimo port preko command line argumenta
+ var port = flag.String("port", "8080", "Port na katerem se bo zagnal server")
+ flag.Parse()
+
+ // Naložimo HTML predloge iz embedded FS
+ var err error
+ templates, err = template.ParseFS(templatesFS, "templates/*.html")
+ if err != nil {
+ log.Fatal("Napaka pri nalaganju embedded predlog:", err)
+ }
+
+ // Statične datoteke iz embedded FS
+ staticSubFS, err := fs.Sub(staticFS, "static")
+ if err != nil {
+ log.Fatal("Napaka pri ustvarjanju static subFS:", err)
+ }
+ http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.FS(staticSubFS))))
+
+ // Routes
+ http.HandleFunc("/", homeHandler)
+ http.HandleFunc("/register", registerHandler)
+ http.HandleFunc("/login", loginHandler)
+ http.HandleFunc("/dashboard", dashboardHandler)
+ http.HandleFunc("/logout", logoutHandler)
+
+ // Zagon strežnika
+ fmt.Printf("🏦 SecureBank aplikacija (embedded build)\n")
+ fmt.Printf("Port: %s\n", *port)
+ fmt.Printf("HTTP: http://localhost:%s\n", *port)
+ fmt.Printf("📦 Vsi fajli so vključeni v binary!\n")
+ fmt.Println()
+
+ serverAddr := ":" + *port
+ log.Fatal(http.ListenAndServe(serverAddr, nil))
+}
+
+func homeHandler(w http.ResponseWriter, r *http.Request) {
+ templates.ExecuteTemplate(w, "home.html", nil)
+}
+
+func registerHandler(w http.ResponseWriter, r *http.Request) {
+ if r.Method == "GET" {
+ templates.ExecuteTemplate(w, "register.html", nil)
+ return
+ }
+
+ if r.Method == "POST" {
+ username := r.FormValue("username")
+ password := r.FormValue("password")
+ email := r.FormValue("email")
+ fullName := r.FormValue("fullName")
+
+ //Validacija
+ if username == "" || password == "" || email == "" || fullName == "" {
+ templates.ExecuteTemplate(w, "register.html", map[string]string{
+ "Error": "Vsa polja so obvezna!",
+ })
+ return
+ }
+
+ // Preverimo če uporabnik že obstaja
+ usersMux.RLock()
+ _, exists := users[username]
+ usersMux.RUnlock()
+
+ if exists {
+ templates.ExecuteTemplate(w, "register.html", map[string]string{
+ "Error": "Uporabniško ime že obstaja!",
+ })
+ return
+ }
+
+ // Dodamo novega uporabnika
+ addUser(username, password, email, fullName)
+
+ // Preusmeri na prijavo
+ http.Redirect(w, r, "/login?registered=1", http.StatusSeeOther)
+ return
+ }
+}
+
+func loginHandler(w http.ResponseWriter, r *http.Request) {
+ if r.Method == "GET" {
+ data := map[string]string{}
+ if r.URL.Query().Get("registered") == "1" {
+ data["Success"] = "Registracija je bila uspešna! Sedaj se lahko prijavite."
+ }
+ templates.ExecuteTemplate(w, "login.html", data)
+ return
+ }
+
+ if r.Method == "POST" {
+ username := r.FormValue("username")
+ password := r.FormValue("password")
+
+ // Preverimo podatke
+ usersMux.RLock()
+ user, exists := users[username]
+ usersMux.RUnlock()
+
+ if !exists || user.Password != password {
+ templates.ExecuteTemplate(w, "login.html", map[string]string{
+ "Error": "Napačno uporabniško ime ali geslo!",
+ })
+ return
+ }
+
+ // Uspešna prijava - preusmeri na dashboard
+ // POZOR: Brez session management za demo!
+ http.Redirect(w, r, "/dashboard?user="+username, http.StatusSeeOther)
+ return
+ }
+}
+
+func dashboardHandler(w http.ResponseWriter, r *http.Request) {
+ username := r.URL.Query().Get("user")
+ if username == "" {
+ http.Redirect(w, r, "/login", http.StatusSeeOther)
+ return
+ }
+
+ usersMux.RLock()
+ user, exists := users[username]
+ usersMux.RUnlock()
+
+ if !exists {
+ http.Redirect(w, r, "/login", http.StatusSeeOther)
+ return
+ }
+
+ // Simuliramo "bančne" podatke
+ accounts := []map[string]interface{}{
+ {
+ "Name": "Glavni račun",
+ "Number": "SI56 1234 5678 9012 345",
+ "Balance": "€2,456.78",
+ },
+ {
+ "Name": "Varčevalni račun",
+ "Number": "SI56 1234 5678 9012 999",
+ "Balance": "€15,230.45",
+ },
+ }
+
+ data := map[string]interface{}{
+ "User": user,
+ "Accounts": accounts,
+ }
+
+ templates.ExecuteTemplate(w, "dashboard.html", data)
+}
+
+func logoutHandler(w http.ResponseWriter, r *http.Request) {
+ http.Redirect(w, r, "/", http.StatusSeeOther)
+}
diff --git a/bank/securebank-embedded b/bank/securebank-embedded
new file mode 100755
index 0000000..07fee85
Binary files /dev/null and b/bank/securebank-embedded differ
diff --git a/bank/static/style.css b/bank/static/style.css
new file mode 100644
index 0000000..6cbf187
--- /dev/null
+++ b/bank/static/style.css
@@ -0,0 +1,984 @@
+/* SecureBank - Professional CSS */
+
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ min-height: 100vh;
+ color: #333;
+}
+
+.container {
+ max-width: 1200px;
+ margin: 0 auto;
+ min-height: 100vh;
+ background: white;
+ box-shadow: 0 0 20px rgba(0,0,0,0.1);
+}
+
+/* Header */
+.header {
+ background: linear-gradient(135deg, #2c3e50 0%, #3498db 100%);
+ color: white;
+ padding: 25px;
+ box-shadow: 0 4px 8px rgba(0,0,0,0.1);
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.bank-logo h1 {
+ font-size: 2.5em;
+ margin-bottom: 5px;
+}
+
+.tagline {
+ font-size: 1em;
+ opacity: 0.9;
+ font-style: italic;
+}
+
+.user-info {
+ margin-top: 15px;
+ font-size: 1.1em;
+}
+
+.logout-btn {
+ background: #e74c3c;
+ color: white;
+ padding: 5px 10px;
+ border-radius: 5px;
+ text-decoration: none;
+ margin-left: 10px;
+ font-size: 0.9em;
+}
+
+.logout-btn:hover {
+ background: #c0392b;
+}
+
+/* Main content */
+.main {
+ padding: 30px;
+}
+
+/* Welcome page */
+.welcome-section {
+ display: grid;
+ grid-template-columns: 2fr 1fr;
+ gap: 40px;
+ margin: 40px 0;
+}
+
+.welcome-content h2 {
+ color: #2c3e50;
+ margin-bottom: 20px;
+ font-size: 2.2em;
+}
+
+.welcome-text {
+ font-size: 1.1em;
+ line-height: 1.6;
+ margin-bottom: 30px;
+ color: #555;
+}
+
+.features {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 20px;
+ margin: 30px 0;
+}
+
+.feature {
+ background: #f8f9fa;
+ padding: 20px;
+ border-radius: 10px;
+ text-align: center;
+ border-left: 4px solid #3498db;
+}
+
+.feature h3 {
+ color: #2c3e50;
+ margin-bottom: 10px;
+}
+
+/* Info sidebar */
+.info-sidebar {
+ background: #f8f9fa;
+ padding: 20px;
+ border-radius: 10px;
+}
+
+.contact-info,
+.security-notice {
+ background: white;
+ padding: 20px;
+ margin-bottom: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 5px rgba(0,0,0,0.1);
+}
+
+.contact-info h4,
+.security-notice h4 {
+ color: #2c3e50;
+ margin-bottom: 15px;
+}
+
+/* Action section */
+.action-section {
+ text-align: center;
+ margin: 40px 0;
+}
+
+.action-section h3 {
+ color: #2c3e50;
+ margin-bottom: 20px;
+}
+
+.action-buttons {
+ display: flex;
+ gap: 20px;
+ justify-content: center;
+ flex-wrap: wrap;
+}
+
+/* Buttons */
+.btn {
+ padding: 12px 25px;
+ border: none;
+ border-radius: 8px;
+ text-decoration: none;
+ display: inline-block;
+ font-weight: bold;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ font-size: 1.1em;
+}
+
+.btn-primary {
+ background: #3498db;
+ color: white;
+}
+
+.btn-primary:hover {
+ background: #2980b9;
+ transform: translateY(-2px);
+}
+
+.btn-secondary {
+ background: #95a5a6;
+ color: white;
+}
+
+.btn-secondary:hover {
+ background: #7f8c8d;
+ transform: translateY(-2px);
+}
+
+.btn-outline {
+ background: transparent;
+ border: 2px solid #3498db;
+ color: #3498db;
+}
+
+.btn-outline:hover {
+ background: #3498db;
+ color: white;
+}
+
+/* Demo users */
+.demo-users {
+ background: #f8f9fa;
+ padding: 20px;
+ border-radius: 10px;
+ margin: 30px 0;
+}
+
+.demo-users h3 {
+ margin-bottom: 15px;
+ color: #2c3e50;
+}
+
+.user-list {
+ display: flex;
+ gap: 15px;
+ flex-wrap: wrap;
+}
+
+.demo-user {
+ background: white;
+ padding: 10px 15px;
+ border-radius: 5px;
+ border: 1px solid #ddd;
+}
+
+.demo-user code {
+ background: #e8f4f8;
+ color: #2980b9;
+ padding: 2px 6px;
+ border-radius: 3px;
+ font-family: 'Courier New', monospace;
+}
+
+/* Wireshark info */
+.wireshark-info {
+ background: #e8f5e8;
+ border: 2px solid #27ae60;
+ padding: 20px;
+ border-radius: 10px;
+ margin: 30px 0;
+}
+
+.wireshark-info h3 {
+ color: #27ae60;
+ margin-bottom: 15px;
+}
+
+.wireshark-info ol {
+ margin-left: 20px;
+}
+
+.wireshark-info li {
+ margin: 8px 0;
+}
+
+.wireshark-info code {
+ background: #2c3e50;
+ color: #ecf0f1;
+ padding: 2px 6px;
+ border-radius: 3px;
+ font-family: 'Courier New', monospace;
+}
+
+/* Form styling */
+.form-container {
+ max-width: 600px;
+ margin: 0 auto;
+}
+
+.form-container h2 {
+ color: #2c3e50;
+ margin-bottom: 15px;
+ text-align: center;
+ font-size: 2em;
+}
+
+.form-subtitle {
+ text-align: center;
+ color: #7f8c8d;
+ margin-bottom: 30px;
+ font-size: 1.1em;
+}
+
+/* Dashboard specific styles */
+.quick-actions {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 20px;
+ margin: 30px 0;
+}
+
+.action-card {
+ background: #f8f9fa;
+ padding: 25px;
+ border-radius: 10px;
+ text-align: center;
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
+ transition: transform 0.3s ease;
+}
+
+.action-card:hover {
+ transform: translateY(-5px);
+}
+
+.action-card h3 {
+ color: #2c3e50;
+ margin-bottom: 10px;
+ font-size: 1.3em;
+}
+
+.action-card p {
+ color: #7f8c8d;
+ margin-bottom: 20px;
+}
+
+/* User info grid */
+.user-info-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 15px;
+}
+
+.info-item {
+ display: flex;
+ justify-content: space-between;
+ padding: 10px 0;
+ border-bottom: 1px solid #ecf0f1;
+}
+
+.info-item strong {
+ color: #2c3e50;
+}
+
+/* Accounts grid */
+.accounts-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
+ gap: 20px;
+ margin-top: 20px;
+}
+
+.account-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 15px;
+}
+
+.account-status {
+ background: #27ae60;
+ color: white;
+ padding: 4px 12px;
+ border-radius: 20px;
+ font-size: 0.8em;
+ font-weight: bold;
+}
+
+.account-balance {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin: 15px 0;
+ padding: 15px;
+ background: #f8f9fa;
+ border-radius: 8px;
+}
+
+.balance-amount {
+ font-size: 1.5em;
+ font-weight: bold;
+ color: #27ae60;
+}
+
+.account-actions {
+ display: flex;
+ gap: 10px;
+}
+
+/* Transactions */
+.transaction-list {
+ background: #f8f9fa;
+ border-radius: 10px;
+ padding: 20px;
+ margin: 20px 0;
+}
+
+.transaction-item {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 15px 0;
+ border-bottom: 1px solid #e9ecef;
+}
+
+.transaction-item:last-child {
+ border-bottom: none;
+}
+
+.transaction-desc {
+ font-weight: bold;
+ color: #2c3e50;
+}
+
+.transaction-date {
+ font-size: 0.9em;
+ color: #7f8c8d;
+}
+
+.transaction-amount.positive {
+ color: #27ae60;
+ font-weight: bold;
+}
+
+.transaction-amount.negative {
+ color: #e74c3c;
+ font-weight: bold;
+}
+
+/* Notifications */
+.notification-item {
+ display: flex;
+ gap: 15px;
+ padding: 20px;
+ background: #e8f4f8;
+ border-radius: 10px;
+ border-left: 4px solid #3498db;
+ margin: 20px 0;
+}
+
+.notification-icon {
+ font-size: 1.5em;
+}
+
+.notification-content strong {
+ color: #2c3e50;
+ margin-bottom: 8px;
+ display: block;
+}
+
+/* Demo accounts */
+.demo-accounts {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 15px;
+ margin: 20px 0;
+}
+
+.demo-account {
+ background: #e8f4f8;
+ padding: 15px;
+ border-radius: 8px;
+ border-left: 4px solid #3498db;
+}
+
+.demo-credential {
+ background: #2c3e50;
+ color: #ecf0f1;
+ padding: 2px 6px;
+ border-radius: 4px;
+ font-family: 'Courier New', monospace;
+ font-weight: bold;
+}
+
+/* Security tips and info */
+.security-tips {
+ background: #fff3cd;
+ border: 1px solid #ffc107;
+ padding: 20px;
+ border-radius: 10px;
+ margin: 20px 0;
+}
+
+.security-tips h3 {
+ color: #856404;
+ margin-bottom: 15px;
+}
+
+.security-tips ul {
+ margin-left: 20px;
+}
+
+.security-tips li {
+ margin: 8px 0;
+ color: #856404;
+}
+
+.security-info {
+ background: #e8f5e8;
+ border: 2px solid #27ae60;
+ padding: 20px;
+ border-radius: 10px;
+ margin: 20px 0;
+}
+
+.security-info h3 {
+ color: #27ae60;
+ margin-bottom: 15px;
+}
+
+.security-info ul {
+ margin-left: 20px;
+}
+
+.security-info li {
+ margin: 8px 0;
+}
+
+/* Checkbox styling */
+.checkbox-container {
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ padding: 10px 0;
+}
+
+.checkbox-container input[type="checkbox"] {
+ margin-right: 10px;
+}
+
+.terms-section {
+ margin: 20px 0;
+}
+
+.form-options {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin: 20px 0;
+}
+
+.forgot-password {
+ color: #3498db;
+ text-decoration: none;
+ font-size: 0.9em;
+}
+
+.forgot-password:hover {
+ text-decoration: underline;
+}
+
+/* Alerts */
+.alert {
+ padding: 15px;
+ border-radius: 8px;
+ margin-bottom: 20px;
+ font-weight: bold;
+}
+
+.alert-success {
+ background: #d4edda;
+ border: 1px solid #c3e6cb;
+ color: #155724;
+}
+
+.alert-error {
+ background: #f8d7da;
+ border: 1px solid #f5c6cb;
+ color: #721c24;
+}
+
+/* Security warnings */
+.security-warning {
+ background: #fff3cd;
+ border: 2px solid #ffc107;
+ padding: 20px;
+ border-radius: 10px;
+ margin: 20px 0;
+}
+
+.security-warning.critical {
+ background: #f8d7da;
+ border-color: #e74c3c;
+ color: #721c24;
+}
+
+.security-warning h3 {
+ margin-bottom: 10px;
+ color: inherit;
+}
+
+.packet-info {
+ background: #2c3e50;
+ color: #ecf0f1;
+ padding: 15px;
+ border-radius: 5px;
+ margin-top: 15px;
+ font-family: 'Courier New', monospace;
+ font-size: 0.9em;
+}
+
+.packet-info code {
+ display: block;
+ white-space: pre-line;
+}
+
+/* Auth form */
+.auth-form {
+ background: #f8f9fa;
+ padding: 30px;
+ border-radius: 10px;
+ margin: 20px 0;
+}
+
+.form-group {
+ margin-bottom: 20px;
+}
+
+.form-group label {
+ display: block;
+ margin-bottom: 5px;
+ font-weight: bold;
+ color: #2c3e50;
+}
+
+.form-group input {
+ width: 100%;
+ padding: 12px;
+ border: 2px solid #ddd;
+ border-radius: 5px;
+ font-size: 1em;
+}
+
+.form-group input:focus {
+ border-color: #3498db;
+ outline: none;
+ box-shadow: 0 0 5px rgba(52, 152, 219, 0.3);
+}
+
+.form-help {
+ display: block;
+ margin-top: 5px;
+ color: #e74c3c;
+ font-size: 0.9em;
+}
+
+.form-footer {
+ text-align: center;
+ margin-top: 20px;
+}
+
+.form-footer p {
+ margin: 10px 0;
+}
+
+.form-footer a {
+ color: #3498db;
+ text-decoration: none;
+}
+
+.form-footer a:hover {
+ text-decoration: underline;
+}
+
+/* Demo credentials */
+.demo-credentials {
+ background: #e8f4f8;
+ padding: 20px;
+ border-radius: 10px;
+ margin: 20px 0;
+}
+
+.demo-credentials h3 {
+ margin-bottom: 15px;
+ color: #2980b9;
+}
+
+.cred-box {
+ background: white;
+ padding: 15px;
+ border-radius: 5px;
+ margin: 10px 0;
+ border-left: 4px solid #3498db;
+}
+
+.cred-box code {
+ background: #e8f4f8;
+ color: #2980b9;
+ padding: 2px 6px;
+ border-radius: 3px;
+ font-family: 'Courier New', monospace;
+}
+
+/* Wireshark instructions */
+.wireshark-instructions {
+ background: #f0f8ff;
+ border: 2px solid #5dade2;
+ padding: 20px;
+ border-radius: 10px;
+ margin: 20px 0;
+}
+
+.wireshark-instructions h3 {
+ color: #2980b9;
+ margin-bottom: 15px;
+}
+
+.wireshark-instructions ol {
+ margin-left: 20px;
+}
+
+.wireshark-instructions code {
+ background: #2c3e50;
+ color: #ecf0f1;
+ padding: 2px 6px;
+ border-radius: 3px;
+ font-family: 'Courier New', monospace;
+}
+
+.wireshark-tip {
+ background: #fff9c4;
+ border: 2px solid #f39c12;
+ padding: 20px;
+ border-radius: 10px;
+ margin: 20px 0;
+}
+
+.wireshark-tip h3 {
+ color: #f39c12;
+ margin-bottom: 10px;
+}
+
+/* Dashboard */
+.dashboard-container h2 {
+ color: #2c3e50;
+ margin-bottom: 25px;
+ text-align: center;
+}
+
+.success-message {
+ background: #d4edda;
+ border: 2px solid #27ae60;
+ padding: 20px;
+ border-radius: 10px;
+ margin-bottom: 25px;
+}
+
+.success-message h3 {
+ color: #27ae60;
+ margin-bottom: 10px;
+}
+
+/* User details */
+.user-details {
+ margin: 30px 0;
+}
+
+.user-details h3 {
+ color: #2c3e50;
+ margin-bottom: 15px;
+}
+
+.user-card {
+ background: #f8f9fa;
+ padding: 20px;
+ border-radius: 10px;
+ border-left: 4px solid #3498db;
+}
+
+.user-card p {
+ margin: 8px 0;
+}
+
+.password-display {
+ background: #ffebee;
+ color: #e74c3c;
+ padding: 2px 6px;
+ border-radius: 3px;
+ font-family: 'Courier New', monospace;
+ font-weight: bold;
+}
+
+/* Accounts */
+.accounts {
+ margin: 30px 0;
+}
+
+.accounts h3 {
+ color: #2c3e50;
+ margin-bottom: 20px;
+}
+
+.account-card {
+ background: white;
+ border: 1px solid #ddd;
+ border-radius: 10px;
+ padding: 20px;
+ margin: 15px 0;
+ box-shadow: 0 2px 5px rgba(0,0,0,0.1);
+}
+
+.account-card h4 {
+ color: #2c3e50;
+ margin-bottom: 10px;
+}
+
+.account-number {
+ color: #7f8c8d;
+ font-family: 'Courier New', monospace;
+}
+
+.account-balance {
+ font-size: 1.2em;
+ margin-top: 10px;
+}
+
+.account-balance strong {
+ color: #27ae60;
+}
+
+/* Security analysis */
+.security-analysis {
+ margin: 30px 0;
+}
+
+.security-analysis h3 {
+ color: #2c3e50;
+ margin-bottom: 20px;
+}
+
+.analysis-points {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 20px;
+}
+
+.point {
+ padding: 20px;
+ border-radius: 10px;
+}
+
+.point:first-child {
+ background: #ffebee;
+ border: 2px solid #e74c3c;
+}
+
+.point:last-child {
+ background: #e8f5e8;
+ border: 2px solid #27ae60;
+}
+
+.point h4 {
+ margin-bottom: 15px;
+}
+
+.point ul {
+ margin-left: 20px;
+}
+
+.point li {
+ margin: 8px 0;
+}
+
+/* Demo actions */
+.demo-actions {
+ margin: 30px 0;
+ text-align: center;
+}
+
+.demo-actions h3 {
+ color: #2c3e50;
+ margin-bottom: 20px;
+}
+
+.action-list {
+ display: flex;
+ gap: 15px;
+ justify-content: center;
+ flex-wrap: wrap;
+}
+
+/* HTTPS info */
+.https-info {
+ background: #e8f5e8;
+ border: 2px solid #27ae60;
+ padding: 20px;
+ border-radius: 10px;
+ margin: 30px 0;
+}
+
+.https-info h3 {
+ color: #27ae60;
+ margin-bottom: 15px;
+}
+
+.https-info code {
+ background: #2c3e50;
+ color: #ecf0f1;
+ padding: 4px 8px;
+ border-radius: 3px;
+ font-family: 'Courier New', monospace;
+ display: inline-block;
+ margin: 5px 0;
+}
+
+.btn-outline:hover {
+ background: #3498db;
+ color: white;
+}
+
+.btn-sm {
+ padding: 8px 16px;
+ font-size: 0.9em;
+}
+
+/* Footer */
+.footer {
+ background: #2c3e50;
+ color: white;
+ text-align: center;
+ padding: 25px;
+ margin-top: auto;
+}
+
+.footer-content p {
+ margin: 8px 0;
+}
+
+.footer-content a {
+ color: #3498db;
+ text-decoration: none;
+}
+
+.footer-content a:hover {
+ text-decoration: underline;
+}
+
+.license {
+ font-size: 0.9em;
+ opacity: 0.8;
+}
+
+/* Responsive design */
+@media (max-width: 768px) {
+ .header {
+ flex-direction: column;
+ text-align: center;
+ gap: 15px;
+ }
+
+ .welcome-section {
+ grid-template-columns: 1fr;
+ }
+
+ .features,
+ .quick-actions {
+ grid-template-columns: 1fr;
+ }
+
+ .action-buttons,
+ .action-list {
+ flex-direction: column;
+ align-items: center;
+ }
+
+ .user-list,
+ .demo-accounts {
+ grid-template-columns: 1fr;
+ }
+
+ .analysis-points,
+ .protocol-info {
+ grid-template-columns: 1fr;
+ }
+
+ .main {
+ padding: 20px;
+ }
+
+ .accounts-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .form-options {
+ flex-direction: column;
+ gap: 15px;
+ align-items: flex-start;
+ }
+}
+
+@media (max-width: 480px) {
+ .header h1 {
+ font-size: 2em;
+ }
+
+ .demo-notice {
+ display: block;
+ margin-top: 10px;
+ }
+}
\ No newline at end of file
diff --git a/bank/templates/dashboard.html b/bank/templates/dashboard.html
new file mode 100644
index 0000000..1254c8e
--- /dev/null
+++ b/bank/templates/dashboard.html
@@ -0,0 +1,140 @@
+
+
+
+
+
+ 🏦 SecureBank - Dashboard
+
+
+
+
+
+
+
+
+
Pregled vaših računov
+
+
+
+
Nakazilo
+
Pošljite denar na drug račun
+
+
+
+
Izpisek
+
Prenesite mesečnji izpisek
+
+
+
+
Mobilno
+
Povežite z mobilno aplikacijo
+
+
+
+
+
+
Podatki o uporabniku
+
+
+
+ Polno ime:
+ {{.User.FullName}}
+
+
+ Uporabniško ime:
+ {{.User.Username}}
+
+
+ E-mail:
+ {{.User.Email}}
+
+
+ Strankarski ID:
+ SEC-{{.User.ID}}
+
+
+
+
+
+
+
Vaši bančni računi
+
+ {{range .Accounts}}
+
+
+
{{.Number}}
+
+ Razpoložljivo stanje:
+ {{.Balance}}
+
+
+
+
+
+
+ {{end}}
+
+
+
+
+
Zadnje transakcije
+
+
+
+ Nakup - Mercator d.d.
+ 10.02.2026
+
+
-€24.50
+
+
+
+ Plača - Delodajalec d.o.o.
+ 01.02.2026
+
+
+€2,100.00
+
+
+
+ Prevzem gotovine - Bankomat
+ 28.01.2026
+
+
-€100.00
+
+
+
+
+
+
+
🔔 Obvestila
+
+
ℹ️
+
+
Varnostno posodobljeno
+
Vaši podatki so zaščiteni z najnovejšimi varnostnimi protokoli.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bank/templates/home.html b/bank/templates/home.html
new file mode 100644
index 0000000..2ae38b2
--- /dev/null
+++ b/bank/templates/home.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+ SecureBank - Varno spletno bančništvo
+
+
+
+
+
+
+
+
+
+
Dobrodošli v SecureBank
+
Vaš zaupanja vreden partner za varno spletno bančništvo. Z najsodobnejšimi varnostnimi tehnologijami ščitimo vaše finance 24/7.
+
+
+
+
Najvišja varnost
+
SSL šifriranje in večstopenjski sistem preverjanja
+
+
+
Enostavno upravljanje
+
Intuitivni vmesnik za upravljanje vseh vaših računov
+
+
+
Dostopnost 24/7
+
Bančništvo brez omejitev, kadarkoli in kjerkoli
+
+
+
+
+
Dostop do vašega računa
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bank/templates/login.html b/bank/templates/login.html
new file mode 100644
index 0000000..f4d049a
--- /dev/null
+++ b/bank/templates/login.html
@@ -0,0 +1,99 @@
+
+
+
+
+
+ SecureBank - Prijava
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bank/templates/register.html b/bank/templates/register.html
new file mode 100644
index 0000000..e6300a1
--- /dev/null
+++ b/bank/templates/register.html
@@ -0,0 +1,88 @@
+
+
+
+
+
+ SecureBank - Registracija
+
+
+
+
+
+
\ No newline at end of file