Stack tehnologic
HansaChat este un chat de companie din UE, cu un strat operațional pentru echipele de teren, proiectat, construit și operat de o singură persoană. Această pagină arată cu ce este construită fiecare componentă și de ce a fost aleasă.
Versiunile și cifrele au fost verificate în octombrie 2026.
Numărate în repository-uri
- servicii ConnectRPC cu 179 de RPC-uri, toate definite în Protobuf
- 18
- binare Go dintr-o singură bază de cod: API, worker, releu outbox, administrare
- 4
- platforme dintr-un singur client: web, macOS, Windows, Linux, iOS, Android
- 6
- limbi pe site-ul web public
- 22
- limbi de interfață în aplicație
- 23
- specificații de test end-to-end Playwright pe un stack izolat
- 70
Cum se îmbină componentele
Trei aplicații împart același edge și același cluster. Site-ul web gestionează facturarea și registrul spațiilor de lucru, backend-ul Go gestionează tot ce se întâmplă în interiorul unui spațiu de lucru, iar aplicația web comunică cu backend-ul prin clienți ConnectRPC generați.
Clienți
Browser
Site web și aplicație web
Tauri
Aplicații desktop și mobile
hansa CLI
Scripturi și agenți
Edge
Bunny.net CDN
TLS, caching, protecție DDoS
IONOS Managed Kubernetes, Germania
Traefik
Ingress pentru fiecare aplicație
Aplicație web Vue + Vite
Build Vue static
API-ul de chat
Go cu ConnectRPC
- Worker
- Releu outbox
Site web Laravel + FrankenPHP
Facturare, registru, provizionare
NATS JetStream
Comenzi și evenimente durabile
Centrifugo
Distribuție prin WebSocket
Valkey Sentinel + HAProxy
Cache, prezență, sesiuni
LiveKit
Media pentru apeluri
Date gestionate la IONOS
MariaDB
O bază de date pentru fiecare spațiu de lucru, plus un registru central
Object Storage S3
Fișiere și avatare
Servicii externe
ElevenLabs · LLM · Clef
Transcriere, traducere, triere
Creem · EmailLabs
Plăți și e-mail
În afara clusterului
Cloudflare Workers D1
Verificări externe de stare
Bunny Storage restic
Copii de siguranță criptate în Frankfurt și Stockholm
Drumul unui mesaj
- Clientul apelează serviciul de mesaje prin ConnectRPC.
- API-ul acceptă cererea numai după ce NATS JetStream a stocat comanda în mod durabil.
- Un worker scrie mesajul și un eveniment outbox în baza de date a spațiului de lucru, într-o singură tranzacție.
- Releul outbox publică evenimentul confirmat către NATS și Centrifugo.
- Fiecare client deschis îl primește prin WebSocket; după o întrerupere, clienții reîncarcă starea de referință din API.
Backend-ul de chat
Tot ce se întâmplă în interiorul unui spațiu de lucru rulează în Go: mesaje, canale, fișiere, apeluri, comunicare în timp real, importuri și pachetul operațional pentru firmele de curățenie. Site-ul web nu atinge niciodată datele spațiilor de lucru.
- Go 1.26
-
Patru binare dintr-o singură bază de cod modulară: API-ul, worker-ul de mesaje, releul outbox și o comandă de administrare protejată. Sunt livrate ca binare statice într-o singură imagine de mici dimensiuni.
De ce
O bibliotecă standard solidă, performanța previzibilă și concurența simplă se potrivesc unui backend format din workeri care rulează îndelung. Un singur limbaj pentru întregul nucleu al spațiilor de lucru îl face ușor de întreținut de către o singură persoană.
- ConnectRPC + Protobuf connect-go 1.20 · buf 1.71
-
18 servicii și 179 de RPC-uri sunt definite în Protobuf. buf generează serverul Go și clienții TypeScript cu pluginuri locale, astfel încât nicio schemă nu părăsește mașina.
De ce
Un singur contract deservește clienții web, desktop, mobili și în linie de comandă. Nu există rute HTTP scrise manual sau parsare de răspunsuri, iar o modificare a contractului apare ca eroare de compilare, nu ca eșec la rulare.
- O bază de date pentru fiecare spațiu de lucru MariaDB · sqlc
-
Fiecare spațiu de lucru primește propria bază de date MariaDB fizică. API-ul identifică spațiul de lucru după domeniu și deschide pool-ul corespunzător; workerii îl identifică din nou ei înșiși și nu au niciodată încredere într-un nume de bază de date primit dintr-un mesaj din coadă. Interogările sunt SQL simplu, compilat în cod Go tipizat cu sqlc.
De ce
Izolarea este structurală, nu un filtru aplicat fiecărei interogări. Exportul, importul, restaurarea și ștergerea funcționează la nivel de companie.
- NATS JetStream 2.10
-
Fluxuri durabile pentru comenzi, joburi și evenimente, plus un flux dead-letter. Scrierile de mesaje rulează în 64 de partiții ordonate.
De ce
Un mesaj este acceptat numai după o confirmare durabilă. Mesajele dintr-un canal își păstrează ordinea, în timp ce canalele independente sunt procesate în paralel.
- Outbox tranzacțional
-
Înregistrările de domeniu și evenimentul de ieșire sunt confirmate în aceeași tranzacție. Un releu publică evenimentele confirmate către NATS și Centrifugo, cu deduplicare după ID-ul evenimentului, și înregistrează eșecurile pentru reîncercare.
De ce
Niciun eveniment pierdut sau fantomă atunci când un proces se oprește între scrierea în baza de date și publicare.
- Centrifugo v5
-
Livrare prin WebSocket pentru mesaje, prezență, indicatorul de tastare și starea apelurilor. Clienții se abonează cu tokenuri de scurtă durată, specifice fiecărui canal, pe care API-ul le emite numai după ce verifică apartenența la spațiul de lucru.
De ce
Un server dedicat pentru timp real ține conexiunile de lungă durată în afara procesului API, iar fiecare token numește atât spațiul de lucru, cât și utilizatorul, astfel încât identitățile din baze de date separate nu pot intra în coliziune.
- Stocare de obiecte compatibilă S3 aws-sdk-go-v2
-
Fișierele și avatarele sunt stocate în IONOS Object Storage din UE și sunt servite prin linkuri semnate de scurtă durată.
De ce
Stocarea fișierelor se scalează independent de bazele de date și este criptată la repaus pe partea de server.
- LiveKit 1.9
-
Un server media WebRTC găzduit propriu pentru apelurile din mesajele directe și pentru apelurile de canal axate pe audio, cu cameră și partajare de ecran.
De ce
Open source și auto-găzduibil, astfel încât fluxurile media ale apelurilor rulează pe infrastructura operată de HansaChat.
- ElevenLabs Scribe
-
Transcriere vorbire-text pentru mesajele vocale. Transcrierea este atașată mesajului, poate fi căutată și tradusă ca orice text.
De ce
Echipele de teren vorbesc mai mult decât tastează.
- Traducere cu LLM
-
Traducere pentru fiecare cititor printr-un API compatibil OpenAI. Fiecare mesaj este tradus la cerere, stocat în cache o singură dată pentru fiecare limbă țintă și omis atunci când cititorul vorbește deja limba respectivă.
De ce
O echipă multilingvă lucrează într-o singură conversație, în timp ce fiecare membru citește în propria limbă. Furnizorul rămâne înlocuibil în spatele unei singure interfețe.
- Cloudflare Clef
-
Un model de decizie clasifică mesajele operaționale după categorie, urgență și grad de încredere. Returnează probabilități pentru întrebări fixe, nu text generat. În prezent este în faza pilot.
De ce
Nu există ieșire în format liber care să trebuiască parsată. Supervizorii văd ce necesită atenție; acțiunea rămâne întotdeauna o decizie umană.
- go-pdf 0.9
-
Foile de pontaj și rapoartele de service în format A4 sunt generate pe server.
De ce
O bibliotecă scrisă integral în Go menține imaginea backend-ului mică și fără un browser headless.
- Sentry + slog
-
Erorile și trace-urile ajung în Sentry, jurnalele sunt JSON structurat din biblioteca standard, iar workerii expun metrici în formatul text Prometheus.
De ce
Puține componente de operat, iar fiecare eșec sosește împreună cu contextul său.
Aplicații și CLI
Un singur client Vue deservește webul și este împachetat de Tauri pentru desktop și dispozitive mobile. Clientul în linie de comandă folosește același API public ca aplicațiile.
- Vue 3 + TypeScript Vue 3.5 · TS 5.9 · Pinia 3
-
Un singur client cu 118 componente single-file, store-uri Pinia, vue-router și vue-i18n în 23 de limbi de interfață, testat cu Vitest.
De ce
Un model de componente matur și lizibil, împreună cu TypeScript strict, fac un client mare ușor de gestionat pentru o echipă foarte mică.
- Vite + Tailwind CSS Vite 8 · Tailwind 4
-
Instrumentul de build și stratul de stilizare: Tailwind CSS 4 cu o temă luminoasă și una întunecată.
De ce
Build-uri rapide și design tokens care urmează aceeași paletă documentată ca site-ul web.
- Tauri 2.10
-
Împachetează același client web pentru macOS, Windows, Linux, iOS și Android, cu notificări native, deep links și actualizări desktop semnate.
De ce
O singură interfață peste tot, folosind webview-ul sistemului în loc să includă un motor de browser în fiecare aplicație.
- Clienți Connect generați connect-web 2.1 · protobuf-es 2
-
Clienți TypeScript generați din Protobuf-ul backend-ului și copiați în aplicația web. Nu sunt niciodată editați manual.
De ce
O modificare a contractului devine o eroare de tip în client, nu o surpriză în producție.
- centrifuge-js + livekit-client 5.7 · 2.20
-
Bibliotecile client pentru comunicarea în timp real prin Centrifugo și pentru apelurile LiveKit.
De ce
Reconectarea, recuperarea și gestionarea fluxurilor media provin de la proiectele care construiesc și serverele.
- TipTap 3.22
-
Editorul de mesaje, cu mențiuni, linkuri și blocuri de cod cu evidențiere de sintaxă.
De ce
Un editor structurat în locul unei manipulări fragile a șirurilor de caractere.
- hansa CLI Go 1.26 · Cobra
-
Un client în linie de comandă fără stare, pentru oameni, scripturi și agenți LLM. Ieșire JSON în mod implicit, credențiale stocate în keychain-ul sistemului de operare și sume de control ale versiunilor semnate cu Minisign.
De ce
Folosește același API public ca aplicațiile. Contractele sale Protobuf sunt copiate din backend și fixate cu hash-uri SHA-256, astfel încât orice divergență este detectată în CI.
Site web, facturare și registru
Laravel rulează site-ul public, documentația pentru clienți, procesul de checkout, abonamentele și registrul central al spațiilor de lucru. Creează un spațiu de lucru apelând backend-ul Go prin HTTP autentificat, fără cod comun și fără cozi comune.
- Laravel + PHP Laravel 12 · PHP 8.5
-
Site-ul web public, documentația pentru clienți, procesul de checkout, abonamentele, cupoanele, notificările privind ciclul de viață și registrul central al spațiilor de lucru și al domeniilor.
De ce
Facturarea, e-mailul, planificarea, cozile și formularele sunt punctele forte ale Laravel. Chatul rămâne în Go, iar granița dintre ele este o singură interfață HTTP autentificată.
- FrankenPHP 1.13
-
Serverul de aplicații PHP din imaginea de container, construit pe o imagine de bază comună care fixează prin digest PHP, extensiile și instrumentele sale.
De ce
Un singur proces deservește aplicația, iar reconstruirea aceluiași commit produce același mediu de rulare.
- Blade + Alpine.js + Tailwind CSS Alpine 3.15 · Tailwind 3.4 · Vite 7
-
Pagini randate pe server cu componente Alpine.js mici, stilizate cu Tailwind CSS și împachetate de Vite.
De ce
Paginile de conținut se încarcă rapid fără a livra un framework de tip single-page app.
- 22 de limbi
-
Fiecare pagină publică există în 22 de limbi ale UE, cu URL-uri prefixate cu limba, linkuri hreflang și un sitemap localizat. Un test eșuează dacă vreunei limbi îi lipsește o cheie sau dacă livrează text în engleză.
De ce
Un produs european trebuie să poată fi citit în limba cumpărătorului încă de la prima pagină.
- Creem
-
Checkout, taxe, facturi și abonamente, menținute sincronizate prin webhookuri semnate.
De ce
Plățile, taxele și facturarea rămân la un furnizor specializat, în timp ce site-ul web păstrează o copie reconciliată a fiecărui abonament.
- EmailLabs
-
E-mailuri tranzacționale și de serviciu, precum invitații, linkuri pentru parole și notificări.
De ce
Un furnizor de e-mail din UE pentru un produs din UE.
- Pest 4.4
-
Peste 130 de fișiere de test acoperă rutele, facturarea, provizionarea, traducerile și SEO, inclusiv teste în browser.
De ce
Teste rapide și lizibile, care rulează la fiecare modificare.
Platformă și operațiuni
Mediile de producție și de previzualizare rulează la IONOS, în Germania. Fiecare aplicație este livrată ca imagine de container cu propriul chart Helm și este implementată printr-un job GitLab declanșat manual.
- IONOS Managed Kubernetes
-
Clustere de producție și de previzualizare, MariaDB gestionat și Object Storage compatibil S3, toate operate de un furnizor german în Germania.
De ce
Un furnizor european aflat sub jurisdicția UE, nu regiunea UE a unui cloud non-european.
- Helm + Traefik
-
Fiecare aplicație are propriul chart. Traefik rutează traficul în interiorul clusterului, iar migrările bazelor de date ale spațiilor de lucru rulează ca hook înaintea fiecărei lansări a backend-ului.
De ce
Fiecare implementare este versionată, repetabilă și ușor de anulat.
- Bunny.net
-
CDN, DNS și protecție DDoS în fața clusterului, precum și stocarea pentru copiile de siguranță criptate.
De ce
O companie europeană operează edge-ul și păstrează copiile de siguranță, astfel încât niciunul dintre ele nu depinde de un cloud non-european.
- Valkey + Sentinel + HAProxy Valkey 9.1
-
Trei replici cu failover prin Sentinel și un proxy HAProxy care indică întotdeauna nodul primar curent. Deservește cache-ul, sesiunile, prezența și brokerul de timp real.
De ce
Un failover nu necesită nicio modificare în aplicație, deoarece fiecare serviciu continuă să comunice cu aceeași adresă.
- restic 0.18
-
Copii de siguranță criptate ale bazelor de date la fiecare 6 ore în două locații din UE, cu verificări săptămânale de integritate și un exercițiu lunar automatizat de restaurare.
De ce
O copie de siguranță contează doar după ce restaurarea ei a fost dovedită.
- GitLab CI
-
Testele, build-urile de imagini și verificările charturilor Helm rulează în CI. Implementările în previzualizare și în producție sunt joburi separate, declanșate manual.
De ce
Automatizarea face munca repetitivă; un om decide când ajunge ceva la clienți.
În jurul produsului
Instrumentele care mențin o companie cu o singură persoană observabilă, accesibilă și ușor de explicat.
- Cloudflare Workers + D1
-
O pagină de stare externă care verifică aplicația și site-ul web la fiecare cinci minute și înregistrează incidentele.
De ce
Disponibilitatea este măsurată din afara infrastructurii pe care o descrie.
- Umami 3.2
-
Analiză web găzduită propriu, care rulează numai după ce vizitatorul și-a exprimat opțiunea privind consimțământul.
De ce
Datele vizitatorilor rămân pe infrastructura HansaChat în loc să alimenteze o rețea de publicitate.
- Remotion 4.0
-
Videoclipurile despre produs sunt înregistrate din aplicația reală de către runnerul de teste end-to-end și compuse în cod, cu o narațiune vocală generată de AI.
De ce
Când interfața se schimbă, videoclipul este randat din nou, nu refilmat.
- TwentyCRM + WireGuard
-
Un CRM găzduit propriu, accesibil numai printr-un VPN privat.
De ce
Datele de vânzări nu sunt deloc expuse internetului public.
Practici de inginerie
Obiceiurile care îi permit unei singure persoane să livreze un produs multi-tenant fără o echipă separată de QA sau de operațiuni.
Contractele sunt generate, niciodată scrise manual
Protobuf este sursa unică pentru serverul Go, clienții TypeScript și CLI. Generatoarele sunt fixate la versiuni exacte, iar CLI-ul înregistrează hash-ul fiecărui fișier de contract pe care îl folosește.
Migrările țin un registru
Fiecare bază de date a unui spațiu de lucru înregistrează ce migrări a aplicat. Un hook de implementare aplică doar migrările lipsă și verifică din nou după lansare. Site-ul web își păstrează migrările de bază originale, astfel încât bazele de date existente nu le rulează niciodată de două ori.
Teste end-to-end pe un stack izolat
O singură comandă pornește bazele de date, NATS, Valkey, Centrifugo și stocarea de obiecte pe porturi libere, compilează binarele Go, pornește aplicația web și rulează 70 de specificații Playwright, cu un spațiu de lucru nou pentru fiecare test.
Teste la fiecare nivel
478 de funcții de test Go, inclusiv teste de izolare cu două spații de lucru, 109 fișiere Vitest în client și peste 130 de fișiere Pest pe site-ul web.
Bariere de protecție în CI
Verificările de formatare, o limită de 1.000 de linii pentru fiecare fișier Go și testele charturilor Helm rulează în CI alături de suitele de teste.
Porți manuale pentru implementare
CI-ul compilează și testează automat, dar implementările în previzualizare și în producție sunt joburi manuale separate. În producție se implementează un tag de versiune, creat numai după ce modificarea a fost integrată.
Copii de siguranță dovedite prin restaurări
Fiecare rulare a copiilor de siguranță este monitorizată, iar un exercițiu automatizat restaurează bazele de date în fiecare lună și validează tabelele și numărul de rânduri.
Un singur sistem de design
Site-ul web și aplicația folosesc aceeași paletă documentată, aceeași scară tipografică și aceleași reguli pentru componente, cu o temă luminoasă și una întunecată în aplicație.
Asistat de AI, aprobat de oameni
Agenții AI de programare lucrează pe baza unui fișier de instrucțiuni din fiecare repository, care trimite către un repository central de documentație tehnică. Fluxurile de lucru repetabile, precum rularea testelor end-to-end, sunt împachetate ca skill-uri pentru agenți. Fiecare modificare trece în continuare prin aceleași teste, iar implementările rămân manuale.
Managementul securității în pregătire
HansaChat se pregătește pentru certificarea ISO/IEC 27001, cu un registru de riscuri, un registru de dovezi și un jurnal al deciziilor. În prezent nu este certificat.
Ce afirmă această pagină — și ce nu afirmă
Tot ce este descris mai sus este implementat astăzi și a fost numărat în repository-urile de cod sursă. HansaChat nu pretinde că deține o certificare de securitate. Trierea mesajelor este în faza pilot, iar notificările push pentru aplicațiile închise nu sunt încă active.
Întrebări despre arhitectură?
Inginerii care evaluează HansaChat primesc răspunsuri directe de la persoana care l-a construit.