Blog
Mar 31, 2026

Light Your Top: Reverse-Engineering Bluetooth to Build a Custom Jeep Lighting App

How I reverse-engineered an undocumented Bluetooth controller to build a Flutter app for a fiber optic Jeep lighting product.

Light Your Top: Reverse-Engineering Bluetooth to Build a Custom Jeep Lighting App

Light Your Top: Reverse-Engineering Bluetooth to Build a Custom Jeep Lighting App

I reverse-engineered a Bluetooth controller to build a custom app for a Jeep lighting product. No documentation existed. Here’s how.

The Product

Light Your Top (LYT Shade) is a soft-top shade for Jeeps with integrated fiber optic lighting. The fiber optic strands are woven into the soft-top fabric, powered by a hardware light injector. You control colors, flash patterns, and music sync through a mobile app connected via Bluetooth.

Three components:

  • LYT Shade panel — fiber optic strands woven into soft-top fabric
  • Light injector — hardware light source powering the fibers
  • Mobile app — color control, strobe patterns, and music sync via phone microphone

The Challenge

The off-the-shelf Bluetooth LED controller came with a stock Chinese app. It worked, barely. The UX was terrible. The branding was generic. And it couldn’t be customized for the LYT product experience.

The problem: zero documentation on the Bluetooth protocol. No API. No SDK. No spec sheet for the command set. Just a chip and a generic app.

To build a custom Flutter app that could talk to the hardware, I had to figure out the protocol myself.

The Reverse-Engineering Process

Step 1: Research the chip. Identified the Bluetooth LE chip manufacturer and found their generic specification documents. This gave me the basic BLE service and characteristic UUIDs — the “addresses” you read and write to.

Step 2: Packet sniff. Installed the stock Chinese app on an Android device and used BLE packet sniffing to capture every command the app sent to the controller. Color changes, pattern switches, brightness adjustments, music sync toggles — I captured them all.

Step 3: Decode the protocol. This was trial and error. I’d change a color in the stock app, look at the captured packet, and figure out which bytes represented hue, saturation, brightness. Then I’d change the pattern and compare packets. Over a few days, I mapped the entire command set.

Step 4: Build the Flutter app. With the protocol decoded, I built direct BLE communication in Flutter. The app sends raw byte commands to the controller — no middleware, no SDK dependency, just direct hardware communication.

The App

  • Color wheel with full RGB control
  • Pre-built flash/strobe patterns
  • Music sync via phone microphone (FFT analysis → color mapping)
  • Custom pattern creation
  • Device discovery and auto-connect

Why This Matters

Not every project needs to be a SaaS. Sometimes the most satisfying engineering is taking hardware with a terrible stock app and building something better.

Reverse-engineering is a lost art in the age of APIs and SDKs. When there’s no documentation, you make your own.

Prototype is complete. Production manufacturing is underway. App Store release planned.

More details: nathanglass.com/apps/light-your-top