Přeskočit na obsah
Bezpečnost

Jak Volnio chrání tvoje obchodní data.

Bezpečnost beru vážně, protože moje vlastní obchodní data jsou ve Volniu. Tohle je stav k dnešnímu dni — technicky, ověřitelně, bez marketingového balastu. Co chybí, najdeš dole honestly označené.

Row-Level Security

Tvoje data jsou fyzicky izolovaná na úrovni PostgreSQL. I kdyby aplikace měla bug, databáze stejně nevrátí cizí řádky.

AES-256-GCM šifrování

SMTP hesla, API keys a další citlivá data jsou šifrovaná authenticated encryption algoritmem — nikdo je nemůže přečíst ani upravit.

EU hosting (Frankfurt)

Všechna data zůstávají v EU region Supabase (eu-central-1). Žádný transfer mimo EU, TLS 1.3 transport, HSTS enforced.

GDPR one-click export

Jeden endpoint vrátí JSON se všemi tvými daty napříč 23 tabulkami. Smazání účtu je kaskádní a nevratné — bez čekání na support.

Co a kde

Co se ukládá a kde

Volnio ukládá ta data, která potřebuje k tomu, aby fungovalo — a nic víc. Žádný tracking „pro jistotu", žádné analytics cookies bez souhlasu, žádné skryté data pipelines.

Ukládaná data

  • Kontakty klientů jméno, IČO, DIČ, adresa, email, telefon (tebou zadané)
  • Faktury hlavičky, položky, splatnosti, stav plateb, PDF soubory
  • SMTP konfigurace host, port, username, heslo (šifrované AES-256-GCM)
  • Uživatelské nastavení firemní údaje, číslování, daňový režim, email šablony
  • Finanční přehled výnosy, výdaje, plánovaná fakturace, reminders
  • Authentication email, hash hesla (nikdy plain text), session tokens

Kde jsou data fyzicky

Supabase PostgreSQL v EU region Frankfurt (eu-central-1). Data neopouštějí EU. Infrastruktura běží na AWS pod Supabase správou. PDF faktury jsou v Supabase Storage (bucket invoices).

Šifrování

Jak jsou tvoje data šifrovaná

SMTP hesla — AES-256-GCM

Když nastavíš SMTP pro odesílání faktur, tvoje heslo se šifruje algoritmem AES-256-GCM (Advanced Encryption Standard, 256-bit key, Galois/Counter Mode). GCM je authenticated encryption — kromě šifrování ověřuje i integritu, takže nikdo nemůže heslo potají upravit.

Každé heslo má vlastní random IV (initialization vector, 12 bytes) a auth tag. Výsledek ukládáme jako iv:tag:ciphertext hex string. Implementace v src/lib/crypto.ts.

Session cookies + Transport

Supabase Auth používá httpOnly + secure + sameSite strict cookies. httpOnly znamená, že JavaScript je nemůže přečíst (ochrana proti XSS). Veškerá komunikace mezi prohlížečem a Volniem je přes HTTPS (TLS 1.3) s automatickým HSTS od Vercelu. Žádný HTTP fallback.

At-rest encryption

PostgreSQL databáze i Storage jsou šifrované at rest přes AWS KMS (Supabase default). Fyzické disky obsahují jen šifrovaná data.

Izolace dat

Row-Level Security — data jsou fyzicky izolovaná per uživatel

Row-Level Security (RLS) je nejsilnější signál bezpečnostní hygieny pro multi-tenant SaaS. Volnio ho má zapnutý na všech tabulkách s uživatelskými daty (faktury, klienti, kontakty, plány, upomínky, nastavení, SMTP hesla, import credentials, pozorování plateb).

Jak to funguje

RLS je pravidlo na úrovni PostgreSQL, které říká: „při dotazu na tabulku invoices vrať jen řádky, kde user_id = auth.uid()". To je enforced databází, ne aplikací. I kdyby aplikační kód měl bug a zapomněl přidat WHERE user_id = …, databáze to stejně zajistí.

CREATE POLICY "users_own_invoices"
ON invoices
FOR ALL
USING (auth.uid() = user_id);

Storage RLS

PDF faktury jsou uložené v Supabase Storage v path {user_id}/filename.pdf. Storage RLS pravidlo kontroluje, že první segment cesty odpovídá auth.uid(). Uživatel fyzicky nemůže stáhnout PDF jiného uživatele, ani kdyby odhadl URL.

Rate limiting

Ochrana proti zneužití a DDoS

Kritické endpointy mají rate limit — brute force password guessing, spam batch submissions, neautorizované API requesty jsou omezené počtem requestů za časovou okno.

  • Webhook endpoints (GoPay payment callbacks) — rate limit s signature verification
  • Batch invoice creation — limit na počet faktur najednou
  • Search a ARES lookup — limit na počet dotazů per uživatel
  • Client enrichment — limit na external API calls

Rate limit implementace: src/lib/rate-limit.ts. Překročení vrací HTTP 429 s Retry-After headerem. Plánovaná migrace na Upstash Redis pro distribuované tracking napříč Vercel serverless instancemi.

GDPR — přenositelnost

Export všech tvých dat jedním klikem

GDPR ti dává právo kdykoli získat všechna svoje data. Volnio to implementuje doslovně: endpoint GET /api/user/export-data vrátí JSON soubor se všemi tvými daty napříč 23 tabulkami — klienti, faktury, plány, upomínky, nastavení, recenze, obligations, quick notes, vše.

Co je v exportu
  • Data ze všech 23 tabulek
  • Export timestamp pro tracking
  • User ID, email, created_at
Co v exportu NENÍ (záměrně)
  • Heslo ke Volniu (jen hash)
  • SMTP heslo (redacted)
  • Import API keys (redacted)
GDPR — smazání

Smazání účtu = kaskádní, nevratné, okamžité

Pokud chceš účet smazat, jde to jedním klikem v nastavení. Endpoint POST /api/user/delete-account vymaže všechna tvoje data z 23 tabulek v správném pořadí (children before parents, kvůli foreign keys), plus všechny PDF soubory ze Storage, plus tvůj auth record v Supabase Auth.

Co se smaže
  • • Data ze všech 23 tabulek (kaskádně)
  • • Všechny PDF faktury ve Storage
  • • Auth record (email, hash, session)
  • • Aktivní sessions (okamžité logout)
Co zůstává dočasně
  • • Backup databáze — 30-day retention (PITR)
  • • Anonymizovaná Vercel Analytics (bez PII)

Potvrzení: smazání vyžaduje explicitní confirm: true v POST body (prevence proti nechtěnému triggrování).

Transparentně

Co ještě chybí (a je na roadmapě)

Nemá smysl předstírat, že Volnio je enterprise-grade. Tohle jsou věci, které vědomě řeším, ale zatím nejsou hotové:

Third-party security audit

Do konce 2026

Nezávislý audit od CZ security firmy. Odemkne corporate klienty, kteří formální audit vyžadují.

Two-factor authentication (2FA)

Q2/Q3 2026

Supabase Auth podporuje TOTP a email OTP. Čekám na critical mass uživatelů a jejich feedback.

Password strength requirements

Q1 2026

Supabase default je 6 znaků — zvýším na min 10 znaků a blacklist top 1000 common passwords.

Public status page

Q2 2026

Veřejný status page přes Betterstack nebo Statuspage. Dnes vidím uptime já, ty ne — to chci změnit.

Distributed rate limiting

Q1 2026

Migrace z in-memory na Upstash Redis pro konzistentní rate limit napříč serverless instancemi.

Incident response playbook

Q2 2026

Interní playbook + veřejný commitment „jak se dozvíš o incidentu“. Zatím je to ad-hoc.

Závazek

Co slibuju, pokud dojde k incidentu

Incident (data breach, unauthorized access, service outage s dopadem na data) se může stát i tomu nejlepšímu. Pokud se stane, tady je co slibuju:

  1. 01
    Notifikace do 72 hodin

    Email všem dotčeným uživatelům s popisem toho, co se stalo, co je ovlivněno, a co dělám.

  2. 02
    Transparent write-up na blogu

    Do 7 dnů post-incident publish článek s timeline, root cause, fix, lessons learned. Žádné „no further comment“.

  3. 03
    Public commit s fixem

    Fix (nebo mitigation) bude viditelný v git logu. Repo plánuji udělat public, až bude mature. Dnes mohu sdílet git diff na vyžádání.

  4. 04
    Žádné NDA

    Nezavazuji tě, abys o incidentu mlčel. Můžeš o tom mluvit veřejně.

Časté otázky

Security FAQ

Je Volnio certifikované ISO 27001 nebo SOC 2?

Ne. Formální audit je na roadmapě do konce 2026. Současný stav je „best effort security hygiene“ — veškerá hardening je v kódu, veřejně ověřitelná. Pokud potřebuješ formální certifikaci kvůli corporate compliance, Volnio zatím není vhodné.

Kde jsou moje data fyzicky uložená?

V Supabase EU region (Frankfurt, eu-central-1). Data neopouštějí EU. Hostitel Supabase je postavený na AWS. PDF faktury jsou v Supabase Storage, databáze v PostgreSQL 15+.

Má někdo kromě mě přístup k mým fakturám?

Běžně ne. Matouš (zakladatel) má technicky přístup k databázi přes Supabase admin kvůli incident response, ale bez tvého svolení data nečte. Každá diagnostika je na žádost a s tvým souhlasem. Logy jsou audited přes Supabase dashboard.

Co když najdu bezpečnostní chybu?

Napiš mi na info@volnio.cz. Slibuji: (1) odpověď do 24 hodin, (2) fix nebo mitigation do 72 hodin podle závažnosti, (3) transparent write-up na /blog s poděkováním (pokud si přeješ). Žádné NDA, žádné právní kličky.

Je tam 2FA / MFA?

Zatím ne. Email + password přes Supabase Auth. 2FA (TOTP nebo email OTP) je na roadmapě do Q2/Q3 2026. Pokud to pro tebe je blocker, napiš — posunu prioritu.

Máš bezpečnostní otázku, která tady není?

Napiš mi přímo. Odpovídám do 24 hodin osobně. Žádné formuláře, žádné helpdesk tikety, žádné automatické odpovědi.