O projekcie

Pokoje głosowe, które uruchomisz u siebie

Chatovo to otwarty projekt: kod, serwer mediów i baza danych działają na twoich maszynach, a nie w cudzej chmurze.

Dlaczego powstał

Projekt zaczął się od próby wycięcia całej ceremonii z rozmawiania z ludźmi.

Rozmowa nie powinna wymagać konfiguracji

Zebranie znajomych na rozmowę zwykle oznacza tworzenie serwera, układanie kanałów i rozdawanie ról. Tutaj tworzysz pokój i wysyłasz link.

Dane zostają u właściciela

Serwer mediów, bazę danych i przesłane pliki wdrażasz u siebie. Żadnej zewnętrznej analityki, żadnego zewnętrznego magazynu na załączniki.

Wszystko jest jawne

Kod źródłowy, historia wydań i dyskusje są na GitHubie. Możesz przeczytać, jak działa każda część, i zbudować własną kopię.

Jak to jest zbudowane

Monorepo na Bun workspaces: klient, serwer, powłoka desktopowa i wspólne schematy w jednym miejscu.

Klient

Next.js 16 i React 19, eksportowane statycznie. Struktura według Feature-Sliced Design, style w modułach SCSS.

Komputer i telefon

Tauri 2: ta sama aplikacja webowa w natywnej powłoce w Rust dla Windows, macOS, Linux i Android.

Serwer

NestJS 11 na Bun z Prisma na własnym Postgresie. Uwierzytelnianie działa na better-auth.

Media

Własny serwer LiveKit SFU dla WebRTC. Dostęp do pokoju daje token podpisany przez serwer.

Wspólne schematy

Schematy Zod w pakiecie @chatovo/schemas są jedynym źródłem prawdy dla typów klienta i serwera.

Narzędzia

TypeScript wszędzie, Vitest i Playwright do testów, buildy i wydania przez GitHub Actions.

Kto wziął udział

Dziękujemy wszystkim, których kod trafił do projektu.

Jak pomóc

Projekt jest otwarty na zmiany — od literówki w tekście po całą nową sekcję ustawień.

Wyślij zmianę

Zrób fork repozytorium, utwórz gałąź od master i otwórz pull request. Styl kodu i struktura są opisane w repozytorium.

Zgłoś problem

Masz błąd albo pomysł? Otwórz issue. Kroki do odtworzenia i wersja aplikacji bardzo przyspieszają pracę.

Uruchom własną instancję

Repozytorium zawiera konfigurację Caddy i LiveKit, więc możesz postawić własną, pełną instancję.