Teknologiapino
HansaChat on eurooppalainen yrityschat, jossa on kenttätiimeille tarkoitettu operatiivinen kerros. Sen on suunnitellut ja rakentanut yksi ihminen, joka myös ylläpitää sitä. Tällä sivulla kerrotaan, millä kukin osa on rakennettu ja miksi se valittiin.
Versiot ja luvut tarkistettu lokakuussa 2026.
Laskettu repositorioista
- ConnectRPC-palvelua ja 179 RPC-kutsua, kaikki määritelty Protobufilla
- 18
- Go-binääriä samasta koodikannasta: API, worker, outbox-välittäjä, ylläpito
- 4
- alustaa yhdestä asiakasohjelmasta: verkko, macOS, Windows, Linux, iOS, Android
- 6
- kieltä julkisella verkkosivustolla
- 22
- käyttöliittymäkieltä sovelluksessa
- 23
- Playwright-päästä päähän -testiä eristetyssä ympäristössä
- 70
Miten osat sopivat yhteen
Kolme sovellusta jakaa yhden reunakerroksen ja yhden klusterin. Verkkosivusto vastaa laskutuksesta ja työtilarekisteristä, Go-taustajärjestelmä kaikesta työtilan sisällä, ja verkkosovellus keskustelee taustajärjestelmän kanssa generoitujen ConnectRPC-asiakkaiden kautta.
Asiakasohjelmat
Selain
Verkkosivusto ja verkkosovellus
Tauri
Työpöytä- ja mobiilikuoret
hansa CLI
Skriptit ja agentit
Reuna
Bunny.net CDN
TLS, välimuisti, DDoS-suojaus
IONOS Managed Kubernetes, Saksa
Traefik
Ingress jokaiselle sovellukselle
Verkkosovellus Vue + Vite
Staattinen Vue-käännös
Chat-API
Go ja ConnectRPC
- Worker
- Outbox-välittäjä
Verkkosivusto Laravel + FrankenPHP
Laskutus, rekisteri, provisiointi
NATS JetStream
Pysyvät komennot ja tapahtumat
Centrifugo
WebSocket-jakelu
Valkey Sentinel + HAProxy
Välimuisti, läsnäolo, istunnot
LiveKit
Puhelujen media
Hallitut tiedot IONOSissa
MariaDB
Yksi tietokanta työtilaa kohden sekä keskitetty rekisteri
Object Storage S3
Tiedostot ja profiilikuvat
Ulkoiset palvelut
ElevenLabs · LLM · Clef
Litterointi, käännös, luokittelu
Creem · EmailLabs
Maksut ja sähköposti
Klusterin ulkopuolella
Cloudflare Workers D1
Ulkoiset tilatarkistukset
Bunny Storage restic
Salatut varmuuskopiot Frankfurtissa ja Tukholmassa
Yhden viestin reitti
- Asiakasohjelma kutsuu viestipalvelua ConnectRPC-protokollalla.
- API hyväksyy pyynnön vasta, kun NATS JetStream on tallentanut komennon pysyvästi.
- Worker kirjoittaa viestin ja outbox-tapahtuman työtilan tietokantaan yhdessä transaktiossa.
- Outbox-välittäjä julkaisee vahvistetun tapahtuman NATSiin ja Centrifugoon.
- Jokainen avoin asiakasohjelma vastaanottaa sen WebSocket-yhteyden kautta; katkoksen jälkeen asiakasohjelmat lataavat määräävän tilan uudelleen API-rajapinnasta.
Chatin taustajärjestelmä
Kaikki, mitä työtilan sisällä tapahtuu, toimii Go-kielellä: viestit, kanavat, tiedostot, puhelut, reaaliaikaisuus, tuonnit ja siivousalan operatiivinen paketti. Verkkosivusto ei koskaan käsittele työtilan tietoja.
- Go 1.26
-
Neljä binääriä yhdestä modulaarisesta koodikannasta: API, viesti-worker, outbox-välittäjä ja suojattu ylläpitokomento. Ne toimitetaan staattisina binääreinä yhdessä pienessä konttikuvassa.
Miksi
Vahva standardikirjasto, ennustettava suorituskyky ja yksinkertainen rinnakkaisuus sopivat taustajärjestelmään, joka koostuu pitkäkestoisista workereista. Yksi kieli koko työtilan ytimelle pitää sen yhden ihmisen ylläpidettävissä.
- ConnectRPC + Protobuf connect-go 1.20 · buf 1.71
-
18 palvelua ja 179 RPC-kutsua on määritelty Protobufilla. buf generoi Go-palvelimen ja TypeScript-asiakkaat paikallisilla liitännäisillä, joten mikään skeema ei poistu koneelta.
Miksi
Yksi sopimus palvelee verkko-, työpöytä-, mobiili- ja komentoriviasiakkaita. Käsin kirjoitettuja HTTP-polkuja tai vastausten jäsentämistä ei ole, ja sopimuksen muutos näkyy käännösvirheenä eikä ajonaikaisena virheenä.
- Yksi tietokanta työtilaa kohden MariaDB · sqlc
-
Jokainen työtila saa oman fyysisen MariaDB-tietokannan. API selvittää työtilan sen verkkotunnuksesta ja avaa vastaavan yhteysaltaan; workerit selvittävät sen itse uudelleen eivätkä koskaan luota jonoviestissä olevaan tietokannan nimeen. Kyselyt ovat tavallista SQL-kieltä, jonka sqlc kääntää tyypitetyksi Go-koodiksi.
Miksi
Eristys on rakenteellista eikä jokaiseen kyselyyn lisättävä suodatin. Vienti, tuonti, palautus ja poisto toimivat yrityskohtaisesti.
- NATS JetStream 2.10
-
Pysyvät virrat komennoille, töille ja tapahtumille sekä dead-letter-virta. Viestien kirjoitukset kulkevat 64 järjestetyssä osiossa.
Miksi
Viesti hyväksytään vasta pysyvän kuittauksen jälkeen. Saman kanavan viestit pysyvät järjestyksessä, kun taas toisistaan riippumattomia kanavia käsitellään rinnakkain.
- Transaktionaalinen outbox
-
Toimialueen rivit ja lähtevä tapahtuma vahvistetaan samassa transaktiossa. Välittäjä julkaisee vahvistetut tapahtumat NATSiin ja Centrifugoon, poistaa kaksoiskappaleet tapahtumatunnisteen perusteella ja kirjaa epäonnistumiset uudelleenyritystä varten.
Miksi
Tapahtumia ei katoa eikä haamutapahtumia synny, vaikka prosessi pysähtyisi tietokantaan kirjoittamisen ja julkaisun välillä.
- Centrifugo v5
-
WebSocket-toimitus viesteille, läsnäololle, kirjoitusilmaisimille ja puhelujen tilalle. Asiakasohjelmat tilaavat kanavia lyhytikäisillä kanavakohtaisilla tunnisteilla, jotka API myöntää vasta tarkistettuaan työtilan jäsenyyden.
Miksi
Erillinen reaaliaikapalvelin pitää pitkäikäiset yhteydet poissa API-prosessista, ja jokainen tunniste nimeää sekä työtilan että käyttäjän, joten eri tietokantojen identiteetit eivät voi törmätä.
- S3-yhteensopiva objektitallennus aws-sdk-go-v2
-
Tiedostot ja profiilikuvat tallennetaan IONOS Object Storageen EU-alueella, ja ne jaetaan lyhytikäisten allekirjoitettujen linkkien kautta.
Miksi
Tiedostotallennus skaalautuu tietokannoista riippumatta ja on salattu levossa palvelinpuolella.
- LiveKit 1.9
-
Itse ylläpidetty WebRTC-mediapalvelin yksityisviestien puheluihin ja ääneen painottuviin kanavapuheluihin, joissa on kamera ja näytön jakaminen.
Miksi
Avointa lähdekoodia ja itse ylläpidettävissä, joten puhelujen media kulkee HansaChatin ylläpitämässä infrastruktuurissa.
- ElevenLabs Scribe
-
Puheentunnistus ääniviesteille. Litteraatti liitetään viestiin, ja sitä voi hakea ja kääntää kuten mitä tahansa tekstiä.
Miksi
Kenttätyöntekijät puhuvat enemmän kuin kirjoittavat.
- LLM-käännös
-
Lukijakohtainen käännös OpenAI-yhteensopivan API-rajapinnan kautta. Jokainen viesti käännetään tarvittaessa, tallennetaan välimuistiin kerran kohdekieltä kohden ja ohitetaan, jos lukija jo osaa kielen.
Miksi
Monikielinen tiimi työskentelee yhdessä keskustelussa, ja jokainen jäsen lukee omalla kielellään. Palveluntarjoaja on vaihdettavissa yhden rajapinnan takana.
- Cloudflare Clef
-
Päätösmalli luokittelee operatiiviset viestit luokan, kiireellisyyden ja varmuuden mukaan. Se palauttaa todennäköisyyksiä kiinteisiin kysymyksiin, ei generoitua tekstiä. Tällä hetkellä pilottivaiheessa.
Miksi
Jäsennettävää vapaamuotoista tulostetta ei ole. Esihenkilöt näkevät, mikä vaatii huomiota; sen perusteella toimiminen on aina ihmisen päätös.
- go-pdf 0.9
-
A4-kokoiset työaikalomakkeet ja huoltoraportit luodaan palvelimella.
Miksi
Puhdas Go-kirjasto pitää taustajärjestelmän konttikuvan pienenä ilman headless-selainta.
- Sentry + slog
-
Virheet ja jäljitykset menevät Sentryyn, lokit ovat standardikirjaston tuottamaa jäsenneltyä JSON-dataa, ja workerit tarjoavat mittarit Prometheus-tekstimuodossa.
Miksi
Ylläpidettäviä liikkuvia osia on vähän, ja jokainen virhe saapuu kontekstinsa kanssa.
Sovellukset ja CLI
Yksi Vue-asiakasohjelma palvelee verkkoa, ja Tauri paketoi sen työpöydälle ja mobiiliin. Komentoriviasiakas käyttää samaa julkista API-rajapintaa kuin sovellukset.
- Vue 3 + TypeScript Vue 3.5 · TS 5.9 · Pinia 3
-
Yksi asiakasohjelma, jossa on 118 yhden tiedoston komponenttia, Pinia-storet, vue-router ja vue-i18n 23 käyttöliittymäkielellä, testattuna Vitestillä.
Miksi
Kypsä ja luettava komponenttimalli sekä tiukka TypeScript tekevät suuresta asiakasohjelmasta hallittavan hyvin pienelle tiimille.
- Vite + Tailwind CSS Vite 8 · Tailwind 4
-
Käännöstyökalu ja tyylikerros: Tailwind CSS 4 vaalealla ja tummalla teemalla.
Miksi
Nopeat käännökset ja design-tokenit, jotka noudattavat samaa dokumentoitua palettia kuin verkkosivusto.
- Tauri 2.10
-
Paketoi saman verkkoasiakkaan macOS-, Windows-, Linux-, iOS- ja Android-alustoille natiiveine ilmoituksineen, syvälinkkeineen ja allekirjoitettuine työpöytäpäivityksineen.
Miksi
Yksi käyttöliittymä kaikkialla, ja se käyttää järjestelmän webview-näkymää sen sijaan, että jokaiseen sovellukseen niputettaisiin oma selainmoottori.
- Generoidut Connect-asiakkaat connect-web 2.1 · protobuf-es 2
-
TypeScript-asiakkaat generoidaan taustajärjestelmän Protobuf-määrittelyistä ja kopioidaan verkkosovellukseen. Niitä ei koskaan muokata käsin.
Miksi
Sopimuksen muutos näkyy tyyppivirheenä asiakasohjelmassa eikä yllätyksenä tuotannossa.
- centrifuge-js + livekit-client 5.7 · 2.20
-
Asiakaskirjastot Centrifugon reaaliaikaisuudelle ja LiveKit-puheluille.
Miksi
Uudelleenyhdistäminen, palautuminen ja median käsittely tulevat samoilta projekteilta, jotka rakentavat palvelimet.
- TipTap 3.22
-
Viestieditori, jossa on maininnat, linkit ja syntaksikorostetut koodilohkot.
Miksi
Rakenteinen editori hauraan merkkijonokäsittelyn sijaan.
- hansa CLI Go 1.26 · Cobra
-
Tilaton komentoriviasiakas ihmisille, skripteille ja LLM-agenteille. Oletuksena JSON-tuloste, tunnistetiedot käyttöjärjestelmän avainnipussa ja julkaisujen tarkistussummat Minisignilla allekirjoitettuina.
Miksi
Se käyttää samaa julkista API-rajapintaa kuin sovellukset. Sen Protobuf-sopimukset kopioidaan taustajärjestelmästä ja lukitaan SHA-256-tiivisteillä, joten poikkeamat havaitaan CI-putkessa.
Verkkosivusto, laskutus ja rekisteri
Laravel pyörittää julkista verkkosivustoa, asiakasdokumentaatiota, kassaa, tilauksia ja keskitettyä työtilarekisteriä. Se luo työtilan kutsumalla Go-taustajärjestelmää todennetun HTTP-yhteyden yli ilman yhteistä koodia ja ilman yhteisiä jonoja.
- Laravel + PHP Laravel 12 · PHP 8.5
-
Julkinen verkkosivusto, asiakasdokumentaatio, kassa, tilaukset, kupongit, elinkaari-ilmoitukset sekä keskitetty työtila- ja verkkotunnusrekisteri.
Miksi
Laskutus, sähköposti, ajastus, jonot ja lomakkeet ovat Laravelin vahvinta aluetta. Chat pysyy Go-kielessä, ja niiden välinen raja on yksi todennettu HTTP-rajapinta.
- FrankenPHP 1.13
-
PHP-sovelluspalvelin konttikuvan sisällä, rakennettuna yhteisen peruskuvan päälle, joka lukitsee PHP-version, sen laajennukset ja työkalut digestin perusteella.
Miksi
Yksi prosessi palvelee sovellusta, ja saman commitin uudelleenrakentaminen tuottaa saman ajoympäristön.
- Blade + Alpine.js + Tailwind CSS Alpine 3.15 · Tailwind 3.4 · Vite 7
-
Palvelimella renderöidyt sivut pienillä Alpine.js-komponenteilla, tyyliteltyinä Tailwind CSS -kirjastolla ja paketoituina Vitellä.
Miksi
Sisältösivut latautuvat nopeasti ilman yhden sivun sovelluskehystä.
- 22 kieltä
-
Jokainen julkinen sivu on saatavilla 22 EU-kielellä kielikohtaisin URL-etuliittein, hreflang-linkein ja lokalisoidulla sivustokartalla. Testi epäonnistuu, jos jostakin kielestä puuttuu avain tai siinä on englanninkielistä tekstiä.
Miksi
Eurooppalaisen tuotteen pitäisi olla luettavissa ostajan kielellä ensimmäisestä sivusta alkaen.
- Creem
-
Kassa, verot, laskut ja tilaukset, jotka pidetään synkronoituina allekirjoitettujen webhookien avulla.
Miksi
Maksut, verot ja laskutus hoitaa erikoistunut palveluntarjoaja, ja verkkosivusto pitää täsmäytettyä kopiota jokaisesta tilauksesta.
- EmailLabs
-
Transaktio- ja palvelusähköpostit, kuten kutsut, salasanalinkit ja ilmoitukset.
Miksi
EU-maassa toimiva sähköpostipalvelu EU-tuotteelle.
- Pest 4.4
-
Yli 130 testitiedostoa kattaa reitit, laskutuksen, provisioinnin, käännökset ja SEO-tarkistukset, selaintestit mukaan lukien.
Miksi
Nopeat, luettavat testit, jotka ajetaan jokaisen muutoksen yhteydessä.
Alusta ja ylläpito
Tuotanto- ja esikatseluympäristö toimivat IONOSilla Saksassa. Jokainen sovellus toimitetaan konttikuvana omalla Helm-kaaviollaan, ja se otetaan käyttöön manuaalisesti käynnistettävällä GitLab-työllä.
- IONOS Managed Kubernetes
-
Tuotanto- ja esikatseluklusterit, hallittu MariaDB ja S3-yhteensopiva Object Storage – kaikkea ylläpitää saksalainen palveluntarjoaja Saksassa.
Miksi
Eurooppalainen palveluntarjoaja EU-lainkäyttövallan alaisena eikä Euroopan ulkopuolisen pilvipalvelun EU-alue.
- Helm + Traefik
-
Jokaisella sovelluksella on oma Helm-kaavionsa. Traefik reitittää liikenteen klusterin sisällä, ja työtilatietokantojen migraatiot ajetaan hookina ennen jokaista taustajärjestelmän käyttöönottoa.
Miksi
Jokainen käyttöönotto on versioitu, toistettavissa ja helppo perua.
- Bunny.net
-
CDN, DNS ja DDoS-suojaus klusterin edessä sekä tallennustila salatuille varmuuskopioille.
Miksi
Eurooppalainen yritys ylläpitää reunakerrosta ja säilyttää varmuuskopiot, joten kumpikaan ei ole riippuvainen Euroopan ulkopuolisesta pilvestä.
- Valkey + Sentinel + HAProxy Valkey 9.1
-
Kolme replikaa Sentinel-vikasiirrolla ja HAProxy-välityspalvelin, joka osoittaa aina nykyiseen ensisijaiseen solmuun. Se palvelee välimuistia, istuntoja, läsnäoloa ja reaaliaikavälittäjää.
Miksi
Vikasiirto ei vaadi muutoksia sovellukseen, koska jokainen palvelu jatkaa saman osoitteen käyttöä.
- restic 0.18
-
Salatut tietokantavarmuuskopiot 6 tunnin välein kahteen sijaintiin EU-alueella, viikoittaiset eheystarkistukset ja automatisoitu kuukausittainen palautusharjoitus.
Miksi
Varmuuskopio lasketaan vasta, kun palautus on osoitettu toimivaksi.
- GitLab CI
-
Testit, konttikuvien käännökset ja Helm-kaavioiden tarkistukset ajetaan CI-putkessa. Käyttöönotot esikatseluun ja tuotantoon ovat erillisiä, manuaalisesti käynnistettäviä töitä.
Miksi
Automaatio hoitaa toistuvan työn; ihminen päättää, milloin jokin päätyy asiakkaille.
Tuotteen ympärillä
Työkalut, joiden ansiosta yhden hengen yritys pysyy havainnoitavana, tavoitettavana ja selitettävänä.
- Cloudflare Workers + D1
-
Ulkoinen tilasivu, joka tarkistaa sovelluksen ja verkkosivuston viiden minuutin välein ja kirjaa häiriöt.
Miksi
Saatavuus mitataan sen infrastruktuurin ulkopuolelta, jota se kuvaa.
- Umami 3.2
-
Itse ylläpidetty verkkoanalytiikka, joka käynnistyy vasta, kun kävijä on tehnyt suostumusvalinnan.
Miksi
Kävijätiedot pysyvät HansaChatin infrastruktuurissa eivätkä päädy mainosverkoston käyttöön.
- Remotion 4.0
-
Tuotevideot tallennetaan oikeasta sovelluksesta päästä päähän -testien ajurilla ja kootaan koodissa tekoälyllä tuotetun selostuksen kanssa.
Miksi
Kun käyttöliittymä muuttuu, video renderöidään uudelleen eikä sitä tarvitse kuvata uudelleen.
- TwentyCRM + WireGuard
-
Itse ylläpidetty CRM, johon pääsee vain yksityisen VPN-yhteyden kautta.
Miksi
Myyntitiedot eivät ole lainkaan avoimen internetin ulottuvilla.
Kehityskäytännöt
Tavat, joiden ansiosta yksi ihminen voi toimittaa monivuokralaistuotteen ilman erillistä laadunvarmistus- tai ylläpitotiimiä.
Sopimukset generoidaan, niitä ei kirjoiteta käsin
Protobuf on ainoa lähde Go-palvelimelle, TypeScript-asiakkaille ja CLI-työkalulle. Generaattorit on lukittu tarkkoihin versioihin, ja CLI-työkalu kirjaa jokaisen käyttämänsä sopimustiedoston tiivisteen.
Migraatioista pidetään kirjaa
Jokainen työtilatietokanta kirjaa, mitkä migraatiot siihen on ajettu. Käyttöönoton hook ajaa vain puuttuvat ja tarkistaa tilanteen uudelleen käyttöönoton jälkeen. Verkkosivusto säilyttää alkuperäiset perusmigraationsa, jotta olemassa olevat tietokannat eivät koskaan aja niitä kahdesti.
Päästä päähän -testit eristetyssä ympäristössä
Yksi komento käynnistää tietokannat, NATSin, Valkeyn, Centrifugon ja objektitallennuksen vapaisiin portteihin, kääntää Go-binäärit, käynnistää verkkosovelluksen ja ajaa 70 Playwright-testiä niin, että jokainen testi saa uuden työtilan.
Testit jokaisella kerroksella
478 Go-testifunktiota, mukaan lukien kahden työtilan eristystestit, 109 Vitest-tiedostoa asiakasohjelmassa ja yli 130 Pest-tiedostoa verkkosivustolla.
Suojakaiteet CI-putkessa
Muotoilutarkistukset, 1 000 rivin raja Go-tiedostoa kohden ja Helm-kaavioiden testit ajetaan CI-putkessa testisarjojen rinnalla.
Käyttöönotot vaativat ihmisen hyväksynnän
CI-putki kääntää ja testaa automaattisesti, mutta käyttöönotot esikatseluun ja tuotantoon ovat erillisiä manuaalisia töitä. Tuotantoon otetaan käyttöön julkaisutagi, joka luodaan vasta, kun muutos on yhdistetty.
Palautuksilla todennetut varmuuskopiot
Jokaista varmuuskopioajoa valvotaan, ja automatisoitu harjoitus palauttaa tietokannat joka kuukausi sekä tarkistaa taulut ja rivimäärät.
Yksi design-järjestelmä
Verkkosivusto ja sovellus jakavat yhden dokumentoidun paletin, typografisen asteikon ja komponenttisäännöt; sovelluksessa on vaalea ja tumma teema.
Tekoälyavusteinen, ihmisen hyväksymä
Tekoälykoodausagentit työskentelevät jokaisen repositorion ohjetiedoston pohjalta, joka osoittaa yhteen keskitettyyn kehitysdokumentaation repositorioon. Toistettavat työnkulut, kuten päästä päähän -testiajo, on paketoitu agenttitaidoiksi. Jokaisen muutoksen on silti läpäistävä samat testit, ja käyttöönotot pysyvät manuaalisina.
Tietoturvan hallinta valmisteilla
HansaChat valmistautuu ISO/IEC 27001 -sertifiointiin riskirekisterin, näyttörekisterin ja päätöslokin avulla. HansaChat ei ole tällä hetkellä sertifioitu.
Mitä tämä sivu väittää ja mitä ei
Kaikki yllä kuvattu on toteutettu jo nyt, ja luvut on laskettu lähdekoodirepositorioista. HansaChat ei väitä omaavansa tietoturvasertifiointia. Viestien luokittelu on pilottivaiheessa, eivätkä suljettujen sovellusten push-ilmoitukset ole vielä käytössä.
Kysyttävää arkkitehtuurista?
HansaChatia arvioivat insinöörit saavat suorat vastaukset sen rakentaneelta henkilöltä.