GTA Radio project

Development History

From a simple idea for listening to GTA Radio in the car to a self-hosted online radio platform with its own player, server infrastructure and project website.

A note about the version numbers
The version numbers on this page are retrospective development milestones. They were not formal software releases recorded at the exact moment each step happened. They are used to make the development journey easier to understand.
v0.1

The original idea

GTA Radio did not begin with a web application, a Debian server or a graphical interface.

It started with a very simple question: Could I have a GTA-style radio stream that I could easily listen to in my car?

The original goal was not to build a large website. It was to recreate the feeling of GTA radio in a practical way while driving.

The concept included music, DJ segments, commercials, station identity and different GTA games, but above all it needed to be simple.

The ideal experience was:

Get in the car → start the radio → GTA-style radio is already playing.
v0.2

The first approach: a simple radio stream

The first practical solution was deliberately simple. Instead of immediately building a complicated application, the idea was to create a stream that could simply be opened by a media player.

This led to:

radio.stayrich.nl

The address itself could act as the radio. Open the stream and a listening experience starts.

This was particularly interesting for the car because a media player such as VLC could handle the stream without requiring a dedicated application.

v0.3

Randomized radio streams

One of the first useful features was making the stream different every time it was started.

When visiting radio.stayrich.nl, the server could create a randomized listening experience rather than always beginning at exactly the same point.

This made the experience feel more like tuning into an existing radio broadcast. You were joining the radio rather than simply starting an album from track one.

v0.4

The VLC approach

The VLC approach worked surprisingly well for the original use case. VLC could open the stream directly, keeping the system extremely simple.

GTA audio
    ↓
radio server
    ↓
HTTP stream
    ↓
VLC
    ↓
Car

For a technical experiment this was attractive because there was no need to build a complete application just to listen.

v0.5

Discovering the limitation of the simple stream

The stream worked, but everyday use exposed an important problem: the technical solution was simple, but the user experience was not.

The stream could create a random listening position when it was opened. That was useful for joining a radio broadcast, but it also meant that refreshing or reopening the stream could produce another random position.

That was manageable on a computer, but much less convenient in a car. A driver cannot easily refresh a webpage, select another station or inspect technical information while driving.

The original solution therefore solved the problem of getting audio into the car, but it did not completely solve the usability problem.

v0.6

The same problem on desktop and mobile

The limitations were not restricted to the car. On desktop and mobile, simply opening the stream did not provide the kind of interface I eventually wanted.

The audio could play, but there was little context around it. A proper radio interface should be able to show information such as:

  • which station is playing
  • which GTA game it belongs to
  • station artwork
  • radio status
  • playback controls
  • useful information about the current experience

This led to an important conclusion: the stream itself was useful, but the stream should not be the entire user interface.

v0.7

Exploring where the radio should run

Before settling on the final server architecture, several possibilities were considered for hosting the radio.

A local computer

The simplest option was running the radio on an existing computer. This required little additional infrastructure, but an always-on radio should not depend on a computer that might be switched off.

A Raspberry Pi

A small dedicated Linux computer such as a Raspberry Pi was another possibility. It could run continuously, consume relatively little power and act as a dedicated GTA Radio server.

A dedicated Debian server

A proper Linux server provided considerably more flexibility. The radio could run as a system service, restart automatically and operate independently of the device used for listening.

A virtual machine

Running the radio inside a virtualized environment was also considered. An existing always-on machine could potentially host the radio without requiring a separate physical computer.

Existing home-server infrastructure

Another option was to run the radio alongside other self-hosted services. The radio requires relatively little computing power, making it a good candidate for an existing always-on server.

These options helped shape the eventual decision to use Debian as the main radio host.

v0.8

Debian becomes the radio host

The project eventually moved to Debian 12. The radio could now operate independently from the device being used to listen.

                    Debian server
                         │
                    GTA Radio
                         │
               ┌─────────┼─────────┐
               ↓         ↓         ↓
              Car      Phone    Desktop

This was a major architectural change. The radio was no longer tied to a particular computer or listening device.

v0.9

The Python radio server

With Debian as the host, the project evolved into a proper server application.

The central component became:

/srv/gta-radio/radio.py

The Python server became responsible for the radio itself, including the audio files, streaming requests and the logic required to create the radio experience.

The project was moving away from simply serving an MP3 stream toward operating an actual radio service.

v1.0

The stream remains useful

An important decision was not to make the original stream obsolete just because a graphical player was being developed.

The direct stream at radio.stayrich.nl remained useful for VLC and other media players.

                 GTA Radio server
                       │
              ┌────────┴────────┐
              │                 │
        Simple stream       Web player
              │                 │
             VLC          Browser / mobile

This created two different ways of interacting with the same radio: a direct technical stream and a human-friendly web interface.

v1.1

The idea for radio.stayrich.nl/player

The next logical question was: What if the radio had a proper interface, but remained extremely simple?

That led to:

radio.stayrich.nl/player

The goal was not to create a complicated music application. It was to create a simple, intuitive GUI for the radio.

The player would become the place where listeners could interact with the radio without needing VLC or another external media player.

v1.2

Building the intuitive player

The player was deliberately designed around the idea of being simple but effective.

It did not need dozens of controls. It needed the information and controls that actually mattered.

This transformed the project from a technical stream into something that could be used naturally from a browser.

The player became suitable for:

  • desktop browsers
  • mobile phones
  • tablets
  • in-car browser environments
  • general web use
v1.3

Browser compatibility becomes a major project

A stream that works in VLC does not automatically behave the same way in every browser.

The player was tested across:

  • Chrome desktop
  • Safari desktop
  • Chrome mobile
  • Safari mobile

Audio playback policies and browser behaviour introduced new challenges. Features that worked perfectly in desktop Chrome could behave differently in Safari or on a phone.

The player therefore had to evolve around actual browser behaviour rather than assumptions.

v1.4

Connection interruptions and recovery

A real radio player has to deal with real-world connections. Browsers can cancel requests, lose connectivity, suspend pages, reconnect or reload.

Development therefore focused on making the radio and player behave more gracefully when connections are interrupted.

This became particularly important for mobile devices and the original in-car use case.

v1.5

Mobile becomes a first-class use case

Although the project began with the car in mind, the web player naturally expanded the audience to phones and desktops.

The player evolved toward a responsive interface that could be used from different devices without requiring a dedicated application.

v1.6

Audio visualisation experiments

Once the player was functional, I experimented with an audio visualiser.

One important discovery was that an animation that looks like it reacts to music is not necessarily a visualisation of the music.

A genuine visualiser needs access to audio information. This led to experiments with browser audio analysis and introduced another layer of cross-browser development.

v1.7

Station artwork

The next step was making individual stations visually recognisable.

The idea was to keep station artwork alongside the station audio. For example:

/srv/gta-radio/Vice City/

FLASH.MP3
FLASH.JPG

The intended relationship is:

FLASH.MP3
    +
FLASH.JPG
    ↓
Flash FM

This makes the station’s audio and visual identity part of the same structure and allows the player to use the associated artwork.

v1.8

Expanding beyond a single station

The project began moving toward a larger GTA radio library rather than being limited to one station.

The structure was designed to accommodate radio stations from different GTA eras, including:

  • Grand Theft Auto: Vice City
  • Grand Theft Auto: San Andreas
  • Grand Theft Auto IV
  • Grand Theft Auto V

Each game can have its own collection of stations, audio and artwork.

v2.0

Building the self-hosted platform

At this point the project was no longer simply a stream. It had become a small self-hosted platform.

                    GTA RADIO
                        │
                Debian 12 server
                        │
                Python radio server
                        │
          ┌─────────────┴─────────────┐
          │                           │
   Direct stream                 Web player
radio.stayrich.nl          radio.stayrich.nl/player
          │                           │
         VLC                    Browser / mobile
          │                           │
          └──────────────┬────────────┘
                         │
                  GTA radio stations
v2.1

Stayrich becomes the project website

With the technical foundation in place, the project needed a place where the radio could be explained.

Stayrich.nl had originally been acquired with the intention of eventually building a webshop. That webshop was never launched.

Instead, the domain became the home of GTA Radio.

The roles became clearly separated:

  • stayrich.nl — project website, documentation and information
  • radio.stayrich.nl — technical radio environment
  • radio.stayrich.nl/player — interactive radio player
v2.2

Turning the website into documentation

The website gradually became a proper project site rather than simply a landing page for the player.

It expanded around subjects including:

  • the radio
  • Vice City
  • San Andreas
  • GTA IV
  • GTA V
  • technology
  • mobile listening
  • the project itself
  • the creator
  • contact information
  • privacy
  • terms
  • disclaimer

The purpose is to document something that actually exists and is actively developed.

v2.3

A personal project

Another important step was clarifying who is behind the project.

Stayrich is not presented as a company or organisation representing GTA Radio. It is a personal project.

I am the creator, author and owner of the GTA Radio project.

The About page explains the history of Stayrich, including the original webshop idea and how the unused domain eventually became the home of GTA Radio.

v2.4

Improving the website structure

The website received a stronger technical foundation, including:

  • consistent navigation
  • internal linking
  • page-specific metadata
  • canonical URLs
  • XML sitemap
  • robots.txt
  • ads.txt
  • structured data where appropriate
  • privacy documentation
  • terms
  • disclaimer
  • contact information

The aim is to make the website useful and understandable for real visitors while also giving search engines clear information about the structure and purpose of the project.

v2.5

Documenting the development itself

The development process eventually became significant enough to document separately.

It is easy to look at the current system and assume that it was designed this way from the beginning.

It was not.

The project evolved by solving one practical problem at a time.

Car
 ↓
Simple stream
 ↓
VLC
 ↓
Randomized stream
 ↓
Usability limitations
 ↓
Debian server
 ↓
Python radio server
 ↓
radio.stayrich.nl/player
 ↓
Browser compatibility
 ↓
Mobile support
 ↓
Connection recovery
 ↓
Audio visualisation
 ↓
Station artwork
 ↓
Self-hosted platform
 ↓
Project website
 ↓
Documentation
 ↓
Home screen app icon

That iterative process is an important part of what GTA Radio is.

v2.6

An app icon for the home screen

GTA Radio is a web player, not an app store application. That does not mean it has to look like a bookmark.

I created a dedicated app icon, using AI tools to help with the design. When the player is opened in a mobile browser, choosing Share and then Add to Home Screen now gives the radio a proper icon instead of a generic page thumbnail.

The GTA Radio app icon: a row of glowing pink and purple equaliser bars above a white line on a dark background.
The GTA Radio app icon as it appears on a phone home screen: glowing equaliser bars on a dark background, matching the look of the player.
Open the player in the browser
            ↓
        Share
            ↓
   Add to Home Screen
            ↓
 GTA Radio icon on the home screen

This fits the original goal of making GTA Radio easy to start. The radio is now one tap away, just like a real application, while still running entirely as a self-hosted web player.

v2.7

Artwork for every station

The station artwork idea introduced in v1.7 has now been carried through the whole library.

Every station that is currently available has its own artwork, which the player uses to show which station is playing. The audio and the artwork for a station live together, so a station is no longer only something you hear, but also something you recognise.

Station audio
     +
Station artwork
     ↓
Radio station
     ↓
Web player
v2.8

A smarter randomizer

The random button had been part of the player since the early days, but it was truly random, and that has a downside. Press it a few times and the same station could come back straight away, or return again and again within a few presses. That does not feel like flicking through a real radio dial.

The randomizer now remembers the stations you listened to most recently. When you leave a station, that station is skipped for your next three random picks. If you were listening to West Coast Classics and press random, the next three stations are guaranteed to be something else.

Listening to a station
     ↓
Press RANDOM
     ↓
Recent stations are left out
     ↓
A different station is chosen

Every listener has their own history, so one person pressing random never affects what someone else hears. If a game has too few stations to leave any out, the rule relaxes automatically instead of leaving the radio with nothing to play.

It is a small change, but it makes random feel more like discovery and less like luck.

Station structure

Building the station experience

The station library is organised so that the radio server and the player pick up each station and its artwork automatically.

The Vice City directory shows the principle:

/srv/gta-radio/Vice City/

FLASH.MP3
FLASH.JPG

The radio system understands the station from these files and uses the associated artwork in the player. This now works for all existing stations, and the same approach is the foundation for every new station that is added.

Station audio
     +
Station artwork
     +
Station metadata
     ↓
Radio station
     ↓
Web player
Beyond the current library

Other GTA games

The library currently covers Vice City, San Andreas, GTA IV and GTA V. Other games in the series may follow once their stations and matching artwork are ready.

Where things stand now

The project today

The project has evolved into several connected layers.

                         STAYRICH.NL
                              │
                       PROJECT WEBSITE
                              │
                  Documentation & history
                              │
                       GTA RADIO PROJECT
                              │
                     Debian 12 server
                              │
                    Python radio server
                              │
             ┌────────────────┴────────────────┐
             │                                 │
       Direct stream                      Web player
    radio.stayrich.nl              radio.stayrich.nl/player
             │                                 │
            VLC                       Browser / mobile
             │                                 │
             └────────────────┬────────────────┘
                              │
                       GTA radio stations
                              │
       ┌───────────┬──────────┴──────────┬───────────┐
       │           │                     │           │
   Vice City   San Andreas             GTA IV       GTA V
       │
   Flash FM
   V-Rock
   ...

The original goal has remained surprisingly consistent: make GTA Radio easy to listen to.

The technology around that idea has simply grown.

The story so far

What started as a car experiment

The most interesting part of GTA Radio is how little the original motivation has changed.

The project did not start with the intention of building a website, visualiser or server platform.

It started with:

I want to be able to listen to GTA Radio easily in my car.

The first solution was a simple stream.

Then VLC.

Then the limitations of that approach became clear.

That led to a better server, a web player, mobile support, browser compatibility, connection recovery, visualisation, station artwork, infrastructure and eventually a full project website.

Every new layer exists because the previous solution revealed something that could be improved.

That iterative process is the core of GTA Radio.

Current status

Where the project stands

GTA Radio is a personal technology project. The radio and this website are online and maintained, and I keep improving them as I go.

The ongoing direction is guided by the same principles that shaped the project from the beginning:

  • simple to use
  • reliable
  • accessible from different devices
  • self-hosted
  • visually recognisable
  • technically interesting
  • easy to expand with new stations

The project started with a stream that could be opened in VLC. It has grown into a self-hosted radio platform with its own player, server infrastructure and documentation.

And I keep improving it, one practical problem at a time.

About GTA Radio

GTA Radio is an independent fan and technology project created and maintained independently.

AI tools assist with development and design. I remain responsible for the project. How I use AI

The project is not affiliated with, endorsed by, or sponsored by Rockstar Games or Take-Two Interactive.

Grand Theft Auto and related intellectual property belong to their respective rights holders.

The purpose of GTA Radio is to explore the technology and listening experience surrounding GTA-style radio through an independently built, self-hosted web radio system.

About the creator · Technology · Listen to GTA Radio

Status: Online and maintained