Repository navigation
Add the Stoa: walkable spaces with live presence, rooms, and calls - #2
Merged
Merged
Conversation
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
…istener safety 🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
…nput guards 🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
…el, engine hardening 🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
Carry the tile on face messages, coalesce room refreshes, expire ghosts, batch and cull for large plazas, update room rows in place, handle second tabs and lost leases, and connect Signaling in the background. 🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
Culling hid walkers from the redraw decision, so with reduced motion or the Minimal theme a person crossing into view was only drawn once they stopped. Positions are now computed for everyone, a slow check keeps running while someone walks off-screen, and only nearby people are drawn. 🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
…d pick hooks 🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
Old /meet links and meetings.html redirect into the Stoa, the /api/rooms routes answer 410, and starting a room from any page opens the Stoa's Start a space dialog. 🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
- Removing a member from the manage dialog rekeys the room you are in, like the in-room Remove button (stage.rekeyRoom). - Call tiles: screen shares first, then your camera, then video; strip and grid scroll within their own band of the map. - Heartbeat access is always kept, so a later live connection opens the current channel and key. - Extra heartbeats run one at a time, at most one every two seconds unless forced. - Heading follows the stage's room; ?start= survives signing in; bfcache restores reload. - Host topic form needs a live lease; a full plaza lists your spaces once; draw frames are built only while tiles float. - stage.fromHost replaces three copies of the host check; dead decorArea removed. 🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
A rekey that arrives inside the two-second gap, or while a heartbeat is in flight, now runs as one trailing beat, so a second removal never leaves the room split across channels. The strip of call tiles only covers the width its tiles need. 🤖 Built with SMT <smt@agora.build>
🤖 Built with SMT <smt@agora.build>
This was referenced Oct 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Agora.build is becoming a walkable world built around resource discovery. This PR brings in the Stoa: the plaza, its first-come rooms, and people's own spaces, with live presence, chat and calls on Agora. It covers Plans A, B, C1 and C2 of the spec and replaces PR #1, which held only Plan A.
docs/superpowers/specs/2026-10-07-stoa-spaces-design.mddocs/superpowers/plans/2026-10-07-spaces-core.md(A),2026-10-07-world-engine.md(B),2026-10-08-stoa-live.md(C1),2026-10-08-stoa-rooms.md(C2)What changes
can()check, entry leases, and hosts./meet/<id>andmeetings.htmlredirect into the Stoa, and/api/roomsreturns 410.Existing meeting rooms are migrated into unlisted, members-only spaces with the same IDs, so old links keep working.
Configuration
.env.exampleaddsSPACE_CHANNEL_SECRET,AGORA_RTM_PERMISSIONSandPLATFORM_ADMINS. The Agora project needs Signaling enabled. Without Agora credentials, the Stoa still loads; live presence and calls show as not connected.Verification
npm test: 288 pass, 0 fail, 1 skipped (the PostgreSQL test, which needs a database).npm run buildsucceeds.Known gaps and follow-ups
Generated with SMT smt@agora.build