1 System Overview
Cordy edited this page 2026-08-25 12:34:19 +00:00

swisscairn.ch + license server — system overview

How the customer-facing side fits together: the static site, the license server, billing, sign-in, and the bridge to a customer's self-hosted Cairn instance. swisscairn.ch and the license server are one system on one Swiss VPS.

swisscairn system overview

Reading the diagram

  • Customer browser — the static pages served from swisscairn.ch: index (marketing), enter (register / login / OAuth), account (licenses, seats, cancel, receipts, quotes), docs. Behind the pre-launch Caddy gate until launch (#26).
  • Sign-in providers — Google and Microsoft OAuth (code flow + PKCE); linking is by verified email only.
  • Paddle — the billing provider: the checkout overlay opens from the account page; transaction.created / transaction.completed webhooks drive issuance and the funnel.
  • Caddy — terminates TLS on the VPS, serves the static pages, and enforces the pre-launch gate.
  • cairn-license-server (:7421) — the hub: customer accounts (register / login / verify / OAuth), Ed25519 license issuance, the Paddle webhook that issues and renews licenses, the monthly check-in API, plus cancel / seat-change / receipts and outbound SMTP for verification and reset mail.
  • SQLite — the store (ADR-0001): licenses, accounts, orgs.
  • Customer's Cairn instance — receives the license key (copied out-of-band from the account page), verifies it offline, and checks in monthly. See the Cairn repo's Architecture wiki for how that side works.
  • VPS · Switzerland — everything inside the boundary is one Swiss VPS; nothing leaves the box.

Source SVG: docs/swisscairn-system.svg in this repo. Related: the "Admin Dashboard Topology" wiki page and Wiki.js ADR-0001 / ADR-0002.