— Infrastructure

Real-time across three surfaces with one database.

Firestore onSnapshot is the message bus — no WebSocket server, no Redis, no Pusher. Three-person team operates a real-time product because the infra refuses to require an infra engineer.

3 min readUpdated 2026-06-02By Aryan Singh Pokharia, Founding Member & Lead Developer
Abstract glowing network of connections, representing real-time syncAptixLabs · 2026-05-06

Real-time sync uses Firestore's native onSnapshot listeners on every client surface — the React Native app, the React coach portal, and any admin tools the studio builds. The architectural choice is to use Firestore as the message bus rather than build one.

What that looks like in practice

When a member finishes a set on the watch and it writes to Firestore via the phone, the same record streams to the coach's open dashboard within roughly 100–300 milliseconds, depending on network. There's no separate WebSocket server, no Redis pub-sub, no Pusher channel — Firestore is the message bus.

Security rules carry the scope

Security rules ensure each listener only receives data scoped to that user's tenant. A coach's dashboard listener fires only on documents under their roster. A member's app listener fires only on their own programmes and workouts. The rule layer is the same code path that protects writes.

Where ordering matters

For features that need stronger ordering guarantees — programme edits with conflict resolution, sequential workout completion — the studio uses Firestore transactions. A transaction reads the current version, validates it hasn't changed, and writes the new one. If a transaction loses, the client retries or surfaces a conflict toast.

Why this model fits the team

What "no message bus" actually saves you

A traditional real-time stack is a list of things that can break at 3am: a WebSocket server to keep alive, a Redis instance to scale, reconnection logic, missed-message replay, presence tracking. Leaning on Firestore listeners deletes that entire list. There is no server to keep alive because there is no server — the database is the channel. For a small team, the features you do not have to operate are worth more than the ones you do.

The limits, stated plainly

This model is not infinite. A document has a write-rate ceiling, so a single hyper-contended counter (a live "people watching now" number for a million viewers) is a poor fit and needs sharding or a different tool. Most products never come close to that ceiling — but knowing where it is means we design around it before it bites, rather than discovering it in an incident.

Have a project like this?

The studio is taking on a small number of partners. Tell us what you're building — we reply within a working day.

Start a conversation