AD
AdminDesktop
Changelog
← Back
Development History

Changelog

DJ Command Center Β· Masterman Studios
v1.7 May 22, 2026 Latest
The Content Control & Cooldown Update
NewExplicit Song Filter - A new toggle in the Content Moderation section of the right-hand Settings drawer. When enabled, any song flagged as explicit by the music API (trackExplicitness === 'explicit' on iTunes, explicit_lyrics === true on Deezer) is blocked at the point of submission on Clientside.html with a clear error message. The filter is only active when Autocomplete Mode is set to Enforce; the toggle is visually dimmed and locked in all other modes. The setting is saved to settings/config.explicitFilter in Firestore and reflected in real time on all guest sessions.
NewRequest Cooldown selector - A new Request Cooldown section in the left sidebar lets the admin set the minimum wait time between guest requests. Preset options are Disabled, 1 min, 2 min, 5 min, 10 min, and 30 min. Selecting Custom… reveals a seconds input for any value from 30 s upward. The selected value is saved to settings/config.requestCooldown and picked up by Clientside.html in real time - no page reload required on the guest side. Setting the cooldown to Disabled (0) removes the wait entirely. The section is always visible to master admin and does not depend on voting being enabled.
ImpCooldown is now admin-configurable - Previously the request cooldown was hardcoded to 120 seconds in Clientside.html. The constant is now a live variable synced from Firestore, so changes take effect without re-deploying any files.
UpdVersion bumped to v1.7 - Version tags updated in AdminD.html topnav and settings drawer footer.
v1.6.5beta May 11, 2026 Previous
The Request Filter & Queue Control Update
NewRequest Filter system - A new Request Filter modal is accessible via a Manage button that appears in the Autocomplete sidebar section whenever Mode is set to Enforce. Three tabs control the active mode: None (filter off), Artist Lock, and Song Whitelist. Settings are saved to settings/config.requestFilter in Firestore and propagate to the guest app in real time.
NewArtist Lock mode - The admin types a single artist name. On the guest form the artist field is pre-filled with that name, greyed out, and made read-only so guests cannot change it. The autocomplete dropdown is filtered to only return songs from that artist - the search query is enriched with the artist name automatically. Requests with a non-matching artist are rejected server-side with a clear message.
NewSong Whitelist mode - The admin builds a curated list of song + artist pairs. On the guest form, the autocomplete dropdown shows only whitelisted songs matching what the guest types; no external API calls are made. Songs not in any music database are still recommended via an inline β˜… List badge. Attempting to submit a song not on the whitelist is blocked at the submit step with a descriptive error.
NewWhitelist song search in admin modal - The Song title field inside the Request Filter modal has a live autocomplete dropdown (powered by the same iTunes / Deezer source set in Settings). Selecting a result auto-fills both the Song and Artist fields and instantly adds the entry to the list - no manual typing required.
NewDelete Poll - A πŸ—‘ Delete Poll button now appears in the Manage Poll overlay. Unlike New Poll (which resets the document to an empty state), Delete Poll permanently removes the settings/activePoll document from Firestore entirely. A confirmation dialog is shown before the deletion is performed. Available for both active and ended polls.
FixArtist Lock autocomplete now returns recommendations - Previously, when an Artist Lock was configured, the guest autocomplete would show no results. The root cause was a combination of a too-narrow search query (song title only) and a strict exact-match artist filter. The query is now built as "<typed text> <artist name>" so the music API returns catalogue-relevant results, and matching is relaxed to a case-insensitive includes check to handle capitalisation differences. As a safety net, if the lenient filter still produces nothing, the top raw results are shown.
UpdVersion bumped to v1.6.5beta - Version tag updated in AdminD.html settings drawer footer.
v1.6 April 30, 2026 Previous UI
The Audience Poll & Display Update
NewAudience Poll system - Admins can now create live multi-option polls from a new πŸ“Š Create Poll button in the sidebar (below Add Track). The creation overlay mirrors the Add Track style and includes: question, 2–6 answer options, configurable runtime (1–30 min or no limit), a Keep results visible to guests toggle, and a Show live results on Public Display toggle (shown only when Display is enabled). Polls are stored in settings/activePoll and broadcast to all connected pages in real time.
NewManage Poll overlay with live results - Once a poll is active the Create Poll button becomes Manage Poll. The management overlay shows animated vote bars with live counts and percentages, a countdown timer, and an action row. Active actions: End Poll Early and Show/Hide on Display. Ended actions: Broadcast to Display and New Poll. The overlay refreshes automatically as Firestore updates arrive.
NewPoll ended state with orange pulse - When a poll ends the sidebar badge transitions from purple Poll Active to an orange pulsing Poll Ended badge (@keyframes poll-ended-pulse) matching the existing CSS variable system. All editing actions are locked in the ended state. The admin can immediately start a new poll once they click New Poll.
NewPoll history in the Manage overlay - Ended polls are automatically archived to a pollHistory Firestore collection (question, options, votes, total, winner, timestamps). The last 5 archived polls appear in an expandable list at the bottom of the Manage overlay so admins can review past results without leaving the queue view.
NewBroadcast confirm prompt - When a poll ends and Display is enabled, a modal asks Broadcast final results to the Public Display? Choosing Broadcast sets displayBroadcast:true on the activePoll doc, triggering the display overlay. Choosing Skip dismisses it without broadcasting.
NewClient-side poll card with voting - When a poll is active, a live poll card appears above the song vote queue on Clientside.html. Before voting, options are plain buttons. After voting, animated percentage bars and counts appear. Each Firebase anonymous UID gets one vote per poll, enforced by a Firestore transaction. Optimistic UI with rollback on error.
NewEnded poll and Previous Poll on client - If Keep results visible was enabled, guests see a locked Final Results card (orange-tinted) after the poll closes, with the winning option marked πŸ†. When no poll is running, the most recently archived poll is shown in a dimmed Previous Poll card so guests can still see the last result.
NewPoll broadcast overlay on Display.html - A full-screen poll overlay appears on the public display when the admin enables Show on Display (live mode) or pushes final results (broadcast mode). Live mode shows animated vote bars and a countdown. Broadcast mode replaces the badge with πŸ† Final Results and highlights the winner in orange. The overlay hides automatically when neither flag is set, reverting to the normal Now Playing view.
FixPlayed button no longer auto-switches to History tab - Clicking the Played button on a request card now moves the track to history silently in the background. The admin stays on whichever tab (Queue or Up Next) was active. Previously clicking Played would jump the view to the History tab automatically.
FixDisplay.html fixed - Resolved rendering issues on the public Now Playing display.
ImpMusic Source and MusicBrainz Fallback moved to Settings drawer - The Music Source selector (iTunes / Deezer / Both) and MusicBrainz Fallback toggle have been moved from the left sidebar Autocomplete section into the Settings drawer under Source. The Autocomplete section in the sidebar now shows only the Mode selector. The MusicBrainz control is now an sd-switch consistent with all other drawer toggles.
RemDisplay button removed from top navigation - The Display button in the top nav bar has been removed. The display can be launched from the existing Display section in the Local Settings drawer, which already provided Panel and New Window launch options. Removing the duplicate top-nav button reduces toolbar clutter.
v1.5 April 19, 2026 Previous UI
The Content & Metadata Update
FixAnalytics Dashboard - Fixed
NewText Moderation for guest requests - A two-layer profanity filter now protects the Name and Shoutout fields on the Guest App. Layer 1 is an instant local word blocklist covering English slurs and Hungarian profanity (bazmeg, fasz, geci, and variants). Layer 2 is the PurgoMalum API with a 2-second timeout. If flagged, the request is blocked and the guest sees a clear error. Fail-open: if the API is unreachable, the local check still runs and legitimate requests are never lost due to a network issue.
NewEnable Text Moderation toggle in Settings drawer - The toggle lives in a new Content Moderation section at the bottom of the Local Settings drawer. It writes directly to settings/config in Firestore and takes effect venue-wide in real time - no Save Local Settings click required.
NewMusicBrainz Fallback for autocomplete metadata - A new MusicBrainz Fallback toggle in the Autocomplete section of the sidebar. When on, if a track selected from iTunes or Deezer is missing genre or release year, the system queries the free MusicBrainz /ws/2/release API to fill the gaps. Existing data from iTunes or Deezer is never overwritten. BPM is not available from MusicBrainz. The fallback runs only when at least one field is actually missing.
ImpVoting Interval UI auto-hides when Voting is off - The entire Request Behavior section (containing the Voting Interval toggle and minute selector) is now hidden when Public Voting is disabled, reducing visual noise in the left sidebar.
ImpAutocomplete sub-controls hide when Mode is Off - The Music Source selector and MusicBrainz Fallback toggle are now hidden whenever Autocomplete Mode is set to Off. They reappear instantly when Suggestion or Enforce mode is selected.
UpdVersion bumped to v1.5 - Version tags updated in AdminD topnav, settings drawer footer, Manual, and Changelog.
v1.4.7 April 6, 2026 Previous UI
The Admin UX & Polish Update
NewRedesigned venue toggle switches - The four venue control buttons (Requests, Voting, VIP Mode, Guest Lineup) have been replaced with full-size toggle switches. Each switch is colour-coded on activation: green for Requests and Voting, gold for VIP Mode, and orange for Guest Lineup. A live status label below each name shows the current state at a glance.
NewBackground image hover preview - The Guest Background URL field in the sidebar now shows a floating thumbnail preview of the image as you type or focus the field. The preview debounces 600 ms after you stop typing so it never fires mid-URL, and hides automatically on blur or invalid input.
ImpTop nav buttons are now fully discrete - The hardcoded purple tint on Analytics and orange on the QR button have been removed. All toolbar buttons now share the same neutral style and only highlight in orange when their panel is open, matching the existing Settings and Sidebar behaviour.
ImpActive state added to QR and Weather buttons - Opening the QR modal or Weather modal now marks the corresponding top nav button orange for the duration the panel is open, giving clear visual feedback about what is active.
ImpQueue cover art loads lazily - Album art images on every queue card are now marked loading="lazy" and decoding="async". Images outside the viewport are not fetched until scrolled into view, reducing wasted mobile data on long queues.
ImpNon-blocking font loading in AdminD - The Google Fonts stylesheet is now loaded via the media="print" onload pattern, preventing it from blocking the initial render on slow connections. Text appears immediately using system fallbacks while the custom font loads in the background.
ImpPreconnect hints added to AdminD - <link rel="preconnect"> and dns-prefetch headers are now declared for Firestore, Open-Meteo, iTunes, and barcodeapi.org, cutting the TCP handshake delay on first use of each service.
UpdVersion tag added to AdminD topnav and settings drawer - A small v1.4.7 label now appears in the top navigation bar and the settings drawer footer so the running version is always visible without opening the Changelog.
v1.4.6 April 3, 2026 Previous Hotfix
Hotfix - Analytics & Manual
FixAnalytics timeline now shows true day-by-day data - When All was selected, the Request Volume chart defaulted to the last 30 days instead of spanning actual data. It now finds the earliest recorded timestamp and renders one column per calendar day from that date to today, capped at 365 days.
FixAnalytics tooltip now shows full ISO date on All view - The timeline tooltip now shows the exact date (e.g. 2026-03-17) as its title so dates are unambiguous at any range width.
FixManual localisation now fully functional - The language-switcher buttons (EN / HU / ES / FR / DE) were present in the HTML but the backing JavaScript was missing entirely. The setLang() function, mobile TOC toggle, and scroll-spy observer are now implemented and the chosen language persists via localStorage.
FixManual missing closing tags - The .main-wrap wrapper div, </body>, and </html> tags were absent, causing layout and script-execution failures in all browsers.
UpdVersion strings updated to v1.4.6 - Footer and eyebrow labels in both the Manual and Changelog now reflect the current release.
v1.3 March 17, 2026 Previous
The Display & Voting Update
ImpAlbum art now dominates the Now Playing display - The cover image has been redesigned to fill as much of the projection panel as possible (up to 700 px tall), making it clearly visible from the back of a room. A blurred, colour-tinted version of the same artwork also fills the panel background for an immersive ambient effect.
ImpHigher quality cover art on displays - iTunes artwork is now requested at 1000Γ—1000 px instead of 300Γ—300 px when shown on the display screen. The original lower-resolution image is kept as a fallback if the high-res version is unavailable.
FixVoting now works for all guests - Previously, guests who opened the request page before Firebase anonymous sign-in completed would find the vote button silently doing nothing. The vote action now waits for sign-in to resolve before proceeding, so the first tap always registers correctly.
FixUnvoting (removing a vote) now permitted by security rules - The Firestore rules previously only allowed incrementing likes, so the toggle-off action was being rejected server-side. The rules now explicitly allow an authenticated user to remove their own vote, decrementing the count correctly.
v1.2 March 17, 2026 Previous
The Performance & Data Update
ImpPages load up to 40% faster on mobile data - Thousands of lines of duplicate hidden code were removed from Clientside.html and VIP.html. This code was never executed but was being silently downloaded on every visit, wasting mobile data and slowing initial load.
ImpSong suggestion thumbnails use less data - Album art in the autocomplete dropdown now loads at a smaller size (100Γ—100 px), matching the actual display size. The full-quality image only loads when you pick a song. This cuts image data per search session by up to 70%.
ImpFewer API calls while typing - The autocomplete search now waits 500 ms after you stop typing before querying iTunes or Deezer (was 350 ms). On slow mobile connections this prevents unnecessary network requests mid-keystroke without any noticeable delay.
NewDNS pre-resolution on all portals - All three guest-facing pages (Clientside.html, VIP.html, Admin.html) now include resource hints that tell the browser to resolve Firebase and iTunes domains in the background as soon as the page opens, reducing the network cold-start penalty on first use.
ImpAutocomplete thumbnails load lazily - Album art images in the dropdown are now marked lazy-load so they don't compete with the page render for bandwidth, improving perceived speed on slow connections.
v1.1 March 16, 2026 Previous
The Scale & Weather Update
FixUI Scale now covers everything - The scale slider in Local Settings now zooms the full admin panel including the top nav, settings drawer, QR modal, Add Track popup, and Source popup. Previously only the main body area was affected.
FixSettings drawer position corrected - Drawer top edge recalculates dynamically to stay flush under the scaled top nav at any zoom level.
NewWeather chip in top nav - Live weather display using browser geolocation and the free Open-Meteo API (no key required). Shows temperature in Β°C and a WMO weather icon. Hidden silently if location is denied or unavailable.
v1.0 Initial Release
First Release
Initial release of the DJ Request System. Guest request portal (Clientside.html), Admin Desktop (AdminD.html), Admin Mobile (Admin.html), VIP portal (VIP.html), and public display (Display.html). Core Firebase Firestore real-time queue, request submission, confirmation, deletion, and voting.
Masterman Studios Β· Software Division Β· v1.7