Pivot
Open collaboration platform — Notion-style docs, real-time messaging, and LiveKit audio/video in one cross-platform product (web, iOS, Android, desktop).
Visit live siteTech stack
The challenge
Delivering Google-Docs-grade collaborative editing, sub-second real-time presence, and reliable A/V — across web, iOS, Android, and desktop — on a service-oriented backend that had to stay consistent and observable in production.
Architecture & approach
Service-oriented backend (~20 microservices) on AWS EKS with protobuf-first Connect-RPC APIs, a NATS JetStream event bus, and Temporal for durable workflows. Polyglot persistence (Aurora Postgres, Cassandra, Valkey, Turbopuffer, S3). Real-time layer is a custom Pilot (WebSocket) + Dealer (pub/sub fan-out) stack; collaborative block editing uses Yjs CRDT merged server-side. A single React Native + Expo codebase (wrapped by Tauri on desktop) drives all four platforms.
Key technical decisions
- 01Service-oriented from day one — hard domain boundaries with one database per service, rather than splitting a monolith later.
- 02Protobuf as the single contract for both gRPC (Connect-RPC) and NATS events, generating Go and TypeScript clients from one source.
- 03Split real-time into Pilot (WebSocket connection management) and Dealer (pub/sub fan-out) so each scales independently.
- 04Yjs CRDT for collaborative editing — merge conflicts without operational-transform complexity, with Friend/RPC as source of truth over ephemeral Pilot data.
- 05Polyglot persistence: Postgres for relational data, Cassandra for high-write hot paths (messages, block updates), Valkey for caching, Turbopuffer for vector search.
- 06One React Native codebase for web, iOS, Android, and Tauri desktop to avoid maintaining four separate clients.
Results
- Contributed across the stack — Go/TypeScript microservices, real-time systems, and the React Native frontend
- Built real-time collaboration features on the Pilot/Dealer WebSocket stack: presence, typing indicators, live cursors, and Yjs-based block editing
- Implemented Connect-RPC/gRPC services with protobuf contracts shared across Go and TypeScript, backed by NATS event streams
- Shipped cross-platform UI from one React Native codebase to web, iOS, Android, and Tauri desktop, including the Lexical + Yjs collaborative editor
- Integrated LiveKit audio/video (rooms, recording, transcription) and AI features (RAG/vector search, summaries)
- Worked within the EKS + Argo CD CI/CD pipeline with affected-service deploys, OpenTelemetry tracing, and integration tests
What I learned
At this scale, reliability is a feature: strict service boundaries, protobuf contracts, and treating real-time state as ephemeral (with RPC as source of truth) are what keep multiplayer fast and correct.