How Angular lit up Vegas in the Professional Lighting Industry | Nathan Walker & Eduardo Speroni

Learn how Nathan Walker & Eduardo Speroni built a professional lighting console app with Angular and NativeScript, mastering complex state, DMX protocols & iOS integration.

Key takeaways
  • Built an Angular app for iPad called Blackout Lighting Console - a digital version of an analog lighting console using NativeScript and Swift UI

  • Architecture stats:

    • 114 components
    • 91 services
    • 11 directives
    • 2 pipes
    • 33 Swift UI views
    • Uses Angular 17 control flow syntax
  • Performance optimizations:

    • Multi-threading with web workers for DMX data processing
    • Detached views from change detection when hidden
    • Shared array buffers for zero-copy data transfer
    • Small, memoized selectors for state management
    • View pooling for efficient list rendering
    • Throttling/buffering for data transmission
  • DMX protocol requirements:

    • Constant 44Hz transmission rate
    • UDP-based protocol
    • Each light fixture has multiple parameters (intensity, pan, tilt, etc.)
    • Values map to DMX channels (0-255 or 0-65535)
  • State management considerations:

    • Strong state management necessary for complex data flows
    • Single source of truth for all values
    • Faders stack based on priority
    • Multiple input sources affect final output values
    • State changes must be performant to avoid visual stutters
  • Native iOS integration:

    • Uses Core MIDI, Core Foundation, Core Graphics
    • Swift UI components for native look and feel
    • Zero-copy data marshaling between JS and native code
    • Hand tracking support for Vision Pro