24Seven.FM PlayerProject portal GitHub

Product experience

What the Alpha can do

The player combines five distinct station experiences in one native Android application without flattening their differences or replacing them with a WebView.

01 · Listening

Playback belongs to the service

A single Media3 player and MediaSession own the live stream beyond the Activity lifecycle. The UI connects through a domain-facing controller, so playback survives navigation and backgrounding without coupling Compose to ExoPlayer.

Atomic station switching

Selecting a station replaces the live item and its ordered fallback as one operation. Two stations cannot play simultaneously.

System integration

Notification, lock-screen, headset, Bluetooth, audio-focus, and play/pause controls stay synchronized through MediaSession.

Network recovery

An offline terminal failure becomes an explicit waiting state. One automatic prepare occurs after validated connectivity returns; pause, stop, or switching cancels it.

Sleep Timer

Presets or a custom 1–720 minute duration run inside the playback service, publish a live countdown, survive service recreation, and stop the existing player at expiry.

02 · Discovery

Live context without invented metadata

Station responses are treated as evidence. The app displays fields the station actually provides, enriches artwork only from the selected station, and leaves unavailable values unavailable.

  • Now playing: ICY title, station artwork, and current-track enrichment.
  • Queue and History: bounded upcoming and recently played tracks with requester attribution where explicit.
  • Library search: Title, Album, Artist, and Genre modes with station-order or play-state sorting.
  • Favorites: number, name, album, artist, genre, year, length, and play-state sorting across lists as large as 1,500 tracks.
  • Request availability: conservative Queue/recent-play checks repeated against fresh data before confirmation.
Station selection screen showing the five supported stations
Five-station navigationOne adaptive native shell, station-scoped state

03 · Accounts and requests

Protected sessions remain independent

Each station has a separately visible session. Credentials remain transient during sign-in, returned cookies are encrypted with Android Keystore, and sign-out clears only the selected station.

Explicit request workflow

Search, album browsing, least-played and random suggestions lead to a separate confirmation step. State-changing requests are one-shot and never automatically retried.

  • Fresh eligibility check before submission
  • Station success, rejection, or indeterminate result
  • Verified optional SST request message

Listener activity

Verified stations can expose memory-only recent request summaries, cooldown/readiness, and explicit membership evidence. Generic page wording never implies VIP or RIP status.

  • No background polling
  • Cleared on station sign-out
  • Unsupported states remain explicit

04 · Community and safety

Participation is gated and user-controlled

Public community content is hidden until the adult age screen, current Terms, and a separate mature-content reveal are satisfied. Reporting and blocking are native actions, not buried browser destinations.

More screen with account, community, privacy, and station resources
Capability-aware MoreAccount, safety, privacy, and verified station resources
  • Chat: bounded, station-scoped, memory-only messages with a 30-second minimum refresh interval.
  • Report content or user: bounded evidence sent only after an explicit action through an authorized same-station Contact Us form.
  • Local blocking: station-scoped identity filtering for Chat and requester attribution with a native management surface.
  • Local mention alerts: opt-in exact-name matching, first-snapshot baseline, blocked-author filtering, duplicate suppression, private no-message-text notifications, and gated Chat navigation while Chat is actively refreshing.
  • Terms and privacy: native access to the participation terms, privacy notice, and open-source licenses.
  • Trusted station pages: exact same-station HTTPS links open in a browser Custom Tab without copying protected app sessions.

Station certification

Shared architecture, verified differences

Every station uses the same domain contracts and UI. Capability flags expose only behavior supported by evidence from that station.

StationShared certified surfaceNotable verified boundary
StreamingSoundtracks.comPlayback, metadata, Queue/History, account, Chat, Favorites, requests, pagesRequest messages, last-ten request activity, VIP evidence
1980s.FMPlayback, metadata, Queue/History, account, Chat, Favorites, requests, pagesIndependent session and verified Games/Awards pages
Adagio.FMPlayback, classical metadata, Queue/History, account, Chat, Favorites, requests, pagesClassical field presentation without guessed values
Death.FMPlayback, sparse metadata, compact Queue/History, account, Chat, Favorites, requests, pagesRIP membership route instead of VIP wording
Entranced.FMPlayback, metadata, extended Queue/History, account, Chat, Favorites, requests, pagesNarrowly scoped legacy ICY punctuation normalization

Honest Alpha boundaries

What is deliberately not shipped

M17

Private Messages

Deferred after Inbox/Sent discovery and a reproduced profile-originated message that appeared to submit but was not delivered. It remains excluded until the legacy server path is repaired and verified.

M25–M26

Pre-Alpha listening and support

M25's dedicated Android output chooser and current-route state are complete without a relay or new endpoint. M26 adds a user-reviewed, fixed-allowlist support snapshot with explicit Android copy/share and no automatic transfer. Google Cast remains capability-gated.

M27

Community notifications

M27.1's station controls and local Chat-mention detector are complete for actively observed Chat. Reliable closed-app push remains gated on an authorized event source; the same architecture will notify new Private Messages once M17 delivery is repaired and verified.

External

Station availability

The app depends on independently operated public station interfaces. Protocol or content changes can require renewed research and certification.

See the complete roadmap and remaining release gates