Prejsť na obsah o technológiách
Späť na úvodnú stránku

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

  1. Klient volá službu správ cez ConnectRPC.
  2. API prijme požiadavku až potom, čo NATS JetStream príkaz trvalo uloží.
  3. Worker zapíše správu a outbox udalosť do databázy pracovného priestoru v jednej transakcii.
  4. Outbox relay publikuje potvrdenú udalosť do NATS a Centrifuga.
  5. 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.

Napíšte vývojárovi