The problem

Subassembly is a software conference held in the foothills of Mount Rainier — a remote venue with no reliable internet connection. The organizers wanted a dedicated event app for attendees: a schedule, a venue map, and a way to connect with other attendees. The connectivity constraint ruled out anything that needed a live server connection to function.

The networking piece had a specific design requirement. Attendees shouldn’t have to broadcast their contact details to 200 strangers just to find the handful of people worth connecting with. Phone, email, GitHub, Signal — that information should only surface between two people who have both expressed interest in each other.

The conference also runs on Urbit, a peer-to-peer operating system where each user has a cryptographic identity that belongs to no company or account provider. The app needed to work within that model, not alongside it.

What we built

We extended %live, an existing open-source Urbit application, with the features Subassembly needed — then generalized it so any event organizer could use it going forward.

  • Event and schedule management — hosts create the event, add sessions with speakers and times, and manage the attendee list. Everything editable after the fact.
  • Venue map — uploaded as an image and stored locally on each attendee’s device. Works without internet, supports pinch-to-zoom.
  • Mutual matching — attendees see a list of other attendees with their identity and avatar. Contact details are only visible once both sides have expressed interest. Neither person can see the other’s information until there’s a mutual opt-in.
  • Offline-first — the app is a Progressive Web App (PWA) that stores all event content locally on first load. Once synced, it doesn’t need a connection to use — essential for a venue with no signal.

The matching system runs through Urbit’s existing social layer: when two attendees tag each other with the event tag, contact details become mutually visible. No central server decides who matched with whom — the match state lives on each user’s own node.

Conference event app screenshot
Conference event app screenshot

The results

The app shipped to production in under two months and held up at Subassembly without issue. Schedule, map, and attendee networking all worked as intended in a low-connectivity environment.

After the conference, the app was picked up by other organizers in the community — Urbit meetups and additional Subassembly series events — which was the original goal: build something general enough to run on its own, not a one-off tool for one event.

The harder-to-quantify outcome: the mutual matching system gave attendees a genuinely opt-in way to network. There’s no central database of “who expressed interest in whom” that can be leaked or misused — the state lives in each user’s own environment.

Technical details

  • Stack: React PWA frontend, Urbit (%live) backend
  • Identity: Urbit’s cryptographic identity system — no accounts, no passwords, no central server
  • Matching: Tag-based mutual interest via %pals, Urbit’s peer-to-peer social layer
  • Offline: PWA with local storage for schedule, attendee list, and venue map
  • Deployment: Under 2 months from scope to production