Pāriet uz tehnoloģiju saturu
Uz sākumlapu

Tehnoloģiju steks

HansaChat ir ES uzņēmuma tērzēšana ar operatīvo slāni komandām, kas strādā objektos; to projektējis, izveidojis un uztur viens cilvēks. Šajā lapā redzams, ar ko veidota katra daļa un kāpēc tā izvēlēta.

Versijas un skaitļi pārbaudīti 2026. gada oktobrī.

Saskaitīts repozitorijos

ConnectRPC servisi ar 179 RPC, visi definēti Protobuf
18
Go binārie faili no vienas koda bāzes: API, worker, outbox retranslators, administrēšana
4
platformas no viena klienta: tīmeklis, macOS, Windows, Linux, iOS, Android
6
valodas publiskajā tīmekļa vietnē
22
saskarnes valodas lietotnē
23
Playwright end-to-end testi izolētā vidē
70

Kā daļas savienojas kopā

Trīs lietojumprogrammas koplieto vienu malas slāni (edge) un vienu klasteri. Vietne atbild par norēķiniem un darbvietu reģistru, Go aizmugursistēma — par visu, kas notiek darbvietas iekšienē, un tīmekļa lietotne sazinās ar aizmugursistēmu, izmantojot ģenerētus ConnectRPC klientus.

Klienti

Pārlūks

Vietne un tīmekļa lietotne

Tauri

Datoru un mobilo ierīču čaulas

hansa CLI

Skripti un aģenti

Edge

Bunny.net CDN

TLS, kešatmiņa, DDoS aizsardzība

IONOS Managed Kubernetes, Vācija

Traefik

Ingress katrai lietojumprogrammai

Tīmekļa lietotne Vue + Vite

Statisks Vue būvējums

Tērzēšanas API

Go ar ConnectRPC

  • Worker
  • Outbox retranslators

Vietne Laravel + FrankenPHP

Norēķini, reģistrs, nodrošināšana

NATS JetStream

Noturīgi saglabātas komandas un notikumi

Centrifugo

WebSocket izplatīšana

Valkey Sentinel + HAProxy

Kešatmiņa, klātbūtne, sesijas

LiveKit

Zvanu multivide

Pārvaldīti dati IONOS

MariaDB

Viena datubāze katrai darbvietai un centrālais reģistrs

Object Storage S3

Faili un avatāri

Ārējie servisi

ElevenLabs · LLM · Clef

Transkripcija, tulkošana, šķirošana

Creem · EmailLabs

Maksājumi un e-pasts

Ārpus klastera

Cloudflare Workers D1

Ārējas statusa pārbaudes

Bunny Storage restic

Šifrētas rezerves kopijas Frankfurtē un Stokholmā

Viena ziņojuma ceļš

  1. Klients izsauc ziņojumu servisu, izmantojot ConnectRPC.
  2. API pieņem pieprasījumu tikai pēc tam, kad NATS JetStream ir noturīgi saglabājis komandu.
  3. Worker vienā transakcijā ieraksta ziņojumu un outbox notikumu darbvietas datubāzē.
  4. Outbox retranslators publicē apstiprināto notikumu uz NATS un Centrifugo.
  5. Katrs atvērtais klients to saņem caur WebSocket; pēc pārtraukuma klienti no API atkārtoti ielādē autoritatīvo stāvokli.

Tērzēšanas aizmugursistēma

Viss, kas notiek darbvietas iekšienē, darbojas Go valodā: ziņojumi, kanāli, faili, zvani, reāllaika funkcijas, importēšana un uzkopšanas uzņēmumiem paredzētā operatīvā pakotne. Vietne nekad nepieskaras darbvietu datiem.

Go 1.26

Četri binārie faili no vienas modulāras koda bāzes: API, ziņojumu worker, outbox retranslators un aizsargāta administrēšanas komanda. Tie tiek piegādāti kā statiski binārie faili vienā nelielā attēlā.

Kāpēc

Spēcīga standarta bibliotēka, paredzama veiktspēja un vienkāršs vienlaicīgums labi der aizmugursistēmai, kas sastāv no ilgstoši strādājošiem worker procesiem. Viena valoda visam darbvietu kodolam ļauj to uzturēt vienam cilvēkam.

ConnectRPC + Protobuf connect-go 1.20 · buf 1.71

Protobuf ir definēti 18 servisi un 179 RPC. buf ar lokāliem spraudņiem ģenerē Go serveri un TypeScript klientus, tāpēc neviena shēma neatstāj datoru.

Kāpēc

Viens līgums apkalpo tīmekļa, datoru, mobilos un komandrindas klientus. Nav ar roku rakstītu HTTP ceļu vai atbilžu parsēšanas, un līguma izmaiņas parādās kā kompilēšanas kļūda, nevis kā kļūme izpildes laikā.

Viena datubāze katrai darbvietai MariaDB · sqlc

Katra darbvieta saņem savu fizisko MariaDB datubāzi. API nosaka darbvietu pēc tās domēna un atver atbilstošo savienojumu pūlu; worker procesi to nosaka paši no jauna un nekad neuzticas datubāzes nosaukumam no rindas ziņojuma. Vaicājumi ir vienkāršs SQL, ko sqlc kompilē tipizētā Go kodā.

Kāpēc

Izolācija ir strukturāla, nevis filtrs katrā vaicājumā. Eksports, imports, atjaunošana un dzēšana darbojas katram uzņēmumam atsevišķi.

NATS JetStream 2.10

Noturīgas plūsmas komandām, uzdevumiem un notikumiem, kā arī dead-letter plūsma. Ziņojumu ierakstīšana notiek 64 sakārtotos nodalījumos.

Kāpēc

Ziņojums tiek pieņemts tikai pēc noturīga apstiprinājuma. Viena kanāla ziņojumi saglabā secību, bet neatkarīgi kanāli tiek apstrādāti paralēli.

Transakciju outbox

Domēna ieraksti un izejošais notikums tiek apstiprināti vienā un tajā pašā transakcijā. Retranslators publicē apstiprinātos notikumus uz NATS un Centrifugo, novēršot dublikātus pēc notikuma ID, un reģistrē kļūmes atkārtotam mēģinājumam.

Kāpēc

Nav pazudušu vai fantoma notikumu, ja process apstājas starp ierakstu datubāzē un publicēšanu.

Centrifugo v5

Piegāde caur WebSocket ziņojumiem, klātbūtnei, rakstīšanas indikatoram un zvanu stāvoklim. Klienti abonē ar īslaicīgiem katra kanāla marķieriem, ko API izsniedz tikai pēc dalības darbvietā pārbaudes.

Kāpēc

Atsevišķs reāllaika serveris tur ilgstošos savienojumus ārpus API procesa, un katrs marķieris nosauc gan darbvietu, gan lietotāju, tāpēc identitātes no dažādām datubāzēm nevar sadurties.

Ar S3 saderīga objektu krātuve aws-sdk-go-v2

Faili un avatāri tiek glabāti IONOS Object Storage glabātavā ES un tiek izsniegti ar īslaicīgām parakstītām saitēm.

Kāpēc

Failu krātuve mērogojas neatkarīgi no datubāzēm un tiek šifrēta miera stāvoklī servera pusē.

LiveKit 1.9

Pašu mitināts WebRTC multivides serveris zvaniem tiešajos ziņojumos un uz audio orientētiem kanālu zvaniem ar kameru un ekrāna kopīgošanu.

Kāpēc

Atvērtā koda un pašmitināms, tāpēc zvanu multivide darbojas HansaChat uzturētā infrastruktūrā.

ElevenLabs Scribe

Runas pārveide tekstā balss ziņojumiem. Transkripcija tiek pievienota ziņojumam, tajā var meklēt, un to var tulkot tāpat kā jebkuru tekstu.

Kāpēc

Darbinieki objektos vairāk runā nekā raksta.

LLM tulkošana

Tulkošana katram lasītājam, izmantojot ar OpenAI saderīgu API. Katrs ziņojums tiek tulkots pēc pieprasījuma, kešatmiņā saglabāts vienreiz katrai mērķvalodai un izlaists, ja lasītājs jau runā attiecīgajā valodā.

Kāpēc

Daudzvalodu brigāde strādā vienā sarunā, kamēr katrs dalībnieks lasa savā valodā. Pakalpojumu sniedzēju var nomainīt, jo tas atrodas aiz vienas saskarnes.

Cloudflare Clef

Lēmumu modelis klasificē operatīvos ziņojumus pēc kategorijas, steidzamības un ticamības. Tas atgriež varbūtības fiksētiem jautājumiem, nevis ģenerētu tekstu. Pašlaik tas ir izmēģinājuma posmā.

Kāpēc

Nav brīvas formas izvades, kas būtu jāparsē. Vadītāji redz, kam nepieciešama uzmanība; lēmums rīkoties vienmēr paliek cilvēka ziņā.

go-pdf 0.9

A4 darba laika uzskaites lapas un servisa atskaites tiek ģenerētas serverī.

Kāpēc

Tikai Go valodā rakstīta bibliotēka ļauj aizmugursistēmas attēlam palikt mazam un iztikt bez headless pārlūka.

Sentry + slog

Kļūdas un trases nonāk Sentry, žurnāli ir strukturēts JSON no standarta bibliotēkas, un worker procesi publicē metrikas Prometheus teksta formātā.

Kāpēc

Maz kustīgu daļu, kas jāuztur, un katra kļūme pienāk kopā ar savu kontekstu.

Lietotnes un CLI

Viens Vue klients apkalpo tīmekli, un Tauri to iepako datoriem un mobilajām ierīcēm. Komandrindas klients izmanto to pašu publisko API, ko lietotnes.

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

Viens klients ar 118 viena faila komponentiem, Pinia krātuvēm, vue-router un vue-i18n 23 saskarnes valodās, testēts ar Vitest.

Kāpēc

Nobriedis, labi lasāms komponentu modelis un stingrs TypeScript padara lielu klientu pārvaldāmu ļoti mazai komandai.

Vite + Tailwind CSS Vite 8 · Tailwind 4

Būvēšanas rīks un stila slānis: Tailwind CSS 4 ar gaišo un tumšo tēmu.

Kāpēc

Ātra būvēšana un dizaina marķieri, kas seko tai pašai dokumentētajai paletei kā vietne.

Tauri 2.10

Iepako to pašu tīmekļa klientu macOS, Windows, Linux, iOS un Android platformām ar vietējiem paziņojumiem, dziļajām saitēm un parakstītiem datoru lietotņu atjauninājumiem.

Kāpēc

Viena saskarne visur, izmantojot sistēmas webview, nevis iebūvējot pārlūka dzinēju katrā lietotnē.

Ģenerēti Connect klienti connect-web 2.1 · protobuf-es 2

TypeScript klienti, kas ģenerēti no aizmugursistēmas Protobuf un nokopēti tīmekļa lietotnē. Tos nekad nerediģē ar roku.

Kāpēc

Līguma izmaiņas kļūst par tipa kļūdu klientā, nevis par pārsteigumu produkcijā.

centrifuge-js + livekit-client 5.7 · 2.20

Klientu bibliotēkas Centrifugo reāllaika savienojumiem un LiveKit zvaniem.

Kāpēc

Atkārtota savienošanās, atkopšana un multivides apstrāde nāk no tiem pašiem projektiem, kas izstrādā serverus.

TipTap 3.22

Ziņojumu redaktors ar pieminējumiem, saitēm un koda blokiem ar sintakses izcelšanu.

Kāpēc

Strukturēts redaktors trauslas virkņu apstrādes vietā.

hansa CLI Go 1.26 · Cobra

Bezstāvokļa komandrindas klients cilvēkiem, skriptiem un LLM aģentiem. Pēc noklusējuma JSON izvade, piekļuves dati operētājsistēmas atslēgu glabātuvē un ar Minisign parakstītas laidienu kontrolsummas.

Kāpēc

Tas izmanto to pašu publisko API, ko lietotnes. Tā Protobuf līgumi tiek kopēti no aizmugursistēmas un fiksēti ar SHA-256 jaucējvērtībām, tāpēc novirzes tiek atklātas CI.

Vietne, norēķini un reģistrs

Laravel nodrošina publisko vietni, klientu dokumentāciju, apmaksas procesu, abonementus un centrālo darbvietu reģistru. Darbvietu tas izveido, izsaucot Go aizmugursistēmu pa autentificētu HTTP, bez kopīga koda un bez kopīgām rindām.

Laravel + PHP Laravel 12 · PHP 8.5

Publiskā vietne, klientu dokumentācija, apmaksas process, abonementi, kuponi, dzīves cikla paziņojumi un centrālais darbvietu un domēnu reģistrs.

Kāpēc

Norēķini, e-pasts, plānošana, rindas un veidlapas ir Laravel stiprākās puses. Tērzēšana paliek Go valodā, un robeža starp tām ir viena autentificēta HTTP saskarne.

FrankenPHP 1.13

PHP lietojumprogrammu serveris konteinera attēlā, veidots uz kopīga bāzes attēla, kas pēc digest fiksē PHP, tā paplašinājumus un rīkus.

Kāpēc

Viens process apkalpo lietojumprogrammu, un tā paša commit atkārtota būvēšana dod to pašu izpildes vidi.

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

Serverī renderētas lapas ar nelieliem Alpine.js komponentiem, stilizētas ar Tailwind CSS un apvienotas ar Vite.

Kāpēc

Satura lapas ielādējas ātri, nepiegādājot vienas lapas lietotņu ietvaru.

22 valodas

Katra publiskā lapa ir pieejama 22 ES valodās ar valodas prefiksu URL adresēs, hreflang saitēm un lokalizētu vietnes karti. Tests neizdodas, ja kādai valodai trūkst atslēgas vai tajā tiek piegādāts teksts angļu valodā.

Kāpēc

Eiropas produktam jābūt lasāmam pircēja valodā jau no pirmās lapas.

Creem

Apmaksas process, nodokļi, rēķini un abonementi, kas tiek sinhronizēti ar parakstītiem webhook paziņojumiem.

Kāpēc

Maksājumi, nodokļi un rēķinu izrakstīšana paliek specializēta pakalpojumu sniedzēja ziņā, bet vietne glabā saskaņotu katra abonementa kopiju.

EmailLabs

Transakciju un servisa e-pasti, piemēram, uzaicinājumi, paroļu saites un paziņojumi.

Kāpēc

ES e-pasta pakalpojumu sniedzējs ES produktam.

Pest 4.4

Vairāk nekā 130 testu faili aptver maršrutus, norēķinus, nodrošināšanu, tulkojumus un SEO, ieskaitot pārlūka testus.

Kāpēc

Ātri, labi lasāmi testi, kas tiek palaisti pie katrām izmaiņām.

Platforma un ekspluatācija

Produkcijas un priekšskatījuma vide darbojas IONOS infrastruktūrā Vācijā. Katra lietojumprogramma tiek piegādāta kā konteinera attēls ar savu Helm chart un tiek izvietota ar manuāli palaistu GitLab uzdevumu.

IONOS Managed Kubernetes

Produkcijas un priekšskatījuma klasteri, pārvaldīta MariaDB un ar S3 saderīga Object Storage glabātava — to visu nodrošina Vācijas pakalpojumu sniedzējs Vācijā.

Kāpēc

Eiropas pakalpojumu sniedzējs ES jurisdikcijā, nevis ārpuseiropas mākoņa ES reģions.

Helm + Traefik

Katrai lietojumprogrammai ir savs chart. Traefik maršrutē datplūsmu klastera iekšienē, un darbvietu datubāzu migrācijas tiek izpildītas kā hook pirms katras aizmugursistēmas laidiena izvēršanas.

Kāpēc

Katra izvietošana ir versiju kontrolēta, atkārtojama un viegli atritināma.

Bunny.net

CDN, DNS un DDoS aizsardzība klastera priekšā, kā arī krātuve šifrētajām rezerves kopijām.

Kāpēc

Eiropas uzņēmums uztur malas slāni un glabā rezerves kopijas, tāpēc neviens no tiem nav atkarīgs no ārpuseiropas mākoņa.

Valkey + Sentinel + HAProxy Valkey 9.1

Trīs replikas ar Sentinel pārslēgšanu (failover) un HAProxy starpniekserveri, kas vienmēr norāda uz pašreizējo primāro mezglu. Tas nodrošina kešatmiņu, sesijas, klātbūtni un reāllaika brokeri.

Kāpēc

Pārslēgšanai nav nepieciešamas izmaiņas lietojumprogrammā, jo katrs serviss turpina sazināties ar to pašu adresi.

restic 0.18

Šifrētas datubāzu rezerves kopijas ik pēc 6 stundām uz divām ES atrašanās vietām ar iknedēļas integritātes pārbaudēm un automatizētām ikmēneša atjaunošanas mācībām.

Kāpēc

Rezerves kopija ir kaut ko vērta tikai tad, kad atjaunošana no tās ir pierādīta.

GitLab CI

Testi, attēlu būvēšana un Helm chart pārbaudes tiek izpildītas CI. Izvietošana priekšskatījuma un produkcijas vidē ir atsevišķi, manuāli palaižami uzdevumi.

Kāpēc

Automatizācija veic atkārtoto darbu; cilvēks izlemj, kad kaut kas nonāk līdz klientiem.

Ap produktu

Rīki, kas ļauj viena cilvēka uzņēmumam palikt novērojamam, sasniedzamam un izskaidrojamam.

Cloudflare Workers + D1

Ārēja statusa lapa, kas ik pēc piecām minūtēm pārbauda lietotni un vietni un reģistrē incidentus.

Kāpēc

Pieejamība tiek mērīta ārpus infrastruktūras, ko tā apraksta.

Umami 3.2

Pašu mitināta tīmekļa analītika, kas darbojas tikai pēc tam, kad apmeklētājs ir izdarījis izvēli par piekrišanu.

Kāpēc

Apmeklētāju dati paliek HansaChat infrastruktūrā, nevis baro reklāmas tīklu.

Remotion 4.0

Produkta video tiek ierakstīti no īstās lietotnes ar end-to-end testu izpildītāju un salikti kodā ar MI ģenerētu balss ierakstu.

Kāpēc

Kad saskarne mainās, video tiek renderēts no jauna, nevis filmēts vēlreiz.

TwentyCRM + WireGuard

Pašu mitināta CRM sistēma, kas pieejama tikai caur privātu VPN.

Kāpēc

Pārdošanas dati vispār nav pakļauti publiskajam internetam.

Inženierijas prakse

Ieradumi, kas ļauj vienam cilvēkam piegādāt daudznomnieku (multi-tenant) produktu bez atsevišķas QA vai ekspluatācijas komandas.

Līgumi tiek ģenerēti, nekad nerakstīti ar roku

Protobuf ir vienīgais avots Go serverim, TypeScript klientiem un CLI. Ģeneratori ir fiksēti precīzās versijās, un CLI reģistrē katra izmantotā līguma faila jaucējvērtību.

Migrācijām ir reģistrs

Katra darbvietas datubāze reģistrē, kuras migrācijas tā ir piemērojusi. Izvietošanas hook piemēro tikai trūkstošās un pēc izvēršanas pārbauda vēlreiz. Vietne saglabā savas sākotnējās bāzes migrācijas, lai esošās datubāzes tās nekad neizpildītu divreiz.

End-to-end testi izolētā vidē

Viena komanda brīvos portos palaiž datubāzes, NATS, Valkey, Centrifugo un objektu krātuvi, kompilē Go bināros failus, palaiž tīmekļa lietotni un izpilda 70 Playwright testus, katram testam izmantojot jaunu darbvietu.

Testi katrā slānī

478 Go testu funkcijas, tostarp izolācijas testi ar divām darbvietām, 109 Vitest faili klientā un vairāk nekā 130 Pest faili vietnē.

Aizsargmehānismi CI

Formatēšanas pārbaudes, 1000 rindu ierobežojums katram Go failam un Helm chart testi tiek izpildīti CI līdzās testu komplektiem.

Manuāli izvietošanas vārti

CI automātiski būvē un testē, bet izvietošana priekšskatījuma un produkcijas vidē ir atsevišķi manuāli uzdevumi. Produkcijā tiek izvietota laidiena birka, kas tiek izveidota tikai pēc izmaiņu sapludināšanas.

Ar atjaunošanu pierādītas rezerves kopijas

Katra rezerves kopēšanas izpilde tiek uzraudzīta, un automatizētas mācības katru mēnesi atjauno datubāzes un pārbauda tabulas un rindu skaitu.

Viena dizaina sistēma

Vietne un lietotne izmanto vienu dokumentētu paleti, tipogrāfijas skalu un komponentu noteikumus, un lietotnē ir gaišā un tumšā tēma.

MI palīdzība, cilvēka apstiprinājums

MI programmēšanas aģenti strādā pēc instrukciju faila katrā repozitorijā, kas norāda uz vienu centrālo inženierijas dokumentācijas repozitoriju. Atkārtojamas darbplūsmas, piemēram, end-to-end testu palaišana, ir iepakotas kā aģentu prasmes. Katra izmaiņa joprojām iziet tos pašus testus, un izvietošana paliek manuāla.

Drošības pārvaldība sagatavošanā

HansaChat gatavojas ISO/IEC 27001 sertifikācijai ar risku reģistru, pierādījumu reģistru un lēmumu žurnālu. Šobrīd HansaChat nav sertifikāta.

Ko šī lapa apgalvo — un ko ne

Viss iepriekš aprakstītais ir ieviests šodien un saskaitīts pirmkoda repozitorijos. HansaChat neapgalvo, ka tai ir drošības sertifikāts. Ziņojumu šķirošana ir izmēģinājuma posmā, un push paziņojumi aizvērtām lietotnēm vēl nedarbojas.

Jautājumi par arhitektūru?

Inženieri, kas izvērtē HansaChat, saņem tiešas atbildes no cilvēka, kurš to izveidoja.

Rakstīt izstrādātājam