VIBE CODED AS FUCK. DO WHAT YOU WANT. I DON'T OWN IT YOU DON'T 


| Feature | Status | Notes |
|---|---|---|
| **Dual Deck Player** | ✅ | Play/Pause, Stop/Eject, Cue, ±15s scrub, Start/End jump, Queue system |
| **4-Slot CART Machine** | ✅ | Toggle play/stop+reset, per-slot LCD display |
| **Playlist Manager** | ✅ | Drag/drop, Add files/folder, Load to deck, Queue, Right-click menu |
| **CART Playlist** | ✅ | Separate playlist panel, auto-fills next free cart slot |
| **MIDI Controller** | ✅ | Numark DJ2Go - Play/Pause, Cue, Jog wheels, 4 Cart buttons |

| **Play History** | ✅ | Scrollable session history, file tags + MusicBrainz metadata |
| **Top Bar** | ✅ | 24hr clock, full date display |
| **Colour Themes** | ✅ | 4 themes - Green, Amber, Blue, Red - cycle with ◈ button |
| **Resizable Columns** | ✅ | QSplitter on all 3 columns |

radiopanel/
├── main.py                 # Entry point, layout, wiring
├── audio_engine.py         # JACK client, deck states, recording
├── deck_widget.py          # CDJ-style deck UI + transport controls
├── cart_widget.py          # 4-slot CART machine
├── playlist_widget.py      # Playlist + CART playlist panels
├── midi_engine.py          # Numark DJ2Go MIDI mapping
├── top_bar_widget.py       # Clock, date, theme switcher
├── history_widget.py       # Session play history
└── requirements.txt        # Dependencies


