Rendering 26,000 Satellites at 60fps in a Browser
Rendering tens of thousands of dynamic objects in a browser without frame drops requires abandoning standard reactivity and per-object coordinate transforms. The ICRF-to-modelMatrix trick and shallowRef store pattern apply to any WebGL dashboard dealing with high-frequency, large-volume positional updates.
A satellite network simulation platform built with Vue 3, Cesium, and NestJS renders multi-layer constellations of up to 26,000 satellites in a browser at 60fps. The frontend pairs a fine-grained Entity mode for small counts with a batch Primitive mode that offloads coordinate transforms to the GPU, cutting CPU usage by over 80% at scale. A class-based store using shallowRef replaces deep Pinia reactivity to handle 50+ state fields without dropping frames during high-frequency timeline updates.
On the backend, simulation timelines spanning gigabytes are split across dynamically created MySQL tables keyed by case and scene ID, keeping queries in the millisecond range. A WebSocket gateway with a room-and-provider pattern handles real-time data push and provider failover. Shared TypeScript types published as an npm package prevent interface drift between frontend and backend, with a planned migration to a pnpm monorepo to eliminate the manual publish step.
A three-layer style inheritance system drives visual diffs automatically: when a user compares optimization versions, satellites and links change color to show additions, removals, and congestion shifts without any manual annotation.
Most Cesium applications treat modelMatrix as a per-entity concern; applying it at the Collection level to defer coordinate transforms to the GPU is an underused pattern that changes the performance ceiling for large-scale space visualization.
The decision to keep the npm type package as a transitional step rather than forcing an immediate monorepo refactor is a practical reminder that architecture should serve delivery cadence, not purity.
Hardcoding visual styles in rendering functions is a trap that only becomes visible when the number of entity types grows; a config-driven inheritance system pays for itself after the second new satellite type.