Přejít na obsah o technologiích
Zpět na úvodní stránku

Technologický stack

HansaChat je firemní chat z EU s provozní vrstvou pro terénní týmy, který navrhuje, vyvíjí a provozuje jediný člověk. Tato stránka ukazuje, z čeho je každá část postavená a proč byla zvolena.

Verze a počty ověřeny v říjnu 2026.

Spočítáno v repozitářích

služeb ConnectRPC se 179 RPC, všechny definované v Protobufu
18
binárky v Go z jedné kódové základny: API, worker, outbox relay, administrace
4
platforem z jednoho klienta: web, macOS, Windows, Linux, iOS, Android
6
jazyků na veřejném webu
22
jazyků rozhraní v aplikaci
23
end-to-end specifikací v Playwrightu na izolovaném stacku
70

Jak do sebe části zapadají

Tři aplikace sdílejí jednu edge vrstvu a jeden cluster. Web spravuje fakturaci a registr pracovních prostorů, backend v Go spravuje vše uvnitř pracovního prostoru a webová aplikace komunikuje s backendem prostřednictvím generovaných klientů ConnectRPC.

Klienti

Prohlížeč

Web a webová aplikace

Tauri

Desktopové a mobilní obálky

hansa CLI

Skripty a agenti

Edge

Bunny.net CDN

TLS, cache, ochrana před DDoS

IONOS Managed Kubernetes, Německo

Traefik

Ingress pro každou aplikaci

Webová aplikace Vue + Vite

Statický build Vue

Chat API

Go s ConnectRPC

  • Worker
  • Outbox relay

Web Laravel + FrankenPHP

Fakturace, registr, zřizování

NATS JetStream

Trvalé příkazy a události

Centrifugo

Distribuce přes WebSocket

Valkey Sentinel + HAProxy

Cache, přítomnost, relace

LiveKit

Média hovorů

Spravovaná data u IONOS

MariaDB

Jedna databáze na pracovní prostor plus centrální registr

Objektové úložiště S3

Soubory a avatary

Externí služby

ElevenLabs · LLM · Clef

Přepis, překlad, třídění

Creem · EmailLabs

Platby a e-mail

Mimo cluster

Cloudflare Workers D1

Externí kontroly stavu

Bunny Storage restic

Šifrované zálohy ve Frankfurtu a Stockholmu

Cesta jedné zprávy

  1. Klient volá službu zpráv přes ConnectRPC.
  2. API přijme požadavek až poté, co NATS JetStream příkaz trvale uloží.
  3. Worker zapíše zprávu a outbox událost do databáze pracovního prostoru v jedné transakci.
  4. Outbox relay publikuje potvrzenou událost do NATS a Centrifuga.
  5. Každý otevřený klient ji obdrží přes WebSocket; po výpadku si klienti znovu načtou autoritativní stav z API.

Chatovací backend

Vše, co se děje uvnitř pracovního prostoru, běží v Go: zprávy, kanály, soubory, hovory, realtime komunikace, importy a provozní balíček pro úklidové firmy. Web se dat pracovních prostorů nikdy nedotýká.

Go 1.26

Čtyři binárky z jedné modulární kódové základny: API, worker pro zprávy, outbox relay a chráněný administrátorský příkaz. Dodávají se jako statické binárky v jednom malém image.

Proč

Silná standardní knihovna, předvídatelný výkon a jednoduchá souběžnost vyhovují backendu složenému z dlouho běžících workerů. Jeden jazyk pro celé jádro pracovního prostoru umožňuje, aby ho udržoval jediný člověk.

ConnectRPC + Protobuf connect-go 1.20 · buf 1.71

18 služeb a 179 RPC je definováno v Protobufu. buf generuje server v Go a klienty v TypeScriptu pomocí lokálních pluginů, takže žádné schéma neopustí počítač.

Proč

Jeden kontrakt obsluhuje webové, desktopové, mobilní i příkazové klienty. Nejsou zde ručně psané HTTP cesty ani parsování odpovědí a změna kontraktu se projeví jako chyba při kompilaci, nikoli jako selhání za běhu.

Jedna databáze na pracovní prostor MariaDB · sqlc

Každý pracovní prostor dostává vlastní fyzickou databázi MariaDB. API určí pracovní prostor podle jeho domény a otevře odpovídající pool připojení; workery jej určují znovu samy a nikdy nedůvěřují názvu databáze ze zprávy ve frontě. Dotazy jsou čisté SQL kompilované do typovaného Go pomocí sqlc.

Proč

Izolace je strukturální, nikoli filtr v každém dotazu. Export, import, obnova i smazání fungují pro každou firmu zvlášť.

NATS JetStream 2.10

Trvalé streamy pro příkazy, úlohy a události a k tomu stream nedoručitelných zpráv (dead-letter). Zápisy zpráv probíhají v 64 uspořádaných oddílech.

Proč

Zpráva je přijata až po trvalém potvrzení. Zprávy v jednom kanálu zůstávají ve správném pořadí, zatímco nezávislé kanály se zpracovávají paralelně.

Transakční outbox

Doménové záznamy a odchozí událost se potvrzují ve stejné transakci. Relay publikuje potvrzené události do NATS a Centrifuga, deduplikuje je podle ID události a zaznamenává selhání pro opakování.

Proč

Žádné ztracené ani fantomové události, když se proces zastaví mezi zápisem do databáze a publikováním.

Centrifugo v5

Doručování zpráv, přítomnosti, indikace psaní a stavu hovorů přes WebSocket. Klienti se přihlašují k odběru pomocí krátkodobých tokenů pro jednotlivé kanály, které API vydá až po ověření členství v pracovním prostoru.

Proč

Vyhrazený realtime server drží dlouhodobá spojení mimo proces API a každý token uvádí pracovní prostor i uživatele, takže identity z oddělených databází nemohou kolidovat.

Objektové úložiště kompatibilní s S3 aws-sdk-go-v2

Soubory a avatary jsou uloženy v IONOS Object Storage v EU a zpřístupňují se prostřednictvím krátkodobých podepsaných odkazů.

Proč

Úložiště souborů se škáluje nezávisle na databázích a je šifrováno v klidu na straně serveru.

LiveKit 1.9

Samostatně hostovaný mediální server WebRTC pro hovory v přímých zprávách a primárně hlasové hovory v kanálech se sdílením kamery a obrazovky.

Proč

Open source a s možností vlastního hostování, takže média hovorů běží na infrastruktuře, kterou provozuje HansaChat.

ElevenLabs Scribe

Převod řeči na text pro hlasové zprávy. Přepis je připojen ke zprávě a lze ho vyhledávat a překládat jako jakýkoli jiný text.

Proč

Terénní týmy více mluví, než píší.

Překlad pomocí LLM

Překlad pro každého čtenáře zvlášť přes API kompatibilní s OpenAI. Každá zpráva se překládá na vyžádání, ukládá se do cache jednou pro každý cílový jazyk a přeskočí se, pokud čtenář používá stejný jazyk.

Proč

Vícejazyčný tým pracuje v jedné konverzaci, zatímco každý člen čte ve svém jazyce. Poskytovatel zůstává vyměnitelný za jedním rozhraním.

Cloudflare Clef

Rozhodovací model třídí provozní zprávy podle kategorie, naléhavosti a míry jistoty. Vrací pravděpodobnosti pro pevně dané otázky, nikoli generovaný text. Momentálně v pilotním provozu.

Proč

Není potřeba parsovat žádný volný text. Vedoucí vidí, co vyžaduje pozornost; jednat podle toho je vždy rozhodnutím člověka.

go-pdf 0.9

Výkazy pracovní doby a servisní protokoly ve formátu A4 se generují na serveru.

Proč

Knihovna napsaná čistě v Go udržuje image backendu malý a bez headless prohlížeče.

Sentry + slog

Chyby a trasování míří do Sentry, logy jsou strukturovaný JSON ze standardní knihovny a workery poskytují metriky v textovém formátu Prometheus.

Proč

Málo pohyblivých částí k provozování a každé selhání přichází i se svým kontextem.

Aplikace a CLI

Jeden klient ve Vue obsluhuje web a Tauri ho balí pro desktop a mobilní zařízení. Klient pro příkazový řádek používá stejné veřejné API jako aplikace.

Vue 3 + TypeScript Vue 3.5 · TS 5.9 · Pinia 3

Jediný klient se 118 jednosouborovými komponentami, úložišti Pinia, vue-routerem a vue-i18n ve 23 jazycích rozhraní, testovaný pomocí Vitestu.

Proč

Vyspělý, čitelný komponentový model a striktní TypeScript dělají velký klient zvládnutelným pro velmi malý tým.

Vite + Tailwind CSS Vite 8 · Tailwind 4

Nástroj pro sestavení a stylovací vrstva: Tailwind CSS 4 se světlým a tmavým motivem.

Proč

Rychlé buildy a design tokeny, které vycházejí ze stejné zdokumentované palety jako web.

Tauri 2.10

Balí stejného webového klienta pro macOS, Windows, Linux, iOS a Android, s nativními oznámeními, deep linky a podepsanými aktualizacemi pro desktop.

Proč

Jedno rozhraní všude, které využívá systémový webview místo přibalování prohlížečového jádra do každé aplikace.

Generovaní klienti Connect connect-web 2.1 · protobuf-es 2

Klienti v TypeScriptu generovaní z Protobuf definic backendu a zkopírovaní do webové aplikace. Nikdy se needitují ručně.

Proč

Změna kontraktu se projeví jako typová chyba v klientovi, nikoli jako překvapení v produkci.

centrifuge-js + livekit-client 5.7 · 2.20

Klientské knihovny pro realtime komunikaci přes Centrifugo a pro hovory přes LiveKit.

Proč

Opětovné připojení, obnova a práce s médii pocházejí přímo od projektů, které vyvíjejí příslušné servery.

TipTap 3.22

Editor zpráv se zmínkami, odkazy a bloky kódu se zvýrazněním syntaxe.

Proč

Strukturovaný editor místo křehké práce s řetězci.

hansa CLI Go 1.26 · Cobra

Bezstavový klient pro příkazový řádek pro lidi, skripty a LLM agenty. Výstup ve formátu JSON ve výchozím nastavení, přihlašovací údaje v klíčence operačního systému a kontrolní součty vydání podepsané pomocí Minisign.

Proč

Používá stejné veřejné API jako aplikace. Jeho Protobuf kontrakty se kopírují z backendu a jsou uzamčeny hashi SHA-256, takže odchylky odhalí CI.

Web, fakturace a registr

Laravel provozuje veřejný web, zákaznickou dokumentaci, pokladnu, předplatná a centrální registr pracovních prostorů. Pracovní prostor vytváří voláním backendu v Go přes ověřené HTTP, bez sdíleného kódu a bez sdílených front.

Laravel + PHP Laravel 12 · PHP 8.5

Veřejný web, zákaznická dokumentace, pokladna, předplatná, kupóny, oznámení o životním cyklu a centrální registr pracovních prostorů a domén.

Proč

Fakturace, e-maily, plánování úloh, fronty a formuláře jsou oblasti, kde je Laravel nejsilnější. Chat zůstává v Go a hranici mezi nimi tvoří jedno ověřené HTTP rozhraní.

FrankenPHP 1.13

Aplikační server PHP uvnitř kontejnerového image, postavený na sdíleném základním image, který fixuje PHP, jeho rozšíření a nástroje podle digestu.

Proč

Aplikaci obsluhuje jediný proces a opakované sestavení stejného commitu vytvoří stejné běhové prostředí.

Blade + Alpine.js + Tailwind CSS Alpine 3.15 · Tailwind 3.4 · Vite 7

Stránky renderované na serveru s malými komponentami Alpine.js, stylované pomocí Tailwind CSS a sestavené nástrojem Vite.

Proč

Obsahové stránky se načítají rychle, aniž by bylo nutné dodávat framework pro jednostránkové aplikace.

22 jazyků

Každá veřejná stránka existuje ve 22 jazycích EU s URL adresami s jazykovou předponou, odkazy hreflang a lokalizovanou mapou webu. Test selže, pokud v některém jazyce chybí klíč nebo se v něm objeví anglický text.

Proč

Evropský produkt by měl být čitelný v jazyce kupujícího už od první stránky.

Creem

Pokladna, daně, faktury a předplatná, synchronizované pomocí podepsaných webhooků.

Proč

Platby, daně a fakturace zůstávají u specializovaného poskytovatele, zatímco web uchovává odsouhlasenou kopii každého předplatného.

EmailLabs

Transakční a servisní e-maily, například pozvánky, odkazy pro heslo a oznámení.

Proč

Poskytovatel e-mailových služeb z EU pro produkt z EU.

Pest 4.4

Více než 130 testovacích souborů pokrývá routy, fakturaci, zřizování, překlady a SEO, včetně testů v prohlížeči.

Proč

Rychlé, čitelné testy, které běží při každé změně.

Platforma a provoz

Produkční i náhledové prostředí běží u IONOS v Německu. Každá aplikace se dodává jako kontejnerový image s vlastním Helm chartem a nasazuje se ručně spouštěnou úlohou v GitLabu.

IONOS Managed Kubernetes

Produkční a náhledové clustery, spravovaná MariaDB a objektové úložiště kompatibilní s S3, vše provozované německým poskytovatelem v Německu.

Proč

Evropský poskytovatel pod jurisdikcí EU, nikoli evropský region neevropského cloudu.

Helm + Traefik

Každá aplikace má vlastní chart. Traefik směruje provoz uvnitř clusteru a migrace databází pracovních prostorů běží jako hook před každým nasazením backendu.

Proč

Každé nasazení je verzované, opakovatelné a snadno se vrací zpět.

Bunny.net

CDN, DNS a ochrana před DDoS před clusterem a také úložiště pro šifrované zálohy.

Proč

Edge vrstvu provozuje a záložní kopie uchovává evropská firma, takže ani jedno nezávisí na neevropském cloudu.

Valkey + Sentinel + HAProxy Valkey 9.1

Tři repliky s přepnutím při selhání pomocí Sentinelu a proxy HAProxy, která vždy ukazuje na aktuální primární uzel. Slouží pro cache, relace, přítomnost a realtime broker.

Proč

Přepnutí při selhání nevyžaduje žádnou změnu v aplikaci, protože každá služba dál komunikuje se stejnou adresou.

restic 0.18

Šifrované zálohy databází každých 6 hodin do dvou lokalit v EU, s týdenními kontrolami integrity a automatizovaným měsíčním cvičením obnovy.

Proč

Záloha se počítá až tehdy, když je obnova z ní ověřena.

GitLab CI

Testy, sestavení image a kontroly Helm chartů běží v CI. Nasazení do náhledového a produkčního prostředí jsou samostatné, ručně spouštěné úlohy.

Proč

Automatizace dělá opakující se práci; o tom, kdy se něco dostane k zákazníkům, rozhoduje člověk.

Kolem produktu

Nástroje, díky kterým zůstává firma jednoho člověka pozorovatelná, dosažitelná a srozumitelná.

Cloudflare Workers + D1

Externí stavová stránka, která každých pět minut kontroluje aplikaci a web a zaznamenává incidenty.

Proč

Dostupnost se měří zvenčí infrastruktury, kterou popisuje.

Umami 3.2

Samostatně hostovaná webová analytika, která se spustí až poté, co návštěvník provede volbu ohledně souhlasu.

Proč

Data o návštěvnících zůstávají na infrastruktuře HansaChat, místo aby živila reklamní síť.

Remotion 4.0

Produktová videa se nahrávají ze skutečné aplikace pomocí nástroje pro end-to-end testy a skládají se v kódu s AI hlasovým komentářem.

Proč

Když se rozhraní změní, video se znovu vyrenderuje, místo aby se znovu natáčelo.

TwentyCRM + WireGuard

Samostatně hostované CRM dostupné pouze přes soukromou VPN.

Proč

Obchodní data nejsou vůbec vystavena veřejnému internetu.

Inženýrské postupy

Návyky, které jednomu člověku umožňují dodávat multi-tenant produkt bez samostatného týmu pro QA nebo provoz.

Kontrakty se generují, nikdy se nepíší ručně

Protobuf je jediným zdrojem pro server v Go, klienty v TypeScriptu i CLI. Generátory jsou fixovány na přesné verze a CLI zaznamenává hash každého souboru s kontraktem, který používá.

Migrace vedou evidenci

Každá databáze pracovního prostoru zaznamenává, které migrace na ni byly aplikovány. Hook při nasazení aplikuje jen chybějící migrace a po dokončení nasazení stav znovu zkontroluje. Web si ponechává své původní základní migrace, takže je existující databáze nikdy nespustí dvakrát.

End-to-end testy na izolovaném stacku

Jeden příkaz spustí databáze, NATS, Valkey, Centrifugo a objektové úložiště na volných portech, sestaví binárky v Go, spustí webovou aplikaci a provede 70 specifikací v Playwrightu s novým pracovním prostorem pro každý test.

Testy v každé vrstvě

478 testovacích funkcí v Go, včetně testů izolace dvou pracovních prostorů, 109 souborů Vitest v klientovi a více než 130 souborů Pest na webu.

Pojistky v CI

Kontroly formátování, limit 1 000 řádků na soubor v Go a testy Helm chartů běží v CI vedle testovacích sad.

Ruční brány pro nasazení

CI automaticky sestavuje a testuje, ale nasazení do náhledového a produkčního prostředí jsou samostatné ruční úlohy. Do produkce se nasazuje release tag, který vzniká až po sloučení změny.

Zálohy ověřené obnovou

Každý běh zálohování je monitorován a automatizované cvičení každý měsíc obnoví databáze a ověří tabulky a počty řádků.

Jeden design systém

Web a aplikace sdílejí jednu zdokumentovanou paletu, typografickou škálu a pravidla komponent, se světlým a tmavým motivem v aplikaci.

S pomocí AI, pod kontrolou člověka

AI agenti pro programování pracují podle souboru s instrukcemi v každém repozitáři, který odkazuje do jednoho centrálního repozitáře s technickou dokumentací. Opakovatelné postupy, jako je end-to-end běh, jsou zabaleny jako dovednosti agentů. Každá změna přesto prochází stejnými testy a nasazení zůstávají ruční.

Řízení bezpečnosti v přípravě

HansaChat se připravuje na certifikaci ISO/IEC 27001 s registrem rizik, registrem důkazů a záznamem rozhodnutí. V současnosti certifikován není.

Co tato stránka tvrdí a co ne

Vše výše uvedené popisuje, co je dnes implementováno, a bylo spočítáno ze zdrojových repozitářů. HansaChat netvrdí, že má bezpečnostní certifikaci. Třídění zpráv je v pilotním provozu a push oznámení pro zavřené aplikace zatím nejsou spuštěna.

Máte otázky k architektuře?

Inženýři, kteří HansaChat hodnotí, dostanou přímé odpovědi od člověka, který ho postavil.

Napište vývojáři