Contact
Hand holding a phone controlling One World Trade Center lights at nightHand holding a phone controlling One World Trade Center lights at night

Spireworks Technology Strategy  • Classified
How an Android pilot made the case for Flutter across both platforms

Durst

Client since 2017

What is Spireworks

Spireworks is a connected app that lets anyone control the lights of iconic New York skyscrapers in real time. Tap a color on your phone, and the LED lighting on a participating tower changes to match, instantly. It's a partnership between Spireworks and building owners, with revenue tied to charitable giving through the Change platform. Users pick a building, pick a color, and the skyline responds.

Angular glass skyscraper with a lit spire against a blue evening skyModern skyscrapers and towers lit up against a twilight blue sky
City skyscraper with a large H&M sign and rooftop antenna at duskCity tower at night with a bright antenna and large red H&M sign
One World Trade Center lit at night with a red base and city skylineOne World Trade Center at night with red lighting at the base and spire
Tall glass skyscraper with red and blue lights along the rooflineSkyscraper at sunset with red, white, and blue lighting along the top edge

Situation

L+R had been Spireworks' long-term partner across digital strategy, UX, brand, and engineering. The product is unusual. An app that lets anyone change the color of real LED lighting on iconic New York skyscrapers in real time, with revenue tied to charitable giving. The original app was native iOS, built on top of an earlier web application. That choice was deliberate. The product had two non-negotiable technical demands: tight, low-latency control of a physical lighting system, and a level of visual polish that matched the spectacle of the skyline itself. Analytics also showed the existing user base was overwhelmingly on iPhone, so a single-platform launch was defensible. As the product matured, the roadmap expanded. More participating buildings across the NYC skyline, richer per-building visuals, deeper philanthropic integrations via the Change platform, and eventually Android.

Spireworks system flow diagram linking mobile apps, donations, buildings, portal, and cloudSpireworks system flow diagram linking mobile apps, donations, buildings, portal, and cloud

Task

The brief on paper was straightforward: ship Android. The harder question underneath it was architectural. Maintaining two native codebases (Swift on iOS, Kotlin on Android) for a product whose differentiator is real-time visual fidelity meant every new building, every interaction tweak, every lighting protocol change would need to be implemented and QA'd twice. With a lean team shipping frequently, that's where parity bugs and feature drift live. We proposed Flutter. The client was hesitant, reasonably so. Spireworks had a working, well-loved iOS app, and rewriting it on a framework the team hadn't shipped before is a real risk. The agreed path forward was a structured pilot. Build the Android app on Flutter first, put it through user testing and stress testing against the same scenarios the iOS app handled, and let the results decide whether iOS would follow.

2011 Spireworks mobile web screen with installation menu2011 Spireworks mobile web screen with installation menu
2016 Spireworks app screen showing One Bryant Park queue details2016 Spireworks app screen showing One Bryant Park queue details
2017 Spireworks app screen for One Bryant Park on a smartphone2017 Spireworks app screen for One Bryant Park on a smartphone

Action

Spireworks needed animated lighting states, smooth color transitions, and a UI that felt as polished as the skyline it controls. Flutter renders through its own rendering engine, Impeller, rather than mapping to platform widgets, which meant gradients, motion, and typography looked pixel-identical across devices. For a brand where the visual is the product, this removed an entire class of "it looks different on Android" bugs that cross-platform teams usually spend cycles on. Video content for participating buildings was handled through the native video pipeline behind a Flutter interface, so playback stayed smooth without us reinventing it.

Flutter platform channels diagram connecting Dart to Android and iOS native codeFlutter platform channels diagram connecting Dart to Android and iOS native code
Native where it had to be

Flutter is not a religion. Push notifications, deep links into specific buildings, share sheets, and the Change platform integration for donations all run through platform channels and well-maintained plugins. The donation flow is wrapped behind a single Dart interface so the rest of the app doesn't care which platform it's running on.

Real-time control

The latency requirement, tap a color and see it on a 50-story building, is the part that makes or breaks the experience. We built the control layer in Dart over a WebSocket connection to the lighting backend, with isolates handling message serialization off the UI thread so the interface never stuttered during rapid color changes. Stress testing simulated concurrent users hammering the same building, and the Flutter client held frame rate and message throughput at parity with the native iOS implementation.

Development screen with Android and iPhone simulators showing the Spireworks appDevelopment screen with Android and iPhone simulators showing the Spireworks app
Testing

Widget tests covered the UI layer, integration tests covered the WebSocket and donation flows end-to-end, and we ran the same test suite against both platforms. One test pass, two platforms green. Once the Android build passed user testing and stress testing, the case for moving iOS onto the same Flutter codebase made itself. We brought iOS onto Flutter and shipped both platforms from a single repo.

Location and context awareness

Spireworks uses GPS to surface which buildings a user is near, prioritize them in the interface, and unlock proximity-based interactions. We wrapped the platform location APIs behind a single Dart service so the rest of the app didn't care whether it was reading from Core Location or Android's Fused Location Provider. Same pattern for sensor data and other platform-specific signals. One interface, two implementations underneath.

Flutter hot reload diagram showing a button color change between two phonesFlutter hot reload diagram showing a button color change between two phones
Developer velocity

Hot reload genuinely changed how we iterated on the color picker, transition curves, and haptic feedback on color commits. Designers sat with engineers and tuned details in minutes rather than build cycles. This is the unglamorous Flutter benefit that compounds across a project.

Result

Spireworks launched on iOS and Android from a unified Flutter codebase. To date, the platform has powered over 33 million lighting interactions and 16 million instantaneous color changes on real buildings. Multiple TikToks with millions of views each drove a wave of new users, and the app led to collaborations with MrBeast, Amazon Prime, and The New School. It won a Red Dot Award and was named a Webby Honoree.

The codebase outcomes are the part most relevant to other Flutter teams. One team now ships to two platforms, with feature parity by default rather than by effort. New buildings onboard once. The asset pipeline, color command schema, location logic, and donation flow are written in one place. iOS users got an upgrade, not a downgrade. The transition off native Swift did not cost performance or polish, and that was independently verified by user testing before the iOS move was even approved. The client's initial hesitation turned into a roadmap unlock, with Spireworks now able to expand across the NYC skyline without doubling engineering cost per platform.

Two phones showing the One Bryant Park installation controls in the Spireworks appTwo phones showing the One Bryant Park installation controls in the Spireworks app
Hand holding a phone controlling One World Trade Center lights at nightHand holding a phone controlling One World Trade Center lights at night
Three Spireworks app screens for timer, donation, and navigation featuresThree Spireworks app screens for timer, donation, and navigation features
Phone app controlling a colorful lighting display in blue lightPhone app controlling a colorful lighting display in blue light
City building facade lit with blue, purple, and pink digital patterns at nightCity building facade lit with blue, purple, and pink digital patterns at night
One World Trade Center antenna lit in rainbow colors at duskOne World Trade Center antenna lit in rainbow colors at dusk
Phone screen selecting colored lighting effects for One World Trade CenterPhone screen selecting colored lighting effects for One World Trade Center

From The Client

Black rectangular image with no visible details
Flutter was a strategic choice, not just a technical one. With L+R, we built one app that runs beautifully everywhere, opening doors to more people, more buildings, and more impact.

Mark Domino

CEO, Spireworks   •   Spireworks

Portrait of a bearded man in a suit jacket

Mark Domino

CEO, Spireworks   •   Spireworks

What other Flutter teams can take from this

The strongest argument for Flutter isn't "write once, run anywhere." That's the marketing line. The stronger argument is visual consistency on products where the visual is the brand, paired with a single source of truth for product logic when you're shipping frequently. Spireworks is both. If a client is hesitant, propose what we did. Build the second platform on Flutter first as a parallel evaluation, with explicit pass criteria around performance, fidelity, and user reception. It de-risks the decision and gives you real data instead of a slide deck. Don't avoid native integrations, embrace platform channels. Flutter handles the 90% that should look and behave identically. The platform handles the 10% that genuinely should differ. And measure the things skeptics will ask about: frame times under load, cold start, memory, battery during sustained sessions. Have those numbers ready before the conversation about moving the other platform even starts.

More Content You May Enjoy