Technologický stack
HansaChat je firemný chat z EÚ s prevádzkovou vrstvou pre terénne tímy, ktorý navrhuje, vyvíja a prevádzkuje jediný človek. Táto stránka ukazuje, z čoho je každá časť postavená a prečo bola zvolená.
Verzie a počty overené v októbri 2026.
Spočítané v repozitároch
- služieb ConnectRPC so 179 RPC, všetky definované v Protobufe
- 18
- binárky v Go z jednej kódovej základne: API, worker, outbox relay, administrácia
- 4
- platforiem z jedného klienta: web, macOS, Windows, Linux, iOS, Android
- 6
- jazykov na verejnom webe
- 22
- jazykov rozhrania v aplikácii
- 23
- end-to-end špecifikácií v Playwrighte na izolovanom stacku
- 70
Ako do seba časti zapadajú
Tri aplikácie zdieľajú jednu edge vrstvu a jeden klaster. Web spravuje fakturáciu a register pracovných priestorov, backend v Go spravuje všetko vnútri pracovného priestoru a webová aplikácia komunikuje s backendom prostredníctvom generovaných klientov ConnectRPC.
Klienti
Prehliadač
Web a webová aplikácia
Tauri
Desktopové a mobilné obálky
hansa CLI
Skripty a agenti
Edge
Bunny.net CDN
TLS, cache, ochrana pred DDoS
IONOS Managed Kubernetes, Nemecko
Traefik
Ingress pre každú aplikáciu
Webová aplikácia Vue + Vite
Statický build Vue
Chat API
Go s ConnectRPC
- Worker
- Outbox relay
Web Laravel + FrankenPHP
Fakturácia, register, zriaďovanie
NATS JetStream
Trvalé príkazy a udalosti
Centrifugo
Distribúcia cez WebSocket
Valkey Sentinel + HAProxy
Cache, prítomnosť, relácie
LiveKit
Médiá hovorov
Spravované údaje v IONOS
MariaDB
Jedna databáza na pracovný priestor plus centrálny register
Objektové úložisko S3
Súbory a avatary
Externé služby
ElevenLabs · LLM · Clef
Prepis, preklad, triedenie
Creem · EmailLabs
Platby a e-mail
Mimo klastra
Cloudflare Workers D1
Externé kontroly stavu
Bunny Storage restic
Šifrované zálohy vo Frankfurte a Štokholme
Cesta jednej správy
- Klient volá službu správ cez ConnectRPC.
- API prijme požiadavku až potom, čo NATS JetStream príkaz trvalo uloží.
- Worker zapíše správu a outbox udalosť do databázy pracovného priestoru v jednej transakcii.
- Outbox relay publikuje potvrdenú udalosť do NATS a Centrifuga.
- Každý otvorený klient ju dostane cez WebSocket; po výpadku si klienti znova načítajú autoritatívny stav z API.
Chatový backend
Všetko, čo sa deje vnútri pracovného priestoru, beží v Go: správy, kanály, súbory, hovory, komunikácia v reálnom čase, importy a prevádzkový balík pre upratovacie firmy. Web sa údajov pracovných priestorov nikdy nedotýka.
- Go 1.26
-
Štyri binárky z jednej modulárnej kódovej základne: API, worker pre správy, outbox relay a chránený administrátorský príkaz. Dodávajú sa ako statické binárky v jednom malom image.
Prečo
Silná štandardná knižnica, predvídateľný výkon a jednoduchá súbežnosť vyhovujú backendu zloženému z dlho bežiacich workerov. Jeden jazyk pre celé jadro pracovného priestoru umožňuje, aby ho udržiaval jediný človek.
- ConnectRPC + Protobuf connect-go 1.20 · buf 1.71
-
18 služieb a 179 RPC je definovaných v Protobufe. buf generuje server v Go a klientov v TypeScripte pomocou lokálnych pluginov, takže žiadna schéma neopustí počítač.
Prečo
Jeden kontrakt obsluhuje webových, desktopových, mobilných aj príkazových klientov. Neexistujú ručne písané HTTP cesty ani parsovanie odpovedí a zmena kontraktu sa prejaví ako chyba pri kompilácii, nie ako zlyhanie za behu.
- Jedna databáza na pracovný priestor MariaDB · sqlc
-
Každý pracovný priestor dostáva vlastnú fyzickú databázu MariaDB. API určí pracovný priestor podľa jeho domény a otvorí zodpovedajúci pool pripojení; workery ho určujú znova samy a nikdy nedôverujú názvu databázy zo správy vo fronte. Dotazy sú čisté SQL kompilované do typovaného Go pomocou sqlc.
Prečo
Izolácia je štrukturálna, nie filter v každom dotaze. Export, import, obnova aj vymazanie fungujú pre každú firmu samostatne.
- NATS JetStream 2.10
-
Trvalé streamy pre príkazy, úlohy a udalosti a k tomu stream nedoručiteľných správ (dead-letter). Zápisy správ prebiehajú v 64 usporiadaných oddieloch.
Prečo
Správa je prijatá až po trvalom potvrdení. Správy v jednom kanáli zostávajú v správnom poradí, zatiaľ čo nezávislé kanály sa spracúvajú paralelne.
- Transakčný outbox
-
Doménové záznamy a odchádzajúca udalosť sa potvrdzujú v rovnakej transakcii. Relay publikuje potvrdené udalosti do NATS a Centrifuga, deduplikuje ich podľa ID udalosti a zaznamenáva zlyhania na opakovanie.
Prečo
Žiadne stratené ani fantómové udalosti, keď sa proces zastaví medzi zápisom do databázy a publikovaním.
- Centrifugo v5
-
Doručovanie správ, prítomnosti, indikácie písania a stavu hovorov cez WebSocket. Klienti sa prihlasujú na odber pomocou krátkodobých tokenov pre jednotlivé kanály, ktoré API vydá až po overení členstva v pracovnom priestore.
Prečo
Vyhradený realtime server drží dlhodobé spojenia mimo procesu API a každý token uvádza pracovný priestor aj používateľa, takže identity z oddelených databáz nemôžu kolidovať.
- Objektové úložisko kompatibilné s S3 aws-sdk-go-v2
-
Súbory a avatary sú uložené v IONOS Object Storage v EÚ a sprístupňujú sa prostredníctvom krátkodobých podpísaných odkazov.
Prečo
Úložisko súborov sa škáluje nezávisle od databáz a je šifrované v pokoji na strane servera.
- LiveKit 1.9
-
Samostatne hostovaný mediálny server WebRTC pre hovory v priamych správach a primárne hlasové hovory v kanáloch so zdieľaním kamery a obrazovky.
Prečo
Open source a s možnosťou vlastného hostovania, takže médiá hovorov bežia na infraštruktúre, ktorú prevádzkuje HansaChat.
- ElevenLabs Scribe
-
Prevod reči na text pre hlasové správy. Prepis je pripojený k správe a dá sa vyhľadávať a prekladať ako akýkoľvek iný text.
Prečo
Terénne tímy viac hovoria, ako píšu.
- Preklad pomocou LLM
-
Preklad pre každého čitateľa zvlášť cez API kompatibilné s OpenAI. Každá správa sa prekladá na požiadanie, ukladá sa do cache raz pre každý cieľový jazyk a preskočí sa, ak čitateľ používa rovnaký jazyk.
Prečo
Viacjazyčný tím pracuje v jednej konverzácii, zatiaľ čo každý člen číta vo svojom jazyku. Poskytovateľ zostáva vymeniteľný za jedným rozhraním.
- Cloudflare Clef
-
Rozhodovací model triedi prevádzkové správy podľa kategórie, naliehavosti a miery istoty. Vracia pravdepodobnosti pre pevne dané otázky, nie generovaný text. Momentálne v pilotnej prevádzke.
Prečo
Nie je potrebné parsovať žiadny voľný text. Vedúci vidia, čo si vyžaduje pozornosť; konať podľa toho je vždy rozhodnutím človeka.
- go-pdf 0.9
-
Výkazy pracovného času a servisné protokoly vo formáte A4 sa generujú na serveri.
Prečo
Knižnica napísaná čisto v Go udržiava image backendu malý a bez headless prehliadača.
- Sentry + slog
-
Chyby a trasovanie smerujú do Sentry, logy sú štruktúrovaný JSON zo štandardnej knižnice a workery poskytujú metriky v textovom formáte Prometheus.
Prečo
Málo pohyblivých častí na prevádzku a každé zlyhanie prichádza aj so svojím kontextom.
Aplikácie a CLI
Jeden klient vo Vue obsluhuje web a Tauri ho balí pre desktop a mobilné zariadenia. Klient pre príkazový riadok používa rovnaké verejné API ako aplikácie.
- Vue 3 + TypeScript Vue 3.5 · TS 5.9 · Pinia 3
-
Jediný klient so 118 jednosúborovými komponentmi, úložiskami Pinia, vue-routerom a vue-i18n v 23 jazykoch rozhrania, testovaný pomocou Vitestu.
Prečo
Vyspelý, čitateľný komponentový model a striktný TypeScript robia veľký klient zvládnuteľným pre veľmi malý tím.
- Vite + Tailwind CSS Vite 8 · Tailwind 4
-
Nástroj na zostavenie a štýlovacia vrstva: Tailwind CSS 4 so svetlou a tmavou témou.
Prečo
Rýchle buildy a dizajnové tokeny, ktoré vychádzajú z rovnakej zdokumentovanej palety ako web.
- Tauri 2.10
-
Balí rovnakého webového klienta pre macOS, Windows, Linux, iOS a Android, s natívnymi notifikáciami, deep linkami a podpísanými aktualizáciami pre desktop.
Prečo
Jedno rozhranie všade, ktoré využíva systémový webview namiesto pribaľovania jadra prehliadača do každej aplikácie.
- Generovaní klienti Connect connect-web 2.1 · protobuf-es 2
-
Klienti v TypeScripte generovaní z Protobuf definícií backendu a skopírovaní do webovej aplikácie. Nikdy sa needitujú ručne.
Prečo
Zmena kontraktu sa prejaví ako typová chyba v klientovi, nie ako prekvapenie v produkcii.
- centrifuge-js + livekit-client 5.7 · 2.20
-
Klientske knižnice pre komunikáciu v reálnom čase cez Centrifugo a pre hovory cez LiveKit.
Prečo
Opätovné pripojenie, obnova a práca s médiami pochádzajú priamo z projektov, ktoré vyvíjajú príslušné servery.
- TipTap 3.22
-
Editor správ so zmienkami, odkazmi a blokmi kódu so zvýraznením syntaxe.
Prečo
Štruktúrovaný editor namiesto krehkej práce s reťazcami.
- hansa CLI Go 1.26 · Cobra
-
Bezstavový klient pre príkazový riadok pre ľudí, skripty a LLM agentov. Výstup vo formáte JSON v predvolenom nastavení, prihlasovacie údaje v kľúčenke operačného systému a kontrolné súčty vydaní podpísané pomocou Minisign.
Prečo
Používa rovnaké verejné API ako aplikácie. Jeho Protobuf kontrakty sa kopírujú z backendu a sú uzamknuté hashmi SHA-256, takže odchýlky odhalí CI.
Web, fakturácia a register
Laravel prevádzkuje verejný web, zákaznícku dokumentáciu, pokladňu, predplatné a centrálny register pracovných priestorov. Pracovný priestor vytvára volaním backendu v Go cez overené HTTP, bez zdieľaného kódu a bez zdieľaných frontov.
- Laravel + PHP Laravel 12 · PHP 8.5
-
Verejný web, zákaznícka dokumentácia, pokladňa, predplatné, kupóny, oznámenia o životnom cykle a centrálny register pracovných priestorov a domén.
Prečo
Fakturácia, e-maily, plánovanie úloh, fronty a formuláre sú oblasti, kde je Laravel najsilnejší. Chat zostáva v Go a hranicu medzi nimi tvorí jedno overené HTTP rozhranie.
- FrankenPHP 1.13
-
Aplikačný server PHP vnútri kontajnerového image, postavený na zdieľanom základnom image, ktorý fixuje PHP, jeho rozšírenia a nástroje podľa digestu.
Prečo
Aplikáciu obsluhuje jediný proces a opätovné zostavenie rovnakého commitu vytvorí rovnaké behové prostredie.
- Blade + Alpine.js + Tailwind CSS Alpine 3.15 · Tailwind 3.4 · Vite 7
-
Stránky renderované na serveri s malými komponentmi Alpine.js, štýlované pomocou Tailwind CSS a zostavené nástrojom Vite.
Prečo
Obsahové stránky sa načítavajú rýchlo bez toho, aby bolo nutné dodávať framework pre jednostránkové aplikácie.
- 22 jazykov
-
Každá verejná stránka existuje v 22 jazykoch EÚ s URL adresami s jazykovou predponou, odkazmi hreflang a lokalizovanou mapou stránky. Test zlyhá, ak v niektorom jazyku chýba kľúč alebo sa v ňom objaví anglický text.
Prečo
Európsky produkt by mal byť čitateľný v jazyku kupujúceho už od prvej stránky.
- Creem
-
Pokladňa, dane, faktúry a predplatné, synchronizované pomocou podpísaných webhookov.
Prečo
Platby, dane a fakturácia zostávajú u špecializovaného poskytovateľa, zatiaľ čo web uchováva zosúladenú kópiu každého predplatného.
- EmailLabs
-
Transakčné a servisné e-maily, napríklad pozvánky, odkazy na heslo a oznámenia.
Prečo
Poskytovateľ e-mailových služieb z EÚ pre produkt z EÚ.
- Pest 4.4
-
Viac ako 130 testovacích súborov pokrýva routy, fakturáciu, zriaďovanie, preklady a SEO vrátane testov v prehliadači.
Prečo
Rýchle, čitateľné testy, ktoré bežia pri každej zmene.
Platforma a prevádzka
Produkčné aj náhľadové prostredie beží v IONOS v Nemecku. Každá aplikácia sa dodáva ako kontajnerový image s vlastným Helm chartom a nasadzuje sa ručne spúšťanou úlohou v GitLabe.
- IONOS Managed Kubernetes
-
Produkčné a náhľadové klastre, spravovaná MariaDB a objektové úložisko kompatibilné s S3, všetko prevádzkované nemeckým poskytovateľom v Nemecku.
Prečo
Európsky poskytovateľ pod jurisdikciou EÚ, nie európsky región neeurópskeho cloudu.
- Helm + Traefik
-
Každá aplikácia má vlastný chart. Traefik smeruje prevádzku vnútri klastra a migrácie databáz pracovných priestorov bežia ako hook pred každým nasadením backendu.
Prečo
Každé nasadenie je verziované, opakovateľné a dá sa ľahko vrátiť späť.
- Bunny.net
-
CDN, DNS a ochrana pred DDoS pred klastrom a tiež úložisko pre šifrované zálohy.
Prečo
Edge vrstvu prevádzkuje a záložné kópie uchováva európska firma, takže ani jedno nezávisí od neeurópskeho cloudu.
- Valkey + Sentinel + HAProxy Valkey 9.1
-
Tri repliky s prepnutím pri zlyhaní pomocou Sentinelu a proxy HAProxy, ktorá vždy ukazuje na aktuálny primárny uzol. Slúži pre cache, relácie, prítomnosť a realtime broker.
Prečo
Prepnutie pri zlyhaní nevyžaduje žiadnu zmenu v aplikácii, pretože každá služba ďalej komunikuje s rovnakou adresou.
- restic 0.18
-
Šifrované zálohy databáz každých 6 hodín do dvoch lokalít v EÚ, s týždennými kontrolami integrity a automatizovaným mesačným cvičením obnovy.
Prečo
Záloha sa počíta až vtedy, keď je obnova z nej overená.
- GitLab CI
-
Testy, zostavenie image a kontroly Helm chartov bežia v CI. Nasadenia do náhľadového a produkčného prostredia sú samostatné, ručne spúšťané úlohy.
Prečo
Automatizácia robí opakujúcu sa prácu; o tom, kedy sa niečo dostane k zákazníkom, rozhoduje človek.
Okolo produktu
Nástroje, vďaka ktorým zostáva firma jedného človeka pozorovateľná, dosiahnuteľná a zrozumiteľná.
- Cloudflare Workers + D1
-
Externá stránka stavu, ktorá každých päť minút kontroluje aplikáciu a web a zaznamenáva incidenty.
Prečo
Dostupnosť sa meria zvonku infraštruktúry, ktorú opisuje.
- Umami 3.2
-
Samostatne hostovaná webová analytika, ktorá sa spustí až potom, čo návštevník vykoná voľbu ohľadom súhlasu.
Prečo
Údaje o návštevníkoch zostávajú na infraštruktúre HansaChat namiesto toho, aby živili reklamnú sieť.
- Remotion 4.0
-
Produktové videá sa nahrávajú zo skutočnej aplikácie pomocou nástroja na end-to-end testy a skladajú sa v kóde s AI hlasovým komentárom.
Prečo
Keď sa rozhranie zmení, video sa znova vyrenderuje namiesto toho, aby sa znova natáčalo.
- TwentyCRM + WireGuard
-
Samostatne hostované CRM dostupné iba cez súkromnú VPN.
Prečo
Obchodné údaje nie sú vôbec vystavené verejnému internetu.
Inžinierske postupy
Návyky, ktoré jednému človeku umožňujú dodávať multi-tenant produkt bez samostatného tímu pre QA alebo prevádzku.
Kontrakty sa generujú, nikdy sa nepíšu ručne
Protobuf je jediným zdrojom pre server v Go, klientov v TypeScripte aj CLI. Generátory sú zafixované na presné verzie a CLI zaznamenáva hash každého súboru s kontraktom, ktorý používa.
Migrácie vedú evidenciu
Každá databáza pracovného priestoru zaznamenáva, ktoré migrácie na nej boli aplikované. Hook pri nasadení aplikuje iba chýbajúce migrácie a po dokončení nasadenia stav znova skontroluje. Web si ponecháva svoje pôvodné základné migrácie, takže existujúce databázy ich nikdy nespustia dvakrát.
End-to-end testy na izolovanom stacku
Jeden príkaz spustí databázy, NATS, Valkey, Centrifugo a objektové úložisko na voľných portoch, zostaví binárky v Go, spustí webovú aplikáciu a vykoná 70 špecifikácií v Playwrighte s novým pracovným priestorom pre každý test.
Testy v každej vrstve
478 testovacích funkcií v Go vrátane testov izolácie dvoch pracovných priestorov, 109 súborov Vitest v klientovi a viac ako 130 súborov Pest na webe.
Poistky v CI
Kontroly formátovania, limit 1 000 riadkov na súbor v Go a testy Helm chartov bežia v CI vedľa testovacích sád.
Ručné brány pre nasadenie
CI automaticky zostavuje a testuje, ale nasadenia do náhľadového a produkčného prostredia sú samostatné ručné úlohy. Do produkcie sa nasadzuje release tag, ktorý vzniká až po zlúčení zmeny.
Zálohy overené obnovou
Každý beh zálohovania je monitorovaný a automatizované cvičenie každý mesiac obnoví databázy a overí tabuľky a počty riadkov.
Jeden dizajnový systém
Web a aplikácia zdieľajú jednu zdokumentovanú paletu, typografickú škálu a pravidlá komponentov, so svetlou a tmavou témou v aplikácii.
S pomocou AI, pod kontrolou človeka
AI agenti na programovanie pracujú podľa súboru s inštrukciami v každom repozitári, ktorý odkazuje do jedného centrálneho repozitára s technickou dokumentáciou. Opakovateľné postupy, ako je end-to-end beh, sú zabalené ako zručnosti agentov. Každá zmena napriek tomu prechádza rovnakými testami a nasadenia zostávajú ručné.
Riadenie bezpečnosti v príprave
HansaChat sa pripravuje na certifikáciu ISO/IEC 27001 s registrom rizík, registrom dôkazov a záznamom rozhodnutí. V súčasnosti certifikovaný nie je.
Čo táto stránka tvrdí a čo nie
Všetko uvedené vyššie opisuje, čo je dnes implementované, a bolo spočítané zo zdrojových repozitárov. HansaChat netvrdí, že má bezpečnostnú certifikáciu. Triedenie správ je v pilotnej prevádzke a push notifikácie pre zatvorené aplikácie zatiaľ nie sú spustené.
Máte otázky k architektúre?
Inžinieri, ktorí HansaChat hodnotia, dostanú priame odpovede od človeka, ktorý ho postavil.