Summary
In the spectrum preview at the bottom of the app, pilot callsign labels overlap and become unreadable when their frequencies are close together. The labels need to interleave/stagger vertically (or otherwise lay out collision-free) so every name stays legible.
Where
The spectrum visualization is rendered by renderSpectrum() in static/app.js. Labels are currently positioned by frequency along the horizontal axis with little/no vertical de-confliction, so adjacent or near-adjacent assignments collide.
When it's worst
Closely-spaced or oversubscribed sessions — e.g. mixed DJI/analog grids where assignments land 3–15 MHz apart (the same conditions as the v0.7.4 rebalance work, issue #20). The more pilots and the tighter the packing, the more labels stack on top of each other.
Desired behavior
Lay out the labels so they're all readable regardless of how close the frequencies are. Options to consider:
- Vertical staggering — alternate label rows (e.g. 2–3 vertical "lanes") so neighbors don't sit at the same height.
- Collision detection that bumps a label up a lane when it would overlap the previous one.
- Leader lines from each label down to its exact frequency tick when the label is offset from its bar.
- Graceful handling of dense clusters (group/abbreviate, or scrollable, as a fallback).
Acceptance
- With many pilots on closely-spaced frequencies, every callsign in the spectrum preview is readable (no overlapping text).
- Each label still clearly maps to its frequency/bar.
- Works at mobile widths (the layout is responsive).
Summary
In the spectrum preview at the bottom of the app, pilot callsign labels overlap and become unreadable when their frequencies are close together. The labels need to interleave/stagger vertically (or otherwise lay out collision-free) so every name stays legible.
Where
The spectrum visualization is rendered by
renderSpectrum()instatic/app.js. Labels are currently positioned by frequency along the horizontal axis with little/no vertical de-confliction, so adjacent or near-adjacent assignments collide.When it's worst
Closely-spaced or oversubscribed sessions — e.g. mixed DJI/analog grids where assignments land 3–15 MHz apart (the same conditions as the v0.7.4 rebalance work, issue #20). The more pilots and the tighter the packing, the more labels stack on top of each other.
Desired behavior
Lay out the labels so they're all readable regardless of how close the frequencies are. Options to consider:
Acceptance