diff --git a/.needle-predispatch-sha b/.needle-predispatch-sha index b7fd305..2692b5d 100644 --- a/.needle-predispatch-sha +++ b/.needle-predispatch-sha @@ -1 +1 @@ -b1121ed6f8729796923df7ad95ee1bde41ed61f0 +513ca42d7a05138470e9ed7489a8661a3ccde3ca diff --git a/web/public/data/playlists/best-comebacks.json b/web/public/data/playlists/best-comebacks.json new file mode 100644 index 0000000..cf2d9af --- /dev/null +++ b/web/public/data/playlists/best-comebacks.json @@ -0,0 +1,10 @@ +{ + "slug": "best-comebacks", + "title": "Best Comebacks", + "description": "Bots that were down but never out — dramatic turnarounds and improbable victories", + "category": "comebacks", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/best-of-week.json b/web/public/data/playlists/best-of-week.json new file mode 100644 index 0000000..caa5725 --- /dev/null +++ b/web/public/data/playlists/best-of-week.json @@ -0,0 +1,10 @@ +{ + "slug": "best-of-week", + "title": "Best of the Week", + "description": "This week's top matches ranked by excitement: close finishes, upsets, marathon battles, and elite clashes", + "category": "weekly", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/biggest-upsets.json b/web/public/data/playlists/biggest-upsets.json new file mode 100644 index 0000000..914a403 --- /dev/null +++ b/web/public/data/playlists/biggest-upsets.json @@ -0,0 +1,10 @@ +{ + "slug": "biggest-upsets", + "title": "Biggest Upsets", + "description": "Lower-rated bots triumph against higher-rated opponents", + "category": "upsets", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/closest-finishes.json b/web/public/data/playlists/closest-finishes.json new file mode 100644 index 0000000..090cbff --- /dev/null +++ b/web/public/data/playlists/closest-finishes.json @@ -0,0 +1,10 @@ +{ + "slug": "closest-finishes", + "title": "Closest Finishes", + "description": "Matches decided by the thinnest margins — nail-biters to the very end", + "category": "close_games", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/domination.json b/web/public/data/playlists/domination.json new file mode 100644 index 0000000..2cfdd02 --- /dev/null +++ b/web/public/data/playlists/domination.json @@ -0,0 +1,10 @@ +{ + "slug": "domination", + "title": "Total Domination", + "description": "One-sided victories where the winner crushed all opposition", + "category": "domination", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/evolution-breakthroughs.json b/web/public/data/playlists/evolution-breakthroughs.json new file mode 100644 index 0000000..fdaa407 --- /dev/null +++ b/web/public/data/playlists/evolution-breakthroughs.json @@ -0,0 +1,10 @@ +{ + "slug": "evolution-breakthroughs", + "title": "Evolution Breakthroughs", + "description": "Evolved bots defeating top-rated opponents — AI strategy milestones", + "category": "featured", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/featured.json b/web/public/data/playlists/featured.json new file mode 100644 index 0000000..b568fbe --- /dev/null +++ b/web/public/data/playlists/featured.json @@ -0,0 +1,10 @@ +{ + "slug": "featured", + "title": "Featured Matches", + "description": "Recent highlights from the ladder", + "category": "featured", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/highest-rated.json b/web/public/data/playlists/highest-rated.json new file mode 100644 index 0000000..1016f0a --- /dev/null +++ b/web/public/data/playlists/highest-rated.json @@ -0,0 +1,10 @@ +{ + "slug": "highest-rated", + "title": "Clash of Titans", + "description": "Matches between the highest-rated opponents on the ladder", + "category": "featured", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/index.json b/web/public/data/playlists/index.json index 40b3303..a01e94d 100644 --- a/web/public/data/playlists/index.json +++ b/web/public/data/playlists/index.json @@ -1,4 +1,101 @@ { - "updated_at": "2026-03-29T00:00:00.000Z", - "playlists": [] + "updated_at": "2026-04-21T00:00:00.000Z", + "playlists": [ + { + "slug": "closest-finishes", + "title": "Closest Finishes", + "description": "Matches decided by the thinnest margins — nail-biters to the very end", + "category": "close_games", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "biggest-upsets", + "title": "Biggest Upsets", + "description": "Lower-rated bots triumph against higher-rated opponents", + "category": "upsets", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "best-comebacks", + "title": "Best Comebacks", + "description": "Bots that were down but never out — dramatic turnarounds and improbable victories", + "category": "comebacks", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "marathon-matches", + "title": "Marathon Matches", + "description": "The longest, most grueling matches — endurance-tested battles", + "category": "long_games", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "highest-rated", + "title": "Clash of Titans", + "description": "Matches between the highest-rated opponents on the ladder", + "category": "featured", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "evolution-breakthroughs", + "title": "Evolution Breakthroughs", + "description": "Evolved bots defeating top-rated opponents — AI strategy milestones", + "category": "featured", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "rivalry-classics", + "title": "Rivalry Classics", + "description": "The most closely contested matchups between frequent opponents", + "category": "rivalry", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "domination", + "title": "Total Domination", + "description": "One-sided victories where the winner crushed all opposition", + "category": "domination", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "new-bot-debuts", + "title": "New Bot Debuts", + "description": "First matches of newly registered bots — watch their opening games", + "category": "tutorial", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "season-highlights", + "title": "Season Highlights", + "description": "Top matches from the current season ranked by excitement", + "category": "season", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "featured", + "title": "Featured Matches", + "description": "Recent highlights from the ladder", + "category": "featured", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + }, + { + "slug": "best-of-week", + "title": "Best of the Week", + "description": "This week's top matches ranked by excitement: close finishes, upsets, marathon battles, and elite clashes", + "category": "weekly", + "match_count": 0, + "updated_at": "2026-04-21T00:00:00.000Z" + } + ] } diff --git a/web/public/data/playlists/marathon-matches.json b/web/public/data/playlists/marathon-matches.json new file mode 100644 index 0000000..feb703c --- /dev/null +++ b/web/public/data/playlists/marathon-matches.json @@ -0,0 +1,10 @@ +{ + "slug": "marathon-matches", + "title": "Marathon Matches", + "description": "The longest, most grueling matches — endurance-tested battles", + "category": "long_games", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/new-bot-debuts.json b/web/public/data/playlists/new-bot-debuts.json new file mode 100644 index 0000000..e00f5a3 --- /dev/null +++ b/web/public/data/playlists/new-bot-debuts.json @@ -0,0 +1,10 @@ +{ + "slug": "new-bot-debuts", + "title": "New Bot Debuts", + "description": "First matches of newly registered bots — watch their opening games", + "category": "tutorial", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/rivalry-classics.json b/web/public/data/playlists/rivalry-classics.json new file mode 100644 index 0000000..a24b2f2 --- /dev/null +++ b/web/public/data/playlists/rivalry-classics.json @@ -0,0 +1,10 @@ +{ + "slug": "rivalry-classics", + "title": "Rivalry Classics", + "description": "The most closely contested matchups between frequent opponents", + "category": "rivalry", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +} diff --git a/web/public/data/playlists/season-highlights.json b/web/public/data/playlists/season-highlights.json new file mode 100644 index 0000000..c774a50 --- /dev/null +++ b/web/public/data/playlists/season-highlights.json @@ -0,0 +1,10 @@ +{ + "slug": "season-highlights", + "title": "Season Highlights", + "description": "Top matches from the current season ranked by excitement", + "category": "season", + "match_count": 0, + "created_at": "2026-04-21T00:00:00.000Z", + "updated_at": "2026-04-21T00:00:00.000Z", + "matches": [] +}