Spring til indhold

Arbejde

Changemkr: fire systemer blev én platform

Torn StudioKunde: Changemkr

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