Problem
The frontend downloads a ~25MB JSON snapshot because the backend /smols endpoint returns incomplete data. This causes:
- ❌ Cloudflare Pages 25 MiB file limit errors
- ❌ Slow initial page load (every user downloads 25MB)
- ❌ Stale data (snapshot requires manual updates)
Current Symptoms
Many items from /smols return:
Tags: [] (empty)
Address: null
Minted_By: null
Phase 1: Immediate Fix (Remove 25MB Snapshot)
1.1 Enhanced GET /smols
Return complete, flat data for each smol:
{
"Id": "abc123",
"Title": "Cosmic Vibes",
"Address": "GABC...XYZ",
"Creator": "GABC...XYZ",
"Minted_By": "GDEF...123",
"Mint_Token": "CDXYZ...",
"Tags": ["electronic", "chill"],
"Plays": 142,
"Views": 89,
"Created_At": "2025-12-15T10:30:00Z",
"Lyrics": "Stars align..."
}
Key: If Tags is empty, populate from wherever styles/genres are stored.
1.2 New: GET /smols/tags
Aggregated tag counts (so frontend doesn't download all songs for tag cloud):
{ "tags": [{ "tag": "electronic", "count": 245 }] }
1.3 New: GET /smols/artist/:address
Songs filtered by wallet for artist pages:
{
"discography": [...],
"minted": [...],
"collected": [...],
"stats": { "publishedCount": 42, "mintedCount": 15, "collectedCount": 8 }
}
Logic:
discography = Address === :address OR Creator === :address
minted = discography where Mint_Token exists
collected = Minted_By === :address BUT Address !== :address
Field Reference
| Field |
Description |
Id |
Song UUID |
Title |
Display title |
Address |
Publisher wallet (for tipping) |
Creator |
Original creator wallet |
Minted_By |
Who minted/collected this |
Mint_Token |
Stellar smart contract token |
Tags |
Genre tags |
Lyrics |
Full lyrics text |
Plays/Views |
Counts |
Created_At |
ISO timestamp |
Phase 2: Future Roadmap
Discovery & Engagement
| Endpoint |
Purpose |
GET /smols/trending |
Time-decayed popularity |
GET /smols/similar/:id |
Recommend songs with similar tags |
GET /smols/new |
Latest drops with pagination |
GET /search?q=... |
Full-text search |
User Features
| Endpoint |
Purpose |
GET /user/:address/history |
Listening history |
GET /user/:address/playlists |
User-created collections |
POST /user/:address/follow |
Follow artists |
Artist Analytics
| Endpoint |
Purpose |
GET /artist/:address/stats |
Plays over time, top tracks |
GET /artists/top |
Leaderboard |
Real-Time
| Endpoint |
Purpose |
WS /activity/mints |
Live mint stream |
GET /tokens/prices |
Batch token price lookup |
Success Criteria
Phase 1 Complete = Frontend deletes 25MB snapshot file, Cloudflare deploys successfully
Problem
The frontend downloads a ~25MB JSON snapshot because the backend
/smolsendpoint returns incomplete data. This causes:Current Symptoms
Many items from
/smolsreturn:Tags: [](empty)Address: nullMinted_By: nullPhase 1: Immediate Fix (Remove 25MB Snapshot)
1.1 Enhanced
GET /smolsReturn complete, flat data for each smol:
{ "Id": "abc123", "Title": "Cosmic Vibes", "Address": "GABC...XYZ", "Creator": "GABC...XYZ", "Minted_By": "GDEF...123", "Mint_Token": "CDXYZ...", "Tags": ["electronic", "chill"], "Plays": 142, "Views": 89, "Created_At": "2025-12-15T10:30:00Z", "Lyrics": "Stars align..." }Key: If
Tagsis empty, populate from wherever styles/genres are stored.1.2 New:
GET /smols/tagsAggregated tag counts (so frontend doesn't download all songs for tag cloud):
{ "tags": [{ "tag": "electronic", "count": 245 }] }1.3 New:
GET /smols/artist/:addressSongs filtered by wallet for artist pages:
{ "discography": [...], "minted": [...], "collected": [...], "stats": { "publishedCount": 42, "mintedCount": 15, "collectedCount": 8 } }Logic:
discography=Address === :addressORCreator === :addressminted= discography whereMint_Tokenexistscollected=Minted_By === :addressBUTAddress !== :addressField Reference
IdTitleAddressCreatorMinted_ByMint_TokenTagsLyricsPlays/ViewsCreated_AtPhase 2: Future Roadmap
Discovery & Engagement
GET /smols/trendingGET /smols/similar/:idGET /smols/newGET /search?q=...User Features
GET /user/:address/historyGET /user/:address/playlistsPOST /user/:address/followArtist Analytics
GET /artist/:address/statsGET /artists/topReal-Time
WS /activity/mintsGET /tokens/pricesSuccess Criteria
Phase 1 Complete = Frontend deletes 25MB snapshot file, Cloudflare deploys successfully