Inspiration

Poker is usually presented as a flat screen or a terminal transcript. I wanted to explore it as a spatial experience: the player's cards, opponents, community cards, and pot each occupy a place around a virtual table. The goal is to make the state easy to scan by looking around the table.

What it does

AR Hold'em is a six-seat Texas Hold'em Lens for the SPECS desktop preview. One player acts from the near seat while five computer opponents take turns. The table shows cards, chip stacks, the pot, dealer and blind markers, current action, and hand status. Large controls support dealing, folding, checking or calling, raising, and going all-in. All chips are virtual.

Opponent cards stay private during betting. At showdown, eligible hands are revealed with English hand categories and a rank/kicker explanation. The rules engine and result display support main pots, side pots, split pots, and uncontested hands.

The 58-second demo shows one complete hand in Lens Studio's native SPECS desktop preview, using LEAF's DefaultLeafInteractor and UIKit buttons. YOU holds 6h Ah; the board is 3h 6c Ac 3s 8s; ORION holds 2s 2h. YOU wins with two pair, aces and sixes, and finishes with 536 chips (+36 net). This is a desktop simulation, not a physical SPECS hardware or hand-tracking test.

How it was built

I used the Devpost Learn skill pack's plan-lens workflow to plan and approve the spatial design, then built and inspected the Lens with the CLAD plugin and Lens Studio MCP. LEAF scenarios exercised preview interactions and game flows. A local Python bridge connects the Lens to the poker engine, validates actions, manages betting rounds, settles pots, and gives each opponent only its private cards and public table information.

The default opponent is local Lucas v16, a rule-based program using hand-strength/equity evaluation and strategy logic. Lucas is not an LLM or trained model. Optional Codex CLI and OpenAI-compatible API modes require separate configuration and are not used in the demo.

The SPECS Lens, spatial interface, preview interaction, and local Lens-to-engine bridge are the AR-specific work built during this event. The underlying Hold'em rules engine and earlier terminal poker components predate the event and were reused. Lucas v16 is third-party MIT-licensed code; the Lens uses Snap's SPECS Base Template and associated packages. The repository's reuse disclosure documents provenance, adaptations, and license notices.

Challenges

The main challenge was connecting a turn-based poker engine to a spatial table while keeping private cards private and making the pot, legal actions, and player balances understandable. Early state changes felt abrupt: cards and chips jumped to the next result. I reshaped each turn into visible steps and kept every update tied to the underlying game state.

Accomplishments

The Lens plays a complete six-seat hand in the SPECS desktop preview, from the deal through betting, board runout, showdown, and payout. It conceals opponent cards during betting, explains the winning hand at showdown, and displays the final net and balance. The current demo gives opponent decisions visible thinking time and animates chip transfers in sequence.

What I learned

Correctness alone is not enough for a spatial game: timing affects whether people can understand what happened. Separating opponent thinking, card reveal, action, chip movement, and settlement made the hand easier to follow. Opponent thinking takes about 2.2 seconds in the demo; the final net and balance remain visible long enough to read.

What's next

Test on physical SPECS hardware to evaluate comfort, placement, and real hand interaction; refine readability from different viewpoints; and explore networked play. Hardware testing and multiplayer are future work.

Run locally

The public repository contains the Lens Studio project, devpost planning folder, dependency pins, attribution, and setup guide. Run the local Python bridge and Lens Studio preview on the same computer. See run instructions.

Built With

Share this project:

Updates

Submission history