Everything that has shipped, and what it cannot do
Dated to the day the code landed, written from the code rather than from a commit message, and carrying the limits — a release note that only lists wins is an advertisement.
- Updates
- 8
- Areas
- 4/ 6
- Shipping days
- 1
8 updates
Promotions with two status axes
HighlightA promotion's lifecycle — draft, active, paused, archived — is a choice your team makes; where today sits against its dates is worked out from the dates every time anyone looks. The two never fold into one flag, so a promotion paused mid-flight reads "paused" on every list, not "ended", and every stat on the hub is computed over the whole table so the headline cards and the lists beneath them cannot disagree.
Timing cannot be edited directly, on purpose — move the dates or change the status, and the display follows.
Promotions#Prize inventory with day windows
Every prize carries a quantity, a per-winner limit, a value in exact cents and a day-of-week window, with an optional date range of its own inside the promotion's. What is claimed is derived from the winner records themselves — there is no counter to drift out of step — and a weekday-only prize stays out of the weekend's show prep automatically.
A prize with no dates of its own follows the promotion's window; a forfeited win returns its stock the moment the status changes.
Promotions#The winner link
HighlightAward a prize, issue a link, and the listener does their own paperwork: contact details, postal address and an e-signed release, typed by the winner on their own phone. The page shows the prize, the station group's name and the release text — no other winner, no other record — and the name the listener types is kept verbatim as the signature, with the moment it was signed.
The link is the whole credential — anyone holding the URL can open it, so send it to the winner and nobody else. Revoke one and every later visit is a plain 404.
Winners#Year-end tax readiness
A prize's per-unit value is frozen onto the winner record at award time, in integer cents, so repricing a prize in March cannot restate what January's winner won. The tax view totals each listener's calendar year from those frozen figures, flags totals at or over the $600 federal 1099 reporting threshold, and exports the lot as CSV for the bookkeeper.
It is bookkeeping, not tax advice: the figures follow the records you keep, and whether a form is due is between you and your accountant.
Winners#Liners, and imaging with six named stages
Live-read copy is scheduled by date range against its promotion, with an optional station-specific cut, so a jock's list only ever shows what is current. Produced imaging — promos, sweepers, credits, bumpers — moves through six named stages, needs review to completed, with the playout cart number recorded once it has one. Nothing sits in an unnamed limbo between "written" and "on air".
The pipeline tracks the work; the audio itself lives in your playout system, with the cart number recorded here.
Production#Run sheets for remotes
Every appearance gets a run sheet: venue and address, the contact and their phone, door times, what the street team brings, team notes and the on-air mentions — attached to its promotion and its station, so the van leaves with the whole plan rather than with whoever remembers it.
A run sheet records the plan; it does not book anyone or talk to a calendar outside the product.
Promotions#The calendar, and a hub that agrees with itself
HighlightOne month view carries promotion starts and ends, prize windows and events, windowed in the database rather than paginated — the week you are looking at is the whole week, whatever size the tenant. The hub's numbers work the same way: low stock, promotions expiring with prizes still unclaimed, top promotions by awarded value, all computed in SQL over every row.
The winners headline counts a trailing 30 days, not the calendar month.
Platform#The console: roles, API keys, activity
Workspaces with four roles — a read-only Viewer seat means the whole airstaff can check show prep without being able to change a record. Plan caps count what is live, claimed transactionally so two tabs cannot both take the last slot. API keys are hashed at rest and scoped per surface, every call is logged with its status and latency, and consequential actions write an audit trail the activity feed reads back.
A key's scopes are fixed when it is issued — widening one means issuing a new key. Keys are shown once, at creation.
Platform#