Hammerspoon Handoff · Scene Wall

plug-and-play the moment the accessibility gate flips · owner: hub/surface command · receipt HSC-HANDOFF-001

Everything below is live now. When Hammerspoon's Accessibility toggle goes on (System Settings → Privacy & Security → Accessibility → Hammerspoon ON — spine row 97, MacBook-Pro-side), the scene modules are already windowable URLs: point windows at them, save the layout, done. Two percent layers, one rule: Hammerspoon frames the windows in percentages of the display; inside each window, scenes place their panes in percentages of the window. The 1920×1080 wall and the 1168×755 laptop stay separate profiles at both layers.

1 · One command per scene module

Each module is cleanest as a chromeless app window — its own window, no tabs, ready for Hammerspoon to frame:

open -na "Google Chrome" --args --app="https://scintilla-widgets.vercel.app/scenes?scene=command-deck&profile=wall"

Repeat per window with the URLs below. A normal browser window works too; --app just drops the chrome. Profiles auto-pick by window width (≥1600px → wall · ≥900px → laptop · else narrow/touch for iPad-portrait and phone) — pin with &profile=wall|laptop|narrow when a window's width would lie about its display.

2 · Scene URLs (composed layouts)

sceneurlcomposition
market-2-charts/scenes?scene=market-2-chartsSPY 1D + MU 15m side by side · tape
the IT-deck "Market — 2 Charts" named layout
command-deck/scenes?scene=command-deckchart 62 · rotating geiger 38 · tape
geiger-board/scenes?scene=geiger-board2×2 geigers (MU · NBIS · SNDK · auto) · tape
laptop profile: one auto-rotating geiger
research/scenes?scene=researchchart 55 · youtube 45 · tape
overview/scenes?scene=overviewMACRO band · SPY/QQQ/SMH dailies · ALL band
wall-rotation/scenes?scene=wall-rotation/wall full-bleed (favorites, 20s/chart) · tape
heat-board/scenes?scene=heat-boardpulse · full sector heat map (rotation-ranked) · tape
rotate all/scenes?rotate=all&dwell=120cycles every scene · &start=name picks the opener · hover holds · ←/→ · space
picker/scenesthe control surface — live thumbnails, one click full-bleed or rotate

2b · Deep links — every scene × profile

scenewall (1920×1080)laptop (1168×755)narrow (pad/phone)
market-2-charts&profile=wall&profile=laptop&profile=narrow
command-deck&profile=wall&profile=laptop&profile=narrow
geiger-board&profile=wall&profile=laptop&profile=narrow
research&profile=wall&profile=laptop&profile=narrow
overview&profile=wall&profile=laptop&profile=narrow
wall-rotation&profile=wall&profile=laptop&profile=narrow
heat-board&profile=wall&profile=laptop&profile=narrow

Every combination is a clean URL — bookmark, Hammerspoon window, iPad home-screen tile, all the same address. The same chips are clickable on each /scenes card. Missing profiles fall down the chain (narrow → laptop → wall) rather than 404ing.

3 · Single-widget URLs (raw modules)

moduleurlparams
ticker tape/ticker?bands=macro,all · ?speed=45 — a thin strip window
cohort geiger/geiger?t=MU pin · ?auto=1&dwell=10 rotates favorites
youtube feed/youtube?filt=ALL|SUBS|SHORTS|WATCH|$MU
chart/chart?t=MU · ?range=1D (15m…1W)
chart wall/wall?list=MU,NVDA · ?dwell=20 · ?range=1D · ?shuffle=1
heat map/heatsector/cohort heat field · groups ranked by sector_rankings · ?group=sector|cohort · ?color=chg|geiger · ?refresh=60
pulse strip/pulsemarket state at-a-glance: geiger breadth · macro direction · VIX posture · ?sections=geiger,macro,vix · ?refresh=30 — composes into any scene as a thin row

4 · Suggested first saves (the three IT-deck layout names)

hammerspoon layoutpoint the display at
Market — 2 Charts/scenes?scene=market-2-charts&profile=wall
Weekend/scenes?scene=research&profile=wall
Late Night/scenes?rotate=all&dwell=300&profile=wall

Names are Alan's call — these are working defaults so the first save takes thirty seconds: open the window, frame it, menu-bar → "Save focused display as…", then Restore is the escape hatch.

Adding or changing a scene needs no deploy. Scenes are rows in scene_layouts (scintilla-live): scene, profile (wall|laptop), panes as percent rects {src,x,y,w,h}. Insert a row, it's in the picker on next load; the engine falls back to a baked copy if the DB blinks. Composition changes go through HUB/SURFACE COMMAND with a receipt on spine_events.

Inheritance: per charter, ongoing scene-wall composition (which URLs on which display, named layouts) belongs to HUB/SURFACE COMMAND the moment the gate is on — flip it and drop a spine row; I take it from there.

scintilla-widgets · hub/surface command · relay: spine_events · scintilla-live (wadinxqplrggagkvrdag)
db reads only — never FMP from pages · cockpit untouched · look rides the visuals sprint