Hoppa till innehåll

Arbete

Changemkr: fyra system blev en plattform

Torn StudioKund: Changemkr

Studions relation till kunden

Changemkr är en plattform Torn Studio äger en del av. Studion hade produktrollen från januari 2025 till juni 2026 — först som CPO, därefter på deltid — och byggde i kodbasen parallellt med rollen. Arbete efter juni 2026 ligger hos andra och står inte här.

Kort svar

Torn Studio hade produktrollen i Changemkr och äger en del av plattformen. Fyra ärvda system slogs ihop till fem driftsatta tjänster kring en schemaauktoritet på 63 tabeller, och åtta AI-miljöer delar en LangGraph-tjänst med versionerade prompter. Sidan beskriver arbetet fram till juni 2026, då studions period tog slut.

Uppdraget

Changemkr behövde en plattform där enkät, analys, planering och uppföljning hängde ihop, med AI genom hela kedjan. Produkten fanns då i fyra kodbaser som hade växt var för sig och beskrev samma begrepp olika.

Det som gjorde det svårt

  • Planeringshierarkin fanns som sju separata modeller i ett Django-API, och samma begrepp betydde olika saker i de fyra systemen — en ändring krävde fyra ingrepp av fyra personer som läste modellen olika.
  • AI-lagret talade sin egen vokabulär, vilket gjorde att assistenten föreslog objekt som duken inte kunde ta emot. Det var en av två blockerare före lansering.
  • Python-tjänstens databasmodeller underhölls för hand vid sidan av det TypeScript-definierade schemat, så de två beskrivningarna av samma tabeller kunde glida isär tyst.

Siffror som går att räkna efter

4ärvda system som slogs ihop
Migrationsrapporten i repot listar dem en och en med vad de ägde och vad som ersatte dem. Ett skript i bygget håller antalet importer från dem på noll.
63tabeller under en auktoritet
Räknebara i schemakatalogen vid junigränsen. Python-modellerna genereras ur samma definition, och en grind fäller bygget när de har glidit isär.
5tjänster i drift
Webb, affärs-API, AI-tjänst, administratörskonsol och en jobbkörare. Samtliga finns i repots compose-fil och i infrastrukturkoden för Azure.
8AI-miljöer på en tjänst
Räknebara i promptregistret. Varje miljö bär egen modell, egna verktyg och egen promptversionering med återställning i ett klick.
80specfiler för end-to-end-test
Räknebara i testkatalogen vid junigränsen. Sidan citerar antalet filer, eftersom repot självt har dragit tillbaka sin dåvarande siffra för andel godkända test.

Så gjordes det

En schemaauktoritet, resten härlett

Drizzle fick definiera alla 63 tabeller, och Python-tjänstens modeller genereras ur samma definition av ett skript. En grind i bygget jämför det genererade med det incheckade och fäller vid avvikelse, så två system som beskriver samma tabell olika går inte att checka in.

Hårda domängränser

NestJS äger affärsdata — konton, organisationer, enkäter, planer. Python-tjänsten äger AI-domänen — trådar, inbäddningar, minne, supervisorn. Webben anropar båda direkt, och gränsen står i klartext i repots instruktionsfil, vilket gör den till ett beslut andra kan följa.

Sju modeller blev en

Planeringshierarkin lades om till en tabell med en typdiskriminator, plus en tabell för nyckelresultat och en för relationer. Vokabulären stängdes, och AI-lagret fick tala exakt samma ord som duken. Blockeraren som gällde den saken stängdes den tionde juni 2026.

Grindar bär gränserna

Ett skript håller antalet importer från de ärvda systemen på noll och fäller bygget vid första återfall. Ett annat fäller schemat när de genererade modellerna har glidit. Konsolideringen håller för att den kontrolleras vid varje ändring.

Organisationens data hamnade i prompten

Enkätresultat, svaga motorer och organisationsprofil injiceras numera i systemprompten för de miljöer som behöver dem. Tidigare låg informationen bakom verktyg som modellen själv måste välja att anropa, vilket den ibland lät bli.

Teknik

  • NestJS
  • FastAPI
  • Next.js
  • Drizzle ORM
  • SQLAlchemy
  • LangGraph
  • PostgreSQL
  • pgvector
  • BullMQ
  • Azure Container Apps

Vad beviset räcker till

Det här visar att fyra system går att slå ihop till ett och hållas ihop av grindar. Det visar ingenting om en marknad: plattformen hade inte lanserats vid junigränsen, verdiktet i repots beredskapslogg var driftsättningsbar med kvarstående punkter, och en av dem var en manuell säkerhetsåtgärd som ingen kod stänger.

Underlag

Vad den här artikeln vilar på — en mätning vi gjort, en daterad källa eller ett beslut vi tagit och vad det kostade.

  • Mätning

    Hur många tabeller den enda schemaauktoriteten definierar

    Mätobjekt: Changemkrs schemakatalog vid junigränsen

    Metod: Räkna anropen till pgTable i packages/database/src på sista incheckningen i juni 2026.

    Resultat: 63 tabeller

  • Beslut

    Låt ett enda schema definiera alla tabeller och generera Python-tjänstens modeller ur det.

    Vad det kostade: Varje schemaändring kräver ett extra genereringssteg innan den kan checkas in, och en handredigerad modell fäller bygget även när den är riktig.

  • Beslut

    Lägg sju modeller för planeringshierarkin i en tabell med en typdiskriminator.

    Vad det kostade: Databasen kan inte längre skilja objekttyperna åt med egna kolumner, så reglerna för vad som får ligga var flyttade upp i applikationen och behöver egna tester.

Vanliga frågor

Är Changemkr en kund till Torn Studio?
Studion äger en del av plattformen och hade produktrollen där, vilket står överst på sidan. Skillnaden spelar roll: ett uppdrag åt någon annan och en produkt studion är med och äger är olika påståenden, och läsaren ska få veta vilket det är innan resultaten.
Varför slutar caset i juni 2026?
Studions produktroll löpte till dess. Plattformen har utvecklats vidare efteråt av andra, och att räkna in det arbetet vore att ta åt sig äran för någon annans. Varje siffra på sidan är mätt vid den gränsen och går att kontrollera där.
Varför står det ingen siffra på hur många test som gick igenom?
Repot mätte om sin testsvit i augusti 2026 och drog tillbaka den tidigare siffran som ogiltig. En siffra som källan själv har återkallat hör inte hemma här, så sidan citerar sådant som var stabilt vid gränsen: tabeller, tjänster, AI-miljöer och testfiler.
Vad betyder en schemaauktoritet i praktiken?
Att en enda definition håller alla 63 tabeller och att allt annat härleds ur den. Python-tjänstens modeller genereras av ett skript, och en grind fäller bygget när det genererade och det incheckade har glidit isär. Två system som beskriver samma tabell olika blir omöjligt att checka in.
Hur stor del av koden skrev studion?
Studion byggde stora delar av produkten under perioden och formulerade merparten av idéerna och funktionerna, samtidigt som andra också arbetade i kodbasen. Sidan påstår därför en roll och en period, och siffrorna beskriver det levererade systemet vid gränsen.
Går ett sådant här arbete att köpa av studion?
Ja, i två former. Konsolidering och AI-integration ligger under AI och automation, och produktrollen — beslutsunderlag, prioritering, arkitekturval — ligger under Product Management. Ett uppdrag börjar med en genomgång på fast pris innan något byggs.

Berätta vad du vill bygga

Trettio minuter, kostnadsfritt, och ett rakt besked om vi är rätt studio för uppdraget.

Svar inom ett dygn, skriftligt förslag med fast pris inom tre dagar, och du bestämmer i lugn och ro.

Nöjdhetsgaranti