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
- Klient volá službu zpráv přes ConnectRPC.
- API přijme požadavek až poté, co NATS JetStream příkaz trvale uloží.
- Worker zapíše zprávu a outbox událost do databáze pracovního prostoru v jedné transakci.
- Outbox relay publikuje potvrzenou událost do NATS a Centrifuga.
- 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.