Bagtyyar

TM-WhatsApp

Active build

An early-stage WhatsApp-class messenger for Turkmenistan — Signal Protocol end-to-end encryption, designed for 2 Mbps networks, currently a scaffolded monorepo with the architecture decided and no end-user features shipped.

  • TypeScript
  • NestJS
  • Expo
  • React Native
  • Prisma
  • PostgreSQL 16
  • Redis 7
  • MinIO
  • Socket.IO
  • WebRTC
  • Signal Protocol
  • Zod
  • Turborepo
  • Docker
  • Railway

Outcome

Scaffolded monorepo with 12 accepted ADRs and E2EE (Signal Protocol) research complete — OTP, messaging, and calls are not implemented yet.

Context

The most-used chat app in Turkmenistan today is IMO — laggy and ad-stuffed — while WhatsApp itself is unreliable or blocked. TM-WhatsApp is a WhatsApp-class messenger designed from the ground up for the local community: fast, clean, and genuinely end-to-end encrypted, built to tolerate ~2 Mbps networks and restrictive NATs. It is a sister project to Carberk and deliberately reuses its stack, OTP gateway, and deployment patterns.

Engineering Decisions (12 accepted ADRs)

  • E2EE is real: Signal Protocol for messages (ADR-0003), client-side-encrypted media with per-attachment AES-256 keys (ADR-0008), and user-held backup keys the operator cannot recover (ADR-0007). The server stores ciphertext and prekey bundles only — never plaintext, identity keys, or the contact graph.
  • Device-aware from day one (ADR-0006): account → N devices → prekey bundles; linked devices join via QR scan and signed approval, capped at roughly five per account.
  • Three transports, no overlap (ADR-0004): Socket.IO for chat and signaling, HTTPS/MinIO for media and backups, WebRTC for calls with a degradation ladder down to audio-only.
  • Auth (ADR-0009): phone-number identity (+993) with OTP delivered through the same SMS-gateway fleet pattern as Carberk; per-device refresh tokens with rotation and sliding expiry.
  • Phased hosting (ADR-0001): Railway until App Store and Play approval, then lift-and-shift to infrastructure inside Turkmenistan; every backend component is a plain Docker container.
  • Monorepo: pnpm + Turborepo with strict TypeScript — NestJS API, Expo mobile (iOS and Android from one codebase), and shared db, contracts, and crypto packages.

Current State

Scaffolded; no end-user feature is complete. What exists: the founding ADR set and five-phase roadmap, health endpoints with shared Zod contracts and tests, initial device-aware Prisma models, a local Compose topology (Postgres 16, Redis 7, MinIO) proven by a CI smoke job, mobile UI design tokens and a component kit, and Turkmen/Russian/English localization foundations. OTP, messaging, contact discovery, calls, and release builds are not implemented yet.

Public repository

Ready to build something that lasts?

Let’s talk about your project. I’ll bring the discipline, you bring the vision.

Work With Me