Varje december samlas utvecklare världen över för att lösa Advent of Codes programmeringsutmaningar. I år bjuder vi på ART of Code in dig till Julstök med ART of Code. Alla som vill koda, prova nytt och lära tillsammans är välkomna.

På vår plattform kan du dela dina lösningar, följa dina resultat och experimentera med automatiserade AI-agenter.

Bakom den ganska enkla webbsidan finns ett händelsestyrt system byggt med GitHub Actions, Cloudflare Workers, D1 och Hugo. Ingen traditionell applikationsserver, inget separat användarkontosystem och så mycket automatisering som möjligt.

Häng med från det att du tar dig an ett pussel på Advent of Code tills din lösning dyker upp på vår topplista.

Systemet i stora drag

Plattformen har två flöden. Det ena tar emot din kodversion från GitHub, hämtar dina godkännanden från Advent of Code och analyserar lösningen. En Cloudflare Worker håller ihop arbetet, Queues fördelar analysjobben och D1 lagrar deltagare, jobb och resultat.

Det andra flödet gör resultaten tillgängliga för dig. Hugo bygger webbplatsen, som publiceras på Cloudflare Pages. När du besöker den hämtar webbläsaren aktuella data från Workern via sajtens API. Innehållet är statiskt, men deltagarlistan och topplistorna lever vidare utan att sajten behöver byggas om.

Översikt av plattformen: GitHub Actions och Advent of Code lämnar underlag till Worker och Queues. D1 lagrar resultaten. Hugo och Pages levererar webbplatsen, som hämtar aktuella data via API:t.

Workern har separata ingångar för API-anrop, schemalagda körningar och kömeddelanden. D1 håller ihop tillståndet mellan dem.

Du tar dig an ett pussel

Vi vill att det ska vara enkelt att delta. Du skapar ett publikt repo från vår startmall, anger ditt AoC-ID och år och ansluter till vår privata AoC-topplista. Kom igång-guiden visar stegen. Du behöver inget separat konto på vår webbplats.

Sedan väljer du hur du vill lösa uppgiften. I hantverksspåret skriver du koden själv. I agentspåret bygger du ett automatiserat system som hämtar uppgifter, skriver och testar kod, rättar fel och publicerar lösningar. Målet är så lite mänsklig inblandning som möjligt. Du bygger och kör ditt eget agentsystem.

Svaret lämnar du, eller din agent, till Advent of Code. Där avgörs om uppgiften är löst. Din personliga pusselindata stannar utanför det publika repot.

Din push sätter flödet i rörelse

När du pushar till main startar repots GitHub Actions-workflow. Det skickar information om dina ändrade dagslösningar till vårt API, tillsammans med en kortlivad, signerad OIDC-token.

Med GitHubs stöd för OpenID Connect kan Workern verifiera signaturen och kontrollera bland annat repo, workflow, branch och commit. Du behöver ingen egen API-nyckel till oss. Den exakta kodversionen registreras i D1, tillsammans med jobb för analysen.

GitHub styrker vilket repo och vilken körning anropet kommer från. Ditt AoC-ID anger du däremot själv. Vi kontrollerar att kontot är med i vår grupp, men verifierar inte separat att du äger det. Det är en medveten förenkling av anmälan.

Koden möter sina stjärnor

Nu finns din kodversion hos oss. Men innan den kan analyseras behöver rätt dag och del vara godkända hos AoC.

En schemalagd Worker hämtar den privata topplistans JSON-export högst en gång per 15 minuter och år. Godkännandet kan komma före eller efter din push; D1 håller reda på båda. När förutsättningarna är uppfyllda skickas jobbet till Cloudflare Queues. En accepterad push försöker leverera körklara jobb direkt, och schemaläggningen fångar upp väntande jobb. Besök på sajten gör inga extra anrop till AoC.

Analysen tar vid

Kön låter oss bearbeta flera lösningar utan att din push behöver vänta på hela analysen. Eftersom Queues kan leverera samma meddelande mer än en gång reserverar Workern jobbet atomiskt i D1 innan den börjar. Dubbletter ska inte ge extra resultat, och avbrutna jobb ska kunna återhämtas.

Workern hämtar sedan filerna vid exakt den commit som ditt workflow registrerar. Om GitHub begränsar API-anropen respekterar vi återställningstider och Retry-After. Du ska inte behöva pusha igen för att en extern tjänst tillfälligt säger stopp.

Lägger du lösningen i standardmappen src/ behövs ingen extra config-fil. Analysen räknar icke-tomma fysiska rader, inklusive kommentarer. Tester, infrastruktur och agentkod redovisas separat. Språken identifieras med versionslåsta definitioner från GitHub Linguist, via linguist-languages: bland annat filnamn, filändelser och shebang. Det är en begränsad identifiering, inte hela Linguist-motorn; tvetydiga träffar lämnas okända.

Din kod körs inte på vår server. En Dockerfile hjälper i stället andra att köra lösningen och lära av den. AoC:s godkännande gäller ditt kontos svar, inte vår analys av en viss commit. Du rapporterar själv vilka AI-modeller du använder.

Ett konkret exempel finns i vårt publika deltagarrepo för 2025, dag 1. I integrationstestet är båda delarna godkända hos AoC. Analysen ger 39 källkodsrader, 62 testrader och språket Python. Lösningen är AI-assisterad; testet verifierar kedjan från push till resultat.

Resultatet hittar fram till dig

Resultatet sparas i D1. När du öppnar topplistan hämtar webbläsaren data via /api/v1 på samma domän som sajten. En liten Pages Function skickar anropet vidare till API-Workern genom en service binding. Förenklat ser den ut så här:

export async function onRequest({ request, env }) {
  return env.ADVENT_API.fetch(request);
}

Workern läser resultaten ur D1 och svarar med JSON. Du ser resultatet och kan klicka vidare till den analyserade koden på GitHub. Webbläsaren behöver varken databasåtkomst eller hemligheter.

Hugo bygger webbplatsen som publiceras på Cloudflare Pages. När du besöker sajten hämtar webbläsaren dynamiska data via en Pages Function och API-Workern från D1.

GitHub Actions testar och verifierar sajtbygget. Publiceringen sker i dagsläget separat med Wrangler, först till test och sedan till produktion. Ett nytt analysresultat kräver ingen ny publicering.

Förbättrar du lösningen börjar nästa varv med en ny push. En ny analys sparas, äldre analyser finns kvar och samma commit och analysversion ger inga dubbletter. Årtalet följer med genom datamodellen, så din historik kan leva vidare på samma webbplats.

Kom och julstöka med oss

Välj ett språk du vill bli bättre på, vässa ditt hantverk eller bygg ett agentflöde som klarar lite mer för varje försök. Kika i andras repon och dela både det som fungerar och det som strular i vårt gemensamma forum.

Premiären är december 2026, men du kan haka på redan nu och värma upp med 2025 års pussel. Stöd gärna också Eric Wastl och Advent of Code, som gör allt detta möjligt.