Changemkr: fire systemer blev én platform
Studiets forhold til kunden
Changemkr er en platform, Torn Studio ejer en del af. Studiet havde produktrollen fra januar 2025 til juni 2026 — først som CPO, siden på deltid — og byggede i kodebasen ved siden af rollen. Arbejde efter juni 2026 tilhører andre og står ikke her.
Kort svar
Torn Studio havde produktrollen i Changemkr og ejer en del af platformen. Fire arvede systemer blev fem driftsatte tjenester omkring én skemaautoritet på 63 tabeller, og otte AI-miljøer deler én LangGraph-tjeneste med versionerede prompter. Siden beskriver arbejdet frem til juni 2026, hvor studiets periode sluttede.
Opgaven
Changemkr havde brug for én platform, hvor undersøgelse, analyse, planlægning og opfølgning hang sammen, med AI gennem hele kæden. Produktet lå dengang i fire kodebaser, der var vokset hver for sig og beskrev de samme begreber forskelligt.
Det der gjorde det svært
- Planlægningshierarkiet lå som syv separate modeller i et Django-API, og det samme ord betød forskellige ting i de fire systemer — én ændring krævede fire indgreb af fire personer, der læste modellen forskelligt.
- AI-laget talte sit eget ordforråd, så assistenten foreslog objekter, lærredet ikke kunne tage imod. Det var den ene af to blokeringer før lancering.
- Databasemodellerne i Python-tjenesten blev vedligeholdt i hånden ved siden af det TypeScript-definerede skema, så de to beskrivelser af de samme tabeller kunne glide fra hinanden i stilhed.
Tal der kan tælles efter
- 4arvede systemer lagt sammen
- Migrationsrapporten i repoet opregner dem én for én med, hvad hver ejede, og hvad der erstattede det. Et script i bygningen holder antallet af importer fra dem på nul.
- 63tabeller under én autoritet
- Tællelige i skemakataloget ved junigrænsen. Python-modellerne genereres ud fra samme definition, og en port fælder bygningen, når de er gledet fra hinanden.
- 8AI-miljøer på én tjeneste
- Tællelige i promptregistret. Hvert miljø bærer sin egen model, sit eget værktøjssæt og sin egen promptversionering med fortrydelse i ét klik.
- 80specifikationsfiler til ende-til-ende-test
- Tællelige i testkataloget ved junigrænsen. Siden citerer antallet af filer, fordi repoet selv har trukket sit tal for beståede tests fra den periode tilbage.
Sådan blev det gjort
Én skemaautoritet, resten afledt
Drizzle fik lov at definere alle 63 tabeller, og modellerne i Python-tjenesten genereres ud fra samme definition af et script. En port i bygningen sammenligner det genererede med det indtjekkede og fælder ved afvigelse, så to systemer, der beskriver samme tabel forskelligt, ikke kan tjekkes ind.
Hårde domænegrænser
NestJS ejer forretningsdata — konti, organisationer, undersøgelser, planer. Python-tjenesten ejer AI-domænet — tråde, indlejringer, hukommelse, supervisoren. Webappen kalder begge direkte, og grænsen står i klartekst i repoets instruktionsfil, hvilket gør den til en beslutning, andre kan følge.
Syv modeller blev én
Planlægningshierarkiet blev lagt om til én tabel med en typediskriminator, plus en tabel til nøgleresultater og en til relationer. Ordforrådet blev lukket, og AI-laget kom til at tale præcis de ord, lærredet bruger. Blokeringen om netop det blev lukket den tiende juni 2026.
Porte bærer grænserne
Et script holder antallet af importer fra de arvede systemer på nul og fælder bygningen ved første tilbagefald. Et andet fælder skemaet, når de genererede modeller er gledet. Konsolideringen holder, fordi den kontrolleres ved hver ændring.
Teknologi
- NestJS
- FastAPI
- Next.js
- Drizzle ORM
- SQLAlchemy
- LangGraph
- PostgreSQL
- pgvector
- BullMQ
- Azure Container Apps
Hvad beviset rækker til
Dette viser, at fire systemer kan lægges sammen til ét og holdes sammen af porte. Det viser intet om et marked: platformen var ikke lanceret ved junigrænsen, dommen i repoets egen beredskabslog var driftsætbar med resterende punkter, og et af dem var en manuel sikkerhedsopgave, ingen kode lukker.
Grundlag
Hvad denne artikel hviler på — en måling vi lavede, en dateret kilde eller en beslutning vi traf og hvad den kostede.
- Måling
Hvor mange tabeller den ene skemaautoritet definerer
Måleobjekt: Changemkrs skemakatalog ved junigrænsen
Metode: Tæl kaldene til pgTable i packages/database/src ved sidste indtjekning i juni 2026.
Resultat: 63 tabeller
- Beslutning
Lad ét skema definere hver tabel og generere modellerne i Python-tjenesten ud fra det.
Hvad det kostede: Hver skemaændring kræver nu et ekstra genereringstrin, før den kan tjekkes ind, og en håndredigeret model fælder bygningen, selv når den er rigtig.
- Beslutning
Læg syv modeller for planlægningshierarkiet i én tabel med en typediskriminator.
Hvad det kostede: Databasen kan ikke længere skille objekttyperne ad med egne kolonner, så reglerne for, hvad der må ligge hvor, flyttede op i applikationen og kræver egne tests.
Ofte stillede spørgsmål
- Er Changemkr en kunde hos Torn Studio?
- Studiet ejer en del af platformen og havde produktrollen der, hvilket står øverst på siden. Forskellen betyder noget: en opgave for andre og et produkt, studiet er med til at eje, er forskellige påstande, og læseren skal vide hvilken, før resultaterne.
- Hvorfor slutter casen i juni 2026?
- Studiets produktrolle løb til da. Platformen er udviklet videre siden af andre, og at regne det arbejde med ville være at tage æren for en andens. Hvert tal på siden er målt ved den grænse og kan kontrolleres der.
- Hvorfor står der intet tal for, hvor mange tests der bestod?
- Repoet målte sin testsuite igen i august 2026 og trak det tidligere tal tilbage som ugyldigt. Et tal, kilden selv har trukket tilbage, hører ikke til her, så siden citerer det, der var stabilt ved grænsen: tabeller, tjenester, AI-miljøer og testfiler.
- Hvad betyder én skemaautoritet i praksis?
- At én definition holder alle 63 tabeller, og at alt andet afledes af den. Modellerne i Python-tjenesten genereres af et script, og en port fælder bygningen, når det genererede og det indtjekkede er gledet fra hinanden. To systemer, der beskriver samme tabel forskelligt, bliver umuligt at tjekke ind.
- Hvor stor en del af koden skrev studiet?
- Studiet byggede store dele af produktet i perioden og formulerede hovedparten af idéerne og funktionerne, mens andre også arbejdede i kodebasen. Siden påstår derfor en rolle og en periode, og tallene beskriver det leverede system ved grænsen.
Fortæl os, hvad du vil bygge
Tredive minutter, helt gratis, og en klar melding om, hvorvidt vi er det rette studio til opgaven.
Svar inden for et døgn, et skriftligt tilbud med fast pris inden for tre dage, og du beslutter dig i ro og mag.
Tilfredshedsgaranti