# Vojo — Overview ## What is Vojo A Matrix-based chat client targeting the Russian market. Fork of [Cinny](https://cinny.in) (MIT license), rebranded as Vojo. This repo is the **client only** — no server sources live here. Value proposition: "Telegram works without VPN" — the server runs a mautrix-telegram bridge, users just open vojo.chat and chat. ## Infrastructure - **Domain**: vojo.chat - **Server**: Hostinger VPS `187.127.77.124` (hostname `srv1638609`), Ubuntu 24.04, user `vojo-superuser` (in groups `sudo`, `docker`, `docker-mautrix` GID 1337) - **Homeserver**: Synapse (Matrix) + PostgreSQL 16 + Caddy 2 (reverse proxy, Let's Encrypt) - **Bridges** (all `dock.mau.dev/mautrix/*` images, each with its own Postgres role + DB): - `telegram` — bridgev2 (Go) v26.04 - `discord` — legacy (Go) v0.7.6+dev (image tag v0.7.5; bridgev2 rewrite ETA late 2026) - `whatsapp` — bridgev2 (Go) v26.04+dev (image v0.12.4) - Passive `doublepuppet` appservice (no `url`, non-exclusive `@.*:vojo.chat`) — one AS-token shared by all three bridges for double puppeting per megabridge spec. Legacy `synapse-shared-secret-auth` is gone; the `as_token:` prefix in each bridge's `secrets:` / `login_shared_secret_map:` is mandatory. - **RTC**: LiveKit + `livekit-jwt-service` (Element Call backend; federation gated to `vojo.chat` via `LIVEKIT_FULL_ACCESS_HOMESERVERS` — see `desired_features.md` §5) - **Push**: Sygnal (FCM + VAPID) - **TURN**: coturn (host network mode) - **Observability**: Prometheus + Grafana - **Synapse modules**: in-tree `username_blocklist.py` bind-mounted into the Synapse image (`synapse/modules/`) - **Client**: this repo — built and deployed as static files via Caddy - **Bot widgets**: three Preact apps in `apps/widget-{telegram,discord,whatsapp}/`, built independently and deployed to `~/vojo/widgets/{telegram,discord,whatsapp}/` for BotShell to embed Server filesystem under `~/vojo/`: `caddy/`, `synapse/`, `postgres/`, `coturn/`, `livekit/`, `sygnal/`, `prometheus/`, `grafana/`, `bridges/{telegram,discord,whatsapp}/`, `widgets/{telegram,discord,whatsapp}/`, `cinny/`, `docker-compose.yml`. Caddy serves the client at `https://vojo.chat` with the host's `cinny/` directory bind-mounted into the container as `/var/www/cinny`. ## Branding "Vojo" everywhere in UI, page titles, meta tags. ## Default homeserver All configs must point to `vojo.chat` as the default and only homeserver. Hide homeserver selection from the user — end users should not need to know this is Matrix. ## Build & Deploy (web) ```bash npm ci npm run build rsync -avz --delete dist/ vojo-superuser@187.127.77.124:~/vojo/cinny/ ``` VSCode task `Deploy to vojo.chat` (Ctrl+Shift+D) automates this. The companion task `Deploy widgets` builds and rsyncs the three Preact widget apps under `apps/widget-{telegram,discord,whatsapp}/` to `~/vojo/widgets//` in parallel. Android build/deploy is covered in [android.md](android.md). ## Developer profile - Git identity: `v.lagerev`, email `opnaigpt@gmail.com` (referred to as Julian in legacy notes) - Background: C++ backend engineer, limited frontend experience - Communicates in Russian - Uses Claude Code agents heavily for frontend work - Reviews both English (grammar) and Russian (naturalness) translation quality - Notices lint regressions, exhaustive-deps issues, use-before-define errors - Prefers concise communication with file paths and line numbers ## External references - [Matrix Client-Server API](https://spec.matrix.org/latest/client-server-api/) - [Synapse Admin API](https://element-hq.github.io/synapse/latest/usage/administration/admin_api/)