For hackathon judges

One sentence, five services, and a station that remembers you.

Alexa+ keeps the current conversation. Amazon leaves memory across sessions to each add-on, so Radio Commons keeps it: the artists you follow, the list you were just shown, and what changed since you last asked.

Built by Tarik Moody, Director of Strategy and Innovation at Radio Milwaukee for nearly 20 years: a station building for stations.

The two-session demo

Session 1 · Tuesday

“Save this.”

A listener hears a song on HYFIN and asks Alexa+ to save it. One reply covers the save, Apple Music, the follow, the next local show and the station’s own story.

Alexa, save this.

Saved "No ID" by Tank & The Bangas to your 88Nine Finds, and I'm adding it to Apple Music. I'll keep an eye out for Tank & The Bangas — they play Majestic Theatre in Madison on Tuesday, October 20, and we have their Studio Milwaukee story.

Real data from the playlist, as of October 4, 2026

The song played on HYFIN. Shows are looked for in Milwaukee first; with no Milwaukee date, the next one is in Madison. The story is the station’s “Studio Milwaukee Session: Tank & The Bangas.” “Save number 3” works too: we remember the numbered list on screen for 30 minutes, on any device.

Session 2 · days later

“What’s new for me?”

A new conversation. Alexa+ has forgotten the first one; Radio Commons hasn’t. The digest is built from what the station’s DJs actually played, who is playing in town, and the station’s own stories.

Alexa, what’s new for me?

Since your last visit: Rhythm Lab played Tank & The Bangas 10 times, 88Nine 3 times and HYFIN twice. Tank & The Bangas plays Majestic Theatre in Madison on Tuesday, October 20.

Real data from the playlist, as of October 4, 2026

A show in the next week comes first, then the artists the station played most, then new station stories, then Apple Music news. Alexa speaks the top three items; an Echo Show also shows a card with a tile per artist. A brand-new listener with nothing followed hears the station’s current picks instead.

One sentence, five services

What happens after “save this”, in order.

  1. Playlist

    Identifies the play: “number 3” from the list on screen, or the song and artist.

  2. Finds

    Saves it to the listener’s 88Nine Finds, in the station’s playlist database.

  3. Apple Music

    Adds it to the listener’s library. A background job, so the reply never waits.

  4. Concerts

    Follows the artist and finds their next show from AXS and Ticketmaster listings, Milwaukee first.

  5. Backstory

    Finds the station’s stories about the artist. A background job, refreshed daily.

The slow parts run off the listener’s path: background jobs store their results, and the next reply reads what is stored. The reply only mentions what is ready.

What we remember, and how to erase it

  • Your saved songs

    Artist, title, station and when you saved them. Your 88Nine Finds.

  • The artists you follow

    Including ones you follow by saving their song, and ones you told us to stop following, so a later save doesn’t follow them again.

  • The last list you were shown

    Used for 30 minutes so “save number 3” means the song you saw, then replaced by the next list.

  • When you last asked what’s new

    So the digest tells you only what changed since then.

Say “Alexa, delete my Finds” and all of it is erased, along with the Apple Music connection. It lives in one database, next to the songs it points to, so there is one place to erase it.

We remember exact facts, not things said in passing. No voice recordings, no email address and no name are stored with them.

Why our own tables and not an AI memory service: the things worth remembering are exact song and artist ids, and the playlist database already holds the songs, artists and concerts they point to.

Read the privacy page · Terms of use

Try a donation (sandbox)

Say “I want to support Radio Milwaukee”: a monthly membership by voice, paid with Amazon Pay, cancelled by voice. It is Amazon Pay’s sandbox (a practice mode), so no real money moves, ever.

  1. In the simulator, say “I want to support Radio Milwaukee” and tap a level, or open /give?tier=ga-monthly.

  2. Main Floor and up come with a thank-you gift. Keep it and pick a t-shirt size, or choose “No gift — all of it goes to the station”. With a gift, Amazon Pay asks for the shipping address on its own page. Nothing actually ships in the demo.

  3. On the Amazon Pay page, sign in with the sandbox test buyer from the Devpost testing instructions. Card ending 1111 always works; 3434 shows a decline.

  4. The thank-you page shows the receipt and where the gift would ship (name, city and state). Press “Simulate next month” to see the second monthly charge.

  5. In the linked simulator, say “what’s new for me” and it mentions the membership.

  6. Then say “cancel my Radio Milwaukee membership”, then “yes”.

Use a private or incognito window, or sign out of Amazon first. A real Amazon login is refused with “Your order can’t be completed with this account.”

The test buyer’s email and password are in the Devpost testing instructions, not on this page.

Built on Alexa+

Add-on manifest

alexa/addon-package/addon.json: Amazon’s add-on manifest, with an MCP integration pointing Alexa+ at our endpoint and example phrases such as “Save that song” and “What’s new for me”. Deployed with npm run alexa:deploy (Amazon’s alexa-ai CLI).

MCP 2025-11-25, Streamable HTTP

One endpoint, /api/mcp, with tools for stories, the weekly briefing, events, songs, the 88Nine schedule, Finds, listener memory and membership. Tools that touch a listener’s own data need a linked account.

Account linking, per Amazon’s spec

Clerk as the sign-in server: OAuth 2.1 with PKCE (S256), refresh tokens, the add-on sends the RFC 8707 resource parameter during account linking, and RFC 9728 protected-resource metadata at /.well-known/oauth-protected-resource.

MCP Apps cards

Every answer works by voice alone, and on an Echo Show it also returns a card built to Amazon’s MCP design guide: song lists with artwork and 30-second previews, and the digest.

Limits, plainly

  • Station stories appear only for artists Radio Milwaukee has covered, such as its premieres and Studio Milwaukee sessions.
  • No proactive notifications: Amazon doesn’t document them for add-ons, so the digest waits for the listener to ask.
  • Amazon isn’t giving hackathon participants the Alexa+ developer tools, so judges can try every tool in our simulator, which calls the same MCP server.

Built on AWS

Amazon Bedrock

Claude Haiku 4.5 through the Converse API does two jobs. In Backstory it pulls people, places and actions out of every transcript, each with a word-for-word quote that is checked before an editor sees it (backstory convex/aws/extract.ts). In the simulator it plays Alexa+, calling the real MCP server with tool use (src/lib/sim/brain.ts).

Amazon Polly

The simulator’s voice. Replies stream through a short-lived signed link, so the first words play about half a second after the reply is ready (src/lib/sim/tts.ts).

Amazon Location Service

Map pictures on the Echo Show cards and the pan-and-zoom map (the key stays on the server: src/app/api/map/route.ts, src/lib/map/staticMap.ts); geocoding and place details (phone, website, hours) for every place in a story (backstory convex/aws/geocode.ts, placeDetails.ts); 154 of 155 event-guide venues pinned for about $1.25.

Amazon Transcribe and S3

Backstory’s fallback transcriber (backstory convex/aws/transcribe.ts). A 19-episode bake-off chose Deepgram as the default for local names; the AWS path stays one setting away (TRANSCRIBER=transcribe).

Status

As of October 4, 2026.

What a listener can doState
Save a song to Finds and Apple MusicVerified end to endLive
Song recall and recent songs (artwork, 30-second previews)88Nine, HYFIN, Rhythm Lab, 414 MusicLive
Credits and the story behind a songLive
Alexa+ account linking and the add-on manifestPer Amazon’s specLive
Listener memory in the playlist databaseFollows, last list, digest data, Backstory stories, daily refreshLive
Support Radio Milwaukee: monthly membership with Amazon Pay, cancel by voice (sandbox, no real money)Live
Station stories: This Bites, Uniquely Milwaukee, Ladies First, Radio Milwaukee Artist Interviews, Music Premieres, Studio Milwaukee SessionsFind by what you remember, play, ask a detail question; every story published by an editorLive
Weekly station briefing: “What’s new at Radio Milwaukee this week?” from the 88Nine newsletterEach item opens its story, Concert Picks or the page (since October 5)Live
88Nine schedule: who’s on, when a show airsSince October 5Live
Artist and title searchAbout two weeks of plays (today: about a day)In this release
“Save number 3” on any deviceIn this release
The one-sentence save replySave, Apple Music, follow, next show, station storyIn this release
Follow and stop followingIn this release
“What’s new for me?” and its cardIn this release