This is a submission for Weekend Challenge: Passion Edition
What I Built
I built the Free Voice Music Curator, an intelligent full-stack audio player powered entirely by public APIs, legal Creative Commons music, and zero paid subscription walls.
Inspired by the challenge prompt of passion, I wanted to capture the absolute devotion fans and hobbyists pour into their musical worlds. However, classic web-streaming apps are trapped behind heavy OAuth logic or aggressive paid premium tiers. The Free Voice Music Curator solves this by allowing users to command a local audio player using natural voice strings (via ElevenLabs), which are dynamically parsed by Google AI to pull over 500,000 legal, free-streaming tracks from Jamendo.
🟢 The Free-Tier Architecture
[ ElevenLabs Agent ] ➔ Webhook ➔ [ Backend Server ] ➔ Jamendo REST API
│
▼
[ HTML5 Audio Player Engine ] ➔ (Plays raw .mp3 stream)
Demo
The application is fully configured and ready!
-
Live Development Webhook:
https://ais-dev-vtsuihfhfsyunprfhoszsh-559194232025.asia-east1.run.app/api/webhook/elevenlabs -
Production Webhook Simulator: Included directly inside the UI console so you can fire direct preset configurations (e.g.,
💤 Lofi Study,🏎️ Synthwave,🎸 Acoustic) to watch the system respond in real time.
Code
The interface features a gorgeous deep interstellar slate and emerald canvas (bg-slate-900 / text-emerald-400) alongside modern typography pairings (Space Grotesk and Inter).
Here is the clean Python Core Engine snippet used to process the incoming webhook metadata securely:
import random
import requests
import vlc # Install via: pip install python-vlc
class FreeVoiceMusicCurator:
def __init__(self, client_id):
self.client_id = client_id
self.base_url = "https://api.jamendo.com/v3.0/tracks/"
def get_curated_stream_urls(self, target_genre=None, target_artist=None, limit=10):
print(f"Querying free cloud library for: Genre={target_genre}, Artist={target_artist}...")
params = {
"client_id": self.client_id,
"format": "json",
"limit": 50,
"audioformat": "mp32",
"order": "popularity_total"
}
if target_genre:
params["tags"] = target_genre.lower()
if target_artist:
params["artist_name"] = target_artist.lower()
try:
response = requests.get(self.base_url, params=params)
data = response.json()
tracks = data.get("results", [])
stream_targets = []
for track in tracks:
stream_url = track.get("audio")
if stream_url:
stream_targets.append({
"title": track.get("name"),
"artist": track.get("artist_name"),
"url": stream_url
})
random.shuffle(stream_targets)
return stream_targets[:limit]
except Exception as e:
print(f"API Fetch Error: {e}")
return []
How I Built It
The execution pipeline flows fluidly across three modern technical frameworks:
-
Intelligent Conversational Agent (ElevenLabs): I built a blank agent powered by a custom webhook tool named
play_free_genre_music. It listens for spoken triggers like "Play some high-energy synthwave beats" and extracts clean textual params (prompt,genre,artist). -
Contextual AI Translation Engine (Google AI Studio): The backend leverages the
gemini-3.5-flashmodel to analyze the full natural-language transcripts, scrubbing out specific moods, obscure tags, or strict artist names, complete with a local rule-based keyword fallback parser to guarantee zero downtime. - Responsive Web Player Platform: Built an HTML5 audio context interface complete with a live API resource monitor (tracking Jamendo's 35,000 free monthly request tier cap) and real-time scrolling telemetry log panels recording every single serverless event transcript.
Prize Categories
This application is being submitted to the following prize categories:
- Best Use of ElevenLabs: For mapping custom voice conversational tools to a local audio state architecture seamlessly.
- Best Use of Google AI: Using Gemini to turn messy, natural speech commands into highly structured metadata payloads.
Top comments (0)