Case / hyperlokal data-hub
Kommunfotbollen
Next.js / Claude API / Supabase
Kommunfotbollen samlar tabeller, matcher, målskyttar och nyheter för Västerviks kommuns tio fotbollslag på ett ställe. Allt uppdateras automatiskt varje kväll, utan att någon matar in data för hand.
ProblemLokalfotboll är utspridd över en extern sportkälla och flera lokaltidningar. Ingen plats samlade serier, matcher och målskyttar, och matchreferaten fanns bara som fritext utan struktur.
LösningJag byggde en Next.js-app med en källagnostisk ingest-arkitektur som hämtar fem serier från Everysport, och en AI-pipeline där Claude läser lokaltidningarnas artiklar, bedömer om de är relevanta för ett visst lag och extraherar målskyttar ur matchreferaten. Startsidan lyfter veckans match, och varje lag har en egen sida med nästa match, tabellutdrag, matcher med skyttar och de senaste nyheterna.
Tekniska beslutKällagnostisk ingest-arkitektur (MatchSource) så fler datakällor kan kopplas in utan att skriva om resten av appen.Claude används för två separata AI-uppgifter: relevansfiltrering av nyheter och extraktion av målskyttar ur matchreferat.Målskyttar sparas bara när både resultat och båda lagnamn i referatet stämmer med en spelad match, så AI:n aldrig gissar fram en koppling.Artiklar hittas via tidningarnas sitemaps och fotbollssidor, eftersom en sitemap kan ligga ett dygn efter. Automatiska robotreferat filtreras bort ur nyhetslistan.Appen schemalägger sina egna jobb: nyheter kl 22 och lagdata kl 23, efter kvällens matcher. En liten hälsoendpoint håller tjänsten vaken utan att röra databasen.Byggd för gratisnivåernas gränser: lagbilderna förskalas till WebP innan de laddas upp, så servern aldrig behöver bildbearbeta dem, och databaspoolen hålls under Supabases tak på 15 anslutningar.Zod-validering av extern data för att hålla datamodellen pålitlig trots källor med varierande kvalitet.
Vad det visarSajten ligger uppe dygnet runt och fyller på sig själv varje kväll. Projektet visar att jag kan bygga integrationer mot flera externa datakällor, använda AI för strukturerad extraktion ur text och göra medvetna arkitekturval för att hålla driftkostnaden nere.
TeknikNext.js 16TypeScriptDrizzle ORMSupabaseZodTailwind v4Anthropic SDKsharpRender