Inspiration
Music recommendation systems usually start with what we already listen to. But our interests go far beyond music. The films we watch, games we play, books we read, and cultural aesthetics we enjoy can all say something about the music we might want to discover.
I wanted to build something that connects those worlds instead of relying entirely on familiar artists, genres, or listening history. As I personally discovered so many amazing artists through those interests adjacent to music.
That idea became CrossSignal: The Culture Radio, a music-discovery application where your cultural interests become the starting point for a personalized radio experience.
What it does
CrossSignal combines Qloo's cultural intelligence with a Gemini-powered AI Radio Host to help users discover music through their interests.
For example, a user can ask:
"I love Interstellar and Cyberpunk 2077. Find atmospheric rock from the 2000s and surprise me with some lesser-known artists."
The AI Radio Host can interpret the request, search Qloo for the cultural references, apply relevant genre and release-era preferences, and run music discovery automatically.
The resulting artists are displayed with supporting cultural connections, available tracks, artwork, previews, and links to music services.
CrossSignal also includes:
- Manual exploration of films, TV, anime, games, books, creators, brands, places, and aesthetics.
- Genre preferences, release-era filters, and familiar-to-adventurous discovery settings.
- Artist likes, dislikes, and additional recommendation mixes.
- A personal playlist with reordering, removal, copying, and CSV export.
- Responsive Daylight and After Hours visual themes.
Users can switch between the manual discovery experience and the optional AI Radio Host.
How we built it
The application uses React, TypeScript, Vite, and Tailwind CSS for the frontend, with Python and FastAPI for the backend. It is packaged with Docker and deployed on Render.
The AI Radio Host uses Google Gemini function calling to select and execute three application tools:
1. find_interest
Searches Qloo for cultural entities or tags and resolves their real identifiers. Ambiguous matches are not silently treated as confirmed interests.
2. set_music_preferences
Translates natural-language music preferences into supported genres, release eras, and discovery settings.
3. tune_radio
Runs CrossSignal's recommendation pipeline using the Qloo Insights API. It retrieves artists associated with the selected interests, applies preference and feedback filters, and verifies available tracks through the Apple iTunes Search API.
The backend performs the actual tool operations. Gemini controls which tools to invoke, while CrossSignal's deterministic ranking and validation logic handles the results.
This separation is important: the AI does not invent artists or songs to fill a recommendation list. Qloo supplies cultural associations, and the music catalog provides real track information.
The application also displays a trace of executed tool actions. Users can see whether the agent resolved an interest, applied preferences, and ran Qloo discovery.
Challenges we faced
Connecting cultural interests to music
A film, game, or aesthetic is not automatically a music preference. We had to translate cultural interests into Qloo searches, retrieve relevant artists, and then apply music-specific preferences without presenting uncertain matches as facts.
Making the AI genuinely agentic
Initially, the application supported a deterministic discovery workflow. The next challenge was integrating a language model that could actually operate tools, instead of simply generating explanations or collecting profile information.
We implemented Gemini function calling around the existing Qloo and recommendation pipeline so the agent could perform real actions.
Handling catalog verification
An artist discovered through Qloo does not necessarily have suitable tracks available through the music catalog. We built a verification and ranking pipeline that handles unavailable matches, genre conflicts, and incomplete results.
Deployment and API integration
The AI integration introduced additional challenges involving model response latency, multi-step function calls, API configuration, and deployment on a resource-limited hosting service. We worked through these while preserving the existing manual discovery experience.
Accomplishments we're proud of
The most important achievement is a working end-to-end agentic recommendation workflow.
In one live test, the AI Radio Host resolved Starset through Qloo, applied alternative and symphonic metal preferences, and invoked the discovery engine. The application returned eight artists with Apple Music catalog verification.
This demonstrated that the AI was not merely updating a profile or generating text. It was selecting tools and using real Qloo data to produce music recommendations.
I'm also proud that the application provides a complete user experience, from cultural exploration to listening previews and building a personal playlist.
What we learned
This project reinforced the value of combining language models with specialized APIs and deterministic application logic.
Gemini is useful for understanding user intent and deciding which operations to perform. Qloo provides cultural relationships that a language model should not simply fabricate. Catalog verification makes those recommendations usable.
We also learned that an agent's decisions should be visible and understandable to the user, especially when several APIs contribute to the final result.
What's next
Future improvements could include more advanced conversational refinement, additional model providers, persistent playlists across devices, and more personalized discovery strategies.
The long-term goal is to turn CrossSignal into a cultural discovery companion that connects people's interests across entertainment, lifestyle, and music.
Live application: https://crosssignal.onrender.com/
Source code: https://github.com/siamEEE/crosssignal
Built With
- agentic-ai
- apple-itunes-search-api
- docker
- fastapi
- google-gemini
- httpx
- python
- qloo-api
- react
- render
- tailwind-css
- typescript
- vite
Log in or sign up for Devpost to join the conversation.