Embed the station. Anywhere.
One iframe, no JS to install, no API key. Pick a size, paste the snippet, and the card updates itself when the next track lands.
Banner · dark
360 × 88Default. Sits nicely under a hero or in a sidebar.
<iframe src="https://kev.fm/embed/now?size=banner&theme=dark" width="360" height="88" loading="lazy" frameborder="0" scrolling="no" title="Now playing on kev.fm" style="border:0; border-radius:4px;"> </iframe>
Banner · light
360 × 88Same shape, lighter palette for light-themed sites.
<iframe src="https://kev.fm/embed/now?size=banner&theme=light" width="360" height="88" loading="lazy" frameborder="0" scrolling="no" title="Now playing on kev.fm" style="border:0; border-radius:4px;"> </iframe>
Square · dark
280 × 280Artwork-forward. Use where a square fits better than a strip.
<iframe src="https://kev.fm/embed/now?size=square&theme=dark" width="280" height="280" loading="lazy" frameborder="0" scrolling="no" title="Now playing on kev.fm" style="border:0; border-radius:4px;"> </iframe>
Mini · dark
280 × 44Single line. Discreet — good for footers and corners.
<iframe src="https://kev.fm/embed/now?size=mini&theme=dark" width="280" height="44" loading="lazy" frameborder="0" scrolling="no" title="Now playing on kev.fm" style="border:0; border-radius:4px;"> </iframe>
Want JSON?
The raw "what's playing now" feed is at /api/now — CORS is open, cache-control is no-store, the shape is:
{
"state": "playing" | "empty",
"serverNow": <unix seconds>,
"startedAt": <unix seconds>,
"endsAt": <unix seconds>,
"track": {
"id": <number>,
"title": <string | null>,
"artist": <string | null>,
"provider": <string>,
"url": <string>,
"embedUrl": <string | null>,
"audioUrl": <string | null>,
"artworkUrl": <string | null>
}
}Build something cool? Send the link to hello@kev.fm.
