Skip to content
← All work
2022–2026Senior Full-Stack Engineer

Pivot

Open collaboration platform where communities, teams, courses, and projects share docs, messaging, and audio/video in one workspace across web, iOS, Android, and desktop.

Visit live site

What it covers

CollaborationReal-TimeSaaSAI AgentsMCPVector SearchVideo CallsMultiplayer CanvasOffline SupportEdTechWebiOSAndroidDesktop

Tech stack

React NativeGoRustConnect-RPC / gRPCNATS JetStreamTemporalLiveKitYjs / LexicalPostgreSQLAWS EKS

The challenge

Teams were splitting documents, chat, and calls across separate tools, so context and real-time collaboration broke between apps and devices. The product had to deliver docs-grade editing, sub-second presence, and reliable audio/video on four clients without the backend drifting out of sync.

Collaboration

I worked as a senior full-stack engineer at Meridian University, taking product ideas through to shipped experiences on web, mobile, desktop, and backend. I led cross-platform feature delivery, and I was the main developer of the internal tools university staff use for course admin, enrollment, grading, moderation, and reporting. Students use part of that surface as well.

From discovery to production

  • A block system for documents, databases, canvases, goals, events, and 50+ block types
  • Real-time messaging, collaborative rich text, presence, typing indicators, live cursors, and multiplayer canvases
  • LiveKit rooms with recording and transcription, plus AI summaries and retrieval over workspace content
  • One React Native codebase shipping to web, iOS, Android, and Tauri desktop, with a shared design system
  • Internal course tools for admin, enrollment, grading, moderation, and staff reporting
  • A live production migration of block ordering from float positions to fractional-index keys: schema change, dual-write, Temporal backfill, frontend cutover, then removal of the backfill

How it was solved

About 20 Go and TypeScript services run on AWS EKS. Protobuf contracts feed both Connect-RPC and NATS JetStream, and Temporal runs durable workflows. Postgres holds relational data, Cassandra the high-write paths, Valkey the cache, and Turbopuffer vector search. Real time is split into Pilot, which holds WebSocket connections, and Dealer, which fans events out. Collaborative blocks merge with Yjs on the server, while Friend/RPC stays the source of truth over ephemeral socket state. One React Native and Expo codebase, wrapped by Tauri on desktop, ships to all four clients.

Pivot high-level architectureClients — React NativeWeb · iOS · Android · Tauri desktopEdge / API Layerfriend (Connect-RPC) · visa (auth) · pilot (WebSocket) · restAI / Searchasimov · questDomain Services (Go)facebox · messenger · blockheadblobby · buzzer · stagehand · uconfReal-timedealer (pub/sub fan-out)fusion (Yjs merge)NATSJetStream+ TemporalAurora PostgresEnt + AtlasCassandrahigh-write hot pathsValkey · Turbopuffercache · vector searchAWS EKSHelm · Argo CD · Karpenter · Cilium mTLS · OTEL → Axiom

Key technical decisions

  • 01Service boundaries and one database per service from the start, so domains could scale without a later split.
  • 02One protobuf contract for Connect-RPC and NATS events, generating Go and TypeScript clients from the same source.
  • 03Pilot for connections and Dealer for fan-out, so the realtime path scales in two independent pieces.
  • 04Yjs for collaborative editing, with RPC as the source of truth over ephemeral Pilot state.
  • 05Postgres for relational data, Cassandra for messages and block updates, Valkey for cache, Turbopuffer for vectors.
  • 06One React Native codebase for web, iOS, Android, and desktop instead of four clients.

Screenshots

Pivot screenshot 1

Impact

  • Docs, messaging, and audio/video now live in one product on web, iOS, Android, and desktop.
  • Owned the live block-ordering migration through production and removed the backfill once every row was converted.
  • University staff run course admin, enrollment, grading, moderation, and reporting in the internal tools I led.
  • Traced a production-only backfill stall from telemetry — staging never reproduced it, because every tick returned a full batch and child-block scopes were never queried — and fixed it with a fair-share allocator across scope types.

What I learned

At this scale, reliability is a feature. Strict service boundaries, protobuf contracts, and treating realtime state as ephemeral — with RPC as the source of truth — are what keep multiplayer fast and correct.

Want an outcome like this?