PITCH402
Agentic Playlist Pitching
The problem PITCH402 solves
Streaming already works. Rights already work. What does not work is the last mile between a finished track and decent visibility.
About 150,000 new tracks hit streaming every day. On some platforms more than half of daily uploads are fully AI. 7 million tracks are created daily on Suno. Numbers that matter when Playlists are still how music gets found. Human curator inboxes do not scale, and the rails for agents to interact don't exist yet. Spotify also pulled AI Persona profiles out of algorithmic recommendations, so a large and growing catalog has no native way to stand in line.
Pitch402 is payable shelf those agents can use:
A curator opens a 100-spot playlist (spot 1 = 10 USDC, 2–3 = 5, 4–10 = 3, 11–100 = 1; terms for cycle / 3 months / 1 year).
An agent calls GET /quote?next=1, then POSTs the track. With no payment it receives HTTP 402 (x402 on Base Sepolia). With a valid payment — or the demo fake-pay header — it receives a receipt and the next free spot.
Machine-readable discovery lives at /.well-known/agent.json and /llms.txt.
Spotify stays the destination. We do not rebuild licensing. We sell inventory: a slot, a price, a receipt.
People use it to buy placement without waiting on A&R mail, and to let an agent complete that task in a few HTTP calls instead of a human workflow.
Challenges I ran into
I am not a developer. The hard part was not “which Solidity pattern.” It was not knowing where to start without turning the repo into spaghetti.
ETH Cali pointed me at the right tools: ethskills inside Claude Code, a project CLAUDE.md written before any app code, and a strict build order (quote API → fake pay → x402 402 challenge → demo UI → docs). I used Grok to lock the product and the steps, and Claude Code in VS Code to write and run the code, one prompt at a time.
Concrete hurdles while building:
New terminals could not see npm because Node lived under nvm. Fix: load nvm in every shell before npm run dev.
localhost:3000 refused connections because an old Next process was still bound to the port. **Fix: kill the PID and restart so .env.local actually loaded **(PITCH402_PAY_TO, fake-pay flag).
In-memory playlist state vanished on restart and, at one point, purchases were invisible across routes because Next bundled each handler with its own store. That got moved onto a shared runtime store so quote, buy, and receipt see the same inventory.
x402 without a payout address returned payment_unavailable instead of a real 402. A local PITCH402_PAY_TO unblocked the challenge. The paid path (wallet → 201) is still unverified on purpose: no funded Sepolia key in the demo.
The lesson: constrain the agent that writes code (ethskills + CLAUDE.md + one feature per turn) or a non-dev ships a token by accident. We shipped a quote, a 402, a receipt, and a page a judge can click.
AND AS FOR HSK CHAIN, SINCE THERE'S NO FACILITATOR, THE PRODUCT IS NOT ENABLED THERE. BUT ONCE THERE'S A FACILITATOR, ALL IS THERE TO DEPLOY IT ON THAT CHAIN AS WELL ADDITIONALLY TO BASE.
Tracks Applied (3)
AI × Ethereum & Agent Economy
HSK Chain
Track: Colombia Hackathon
Technologies used
Cheer Project
Cheering for a project means supporting a project you like with as little as 0.0025 ETH. Right now, you can Cheer using ETH on Arbitrum, Optimism and Base.
