<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Real-Time Collaboration |</title><link>https://changshenghsun.com/tags/real-time-collaboration/</link><atom:link href="https://changshenghsun.com/tags/real-time-collaboration/index.xml" rel="self" type="application/rss+xml"/><description>Real-Time Collaboration</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Sat, 20 Jun 2026 00:00:00 +0000</lastBuildDate><image><url>https://changshenghsun.com/media/icon_hu_d41247041d33f7ba.png</url><title>Real-Time Collaboration</title><link>https://changshenghsun.com/tags/real-time-collaboration/</link></image><item><title>GridStage</title><link>https://changshenghsun.com/projects/gridstage/</link><pubDate>Sat, 20 Jun 2026 00:00:00 +0000</pubDate><guid>https://changshenghsun.com/projects/gridstage/</guid><description>&lt;p&gt;&lt;strong&gt;2026 — in active development&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="why-i-built-this"&gt;Why I built this&lt;/h2&gt;
&lt;p&gt;As a dancer, formations were always the part nobody wanted to handle. How do you
place everyone so the stage actually looks right? Will two people run into each
other halfway through a transition? Those questions bothered me every time we
put a piece together. I went looking for an open-source tool and there was
none — and I was not about to pay a subscription for the commercial ones. So I
built &lt;strong&gt;GridStage&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="what-it-is"&gt;What it is&lt;/h2&gt;
&lt;p&gt;A top-down 2D stage where you place performers, add formations along a timeline
synced to the music, and preview the walk-in transitions in 2D or 3D. It exports
walk-chart PDFs (one page per dancer), videos, and GIFs. Several people can edit
the same piece at once — live cursors, presence, and undo that only reverts your
own changes — over a CRDT, a data structure where concurrent edits merge without
a central referee.
The part I care most about is the vision pipeline: pause a rehearsal video on a
formation, click the four stage corners once, and the app detects the dancers,
maps their foot positions onto the stage floor, and drops them into the editor
as a normal editable formation. All of it runs in the browser.&lt;/p&gt;
&lt;h2 id="where-it-stands"&gt;Where it stands&lt;/h2&gt;
&lt;p&gt;v0.8.6 · 130 commits · ~16k lines of strict-mode TypeScript in a pnpm monorepo ·
24 unit-test files plus a Playwright end-to-end suite. Three ways to run it, none
requiring an account: a Windows/macOS desktop app, an installable PWA that works
offline on a phone, and a Docker self-host stack.&lt;/p&gt;
&lt;p&gt;Measured, not claimed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;60 performers × 4 formations&lt;/strong&gt; in a permanent end-to-end stress test —
dragging stays accurate and playback holds ~57 fps (CI floor 20).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Video → formation capture&lt;/strong&gt; runs entirely client-side (YOLOX-nano through
onnxruntime-web, WebGPU with a wasm fallback): 6 of 7 dancers recovered from a
real six-dancer rehearsal photo, ~1.8 s per frame on CPU alone. Zero server
cost, and no one&amp;rsquo;s rehearsal footage leaves their laptop.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Against &lt;strong&gt;ArrangeUs&lt;/strong&gt;, the category leader, and the other commercial formation
apps I audited before starting, these are the things they do not do at all
(checked July 2026; their feature lists do move):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;GridStage&lt;/th&gt;
&lt;th&gt;ArrangeUs &amp;amp; other commercial apps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Real-time multi-user editing&lt;/td&gt;
&lt;td&gt;CRDT (Yjs) — live cursors, presence, per-user undo&lt;/td&gt;
&lt;td&gt;one editor at a time, files passed around&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Formations captured from a rehearsal video&lt;/td&gt;
&lt;td&gt;on-device detection + homography&lt;/td&gt;
&lt;td&gt;nothing on the market does this&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rehearsal-vs-plan review&lt;/td&gt;
&lt;td&gt;per-dancer drift, C-position centering, left–right asymmetry&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transition collision warnings&lt;/td&gt;
&lt;td&gt;Hungarian matching + sweep-line crossing detection&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3D preview&lt;/td&gt;
&lt;td&gt;camera presets + follow-a-performer&lt;/td&gt;
&lt;td&gt;limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Video / GIF export with music&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price and licence&lt;/td&gt;
&lt;td&gt;free, MIT, self-hostable&lt;/td&gt;
&lt;td&gt;subscription, closed source&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The place I am clearly behind is distribution, not capability: ArrangeUs has
457k+ users and years of tutorials, GridStage has an install page.&lt;/p&gt;
&lt;h2 id="whats-next"&gt;What&amp;rsquo;s next&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Building a user community.&lt;/strong&gt; The capability gap is closed; the distribution
one is not. Demo videos and an in-app guide are already in progress, and the
next step is getting the editor in front of real dance teams and cheer squads
and running on their feedback — the work that decides whether GridStage stays
a portfolio piece or becomes a tool people actually choreograph with.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accounts and cloud sync.&lt;/strong&gt; Today a piece lives on one machine and travels as
a &lt;code&gt;.gridstage&lt;/code&gt; file. This is the largest remaining gap against commercial
tools, and the one architectural decision I still owe the project — self-host
or a hosted backend.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full rehearsal-vs-plan deviation report.&lt;/strong&gt; The first cut compares one paused
frame against the plan. Scanning a whole rehearsal into a per-formation error
timeline is the version that closes the plan → rehearse → correct loop, and
it is the hardest part for anyone to copy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stage lighting and cue sheets.&lt;/strong&gt; Colored lights on the 2D stage and a 3D
wash, cues on the timeline, exported as a printable cue sheet — the other half
of what a stage manager actually needs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugins and a community template library&lt;/strong&gt;, so formation libraries can grow
without me writing every one of them.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>