FallstudieSaaS & StartupsPågående

En hel SaaS-plattform, byggd i par med AI.

QRGeno säljer dynamiska QR-koder till nordiska och europeiska SMB: koder vars destination kan ändras i efterhand, kombinerade med fysiska produkter — 2D-klistermärken och 3D-skyltar — och scanningsstatistik per kod. Backend, frontend, betalflöde, tryckunderlag och infrastruktur byggdes fullstack av ett team på två, med Claude Code som parprogrammerare.

KundQRGeno
Periodjan 2026 – Nuvarande
RollerFullstack, DevOps
01 / Problem

En QR-kod är trivial. Affären runt den är inte det.

Själva koden går att generera i en eftermiddag. Det som gör QRGeno till en produkt är allt runt omkring: en destination som kan bytas efter att klistermärket sitter på skyltfönstret, tryckunderlag som håller måtten i verkligheten, statistik kunden litar på, och ett betalflöde som klarar europeiska SMB från dag ett.

Uppdraget hade dessutom en hård begränsning: två personer, ingen befintlig plattform, och en marknad som inte väntar. Varje beslut måste därför väljas för att slippa underhåll senare — inte för att vara maximalt flexibelt.

BegränsningEtt team på två personer — inget får kräva löpande handpåläggning.
BegränsningFysiska produkter: PDF-underlag måste stämma i tryck, inte bara på skärm.
BegränsningBetalning och inloggning i flera länder — köpt, inte egenbyggt.
BegränsningRedirect-vägen är produkten: den får inte vara långsam eller ligga nere.
02 / Angreppssätt

Köp det tråkiga, bygg det egna.

Auth0 och Mollie istället för egen inloggning och egen betalning. Sanity för innehåll istället för en CMS-modul. Terraform och GitHub Actions från första veckan, så att miljöer aldrig blev ett manuellt moment. Kvar att bygga: domänen — koder, destinationer, tryckunderlag och statistik.

jan 2026Domänen förstDatamodellen för koder, destinationer och scanningar i PostgreSQL med SQLAlchemy och Alembic-migrationer — resten byggdes runt den, inte tvärtom.
jan 2026API och redirect-vägFastAPI på Python 3.12 som skiljer produktens administrativa yta från själva redirect-flödet, där CloudFront tar trycket.
feb 2026Konto, betalning, innehållAuth0 för inloggning, Mollie för betalning och Sanity för innehåll — tre områden som annars äter månader och sedan kräver underhåll.
feb 2026Fysiska produkterTryckunderlag för 2D-klistermärken och 3D-skyltar genereras med WeasyPrint och ReportLab, med QR-rendering via qr-code-styling.
vår 2026Plattform och kvalitetsgrindECS Fargate, ECR och RDS i Terraform, GitHub Actions till dev och prod, frontend på Vercel, Playwright och Vitest som grind före release.
Principen
Allt som inte är QRGenos affär är någon annans tjänst — och därmed inte vårt underhåll.
03 / Arkitektur

Fem beslut som bar resten.

BeslutVarförKonsekvens
Auth0 + MollieInloggning och betalning i flera europeiska länder är regelverk, inte produktdifferentiering.Ingen egen kontohantering eller PSP-integration att underhålla — men två leverantörsberoenden.
CloudFront framför redirectSkanningen sker i verkligheten, ofta på svag mobiluppkoppling, och måste svara direkt.Redirect-latens och tillgänglighet frikopplas från applikationens driftläge.
Terraform från dag ettEtt team på två har inte råd med miljöer som bara finns i någons huvud.Dev och prod är identiska beskrivningar; återuppbyggnad är ett kommando, inte ett projekt.
PDF-generering i backendTryckunderlag måste stämma på millimetern och kunna regenereras för varje order.WeasyPrint och ReportLab gör underlaget till en API-resurs istället för ett manuellt designsteg.
TypeScript + typade API-kontraktAI-assisterad utveckling behöver en kompilator som säger nej.Fel fångas i bygget istället för i produktion — förutsättningen för att arbeta snabbt.
Steg 01Kod skapasKunden skapar en kod i React-appen; destination och stil sparas via API:et.
Steg 02Underlag trycksKlistermärke eller skylt får ett genererat PDF-underlag i rätt format.
Steg 03Skanning skerCloudFront tar emot träffen och skickar besökaren vidare direkt.
Steg 04Statistik landarTräffen geolokaliseras med GeoIP och visas per kod i kundens vy.
04 / AI-parprogrammering

Claude Code som andra par ögon — även på design.

Stora delar av utvecklingen drevs med Claude Code som parprogrammerare, inklusive design och UI. Det som gjorde det till en arbetsmetod snarare än en genväg var ramarna runt omkring: typade gränssnitt, tester i pipeline och infrastruktur som kod — allt som gör att en förändring antingen bevisar sig eller stoppas.

Så användes detClaude Code som parprogrammerare genom stora delar av bygget — implementation, refaktorering och UI-arbete, inklusive designbeslut.
Vad som gjorde det säkertTypeScript, typade API-kontrakt, Vitest och Playwright i pipeline: förslag måste passera samma grind som handskriven kod.
Vad det inte varIngen autopilot. Arkitektur, leverantörsval och datamodell är mänskliga beslut — AI:n arbetade inuti dem.
05 / Utfall

Vad som faktiskt levererades.

Tid till första betalning— veckor —Från projektstart till betalande kund i produktion.
Aktiva koder— antal —Dynamiska koder i drift hos kunder.
Redirect-latens— ms p95 —Svarstid på skanningsvägen via CloudFront.
Releasetakt— per vecka —Deploys till prod via GitHub Actions.
Streckade rutor saknar verifierad siffra — inga uppskattningar publiceras.

Kvalitativt: en komplett produkt i drift — konto, betalning, kodhantering, tryckunderlag och statistik — på infrastruktur som beskrivs i Terraform och släpps via GitHub Actions till dev och prod. E2E-flödena körs i Playwright, vilket betyder att köpvägen testas som en kund upplever den, inte bara som API-anrop.

06 / Teknik

30 tekniker, grupperade.

Backendpython/fastapipostgresqlsqlalchemyalembicweasyprintreportlabgeoip
Frontendreacttypescriptvitetailwindcssradix-uitanstack-queryqr-code-stylingleaflet
Tjänsterauth0molliesanity
Infrastrukturaws/ecsaws/fargateaws/ecraws/rdsaws/cloudfrontterraformdockervercel
Leverans & testgithub-actionsplaywrightvitest
AI-assisterat arbeteclaudeclaude/design
Verktyg

Är er kodbas redo att koda i par med AI?

Tolv frågor, tre minuter, inget sparas. Få er nivå, er svagaste dimension — och var ni börjar.

Starta AI-redo-kollen →
Säg hej

Har du ett problem värt att lösa?

Chatta med oss på WhatsApp. Vi svarar inom 48 timmar.