Inspiration

Social deduction games like Among Us live on a screen, even when everyone is in the same room. We wanted the suspense to happen where you're actually standing. In Blindspot the crew works through your real room, and the impostor is the friend sitting across it. A kill happens when two people share the same square of floor, and a body is a phone left lying where it fell.

What it does

Blindspot turns any room into a playable map. One player scans the room, and four players join with a four-letter code. One of them is secretly the impostor.

  • Crew walk to real spots in the room and complete motion-based tasks with their phones: shake, tilt balance, hold steady, rotate a dial, and more.
  • The impostor eliminates crew who share their tile, then triggers lights-out sabotage, which blocks tasks until a crew member holds the fix station.
  • A dead player leaves their phone on the spot as the body and becomes a ghost who can wander but can't do tasks.
  • Reports and emergencies open a 30-second meeting where everyone votes to eject someone or skip.
  • The crew wins by finishing the tasks or ejecting the impostor. The impostor wins by reaching parity.

How we built it

Phones. The app is native Swift: SwiftUI for the interface, ARKit and RealityKit for spatial tracking and the camera view, and Core Motion for the tasks.

Server. An authoritative Node.js WebSocket server holds all game state. Phones send intents, never raw positions. Each phone converts its AR position into a 1 m grid tile and reports it a couple of times a second, and the server accepts a tile change only after two matching reports to filter out jitter. Large uploads go over plain HTTP.

The scan. The host does the whole scan in one ARKit session:

  1. Perimeter walk. The host walks the room edge while the app logs camera poses at about 10 Hz. The server turns the path into a floor outline, a grid of 1 m tiles, and a set of edge tiles.
  2. Sweep. The host stands on a chosen tile and turns slowly through 360°. The app captures about two full-resolution JPEGs per second, each tied to the exact pose and camera intrinsics of that frame.
  3. Detection. Players stick yellow sticky notes on the walls beforehand. The server runs YOLOE on every frame and casts a ray from each detected note to the wall, which turns each note into an edge tile.
  4. Selection. Gemini ranks the candidate notes by what's around them, without ever seeing coordinates. Plain rules then pick three task stations, one fix station, and an emergency tile, keeping them at least 2 m apart.
  5. Review. The host reviews and edits the result on a 2D map before the game starts.

Sharing the map. The host's ARKit world map is uploaded, and the other phones download it and relocalize into the same coordinate system. If that fails, the player taps their tile on a 2D map instead.

Challenges we ran into

  • Reading a room. Glass walls and mirrors give ARKit and the detector little to hold onto, and tracking drifts over a long walk.
  • Tiny notes. A sticky note several metres away is only a few dozen pixels wide, so image size, orientation, and lighting all matter.
  • Matching image to math. Each JPEG has to describe the same pixels as its camera intrinsics. A rotated or mismatched image silently puts notes on the wrong wall, so we built automated checks for it.
  • Many phones at once. We had to keep four devices synchronized, keep AR tracking alive across screens, and fall back to manual tiles cleanly.

Accomplishments that we're proud of

  • Real iPhones in shared multiplayer sessions, with interactive AR tasks placed in physical space.
  • A complete pipeline from a walk and a spin to playable stations on a map.
  • Sabotage effects, elimination feedback, and a scan dashboard for inspecting detection results.
  • An automated check suite for the scan logic, so geometry bugs show up before a room test.

What we learned

  • Spatial tracking, computer vision, motion sensors, and real-time networking all have to agree about where "here" is.
  • Testing on physical phones changed everything: lighting, wall materials, and how fast you turn all move the results.
  • A deterministic server rule beats an AI guess for anything the game depends on. Gemini only ranks notes, and geometry decides every tile.

What's next for Blindspot

  • Better tracking consistency and sticky-note detection at a distance.
  • More room layouts, including non-rectangular rooms and larger spaces with a second sweep.
  • A wider variety of tasks, and adaptive music that reacts to sabotage and meetings.
  • Accuracy measurements, so we can say how well AR tiles hold up for proximity kills.

Built with

Swift, SwiftUI, ARKit, RealityKit, Core Motion, Node.js, WebSockets, YOLOE, Gemini

Built With

Share this project:

Updates

Submission history