Hammerspoon Handoff · Scene Wall
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)
| scene | url | composition |
|---|---|---|
| market-2-charts | /scenes?scene=market-2-charts | SPY 1D + MU 15m side by side · tape the IT-deck "Market — 2 Charts" named layout |
| command-deck | /scenes?scene=command-deck | chart 62 · rotating geiger 38 · tape |
| geiger-board | /scenes?scene=geiger-board | 2×2 geigers (MU · NBIS · SNDK · auto) · tape laptop profile: one auto-rotating geiger |
| research | /scenes?scene=research | chart 55 · youtube 45 · tape |
| overview | /scenes?scene=overview | MACRO 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-board | pulse · full sector heat map (rotation-ranked) · tape |
| rotate all | /scenes?rotate=all&dwell=120 | cycles every scene · &start=name picks the opener · hover holds · ←/→ · space |
| picker | /scenes | the control surface — live thumbnails, one click full-bleed or rotate |
2b · Deep links — every scene × profile
| scene | wall (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)
| module | url | params |
|---|---|---|
| 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 | /heat | sector/cohort heat field · groups ranked by sector_rankings · ?group=sector|cohort · ?color=chg|geiger · ?refresh=60 |
| pulse strip | /pulse | market 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 layout | point 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.
db reads only — never FMP from pages · cockpit untouched · look rides the visuals sprint