Skip to content

Latest commit

 

History

History
63 lines (49 loc) · 3.99 KB

File metadata and controls

63 lines (49 loc) · 3.99 KB

Cyc — Roadmap

The original 36-week commercial roadmap (freemium pricing, MIDI/OSC/QLab, mobile builds, cloud sync, certification program) was replaced by a 3-week personal-use plan focused on running Bug in October 2026. This document records what shipped and what's deferred.

Shipped

Week 1 — Real bridge control

  • node-hue-api integrated; Entertainment API explicitly NOT used (over-engineered for cue-to-cue, see ARCHITECTURE.md)
  • Bridge discovery (mDNS + N-UPnP), link-button pairing, persistent app key
  • Auto-reconnect on launch
  • Settings modal with Search → Pair → Forget flow
  • Connection-status badge in header (real, not hard-coded)
  • GO fires real lights with bridge-side fade (transitiontime)
  • Blackout works (group 0, 0.3s fade)

Week 2 — Programmable shows

  • cue_lights.is_on schema migration (lights can be explicitly off in a cue, vs absent and ignored)
  • Per-cue lights editor inside the cue modal: include checkbox, ON/OFF toggle, brightness slider, color picker
  • 📸 Capture from bridge — pulls live state into the editor
  • ▶ Preview live — pushes editor state without saving
  • Include all / Clear all helpers
  • BACK re-fires previous cue's state on the bridge (not just cursor decrement)
  • Click cue in sidebar = jump-to + fire
  • Cue light-count badge ("N 💡" / "empty") in sidebar
  • Show JSON export/import (versioned schema)

Week 3 — Survive a show

  • Crash recovery: position saved after every fire; "Resume Show at Cue N?" banner on next launch
  • Bridge reconnect banner with auto-retry every 5s; never auto-fires after reconnect
  • Drag-reorder cues with SortableJS; only the dragged cue's number changes (midpoint of neighbors)
  • Confirm-tap Blackout (3s amber pulse window before second tap fires)
  • Touch-friendly GO button (@media (hover:none) and (pointer:coarse) → 80% width / 40vh / 72px)
  • Fixed silent fade-progress bar bug (was animating wrong DOM node)

Production polish

  • electron-builder configured; npm run dist:win produces an NSIS installer
  • Documentation rewritten to match what was built (this file, ARCHITECTURE.md, cyc-app/README.md)

Deferred — useful, but only if needed

These would be small additions, not redesigns. Add only if a real Bug tech rehearsal exposes the need.

  • Code signing for the installer — avoids the Windows SmartScreen warning. Only matters if distributing beyond personal use.
  • Auto-updaterelectron-updater + a release host. Useful only if more than one machine runs Cyc.
  • Multi-bridge support — one show talking to multiple bridges. The architecture allows it (HueService could become a Map keyed by bridge), but Bug almost certainly fits inside one bridge's ~50-light cap.
  • Cue groups / scenes / fixture profiles — for now, every cue is a flat list of lights. If repetitive states emerge during programming, "scene" templates would help.
  • MIDI / OSC triggers — only relevant if integrating with sound playback (QLab, Reaper, etc.). For Bug being run by a human on GO, not needed.
  • Cue notes / script integration — a free-text "follow-on" or stage manager note per cue.

Dropped — not coming back

The original roadmap promised these. They are explicitly NOT planned because the architectural cost outweighs personal-use value.

  • Philips Hue Entertainment API (DTLS/UDP streaming at 25Hz) — overkill for cue-to-cue; bridge-side transitiontime is sufficient. See README.md for the rationale.
  • React + Redux/Zustand + MUI — vanilla JS is fine for this app's complexity.
  • Microservices, Redis, Bull queue — single process, no queue.
  • Cloud sync, user accounts, freemium pricing — personal tool.
  • Mobile builds, PWA, React Native — Electron desktop is the target form factor.
  • Marketing site, certification, App Store listings — out of scope.

What "done" means

The app is done when Bug runs cleanly in October 2026. Shipping more features before that is premature optimization. Bug-driven changes (literally) take priority over the deferred list.