Live

Segue

A cross-ecosystem DJ library bridge. Serato to Rekordbox, or straight to the CDJ, without starting over.

Role
Solo build. Architecture and engineering across the React UI, the Rust shell, the Python core, and the release pipeline.
Stack
Tauri (Rust)ReactPythonFastAPIpyrekordboxlibrosa

What Segue is

Segue is a bridge between two DJ ecosystems that refuse to talk to each other. You build your library in Serato: crates, cue points, beatgrids, the muscle memory of years. But the club’s booth is Pioneer CDJs, which only read Rekordbox-shaped data. Segue reads the Serato library and produces exactly what the other side needs: a rekordbox.xml, a direct write into the Rekordbox 6 database, or a CDJ-ready USB stick with no Rekordbox in the loop at all.

The positioning is deliberately narrow. Serato to Rekordbox, one direction, without starting over.

The problem

The industry workaround is a whole evening. Export XML from Serato, import into Rekordbox, let it re-analyze everything, export a USB, walk to the booth. Every time a crate changes, you do it again. It duplicates your library, loses fidelity on cues and grids, and treats an hour of file-shuffling as normal.

Segue collapses that into one step and keeps the fidelity.

The architecture, and the one boundary that matters

Segue ships as a single app but runs as three processes: a React UI in a webview, a Tauri (Rust) shell, and a Python sidecar that does all the actual work.

Three processes, one interface. The UI and Rust shell are a thin transport over a local HTTP API; all the domain logic lives in the Python sidecar.

The decision the whole system hangs on is that the UI and the Rust shell never touch DJ data. They talk to the sidecar over plain HTTP on localhost, with progress streamed as Server-Sent Events. No Tauri invoke() commands, no IPC channels, just a local HTTP API.

That single interface boundary is the point. Every layer can be swapped without touching the others: Tauri could become Electron, the UI could become a CLI, the sidecar could become a hosted service. And all the domain logic, every byte of Serato, Rekordbox, and Pioneer format parsing, lives in Python. So the command line and the desktop app run the exact same code.

The hard part: writing Pioneer’s format from scratch

The XML and Rekordbox-database exporters are the easy wins. The differentiator is the USB path, and it is the hardest code in the project.

A CDJ-ready stick means writing Pioneer’s export.pdb from nothing: DeviceSQL’s page format, 4096-byte pages with a heap growing forward and row offsets growing backward, nine interlinked tables, two different string encodings. Then per-track analysis files carrying the beat grid and hot cues, colors snapped to Rekordbox’s fixed palette. This is the code that lets Segue bypass Rekordbox entirely instead of being one more XML converter.

It is also the highest-risk code in the app, so every analysis file is round-tripped back through a real Rekordbox parser before it is written. And if the USB already holds a library, Segue reads it, keeps the playlists that do not collide as raw byte copies, and only replaces what overlaps. It does not stomp.

The scar: three commits to survive macOS

The story I would actually tell in an interview is the codesigning saga. macOS 15 (Sequoia) tightened its hardened-runtime checks and started killing the app on launch, because the Python framework the sidecar unpacked at startup did not share a signature identity with the bootloader.

The fix took three consecutive commits and changed how the app is built. Stop unpacking Python at runtime (onefile to onedir, so the framework lives permanently beside the bootloader). Find and re-sign that framework explicitly in CI, because the default pass missed it. Sign every Mach-O in the tree individually instead of trusting a recursive deep-sign. Then add a four-second smoke test that boots the signed sidecar in CI, so a broken relink dies in the pipeline instead of on a stranger’s laptop.

Most of the engineering scars in a desktop app are not in the features. They are in the twenty steps between “it works on my machine” and “it launches for someone I have never met.”

Decisions I would defend

What it taught me

Segue is mostly not about DJing. It is about the seam between two systems that were never designed to meet, and the discipline of writing an undocumented binary format that another vendor’s hardware has to accept without complaint. The interesting work was making each layer ignorant of the others, and making the riskiest code prove itself before it ever reaches a user.