Walidacja Planu Implementacji Browser-VPN SaaS
Data: 2026-07-22
Źródła: Plan implementacji (2026-07-22-browser-vpn-implementation-plan.md) vs Specyfikacja v4 (2026-07-22-browser-vpn-v4-design.md)
Ocena ogólna: 7.5/10
Scorecard
| Kategoria | Ocena | Uwagi |
|---|---|---|
| Kompletność | 7/10 | Plan pokrywa ~80% wymagań spec v4; brakuje kilku kluczowych elementów |
| Struktura | 9/10 | Taski bite-sized, dobrze podzielone na fazy, czytelny format |
| Wykonalność | 8/10 | Taski są realistyczne, ale szacowany czas MVP (6 dni) może być optymistyczny |
| Zgodność ze spec v4 | 7/10 | 8 z 12 kluczowych obszarów spec v4 pokrytych; 4 obszary wymagają uzupełnienia |
Co jest OK ✅
Struktura i podział na taski
- 16 tasków w 5 fazach — właściwy podział, każdy task ma clear objective
- Taski bite-sized (2-5 min) — realny czas wykonania, dobrze zdefiniowane zakresy
- Kolejność faz logiczna — Infrastruktura → Backend → Frontend → Security → Backup → CI/CD
- Każdy task ma verify step — to kluczowe dla TDD i Hermes automation
- Priorytetyzacja MVP — Fazy 0-2 jako Must Have, Fazy 3-4 jako Should Have, Faza 5 jako Could Have
Pokrycie wymagań spec v4
| Obszar spec v4 | Status w planie | Uwagi |
|---|---|---|
| Selkies-GStreamer | ✅ Task 1.5 | Port 3000 (noVNC) + port 3001 (Selkies) z Traefik labels |
| Seccomp (default MVP) | ✅ Task 1.5 | --cap-drop=ALL --cap-add=NET_ADMIN,SYS_PTRACE --no-new-privileges |
| Traefik porty 3000/3001 | ✅ Task 1.5 | Osobne routery Traefik dla noVNC i Selkies |
| API versioning | ✅ Task 1.1 | /api/v1/health — zgodne z konwencją |
| Izolacja sieciowa | ✅ Task 1.5 | --internal per-container network, osobna btcpay-network |
| ERD/tabele | ✅ Task 0.2 | 8 tabel: orders, sessions, vpn_configs, discount_codes, tickets, system_logs, server_metrics, admin_audit_logs |
| Docker secrets | ✅ Task 0.3 | .env + setup.sh z generatorami sekretów |
| VPN config lifecycle | ✅ Task 1.5 | VPN pool z select/release, fail_count i is_broken |
| Admin panel | ✅ Task 2.4 | 4 podstrony: dashboard, orders, containers, settings |
| Trocador integration | ✅ Task 1.3 | API + webhook + polling fallback |
| BTCPay integration | ✅ Task 1.4 | Invoice + webhook + failover |
| Container orchestration | ✅ Task 1.5 | Start/stop Docker containers z linuxserver images |
| Session management | ✅ Task 1.6 | Magic link, device binding, recovery PIN, schedulers |
| TOTP + audit log | ✅ Task 3.1 | Obowiązkowe TOTP dla admina |
| Trivy scanning | ✅ Task 3.2 | Weekly scan, auto-rebuild na CRITICAL/HIGH |
| Monitoring + Telegram | ✅ Task 3.3 | Alerty z progami CPU/RAM/disk |
| Backup lokalny + off-site | ✅ Task 4.1 | pg_dump, GPG encrypt, rsync retention 7/30 dni |
| DR scripts | ✅ Task 4.2 | restore.sh, switch-domain.sh, test restore monthly |
| CI/CD | ✅ Task 5.1 | GitHub Actions: build → migrate → staging → smoke → prod |
Co brakuje / wymaga poprawy ⚠️
🔴 1. BTCPay Server — brak serwisu w docker-compose (CRITICAL)
Problem: Spec v4 definiuje BTCPay Server jako osobny Docker service z pruned Bitcoin node (10 GB). Plan w Task 1.4 integruje się z BTCPay API, ale nigdzie nie definiuje serwisu BTCPay w docker-compose.yml (Task 0.1). Bez tego serwisu integracja BTCPay nie zadziała — nie ma do czego wysyłać webhooków ani tworzyć invoice'ów.
Rozwiązanie: Dodać serwis btcpayserver do docker-compose.yml (Task 0.1) lub osobny task w Faza 0.
Przykładowa konfiguracja z spec v4:
services:
btcpayserver:
image: btcpayserver/btcpayserver:latest
environment:
- BTCPAY_CHAIN=BTC
- BTCPAY_PRUNE=10000
volumes:
- btcpay-data:/data
networks:
- btcpay-network
🔴 2. Polityka retencji danych — brak implementacji (HIGH)
Problem: Spec v4 definiuje 7 zasad retencji danych:
- Order number: usuwany po 90 dniach
- deviceToken: usuwany po 90 dniach
- IP klienta: NIE przechowywany
- User-Agent: NIE przechowywany
- Logi operacyjne: 7 dni retention
- Tickety support: 90 dni
- Metryki serwera: 30 dni
Plan nie zawiera żadnego taska do implementacji tych zasad. Brak cron joba/schedulera do cleanupu, brak mechanizmu anonimizacji danych.
Rozwiązanie: Dodać task w Faza 1 (backend) lub Faza 3 (security) implementujący scheduler do czyszczenia danych zgodnie z polityką retencji.
🟡 3. SLO Measurement — brak implementacji (MEDIUM)
Problem: Spec v4 definiuje konkretne metody pomiaru SLO:
- Uptime API:
curlco 30s do/api/v1/health - Czas startu kontenera: mierzony w kodzie, zapis do
server_metrics - Response time API: P95 z
curl -w "%{time_total}"co 30s - Streaming latency: heartbeat co 30s
Plan w Task 3.3 (Monitoring) jest ogólny — "Alerty Telegram z progami" — ale nie implementuje tych konkretnych mechanizmów pomiarowych.
Rozwiązanie: Doprecyzować Task 3.3 o implementację SLO measurement zgodnie ze spec v4, lub dodać osobny task.
🟡 4. Brak zadania dla WireGuard config upload (MEDIUM)
Problem: Spec v4 opisuje lifecycle VPN configów (7 kroków), w tym:
- Krok 1: Admin wgrywa plik
.confprzez admin panel - Krok 6: Rotacja configów (disable → upload new)
Plan ma Task 1.5 (VPN pool) i admin panel (Task 2.4), ale nie ma konkretnego taska dla mechanizmu uploadu WireGuard configów przez admin panel ani API endpointu do tego.
Rozwiązanie: Dodać podtask w Task 2.4 (admin panel) lub osobny task w Faza 1 dla API endpointu POST /api/v1/admin/vpn-configs.
🟡 5. Ticket system — brak implementacji (MEDIUM)
Problem: Spec v4 definiuje tabelę tickets w ERD i politykę retencji (90 dni), a plan wspomina tickety w admin panelu (Task 2.4). Brakuje jednak:
- API endpointów do ticketów (create, list, close)
- Formularza tickets na froncie
- Mechanizmu anonimizacji ticketów po 90 dniach
Rozwiązanie: Dodać task w Faza 1 (backend) dla tickets API i w Faza 2 (frontend) dla tickets UI.
🟡 6. Discount codes — brak implementacji (MEDIUM)
Problem: Tabela discount_codes istnieje w migracji SQL (Task 0.2), ale plan nie ma taska dla:
- API do walidacji kodu rabatowego
- Logiki aplikowania rabatu w order flow
- Admin panelu do zarządzania kodami
Rozwiązanie: Dodać walidację discount_code w Task 1.2 (Orders API) i UI w Task 2.4 (admin panel).
🟢 7. DR scenarios — niepełne pokrycie (LOW)
Problem: Spec v4 definiuje 7 scenariuszy DR z RTO/RPO. Plan ma Task 4.2 (restore.sh, switch-domain.sh), ale nie obejmuje wszystkich scenariuszy:
- Brak procedury dla "Container crash >3 razy w 1h" (stop + alert)
- Brak procedury dla "Trocador API down" (jest failover, ale nie ma testu)
- Brak procedury dla "VPN region down" (auto-pomiń, alert)
Rozwiązanie: Dodać te scenariusze do Task 4.2 lub dokumentacji DR.
Analiza szczegółowa
Ocena tasków
| Task | Czas | Ocena | Uwagi |
|---|---|---|---|
| 0.1 docker-compose + Traefik | 2-5 min | ✅ | Dobrze zdefiniowany, konkretne YAML |
| 0.2 Migracje SQL | 2-5 min | ✅ | Kompletny SQL z 8 tabelami |
| 0.3 .env + setup.sh | 2-5 min | ✅ | Generator sekretów, interaktywny setup |
| 1.1 Backend skeleton | 2-5 min | ✅ | Express/Fastify, health check |
| 1.2 Orders API | 2-5 min | ✅ | Pełny flow: walidacja → generowanie → zapis → payment |
| 1.3 Trocador integration | 2-5 min | ✅ | API + webhook + polling |
| 1.4 BTCPay integration | 2-5 min | ✅ | API + webhook + failover, ale brak serwisu BTCPay w docker-compose |
| 1.5 Container orchestration | 3-8 min | ⚠️ | Task może być zbyt obszerny — zawiera start/stop, VPN pool, Traefik labels, Docker networks |
| 1.6 Session management | 2-5 min | ✅ | Magic link, device binding, recovery PIN, scheduler |
| 2.1 Landing page | 2-5 min | ✅ | Formularz zakupu (browser, region, plan, discount) |
| 2.2 Order page | 2-5 min | ✅ | QR kod, status polling, download |
| 2.3 Session page | 2-5 min | ✅ | noVNC/Selkies stream, timer, magic link |
| 2.4 Admin panel | 3-8 min | ⚠️ | 4 podstrony — może wymagać podziału na 2 taski |
| 3.1 TOTP + audit log | 2-5 min | ✅ | Dobrze zdefiniowany |
| 3.2 Trivy scanning | 2-5 min | ✅ | Weekly scan, auto-rebuild |
| 3.3 Monitoring + Telegram | 2-5 min | ⚠️ | Brak szczegółów SLO measurement |
| 4.1 Backup | 2-5 min | ✅ | pg_dump, GPG, rsync, retention |
| 4.2 DR scripts | 2-5 min | ✅ | restore.sh, switch-domain.sh |
| 5.1 CI/CD | 2-5 min | ✅ | GitHub Actions pipeline |
Ocena faz
| Faza | Taski | Szacowany czas | Ocena | Uwagi |
|---|---|---|---|---|
| Faza 0 | 3 | ~1 dzień | ✅ | Realistyczny, ale brak BTCPay service |
| Faza 1 | 6 | ~3 dni | ⚠️ | Task 1.5 może być zbyt obszerny; brak tickets API, discount codes API, retention scheduler |
| Faza 2 | 4 | ~2 dni | ⚠️ | Task 2.4 (admin panel) może wymagać podziału |
| Faza 3 | 3 | ~1 dzień | ⚠️ | Brak SLO measurement; data retention cleanup |
| Faza 4 | 2 | ~0.5 dnia | ⚠️ | Niepełne pokrycie DR scenariuszy |
| Faza 5 | 1 | ~0.5 dnia | ✅ | Standardowy pipeline |
Zalecane poprawki
Must Have (przed implementacją)
- Dodaj BTCPay Server service do docker-compose.yml (Task 0.1) — bez tego integracja BTCPay nie zadziała
- Dodaj task dla data retention / cleanup scheduler — w Faza 1 (backend) lub Faza 3 (security)
- Podziel Task 1.5 na dwa osobne taski: (a) Container orchestration, (b) VPN pool management
- Podziel Task 2.4 na dwa osobne taski: (a) Admin dashboard + orders, (b) Admin containers + settings
- Dodaj SLO measurement do Task 3.3 — konkretne skrypty curl, heartbeat, timing
Should Have (przed prod)
- Dodaj tickets API (Faza 1) + tickets UI (Faza 2)
- Dodaj discount codes validation w Task 1.2 + admin UI w Task 2.4
- Dodaj WireGuard config upload endpoint w Faza 1 + admin UI w Task 2.4
- Uzupełnij DR scenariusze w Task 4.2 — container crash loop, Trocador down test, VPN region down
Could Have (po MVP)
- Seccomp custom profile (v2) — zgodnie ze spec v4, nie dla MVP
Podsumowanie
| Aspekt | Werdykt |
|---|---|
| Plan gotowy do implementacji? | ⚠️ Tak, ale z poprawkami |
| Plan jest dobrze zorganizowany i ma solidną strukturę. Jednak brak BTCPay Server service w docker-compose to krytyczny błąd — bez tego integracja płatności BTCPay nie zadziała. | |
| Co zrobić przed startem: | 1. Dodać BTCPay service do docker-compose 2. Dodać data retention scheduler 3. Podzielić zbyt duże taski (1.5, 2.4) |
| MVP (Fazy 0-2) po poprawkach: | ~7-8 dni (zamiast 6) — bardziej realistyczne |
| Razem przed prod: | ~9-10 dni (zamiast 7.5) |
Rekomendacja
Plan jest gotowy do implementacji po wprowadzeniu 5 poprawek Must Have. Po ich aplikacji ocena wzrośnie do ~9/10. Główne ryzyko to brak BTCPay serwisu w docker-compose — bez tego nie da się przetestować integracji płatności.
Raport wygenerowany 2026-07-22 przez Hermes Agent na podstawie walidacji planu vs specyfikacji v4.