Architektura a technologie

LockMyCal je navržen na osvědčené a vysoce spolehlivé platformě Elixir / Erlang VM (BEAM) a frameworku Phoenix, což zajišťuje bezkonkurenční stabilitu, efektivní využití systémových prostředků a schopnost obsloužit tisíce souběžných uživatelů při minimální spotřebě RAM a CPU.


Přehled komponent

graph TD
    subgraph Frontend["Frontend & Klienti"]
        Browser["Prohlížeč (LiveView / WebSocket)"]
        Widget["Vložený JS Widget / iFrame"]
    end

    subgraph Core["LockMyCal Core (Elixir/OTP)"]
        Endpoint["Phoenix Endpoint (Plug Pipeline)"]
        Router["Phoenix Router & Auth Hooks"]
        LiveViews["Phoenix LiveView Sessions"]
        PubSub["Phoenix.PubSub (Real-Time Event Bus)"]
        ObanQueue["Oban Background Jobs (PostgreSQL backed)"]
        ETSCache["ETS In-Memory Cache (Admin & Stats)"]
    end

    subgraph Services["Data & Služby"]
        DB[("PostgreSQL 17")]
        Mailers["Swoosh Mailers (SMTP / Postmark)"]
        ExternalSync["OAuth & CalDAV Sync Workers"]
    end

    Browser <--> Endpoint
    Widget <--> Endpoint
    Endpoint --> Router
    Router --> LiveViews
    LiveViews --> PubSub
    LiveViews --> DB
    ObanQueue --> DB
    ObanQueue --> Mailers
    ObanQueue --> ExternalSync

Klíčové technologie

1. Elixir & Phoenix LiveView

  • Bezstavový i stavový real-time: Phoenix LiveView udržuje lehký proces pro každého připojeného klienta, což eliminuje potřebu těžkých SPA frameworků a přenáší po síti pouze minimální binární rozdíly (diffs).
  • Erlang OTP Concurrency: Každá synchronizace kalendáře nebo webhook probíhá v izolovaném procesu. Chyba u jednoho externího API nikdy neshodí zbytek aplikace.

2. Databáze & Fronty (Ecto, PostgreSQL, Oban)

  • PostgreSQL 17: Primární databáze pro transakční bezpečnost, účty, rezervace, nastavení a auditní logy.
  • Oban: Robustní systém pro fronty úloh na pozadí využívající PostgreSQL tabulky (žádný Redis není potřeba!). Zajišťuje spolehlivé odesílání e-mailů s retry politikou, synchronizaci na pozadí a webhook dispatch.
  • Erlang Term Storage (ETS): Rychlá paměťová mezipaměť přímo ve virtuálním stroji pro často čtená data (např. statistiky a systémové parametry).

3. Zabezpečení a šifrování

  • Šifrování citlivých údajů (Data at Rest): Přístupové údaje ke kalendářům a videoslužbám (OAuth tokeny, hesla CalDAV a Exchange, API klíče) a tokeny Slacku, Telegramu a webhooků jsou šifrovány pomocí symetrického šifrování AES-256-GCM dedikovaným klíčem DATA_ENCRYPTION_KEY.
  • Rotace klíčů: Oddělení SECRET_KEY_BASE (pro sessions) a DATA_ENCRYPTION_KEY (pro databázi) umožňuje bezpečnou rotaci session klíčů bez zneplatnění uložených kalendářních propojení.
  • Autentizace a RBAC: Zabezpečená autentizace s ochranou proti brute-force útokům, přihlášení přes Google, GitHub, Microsoft a obecný OIDC, role administrátora a bezpečnostní audit log.

Architektura rozšíření (Core vs. SaaS Boundary)

LockMyCal využívá modulární návrh. Open-source jádro poskytuje stabilní rozhraní (Behaviours), na která se napojuje volitelná placená nadstavba:

  • Tymeslot.Features.CheckerBehaviour – Kontrola dostupnosti funkcí (např. vlastní URL adresa, kontakty, automatizace) a volitelné limity (např. počet propojených kalendářů).
  • Tymeslot.Payments.Behaviours.SubscriptionManager – Správa předplatných a Stripe webhooků.
  • Tymeslot.Auth.Behaviours.AccountDeletionHook – Správné čištění externích subskripcí při smazání účtu.
  • Tymeslot.Dashboard.ExtensionSchema – Registrace rozšiřujících panelů do navigačního menu.