Updates

Changelog

Notable changes for Users (public directory, player, and accounts) and Broadcasters (Radio Dashboard). Admin-only work is usually omitted.

2026-04-27

Account and dashboard links in emails use full URLs

Users

  • Password reset and email verification messages now put a full https link in the message (with the correct site host), so the button or link works from your inbox even when the site address setting points at another hostname.

Broadcasters

  • Submission decision emails and support ticket reply emails now use full https links to your Radio Dashboard pages when the public site runs on a hostname that differs from the main site URL in settings.

2026-04-26

Station page AI can use Google Search when the official site is very thin

Users

  • When staff generate the optional station page blurb and keywords, if the station official website returns almost no readable text, the job can run a follow-up step that uses Google Search so Gemini still has verified web context. Rich pages still use only the downloaded official site text.

Broadcasters

  • No change is required in Radio Dashboard. If many stations stay on skipped with thin pages, staff can set the Station page AI Gemini model to one that supports search grounding (for example gemini-2.0-flash) in Admin, Settings, Station page AI.

2026-04-25

Countries and genres pages now include SEO intro text

Users

  • The public directory pages at /countries and /genres now show a short intro paragraph under the page title, so visitors and search engines get clearer context before the station lists.

2026-04-25

Smarter station pages: keywords and a blurb from the official site (when enabled)

Users

  • On a station’s page, when the team has run the optional Google Gemini pass for that directory entry, the page can include a short, factual blurb in a non-visible block (so search engines that read the full page see it) and a list of topic-style keywords in the page’s meta and Open Graph tags. This uses only what was readable from that station’s official website link, and only for stations that are on air on Streamitter with both a site and a stream. Nothing changes on a station’s page until staff run the generator in Admin and your row completed successfully.

2026-04-25

Sign in works again on radio.streamitter.com

Users

  • Fixed an issue where clicking Sign in on radio.streamitter.com seemed to do nothing. Old session cookies left over from an earlier configuration were colliding with the current one; the site now uses a fresh cookie name and clears those leftovers automatically on your next visit, so you can sign in normally.

2026-04-25

Approved submissions clear stream failure reports

Broadcasters

  • When staff approves your new station or update submission, any open stream failure entry for that station is closed automatically, so it no longer appears on the open Stream failures list for the team.

2026-04-25

Streamitter Lab: board category filter

Broadcasters

  • On the Lab board, the category filter lists only categories that already appear on at least one post, so the menu stays aligned with what is on the board.

2026-04-19

Bottom player: current track when the stream sends it

Users

  • While a station is playing, the line under the station name can show the current artist and title when the broadcaster's stream sends standard ICY metadata (many Shoutcast and Icecast mounts). If the stream does not send titles, that line stays empty. The small popup player uses the same feed.

2026-04-16

Station pages: optional ad placements

Users

  • Public station profile pages can show two optional Google AdSense areas when the team configures them in Admin under Site settings, Tracking: one above the Related Stations list in the sidebar and one in a wide strip just above the site footer. Nothing new appears until those unit fields are filled and AdSense is enabled.

2026-04-12

HTTP API: submit new stations from your own server

Broadcasters

  • Radio Dashboard includes HTTP API access: create a secret, then your server can POST JSON to /api/v1/broadcaster/station-submissions/create/check-duplicates and /api/v1/broadcaster/station-submissions/create. Duplicate detection matches the Add station form; successful creates land in the same submission queue (include logo_url as an HTTPS image link, Streamitter downloads and processes it like an uploaded logo).
  • Tokens from Radio Dashboard, HTTP API access, authenticate correctly for those routes (a server bug had omitted the linked user id when validating the token, which caused 403 FORBIDDEN even with a valid key).
  • When you send X-Api-Key or Authorization: Bearer, that credential is used before any browser session, and broadcaster sessions without a usable user id are skipped, so you no longer get 401 Broadcaster identity is required on duplicate check while your Radio token is valid.
  • Apache front controller now forwards the Authorization header into PHP before the rewrite ends, and the API reads REDIRECT_HTTP_AUTHORIZATION and getallheaders() when needed. If Bearer still disappears on your stack, send the secret as X-Api-Key instead.
  • Broadcaster duplicate and submit endpoints also accept the token in the JSON body as streamitter_api_access_token (or query streamitter_api_key), and the example client sends Authorization, X-Api-Key, and that JSON field together so authentication survives broken proxies.
  • Submit step validates logo_url: the server must download a real JPEG, PNG, or WebP over HTTPS (HTTP 200). The PHP example uses a small public PNG by default and supports env STREAMITTER_LOGO_URL; LOGO_INVALID responses now include error.details with a short hint and the URL that was tried.
  • Station submission JSON accepts camelCase aliases (streamUrl, countryId, …), resolves country from country_iso2 or labels like Spain (ES), and resolves genres from genre_names or genre text (comma, slash, or " or "). insufficient_data from duplicate check now includes message, issues, and hint so integrators see why name or stream_url failed.
  • Taxonomy expansion now prefers ISO and text country or genre fields over numeric country_id and genre_ids, validates numeric ids against Streamitter tables, and treats a two-letter country string as ISO2 so external tools are not mapped to the wrong country or genre in admin review.
  • Submit validation errors (HTTP 422, code VALIDATION_ERROR) now include which fields failed in the main error.message; full per-field strings remain under error.details.fields.
  • Broadcaster HTTP API create submit no longer requires at least one genre: omit genre fields or send an empty list when TuneIn or another source has no category, so imports do not invent wrong genre ids. The Radio Dashboard web form still requires genres for manual creates.
  • Staff notes and a PHP sample live under Admin, Settings, HTTP API, and in docs/examples/broadcaster-station-submission-client.php in the codebase. The Radio Dashboard HTTP API access page and the admin HTTP API section describe the same browser-safe header behavior.

2026-04-23

Station play buttons: loading and error states

Users

  • Round play buttons on station cards (and the same control on related lists) show a spinner while the stream is connecting, a stop icon while that station is playing, and a warning icon when playback stalls or the stream cannot be reached.
  • Those round controls use even padding and flex centering so the play, spinner, stop, and warning icons sit in the middle of the circle (the play glyph keeps a small optical nudge only for the triangle).

2026-04-22

Admin: smarter stream URL duplicate detection

Broadcasters

  • Station stream duplicate checks (admin duplicates page and submission warnings) use a stored duplicate key that keeps identity query parts for Spacial listen URLs (sid, rid), Sharp icecast.php (i), path-only keys for exclusive.radio, and path-only for Spacial /api/{numericId} links while dropping ref and id noise.
  • Other hosts keep the URL path and non-tracking query parameters (common UTM and click ids are stripped). After deploy, run the SQL migration for url_dup_key, then php scripts/backfill-stream-url-dup-key.php so existing streams pick up the new keys.

2026-04-21

Site reliability: PHP 8.4 and remember me

Users

  • The internal settings helper now uses an explicit nullable key parameter for PHP 8.4, so hosts that treat implicit nullable deprecations as errors no longer white-screen every request.
  • Remember me token creation truncates the browser user agent with a safe fallback when multibyte string helpers are missing, so persistent login no longer fatals on minimal PHP builds.
  • If PHP is built without the mbstring extension, the app loads minimal byte-based shims for common mb_* calls so the home page, station cards, and other views no longer fatals (enable php-mbstring for full UTF-8 behavior).

Broadcasters

  • The Radio Dashboard and admin use the same mbstring shims when the extension is missing, so broadcaster tools load instead of failing on mb_strlen or mb_substr.

2026-04-20

Player bar: single main control

Users

  • The bottom player uses one main button: play when idle, stop while audio is playing. The separate stop control is removed. Station cards still use play and pause for the current station.
  • On small screens (max-width 767px), the mute control and the whole volume block are hidden so the bar stays simple; the main play/stop button moves to the right. Wider layouts keep mute, volume slider, and popup as before.

2026-04-19

Pagination: three page numbers between ellipses

Users

  • Long page lists now show at most three page buttons between the first page and last page gaps (previous, current, next), for example: 1, …, 10, 11, 12, …, 26 when you are on page 11.

2026-04-18

Home: Most listened row

Users

  • The Most listened block on the home page now lists six stations instead of five.

2026-04-17

Footer Resources: Lab and Streamitter API

Users

  • Under Account, Resources links to Streamitter Lab and Streamitter API. Changelog is no longer in the footer (the /changelog page is unchanged).
  • Guests who open Lab from the footer are prompted to sign in, same as other logged-in areas.

2026-04-16

Home page section bands and headings

Users

  • Featured, Stations in (country), Recently added, Most listened, and From the blog each use the same soft tinted band inside the main content column.
  • Homepage headings now use sentence case: Recently added, Most listened, and From the blog.
  • Horizontal rules between those homepage sections are removed; spacing comes from each section margin and band only.

2026-04-15

Footer: Resources under Account

Users

  • The footer no longer lists API business contact. Under Account, a Resources heading links to the API overview and the Changelog.
  • Resources under Account uses the same flat footer link styling as the other columns (no separate shaded box).
  • The Information column keeps About, Contact, FAQ, and Blog only.
  • On the Streamitter API page, the capability map (feature grid) sits on a soft tinted panel with rounded corners; it stays within the normal content width so mobile gutters match the rest of the page.

2026-04-14

Streamitter Lab: board URL and welcome notice

Users

  • Approved Lab members open the board at /lab/board; visiting /lab sends you straight there. A short welcome alert on your dashboard links to the board until you dismiss it.
  • Board wording covers suggestions for features, fixes, and improvements, not only generic "ideas".
  • Older /lab/ideas links redirect to /lab/board with HTTP 301.

Broadcasters

  • The same board landing path and dismissible welcome alert apply from the Radio Dashboard after Lab approval.

2026-04-13

Streamitter Lab (invite-only feedback)

Users

  • Your dashboard sidebar includes Streamitter Lab: a small space to request access, then (once approved) post suggestions, upvote, and comment to help prioritize improvements. Access is manual, not automatic.

Broadcasters

  • The same Streamitter Lab entry appears in your dashboard sidebar so you can join the feedback board with your broadcaster account when you are approved.

2026-04-12

Old station URLs redirect after renames

Users

  • When a station’s public URL slug changes, bookmarks and links that still use the old slug are sent with HTTP 301 to the current slug on the station page and on the large popup player.

Broadcasters

  • After a submission update is approved or an admin edits a station, any slug change is recorded so former public URLs keep working (same for TuneIn import sync when the synced name changes the slug).

2026-04-12

Featured stations with schedules

Users

  • The home page shows a Featured section (up to six stations, random order on each refresh when more qualify). Most Listened now appears under Recently Added.
  • Station pages include Featured stations under the main station card (excluding the current station). Search’s Featured filter only lists stations inside their active window.
  • Station pages add clearer space above Featured stations so the heading does not sit flush against the station card.

2026-04-12

Main nav: Home, Search, and API links removed

Users

  • The top navigation no longer includes separate Home, Search, or API items; the site logo still goes to the home page, the search box on wide screens still submits to search, and the Streamitter API page stays in the footer under Information.

2026-04-12

New-tab stream control in the player

Users

  • For stations that only play outside the embedded player, the bottom bar shows a single Open stream in new tab button and a short status line so the same phrase is not repeated twice.
  • For those stations, generic lines like Ready are hidden while the new-tab action is shown so the title and button sit more centered next to the artwork.
  • On the station page, new-tab-only stations use an Open stream in new tab primary action instead of Play, and the Stop control is omitted.
  • New-tab-only streams: that control and the main player play action now open the stream URL in a new browser tab (not only the small link in the bar).

2026-04-12

Streamitter API page CTAs simplified

Users

  • The API overview no longer shows Request early access, Partnership, or API business contact buttons; join the waitlist from the page or open API business contact from the site footer under Information.

2026-04-12

FAQ page layout aligned with API page

Users

  • The FAQ uses the same section styling as the Streamitter API page: wider content column, help center eyebrow, and the accordion inside a soft card for clearer hierarchy.

2026-04-12

API business contact form and footer links

Users

  • The footer Information column links to Streamitter API and a dedicated API business contact form at /api/contact for partnerships, waitlist, and early access (separate from general Contact).
  • Join waitlist on the API overview opens that form with the waitlist inquiry type prefilled.

2026-04-12

Streamitter API preview page

Users

  • New /api page outlines the future Streamitter API for partners and developers (live radio metadata, discovery, integrations). It is preview-only copy, not live API documentation.
  • Discover in the footer and main nav, plus the site map, links to the API page.

2026-04-12

Genre picker on station forms

Broadcasters

  • Add and edit station: genres use a search field with a dropdown (popular genres first, then the full list), tokens inside the field, and keyboard support (arrows, Enter, Backspace). Up to three genres, same as before.

2026-04-12

Public blog, scheduling, and sitemap

Users

  • Blog listing and posts: content with status Published shows as before; posts left as Scheduled also appear once their scheduled time is in the past.
  • Home page shows a short From the blog section when there is at least one visible post; Information in the footer includes a Blog link.
  • Search engines get a sitemap-blog.xml file (linked from sitemap.xml) with the blog index and each visible post URL.

2026-04-12

Mobile nav, player, favorites, and station form polish

Users

  • Mobile menu: solid panel and button-style nav links (search removed from the menu; Login and Register each have an icon; Register matches other items).
  • Home hero hides the large logo on small screens; hero and search placeholders are shorter or smaller so they fit.
  • Station cards: tapping play while the same station is playing now stops playback.
  • Favorites: up to 24 stations per page (site setting), six-wide grid on large screens, and Play opens the station page; playback from ?play=1 runs after the player finishes initializing.

Broadcasters

  • Add station: stream format is optional; Licensed broadcaster defaults on; X (Twitter) field uses an x.com placeholder; Options blocks have clearer spacing and help text.
  • Station form: stream format label no longer says optional; public email toggle uses a form label Email is visible (helper line removed).

2026-04-12

Changelog link in the footer

Users

  • The Changelog is linked under Information in the site footer so you can open it from any page.

2026-04-12

Changelog grouped for Users and Broadcasters

Users

  • Each dated entry splits notes by audience: Users covers the public site, player, directory, and listener-facing pages.

Broadcasters

  • Broadcaster-only updates appear under Broadcasters when a release touches the Radio Dashboard, station editing, or broadcaster support flows.

2026-04-12

Hero headers on help and legal pages

Users

  • Contact, FAQ, About, Privacy Policy, and Terms now use the same gradient hero strip as the blog and changelog (clearer page title and short intro).
  • Shared content heroes now include styled section badges and a large decorative icon where space allows (lg screens and up).

2026-04-12

API overview page at /api

Users

  • The public HTML overview at /api is restored and expanded (base URL, auth, health route, and contact link).
  • Apache: /api is forced through index.php so a stray public/api folder cannot hide the page.

2026-04-12

Site copy and admin recovery

Users

  • Restored admin station edit and static pages after a bad bulk edit; no listener-facing feature changes beyond safer defaults.
  • Public copy avoids em dashes: use commas, colons, parentheses, or a spaced hyphen instead.