October 2026 plan for doozer.games (games played together inside a real place, TV as the screen, phones as controllers) and doozer.shop (buying from local places, starting with the gift cards and ordering they already offer). How each plugs into The One, check-ins, the trail and the Wuz.
Both domains are registered (Oct 2026) and parked at the registrar; neither points at Doozer yet. Neither is built. This is the plan, written so every piece lands on what already exists.
"Games that users can play in a place together... TVs as a screen, mobile devices as the
user's individual controller and sometimes a local PC on the network as a server. The
eventual goal is a FireTV app called Doozer or Doozer Games that can be used inside a
location like a bar, cafe, restaurant... People already in a place, playing games together
is a great addition to the platform." (Jon, Oct 20 2026)
The games themselves are being built in other sessions and tools. Doozer's job is the place layer around them, so a game night becomes part of the observed world.
The loop. A TV in a bar shows a game and a join code / QR. A phone scans it, lands on doozer.games/<code>, joins with a nickname (no account needed to play). Joining offers, as an explicit choice, "Check in at <place>": that is a real check-in on the venue's One page, and the session's result (game, team, score, who you played with if they also chose to be named) becomes a moment on the player's trail. Later, the Wuz: "Trivia at Luc's, 3rd place, Friday."
What Doozer provides the games (the integration surface):
game_sessions keyed to a venue business_id: create (from the TV app), join by code,finish with results. A session is live only while the TV says it is.
check_ins, note = the game), so "here now" on The One is real.(venue owners schedule them once claimed), "Join from your phone" with the code on the TV.
lb_users, cross-root. Nicknames by default.Rules. The QR or code on the TV is the way in: no covert Bluetooth or WiFi presence tracking, no reading who is in a room. Nothing about a player is shown to anyone else unless that player chose it. No real-money wagering. A venue sees counts, never people it was not shown. A game never needs an account; keeping the moment does.
Phases.
Doozer Town; Doozer+ venues get scheduling, branding on the TV, and history.
"Turning a TV into a shared zen garden style sand box, allowing additional users to join in on
the same network, creating a split screen up to, let's say 4 per TV at a time. Users can scan a
QR code to join the game, allowing the phone screen to become the touchpad while the actions
happen in the photorealistic sandbox on the screen... drag the object through the sand, leaving
a path like a marble being dragged... But also the users should be able to hold and place the
object where they want it, without disturbing the sand."
It is the model for what doozer.games is: local multiplayer, a phone each, one shared screen worth watching from across the room.
The TV (the garden). WebGL. The sand is a heightfield (a 1024x1024 height texture per garden) lit with normals and soft shadow, so a groove catches light like real raked sand.
its path (center lowered, the displaced sand raised into two shoulders, a little noise), so a marble leaves a wake and a rake leaves parallel lines. Sand relaxes very slowly, the way real sand barely does.
touching the sand, and sets down with a small settling ring where it lands.
bonsai. Physically based materials, so wet stone, moss and bronze read as real.
hands. A calm spectator view: slow camera drift, the gardens filling in.
The phone (the touchpad). Scan the QR on the TV, doozer.games/<code>, pick a color and a nickname (no account to play). One finger moves your hand; touch-and-hold lifts (place without disturbing); press-and-drag pushes through the sand; two fingers rotate; the tray spawns an object. A light haptic tick when an object sets down (where the phone allows it).
The network. The TV makes a room and shows its code and QR. Phones join through Doozer, then talk to the TV directly over WebRTC data channels on the local network (lowest lag). Venue Wi-Fi often isolates devices from each other, so a relay is required, not optional: a Cloudflare Worker with a Durable Object per room carries the same messages when peer to peer fails. Messages are small (hand position, press, lift, place, spawn), 30 times a second.
The place layer (Doozer's part). Joining offers "Check in at <venue>" as a choice. A finished garden can be kept as a moment on each player's trail and, if every player agrees, shown on the venue's One page ("Made here"). Nothing about a player is shown without their choice. No accounts to play; one to keep.
Order of work. Z0: one garden in a browser, mouse or touch, to get the sand right (the whole game rests on how the sand feels). Z1: one phone driving the TV through the relay. Z2: four players, split screen, spectator view. Z3: venues (check-in on join, the garden as a moment, "Made here" on The One); then the FireTV app (G2 above).
Live. doozer.games routes to includes/doozer-games.php (it had been falling through to the business configuration wizard). The landing: "Play together, right here.", a TV in the page showing the garden raking itself (/zen?tv=1&embed=1), how a game starts, Zen Garden, house rules, venues, coming next. Family skeleton, accent blue #2f5ae8 / #2142c2.
Z0 is built: includes/doozer-zen.php at doozer.games/zen. One self-contained page, three.js r128 (cdnjs), no build step.
computed from it (plus per-pixel grain), low warm sun, soft shadows, ACES tone mapping. All hex colors go through C() (sRGB to linear) or everything washes out.
groove(): center lowered to -D, shoulders raised to +R, both bounds (min/max) so passes neverpile up. With a direction, each press is a thin slab ACROSS the stroke: round presses left raised rings ("rows of dots") where lines began. Line ends taper; lines run past the frame.
non-indexed and shades faceted). Quick drag = push through the sand, leaving a wake; press and hold 420 ms = lift (no mark), release = set down with a settling ring. Sand under a stone is never raked (blocked()), so lifting one reveals the untouched patch.
?gardens=2|4 split screen (one scene and camera per garden, scissored viewports, the garden youtouched last gets new objects). ?tv=1: a Bot per garden rakes rings around stones and lines between them, sometimes lifts a stone and moves it, smooths and starts again; toolbar hidden.
gl.texSubImage2D via renderer.state).dz_zen_v1); Keep downloads a PNG.push and lift. The browser pane's own screenshots are too small to judge sand.
Z1 and Z2 are live (v2.2.656, Oct 25 2026): phones as touchpads, four players at once. How it works, the protocol and the safety rules: Doozer Games rooms and relay.
types a code; the landing has a code box. One player gets the whole TV, two split it, three or four get a quarter each, an open garden keeps raking. Verified on live by headless Chrome driving a TV tab and real phone tabs: rake, push a marble, lift, carry and set down a stone, four players, a fifth refused, people leaving.
Cloudflare Worker with a Durable Object per room is written and tested against fake sockets and a local stand-in for the edge (cloudflare/games-relay/); it waits on Jon's Cloudflare access, then it is one platform setting to switch on and off.
self-raking gardens. Both are small on top of Hand.
The platform and the second game (v2.2.681, Oct 26 2026). doozer.games/tv is now a TV home: a splash, then a game menu (remote or any phone chooses), every game in the same room. The second game is Town Trivia: ten questions about real places near a town, only from what Doozer knows, every answer a sourced fact, with a link to the place's page. Why trivia: a trivia night is what people already do together in a bar, and only Doozer can ask about this town. How the questions stay true and fair, and how to add the next game: Town Trivia. The Fire TV app 0.3.0 opens on the menu; Back goes from a game to the menu, then out.
The third game: winner stays (v2.2.691, Oct 26 2026). Jon asked for a 1-on-1 game where the winner stays, the next challenger steps up, and with nobody waiting the loser may ask for a rematch, and said the model fits many games. So the rule is its own piece (DZWinnerStays) and Four in a Row is the first game on it: the next 1-on-1 game is four functions and a board, with no relay change. That is the venue game: the bar's TV has a champion, people wander up, scan, and wait their turn. How it works and how to build the next one: Winner stays.
The fourth game: Reversi (v2.2.692, Oct 27 2026). Jon: "build the next winner-stays game. Pick one that suits a bar or living-room TV." Reversi, because a room can follow it without knowing the rules: two colors and a big count per player say who is ahead from across the bar, one move can flip a whole row (the lead swings in front of everyone), and the phone lights up the squares you can play. Turn-based, so the relay's second of delay never matters. Passed over: hidden-fleet games (phones are perfect private screens, but the room has nothing to watch until the end), checkers and chess (too long for a line that should move), and anything real-time (the interim relay is too slow). The rule grew one idea for it: the rules may keep the turn (a pass), which is also what Dots and Boxes or Mancala need for an extra turn.
Z3: venues (planned, not built). Everything here is a choice the person makes, and the venue sees counts, never people.
businesses.email/admin_email) gets"Put Doozer Games on your TV" in Manage: a revocable venue link, doozer.games/tv?v=<token>, that ties its rooms to game_rooms.business_id. The TV card then says "Zen Garden at <Venue>".
<Venue>". Ticking it uses the existing check-in (checkin-button.php, check_ins, note = the game); it asks for the magic link only then. Playing never needs it. Never pre-checked.
TV renders the player's viewport, uploads one image to Spaces); it lands on the player's trail as a moment if signed in, or as a private link to save if not.
shared garden, only if every player in it says so). "Playing now: Zen Garden" shows while a venue room is live, with "Join from the code on the TV"; the code itself is never published.
The FireTV app (G2): v0.1 built and running on Jon's Fire TV (v2.2.661, Oct 25 2026). apps/doozer-games-tv/ (com.berrysmart.doozergames): a thin native shell, plain Java, no libraries, around doozer.games/tv; build, install and on-device checks in its README.
Ember while a second phone joined beside him: the room, the relay and the app work end to end.
full garden ran at 4 fps. The app's lite tier (pixel ratio 1, 1024 shadows, half mesh, no antialias) runs 25 fps with four gardens; one garden costs about what four do (fill bound). Measure on the device, never in a desktop browser: the WebView's DevTools socket forwards over adb, and adb exec-out screencap is the ground truth picture.
(~/.berrysmart/keys/doozer-games-tv/; back it up, every update needs it). Soft blob shadows replace shadow maps on the stick, capped at an even 30 fps. The remote plays alone (Amazon: D-pad play is required; media keys and Menu may not exist or reach the app): arrows move a "TV remote" player's hand, OK rakes or pushes, hold OK lifts a stone or places one; media keys are extras. The submission kit, assets and Amazon's test criteria: apps/doozer-games-tv/APPSTORE.md. The room survives an app restart.
so play on the same Wi-Fi skips the internet, with the relay as the fallback. A LAN server in the app cannot serve the phones: their page is HTTPS and may not open ws:// on the LAN.
resolution, lighter sand mesh; the stick is GPU-bound, not JavaScript-bound); every remote key including Menu; Home, resume and Back. Test remote holds with a hid virtual keyboard, never input keyevent --longpress (not a real hold). Details: apps/doozer-games-tv/README.md.
the content rating questionnaire.
Decisions for Jon: Cloudflare access for the Worker (a token with Workers Scripts: Edit, or deploy it with wrangler; steps in cloudflare/games-relay/README.md); an Amazon developer account for the Appstore; sound (sand under a rake is half the feeling); a shared garden mode; the next games.
"Doozer.shop is an obvious addition so let's plan for it." (Jon, Oct 20 2026)
Start with what local businesses already sell online, and never sell for a business that has not chosen it.
ordering link The One has learned (Square, Toast, Gift Up, Clover, DoorDash, Toast ordering, and the rest), by town and category. Verification is theOneVerifyLinks(): a link shows only once Doozer has opened the page and found the business there; "gift cards unavailable" pages and dead stores never show. Purchases happen on the business's own provider.
(enrichmentTrustedItems) or the owner lists, checkout through Stripe Connect so money goes to the business; Doozer's fee shown up front. Doozer+ feature.
several local places at once, with pickup per place.
S0 is built (Oct 25 2026): includes/doozer-shop.php, routed for doozer.shop and waiting on its DNS (no nameservers yet) and a Plesk alias. Preview with the dev token at doozer.games/__shop-preview. "Buy local, on their terms.": the 84 places whose own websites link a gift card page (Square, Toast, Yiftee...), dead and "unavailable" pages never shown, each marked "Checked by Doozer" (verified) or "Linked from their website". Doozer handles no money. Accent rose #e11d48 / #be123c. When DNS is live, set doozerFamily()['shop']['live'] to true.
Rules. Prices and availability are sourced and dated, never invented. No fake scarcity, no countdown pressure, no pre-checked add-ons. An affiliate relationship, if ever, is disclosed on the link. A business can remove itself from the shop at any time.
The One already knows: the gift cards (category gifts), ordering and booking links, events, check-ins and the trail. Games add people in the place, together; the Shop adds money to the place. Both make the same promise The One makes: everything shown is real, sourced, and chosen by the people involved.
Related: The One Page, The Observed World, No Dark Patterns, The Network.