{
  "meta": {
    "website": "https://niclaslindstedt.se",
    "documentTitle": {
      "en": "Niclas Lindstedt • Résumé",
      "sv": "Niclas Lindstedt • CV"
    },
    "description": {
      "en": "Niclas Lindstedt — IT Architect building open-source tools for agentic coding.",
      "sv": "Niclas Lindstedt — IT-arkitekt som bygger open source-verktyg för agentisk kodning."
    },
    "seo": {
      "keywords": [
        "Niclas Lindstedt",
        "IT architect",
        "agentic coding",
        "AI agents",
        "Claude",
        "open source",
        "TypeScript",
        "Rust",
        "consultant",
        "Sweden"
      ],
      "image": "/og-image.png",
      "locale": "en_US",
      "alternateLocale": "sv_SE"
    }
  },
  "name": "Niclas Lindstedt",
  "title": {
    "en": "IT Architect",
    "sv": "IT-arkitekt"
  },
  "summary": {
    "en": "IT architect at BookBeat by day, building open-source CLIs for agentic coding on the side — tools that make AI coding agents easier to orchestrate, sandbox, test, and connect to the rest of the engineering stack.",
    "sv": "IT-arkitekt på BookBeat om dagarna, bygger open source-CLI:er för agentisk kodning vid sidan av — verktyg som gör AI-kodningsagenter enklare att orkestrera, sandboxa, testa och koppla till resten av utvecklingsstacken."
  },
  "longSummary": {
    "en": "Today I work as an IT architect at BookBeat, and on the side I build a small family of open-source CLIs — zag, zig, zad, and ztf — that make AI coding agents easier to orchestrate, sandbox, test, and connect to existing engineering workflows. They came out of working with agentic development professionally and running into the same gaps over and over: provider lock-in, brittle prompts, undebuggable multi-agent runs. The next step is taking these CLIs from personal tooling to something engineering teams can adopt end-to-end — production-ready packaging, documentation, integrations, and support so spec-driven agentic coding fits into existing git, CI, and oncall workflows without surprises.",
    "sv": "Just nu arbetar jag som IT-arkitekt på BookBeat, och vid sidan av bygger jag en liten familj av open source-CLI:er — zag, zig, zad och ztf — som gör AI-kodningsagenter enklare att orkestrera, sandboxa, testa och koppla in i befintliga utvecklingsflöden. Verktygen växte fram ur att arbeta med agentisk utveckling professionellt och stöta på samma luckor om och om igen: leverantörsinlåsning, sköra prompts, multi-agentkörningar som inte gick att felsöka. Nästa steg är att lyfta dessa CLI:er från personliga verktyg till något utvecklingsteam kan använda från ände till ände — produktionsfärdig paketering, dokumentation, integrationer och stöd så att specdriven agentisk kodning passar in i befintliga git-, CI- och oncall-flöden utan överraskningar."
  },
  "links": [
    {
      "label": {
        "en": "Blog ↗",
        "sv": "Blogg ↗"
      },
      "url": "https://blog.niclaslindstedt.se",
      "featured": true
    },
    {
      "label": {
        "en": "GitHub ↗",
        "sv": "GitHub ↗"
      },
      "url": "https://www.github.com/niclaslindstedt",
      "featured": true
    },
    {
      "label": {
        "en": "LinkedIn ↗",
        "sv": "LinkedIn ↗"
      },
      "url": "https://www.linkedin.com/in/niclaslindstedt",
      "featured": true
    }
  ],
  "sections": {
    "focus": {
      "en": "Current focus",
      "sv": "Nuvarande fokus"
    },
    "projects": {
      "en": "Side projects",
      "sv": "Sidoprojekt"
    },
    "experience": {
      "en": "Experience",
      "sv": "Erfarenhet"
    },
    "education": {
      "en": "Education",
      "sv": "Utbildning"
    },
    "courses": {
      "en": "Courses",
      "sv": "Kurser"
    },
    "skills": {
      "en": "Skills",
      "sv": "Kompetenser"
    },
    "languages": {
      "en": "Languages",
      "sv": "Språk"
    }
  },
  "focus": [
    {
      "area": {
        "en": "Agentic CLI tooling",
        "sv": "Agentiska CLI-verktyg"
      },
      "since": "2025-11",
      "tagline": {
        "en": "Command-line tools built for agents to use without a human in the loop.",
        "sv": "Kommandoradsverktyg byggda för agenter att använda utan människa i loopen."
      },
      "description": {
        "en": "A CLI built for an agent isn't a CLI built for a human. The primary consumer reads every byte of stdout into a context window, pays for it by the token, and is trying to figure out what to do next. Every line the CLI emits is a prompt: help text steers it toward the right command, output shapes the next invocation, errors steer it out of the failure. So introductions fit in a line or two, every command and flag is discoverable from a single invocation, output lands in the same predictable shape every time, and errors read as instructions rather than stack traces. Most CLIs weren't written that way. I'm building new ones and wrapping old ones so an agent can pick one up cold and run it without anyone in the loop.",
        "sv": "En CLI byggd för en agent är inte en CLI byggd för en människa. Den primära konsumenten läser in varje byte av stdout i sitt kontextfönster, betalar för det per token och försöker lista ut nästa steg. Varje rad CLI:n skriver är en prompt: hjälptexten styr den mot rätt kommando, utdata formar nästa anrop, felmeddelanden styr den ut ur felet. Presentationen ryms på en rad eller två, varje kommando och flagga är upptäckbara från ett enda anrop, utdata landar i samma förutsägbara form varje gång och felmeddelanden läser sig som instruktioner snarare än stack traces. De flesta CLI:er är inte skrivna så. Jag bygger nya och bygger om gamla så att en agent kan plocka upp en kall och köra den utan någon i loopen."
      },
      "skills": [
        "Claude Code",
        "Codex CLI",
        "Gemini CLI",
        "MCP",
        "Agent skills"
      ],
      "aliases": [
        "agent cli",
        "cli agents",
        "command line agents"
      ]
    },
    {
      "area": {
        "en": "Agentic orchestration",
        "sv": "Agentisk orkestrering"
      },
      "since": "2025-10",
      "tagline": {
        "en": "Agent workflows that run end-to-end without a human refilling the prompt.",
        "sv": "Agentflöden som körs hela vägen utan att en människa fyller på prompten."
      },
      "description": {
        "en": "You can't build anything serious on a single agent prompt. Real work needs several agents (or several invocations of the same one) handing off to each other, plus tools, plus a way to recover when one of them goes off the rails. Orchestration is the layer that does that handoff, makes the run reproducible enough to debug after the fact, and stays runnable next month, when one of the upstream CLIs has quietly changed its flags or its output format again.",
        "sv": "Man bygger inget seriöst på en enda agent-prompt. Riktigt arbete kräver flera agenter (eller flera anrop av samma agent) som lämnar över till varandra, plus verktyg, plus ett sätt att återhämta sig när någon av dem spårar ur. Orkestrering är lagret som sköter den överlämningen, gör körningen tillräckligt reproducerbar för att felsökas i efterhand och som fortfarande går att köra om en månad, när något av CLI-verktygen i botten i tysthet har ändrat sina flaggor eller sitt utdataformat igen."
      },
      "skills": [
        "Agent orchestration",
        "Agentic workflows",
        "MCP",
        "AI evaluations"
      ],
      "aliases": [
        "multi-agent orchestration",
        "agent orchestration"
      ]
    },
    {
      "area": {
        "en": "Spec-driven development",
        "sv": "Spec-driven utveckling"
      },
      "since": "2025-07",
      "tagline": {
        "en": "A written spec as the source of truth for both human and agent.",
        "sv": "En skriven spec som sanning för både människa och agent."
      },
      "description": {
        "en": "Most software grows from a sketch in someone's head, gets reinterpreted by the first person who reads the code, and drifts from there. A written spec sets the anchor down. Agents converge on it the same way humans do, and any drift between the code and the spec becomes a checkable thing instead of a discussion. The version that interests me most lately is meta-level. A specification for how a project is structured, developed, validated, and deployed, so a whole fleet of repos can stay coherent without anyone hand-policing them.",
        "sv": "Mjukvara växer oftast från en skiss i någons huvud, omtolkas av första personen som läser koden och driver iväg därifrån. En skriven spec sätter ner ankaret. Agenter konvergerar mot den på samma sätt som människor, och varje avdrift mellan koden och specen blir något man kan kontrollera i stället för att diskutera. Den variant som intresserar mig mest just nu är på metanivå. En specifikation för hur ett projekt struktureras, utvecklas, valideras och driftsätts, så att en hel uppsättning repon kan hållas i linje utan att någon handpoliserar dem."
      },
      "skills": [
        "Spec-driven development"
      ],
      "aliases": [
        "spec-driven coding",
        "specifications",
        "spec driven"
      ]
    },
    {
      "area": {
        "en": "Agentic coding",
        "sv": "Agentisk kodning"
      },
      "since": "2025-05",
      "tagline": {
        "en": "AI coding agents as primary collaborators: the developer steers, the agent types.",
        "sv": "AI-kodningsagenter som primära medarbetare: utvecklaren styr, agenten skriver."
      },
      "description": {
        "en": "Working with an AI coding agent is a discipline-on-the-codebase problem. The agent does best in code that's boring: established naming, predictable layouts, no clever local conventions — code that's less yours and more generic on purpose. Hooks keep it honest: refuse the giant new file, force the refactor before it lands, demand a test alongside the change. Tests come in from the first commit; they're the only signal the agent has that its work is correct. Anything that can be automated should be, and the agent can lay down the automation itself — every linter, hook, and codegen rule it adds makes the next session shorter. You shape the rails. The agent ships between them.",
        "sv": "Att arbeta med en AI-kodningsagent är ett disciplin-på-kodbasen-problem. Agenten gör bäst ifrån sig i kod som är tråkig: etablerade namn, förutsägbara filstrukturer, inga lokala finurligheter — kod som är mindre din och mer generisk med flit. Hooks håller den ärlig: avvisar den enorma nya filen, tvingar fram refaktorn innan den landar, kräver ett test bredvid ändringen. Tester kommer in från första commit; det är enda signalen agenten har om att arbetet faktiskt fungerar. Allt som kan automatiseras ska automatiseras, och agenten kan lägga ner automationen själv — varje linter, hook och kodgenereringsregel den lägger till gör nästa session kortare. Du lägger rälsen. Agenten levererar mellan spåren."
      },
      "skills": [
        "AI agents",
        "Agentic testing",
        "Prompt engineering",
        "Claude Code",
        "GitHub Copilot",
        "Agent sandboxing"
      ],
      "aliases": [
        "ai coding",
        "agent coding",
        "ai pair programming"
      ]
    },
    {
      "area": {
        "en": "Cybersecurity",
        "sv": "Cybersäkerhet"
      },
      "since": "2016-01",
      "tagline": {
        "en": "A career-long discipline, more critical now that AI writes and reviews code without seeing the codebase around it.",
        "sv": "En disciplin genom hela karriären, mer kritisk nu när AI skriver och granskar kod utan att se kodbasen runt omkring."
      },
      "description": {
        "en": "Security has been part of my work since I started writing code professionally. Early on I implemented OAuth2 as a side project to understand how most applications actually handle authentication, and that pattern — working through a primitive end-to-end — has carried into everything I've done since: encryption, signing, certificate management, and app integrity, all shipped to production. The discipline matters more now, not less. AI agents write code faster than anyone can review it, and increasingly review code with most of the surrounding context stripped out, so the assumptions security used to lean on — that a human read every line, that the reviewer remembered last week's threat model — no longer hold.",
        "sv": "Säkerhet har varit en del av mitt arbete sedan jag började skriva kod professionellt. Tidigt i karriären implementerade jag OAuth2 som ett sidoprojekt för att förstå hur de flesta applikationer faktiskt hanterar autentisering, och det mönstret — att jobba igenom en primitiv end-to-end — har följt med i allt jag gjort sedan dess: encryption, signing, certifikathantering och app integrity, allt levererat i produktion. Disciplinen blir viktigare, inte mindre, nu. AI-agenter skriver kod snabbare än någon hinner granska, och granskar i allt högre grad kod med det mesta av den omgivande kontexten bortskuren, så antagandena som säkerhet vilade på — att en människa läste varje rad, att granskaren mindes förra veckans threat model — håller inte längre."
      },
      "skills": [
        "Cybersecurity",
        "RFC implementation"
      ],
      "aliases": [
        "cybersecurity",
        "security",
        "appsec",
        "infosec",
        "secure coding",
        "oauth",
        "oauth2",
        "authentication",
        "encryption",
        "signing",
        "certificates",
        "app integrity",
        "mfa",
        "hardening"
      ]
    }
  ],
  "projects": [
    {
      "name": "zag",
      "tagline": {
        "en": "A unified CLI and SDK for AI coding agents — change providers with a flag.",
        "sv": "Ett enhetligt CLI och SDK för AI-kodningsagenter — byt leverantör med en flagga."
      },
      "description": {
        "en": "A multi-agent CLI wrapper that unifies input parameters, output formats, and session logs across Claude Code, Codex, Gemini, Copilot, and Ollama. On top of that it adds remote-connection support, authentication, and typed input/output data models, exposed as a Rust SDK with bindings in five other languages so callers can drive any agent programmatically without installing the zag binary. Switching providers is a single flag change.",
        "sv": "En multi-agent-CLI-wrapper som enhetliggör indataparametrar, utdataformat och sessionsloggar över Claude Code, Codex, Gemini, Copilot och Ollama. Ovanpå det adderas stöd för fjärranslutning, autentisering och typade in- och utdatamodeller, exponerade som ett Rust-SDK med bindningar i fem andra språk så att anropare kan driva valfri agent programmatiskt utan att installera zag-binären. Att byta leverantör är en flaggändring."
      },
      "stack": [
        "Rust",
        "Docker",
        "TypeScript",
        "Python",
        "C#/.NET",
        "Swift",
        "Java",
        "Kotlin"
      ],
      "skills": [
        "Agent sandboxing",
        "Claude Code",
        "Agent skills",
        "Codex CLI",
        "Gemini CLI",
        "GitHub Copilot",
        "Ollama",
        "CI/CD"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "zag"
        }
      ],
      "openSource": true,
      "homepage": "https://zag.niclaslindstedt.se",
      "cratesIo": "zag",
      "npm": "@nlindstedt/zag-agent",
      "pypi": "zag-agent",
      "nuget": "Zag",
      "aliases": [
        "agent cli",
        "multi-provider llm cli",
        "claude codex gemini cli"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "zag",
        "username": "niclaslindstedt",
        "headSha": "5a67559b5ed08a9513d47587c46c289fd44d7257",
        "firstCommitDate": "2026-01-13",
        "lastCommitDate": "2026-05-15",
        "totalCommits": 352,
        "commitsByYear": {
          "2026": 352
        }
      }
    },
    {
      "name": "zig",
      "tagline": {
        "en": "An agent orchestration engine, insulated from the churn of agent CLIs.",
        "sv": "En orkestreringsmotor för agenter, isolerad från snabba förändringar i agent-CLI:er."
      },
      "description": {
        "en": "An orchestration engine for AI coding agents, built on top of zag for the underlying provider abstraction. Because zag handles the differences between Claude Code, Codex, Gemini, and the rest, orchestrations don't have to be rewritten every time an agent CLI changes its flags, output format, or session model. Workflows describe what should happen; zig and zag decide which agent runs it, where, and how.",
        "sv": "En orkestreringsmotor för AI-kodningsagenter, byggd på zag för den underliggande leverantörsabstraktionen. Eftersom zag hanterar skillnaderna mellan Claude Code, Codex, Gemini och övriga behöver orkestreringar inte skrivas om varje gång ett agent-CLI ändrar flaggor, utdataformat eller sessionsmodell. Arbetsflöden beskriver vad som ska ske; zig och zag avgör vilken agent som kör det, var och hur."
      },
      "stack": [
        "Rust",
        "React"
      ],
      "skills": [
        "Agent orchestration",
        "Agentic workflows",
        "Claude Code",
        "Agent skills",
        "CI/CD"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "zig"
        }
      ],
      "openSource": true,
      "homepage": "https://zig.niclaslindstedt.se",
      "cratesIo": "zig-cli",
      "npm": "@nlindstedt/zig-workflow",
      "aliases": [
        "zig workflow",
        "zwf",
        "agent workflow runner"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "zig",
        "username": "niclaslindstedt",
        "headSha": "d677ca1f7192694eb54f4100896372bcf43c8894",
        "firstCommitDate": "2026-04-08",
        "lastCommitDate": "2026-05-12",
        "totalCommits": 106,
        "commitsByYear": {
          "2026": 106
        }
      }
    },
    {
      "name": "zad",
      "tagline": {
        "en": "Signed, per-project service grants for AI agents — Discord, Slack, Gmail, Calendar, and more.",
        "sv": "Signerade, projektavgränsade tjänstemandat för AI-agenter — Discord, Slack, Gmail, Kalender med flera."
      },
      "description": {
        "en": "An integrations CLI that lets agents discover and call external services — Discord, Slack, Gmail, Google Calendar, and others — without ever holding the credentials themselves. Service credentials live in the OS keychain; access is scoped per project and the scope is signed with a private key, so an agent cannot widen its own permissions by editing a config file. Result: a blanket allow-rule like `Bash(zad:*)` is safe to grant, because the agent can only do what zad has already been told it may do.",
        "sv": "Ett integrations-CLI som låter agenter upptäcka och anropa externa tjänster — Discord, Slack, Gmail, Google Kalender med flera — utan att någonsin hålla i credentials själva. Tjänstecredentials lagras i operativsystemets nyckelring; åtkomsten avgränsas per projekt och omfattningen signeras med en privat nyckel, så att en agent inte kan utöka sina egna behörigheter genom att skriva om en konfigurationsfil. Resultatet: en bred tillåt-regel som `Bash(zad:*)` är trygg att ge, eftersom agenten bara kan göra det zad redan blivit tillsagd att tillåta."
      },
      "stack": [
        "Rust"
      ],
      "skills": [
        "Integrations",
        "Agent security",
        "Claude Code",
        "Agent skills",
        "CI/CD"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "zad"
        }
      ],
      "openSource": true,
      "homepage": "https://zad.niclaslindstedt.se",
      "cratesIo": "zad",
      "aliases": [
        "agent permissions",
        "scoped agent access"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "zad",
        "username": "niclaslindstedt",
        "headSha": "eb39e5cbb1fe4ed17ea468ced347fda2230160d2",
        "firstCommitDate": "2026-04-17",
        "lastCommitDate": "2026-05-15",
        "totalCommits": 68,
        "commitsByYear": {
          "2026": 68
        }
      }
    },
    {
      "name": "ztf",
      "tagline": {
        "en": "Agent-assisted fuzzy AAA testing for agent and orchestration outputs.",
        "sv": "Agent-assisterad fuzzy AAA-testning för utdata från agenter och orkestreringar."
      },
      "description": {
        "en": "An agent testing framework for fuzzy AAA testing — the cases where the value being asserted isn't something a regex or schema can settle. Aimed at validating agent and orchestration outputs, it uses zag underneath so the validator can run on a different provider than the system under test. Validating a Claude run with Codex (or vice versa) keeps self-preference bias out of the verdict.",
        "sv": "Ett ramverk för agenttestning för fuzzy AAA-testning — de fall där värdet som ska valideras inte är något ett regex eller ett schema kan avgöra. Inriktat på att validera utdata från agenter och orkestreringar, använder det zag i botten så att granskaren kan köras på en annan leverantör än systemet under test. Att validera en Claude-körning med Codex (eller tvärtom) håller självpreferens-bias borta från bedömningen."
      },
      "stack": [
        "Rust"
      ],
      "skills": [
        "Agentic testing",
        "AI evaluations",
        "Claude Code",
        "Agent skills",
        "CI/CD"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "ztf"
        }
      ],
      "openSource": true,
      "homepage": "https://ztf.niclaslindstedt.se",
      "cratesIo": "ztf",
      "aliases": [
        "agent terminal forwarder",
        "agent terminal"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "ztf",
        "username": "niclaslindstedt",
        "headSha": "570678aa6ec662b2fbd5e0a11e54890834152399",
        "firstCommitDate": "2026-04-17",
        "lastCommitDate": "2026-05-10",
        "totalCommits": 16,
        "commitsByYear": {
          "2026": 16
        }
      }
    },
    {
      "name": "spotifai",
      "tagline": {
        "en": "A natural-language CLI for managing your Spotify and YouTube Music libraries — built on zag and zad.",
        "sv": "Ett CLI på naturligt språk för att hantera dina Spotify- och YouTube Music-bibliotek — byggt på zag och zad."
      },
      "description": {
        "en": "A Rust CLI for managing a music library in natural language. `spotifai ask` answers read-only questions about what's in the library; `spotifai playlist` builds new playlists conversationally; `spotifai export | import` migrates between providers, resolving tracks by ISRC. Spotify is the default backend; YouTube Music is a `--provider` flag away, and a third backend is one new variant plus a policy file. zag handles the agent side and zad signs per-command permission profiles at install time, so `ask` cannot widen its own access at runtime — destructive verbs stay denied even when the model asks for them.",
        "sv": "Ett Rust-CLI för att hantera ett musikbibliotek på naturligt språk. `spotifai ask` svarar på read-only-frågor om vad som finns i biblioteket; `spotifai playlist` bygger nya spellistor konversationsvis; `spotifai export | import` migrerar mellan leverantörer och matchar spår via ISRC. Spotify är standard, YouTube Music ligger en `--provider`-flagga bort, och en tredje leverantör är en ny variant plus en policyfil. zag hanterar agentdelen och zad signerar permissions-profiler per kommando vid installation, så att `ask` inte kan utöka sin egen åtkomst i körtid — destruktiva verb förblir nekade även när modellen ber om dem."
      },
      "stack": [
        "Rust"
      ],
      "skills": [
        "Integrations",
        "Agent security",
        "Claude Code",
        "Agent skills"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "spotifai"
        }
      ],
      "openSource": true,
      "homepage": "https://spotifai.niclaslindstedt.se",
      "cratesIo": "spotifai",
      "aliases": [
        "spotify cli",
        "youtube music cli",
        "natural language music",
        "playlist agent"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "spotifai",
        "username": "niclaslindstedt",
        "headSha": "7e205cb9ba4304ba73d040f57ed3a80b8fac42ee",
        "firstCommitDate": "2026-05-07",
        "lastCommitDate": "2026-05-15",
        "totalCommits": 52,
        "commitsByYear": {
          "2026": 52
        }
      }
    },
    {
      "name": "oss-spec",
      "tagline": {
        "en": "A spec for how open source projects are built — and a CLI that keeps repos up-to-spec.",
        "sv": "En specifikation för hur open source-projekt byggs — och ett CLI som håller repon spec-konforma."
      },
      "description": {
        "en": "A specification — and a CLI to enforce it — for how open source projects should be structured, developed, validated, and deployed. Bootstraps a fresh repo with documentation, GitHub Actions, Claude skills, release pipelines, and licensing already in place, so spinning up a new idea is friction-free. Pointed at an existing project it audits drift, auto-fixes what it can, and files an issue per remaining violation. A meta-take on spec-driven development: the spec defines how the application is built, not what it does.",
        "sv": "En specifikation — och ett CLI som upprätthåller den — för hur open source-projekt ska struktureras, utvecklas, valideras och driftsättas. Startar ett färskt repo med dokumentation, GitHub Actions, Claude-skills, release-pipelines och licensiering redan på plats, så att det är friktionsfritt att starta upp en ny idé. Pekat mot ett befintligt projekt revideras avvikelser, det som går åtgärdas automatiskt och ett issue skapas per kvarvarande avvikelse. En meta-version av spec-driven utveckling: specen definierar hur applikationen byggs, inte vad den gör."
      },
      "stack": [
        "Rust"
      ],
      "skills": [
        "Spec-driven development",
        "Claude Code",
        "Agent skills",
        "CI/CD"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "oss-spec"
        }
      ],
      "openSource": true,
      "cratesIo": "oss-spec",
      "aliases": [
        "open source spec",
        "oss specification",
        "ossspec"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "oss-spec",
        "username": "niclaslindstedt",
        "headSha": "200c76cb988e8c7df3fd5d620dc3befd3eace38e",
        "firstCommitDate": "2026-04-11",
        "lastCommitDate": "2026-05-12",
        "totalCommits": 49,
        "commitsByYear": {
          "2026": 49
        }
      }
    },
    {
      "name": "blog",
      "tagline": {
        "en": "A personal AI blog with agent-assisted administration — no CMS, no admin UI, no editor.",
        "sv": "En personlig AI-blogg med agent-assisterad administration — ingen CMS, inget adminläge, ingen editor."
      },
      "description": {
        "en": "A nerdy personal blog about AI projects and unconventional ways to use AI. The innovation is agent-assisted administration: no CMS, no admin UI, no editor — Claude skills add, update, and delete posts, write non-technical companion versions, fix typos, and push the result to the repo for a GitHub Pages deploy.",
        "sv": "En nördig personlig blogg om AI-projekt och okonventionella sätt att använda AI. Det innovativa är agent-assisterad administration: ingen CMS, inget adminläge, ingen editor — Claude-skills lägger till, uppdaterar och tar bort inlägg, skriver icke-tekniska parallellversioner, rättar stavfel och pushar resultatet till repot för en GitHub Pages-deploy."
      },
      "stack": [
        "TypeScript",
        "React",
        "Node.js",
        "GitHub actions",
        "Claude Code",
        "Agent skills"
      ],
      "skills": [
        "SEO"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "blog"
        }
      ],
      "openSource": true,
      "homepage": "https://blog.niclaslindstedt.se",
      "aliases": [
        "personal blog",
        "writing"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "blog",
        "username": "niclaslindstedt",
        "headSha": "7c217084958f8d734e271f08b34bf4161dbc6d6d",
        "firstCommitDate": "2026-04-20",
        "lastCommitDate": "2026-05-14",
        "totalCommits": 118,
        "commitsByYear": {
          "2026": 118
        }
      }
    },
    {
      "name": "cv",
      "tagline": {
        "en": "A personal website built to be generated from a schema-validated JSON résumé.",
        "sv": "En personlig webbsajt byggd för att genereras från ett schemavaliderat JSON-CV."
      },
      "description": {
        "en": "A personal website built to be generated from a schema-validated JSON résumé. The whole CV — content, structure, and most of the code — was written on an iPhone with the Claude Code App. The same JSON drives the React site, an interactive timeline, a search index, and PDFs in English and Swedish; GitHub Actions rebuilds and redeploys on every change.",
        "sv": "En personlig webbsajt byggd för att genereras från ett schemavaliderat JSON-CV. Hela CV:t — innehåll, struktur och större delen av koden — skrevs på en iPhone med Claude Code-appen. Samma JSON driver React-sajten, en interaktiv tidslinje, ett sökindex och PDF:er på engelska och svenska; GitHub Actions bygger om och driftsätter vid varje ändring."
      },
      "printDescription": {
        "en": "Personal website built to be generated from a schema-validated JSON résumé, written on an iPhone with the Claude Code App; updates ship via GitHub Actions.",
        "sv": "Personlig webbsajt byggd för att genereras från ett schemavaliderat JSON-CV, skriven på en iPhone med Claude Code-appen; uppdateringar släpps via GitHub Actions."
      },
      "stack": [
        "TypeScript",
        "React",
        "Node.js",
        "GitHub actions"
      ],
      "skills": [
        "Claude Code",
        "Agent skills",
        "SEO",
        "WCAG"
      ],
      "homepage": "https://niclaslindstedt.se",
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "cv"
        }
      ],
      "openSource": true,
      "aliases": [
        "resume",
        "personal site",
        "personal website",
        "cv site"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "cv",
        "username": "niclaslindstedt",
        "headSha": "846ef7c814bf5b2f8661e151295d0d525e339159",
        "firstCommitDate": "2026-04-20",
        "lastCommitDate": "2026-05-13",
        "totalCommits": 440,
        "commitsByYear": {
          "2026": 440
        }
      }
    },
    {
      "name": "juris",
      "tagline": {
        "en": "A Python pipeline that turns Swedish legal documents into a clean, RAG-ready corpus.",
        "sv": "En Python-pipeline som omvandlar svenska rättsdokument till ett städat, RAG-redo korpus."
      },
      "description": {
        "en": "A Python project that collects Swedish legal documents from their official government sources — parliament, government, courts, agencies, EU law — and normalizes them into a clean, openly redistributable corpus. The output is shaped for downstream use: typically embedded with a model like Qwen3-Embedding, stored in a vector database, and served as ground-truth context inside a RAG pipeline. Async I/O with rate limiting respects the source servers; PDF text extraction handles attachments. Published to PyPI.",
        "sv": "Ett Python-projekt som samlar in svenska rättsdokument från deras officiella myndighetskällor — riksdag, regering, domstolar, myndigheter, EU-rätt — och normaliserar dem till ett städat, fritt vidaredistribuerbart korpus. Utdatan är formad för vidareanvändning: typiskt embeddad med en modell som Qwen3-Embedding, lagrad i en vektordatabas och serverad som faktagrund i en RAG-pipeline. Asynkron I/O med rate limiting respekterar källservrarna; PDF-textextraktion hanterar bilagor. Publicerad på PyPI."
      },
      "stack": [
        "Python"
      ],
      "skills": [
        "Integrations",
        "CI/CD"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "juris"
        }
      ],
      "openSource": true,
      "homepage": "https://juris.niclaslindstedt.se",
      "pypi": "juris",
      "aliases": [
        "legal",
        "law"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "juris",
        "username": "niclaslindstedt",
        "headSha": "53dea8d84707db5c93d46a54abbe337634448b65",
        "firstCommitDate": "2026-04-05",
        "lastCommitDate": "2026-05-15",
        "totalCommits": 86,
        "commitsByYear": {
          "2026": 86
        }
      }
    },
    {
      "name": "swarm",
      "tagline": {
        "en": "A CLI agent orchestrator for Claude Code — queen, rules-based, and event-based.",
        "sv": "Ett CLI-baserat orkestreringsverktyg för Claude Code — queen, regelbaserat och event-baserat."
      },
      "description": {
        "en": "A CLI agent orchestrator for Claude Code. Everything happens through the CLI, which supports three orchestration styles — queen orchestration, where a director agent delegates to workers; rules-based orchestration, driven by declarative state transitions; and event-based orchestration, fired by triggers on lifecycle events. Clear, informative info and error messages steer the agent through the development lifecycle, with project state held in a PostgreSQL-backed project-management system — tickets, pull requests, epics, and the rest — built into Swarm itself rather than leaning on GitHub. The project eventually grew large enough that the wiser path turned out to be a rewrite split across several smaller, narrower-scoped projects rather than continued development in Swarm itself.",
        "sv": "Ett CLI-baserat orkestreringsverktyg för agenter i Claude Code. Allt sker via CLI:t, som stödjer tre orkestreringsstilar — queen-orkestrering, där en dirigerande agent delegerar till arbetare; regelbaserad orkestrering, styrd av deklarativa tillståndsövergångar; och event-baserad orkestrering, som triggas av utlösare på lifecycle events. Tydliga, informativa info- och felmeddelanden styr agenten genom utvecklingscykeln, och projektets tillstånd hålls i ett PostgreSQL-baserat projekthanteringssystem — tickets, pull requests, epics och allt annat — inbyggt i Swarm istället för att luta sig mot GitHub. Projektet växte till slut till en sådan storlek att den klokare vägen visade sig vara att skriva om och dela upp det i flera mindre projekt med smalare scope, snarare än att fortsätta utvecklingen i Swarm självt."
      },
      "stack": [
        "Rust",
        "PostgreSQL",
        "Svelte"
      ],
      "skills": [
        "Agent orchestration",
        "Agentic workflows",
        "MCP"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "swarm-cli"
        },
        {
          "owner": "niclaslindstedt",
          "repo": "swarm"
        },
        {
          "owner": "niclaslindstedt",
          "repo": "swarmd"
        }
      ],
      "openSource": false,
      "aliases": [
        "agent swarm",
        "swarm of agents"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "swarm-cli",
        "username": "niclaslindstedt",
        "firstCommitDate": "2025-11-01",
        "lastCommitDate": "2026-03-26",
        "totalCommits": 2238
      }
    },
    {
      "name": "app-endix",
      "tagline": {
        "en": "An early take on spec-driven development as a set of slash-command prompts.",
        "sv": "En tidig version av spec-driven utveckling som en uppsättning slash-prompts."
      },
      "description": {
        "en": "An early take on spec-driven development packaged as a small set of slash-command prompts. `/spec` turned an idea into a `spec.md`, `/plan` produced an implementation plan from it, `/create-tickets` split the plan into tickets sized to fit a single agent session, and `/next-ticket` pulled the next ticket off the queue and built it. State lived on the file system. Written before GitHub released SpecKit.",
        "sv": "En tidig version av spec-driven utveckling paketerad som en liten uppsättning slash-prompts. `/spec` gjorde en idé till en `spec.md`, `/plan` tog fram en implementationsplan utifrån den, `/create-tickets` delade upp planen i ärenden som rymdes i en enda agentsession och `/next-ticket` plockade nästa ärende från kön och byggde det. Tillstånd låg på filsystemet. Skrevs innan GitHub släppte SpecKit."
      },
      "stack": [
        "Python"
      ],
      "skills": [
        "Spec-driven development",
        "Agentic workflows",
        "Prompt engineering"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "app-endix"
        }
      ],
      "openSource": false,
      "aliases": [
        "appendix",
        "app endix",
        "spec-driven prompts",
        "speckit predecessor"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "app-endix",
        "username": "niclaslindstedt",
        "headSha": "5cb6046cd1ee03bcb791943938091d1d78e076b1",
        "firstCommitDate": "2025-07-25",
        "lastCommitDate": "2025-07-30",
        "totalCommits": 13,
        "commitsByYear": {
          "2025": 13
        }
      }
    },
    {
      "name": "etimo-achievements",
      "tagline": {
        "en": "A Slack-integrated achievements platform that turned office chores into a leaderboard.",
        "sv": "En Slack-integrerad achievements-plattform som gjorde vardagssysslorna till en topplista."
      },
      "description": {
        "en": "A platform for handing out and managing achievements with Slack at the centre. Anyone can define an achievement — \"Brewed coffee, 20 points\" — and award it to a colleague when they do something appreciated; the message lands in Slack and the receiver climbs the board. Top contestants take home a prize each month. It made the unglamorous parts of office life genuinely fun, and it stuck. Built as an Etimo open source project — TypeScript end-to-end on Node.js/Express, PostgreSQL, and Kubernetes.",
        "sv": "En plattform för att dela ut och hantera achievements med Slack i centrum. Vem som helst kan definiera en achievement — \"Bryggde kaffe, 20 poäng\" — och dela ut den till en kollega som gjort något uppskattat; meddelandet hamnar i Slack och mottagaren klättrar på listan. Topplacerade får ett pris varje månad. Det gjorde de oglamorösa delarna av kontorslivet riktigt roliga, och det fastnade. Byggd som ett open source-projekt på Etimo — TypeScript hela vägen på Node.js/Express, PostgreSQL och Kubernetes."
      },
      "stack": [
        "TypeScript",
        "Node.js",
        "PostgreSQL",
        "Docker",
        "Kubernetes",
        "GitHub actions"
      ],
      "skills": [
        "Integrations"
      ],
      "github": [
        {
          "owner": "Etimo",
          "repo": "etimo-achievements"
        }
      ],
      "openSource": true,
      "aliases": [
        "achievements",
        "etimo gamification",
        "slack achievements"
      ],
      "stats": {
        "owner": "Etimo",
        "repo": "etimo-achievements",
        "username": "niclaslindstedt",
        "headSha": "af8b27dd62d548b4404e8b3f8b9118d8a02b7c30",
        "firstCommitDate": "2021-10-13",
        "lastCommitDate": "2023-02-17",
        "totalCommits": 274,
        "commitsByYear": {
          "2021": 105,
          "2022": 162,
          "2023": 7
        }
      }
    },
    {
      "name": "dotnet-oauth2-server",
      "tagline": {
        "en": "OAuth 2.0 authorization server in ASP.NET Core.",
        "sv": "OAuth 2.0-auktoriseringsserver i ASP.NET Core."
      },
      "description": {
        "en": "An ASP.NET Core implementation of OAuth 2.0 (RFC 6749) written from the spec rather than around an existing library. Covers the standard grants with JWT bearer tokens, scopes, audit logging, and a Blazor WebAssembly admin UI.",
        "sv": "En ASP.NET Core-implementation av OAuth 2.0 (RFC 6749) skriven utifrån specifikationen snarare än kring ett befintligt bibliotek. Täcker de vanliga flödena med JWT-bearer-tokens, scopes, audit-loggning och ett Blazor WebAssembly-administrationsgränssnitt."
      },
      "stack": [
        "C#/.NET",
        "PostgreSQL",
        "Docker"
      ],
      "skills": [
        "Cybersecurity",
        "RFC implementation"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "dotnet-oauth2-server"
        }
      ],
      "openSource": true,
      "aliases": [
        "oauth",
        "oauth2",
        "auth server",
        "dotnet auth"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "dotnet-oauth2-server",
        "username": "niclaslindstedt",
        "headSha": "30b3870c72421b8b49723b96ccccbe5f279b1a7e",
        "firstCommitDate": "2020-11-17",
        "lastCommitDate": "2021-05-20",
        "totalCommits": 265,
        "commitsByYear": {
          "2020": 216,
          "2021": 49
        }
      }
    },
    {
      "name": "docker-backup",
      "tagline": {
        "en": "Encrypted, compressed backups of host and container data — shipped as a 12 MB Docker image.",
        "sv": "Krypterade, komprimerade säkerhetskopior av värd- och kontainerdata — levererade som en 12 MB Docker-image."
      },
      "description": {
        "en": "A backup system written entirely in Bash and packaged as a 12 MB Docker image. Backs up host folders or the contents of sibling containers, compresses and encrypts the archive, and uploads it to one or several remote destinations. Ships with its own end-to-end test framework — also Bash — that exercises the full backup-and-restore path against real targets so regressions surface before they reach production. Distributed as multi-arch images on Docker Hub.",
        "sv": "Ett säkerhetskopieringssystem skrivet helt i Bash och paketerat som en 12 MB Docker-image. Säkerhetskopierar värdmappar eller innehållet i syskon-kontainrar, komprimerar och krypterar arkivet och laddar upp det till en eller flera fjärrvärdar. Levereras med ett eget end-to-end-testramverk — också i Bash — som kör hela backup-och-återställningsflödet mot riktiga mål så att regressioner upptäcks innan de når produktion. Distribueras som multi-arch-avbildningar på Docker Hub."
      },
      "stack": [
        "Bash/Shell",
        "Docker"
      ],
      "skills": [
        "Cybersecurity"
      ],
      "github": [
        {
          "owner": "niclaslindstedt",
          "repo": "docker-backup"
        }
      ],
      "openSource": true,
      "dockerHub": "niclaslindstedt/docker-backup",
      "aliases": [
        "docker backups",
        "container backup"
      ],
      "stats": {
        "owner": "niclaslindstedt",
        "repo": "docker-backup",
        "username": "niclaslindstedt",
        "headSha": "f21aeacceb288b009c4e99b49d18e3c95d5829d2",
        "firstCommitDate": "2021-04-08",
        "lastCommitDate": "2021-05-21",
        "totalCommits": 114,
        "commitsByYear": {
          "2021": 114
        }
      }
    }
  ],
  "companies": [
    {
      "id": "bookbeat",
      "name": "BookBeat AB",
      "tagline": {
        "en": "Audiobook and e-book streaming service.",
        "sv": "Strömningstjänst för ljudböcker och e-böcker."
      },
      "description": {
        "en": "Audiobook and e-book streaming service across more than 10 European markets, with over a million paying subscribers. Owned by Bonnier Books.",
        "sv": "Strömningstjänst för ljudböcker och e-böcker på fler än 10 europeiska marknader, med över en miljon betalande prenumeranter. Ägs av Bonnier Books."
      },
      "url": "https://www.bookbeat.com",
      "sourceUrls": [
        {
          "title": "Official about page",
          "url": "https://www.bookbeat.com/se/about",
          "description": "BookBeat's own about page describing the company, product, and mission."
        },
        {
          "title": "Wikipedia (Swedish)",
          "url": "https://sv.wikipedia.org/wiki/Bookbeat",
          "description": "Swedish Wikipedia article covering Bookbeat's history, ownership, and reach."
        }
      ],
      "aliases": [
        "book beat",
        "bookbeat ab"
      ]
    },
    {
      "id": "ibnq",
      "name": "IBNQ AB",
      "tagline": {
        "en": "Software platform for family offices.",
        "sv": "Mjukvaruplattform för family offices."
      },
      "description": {
        "en": "Wealth-management platform for family offices and private banks: aggregating personal and asset information, AI-assisted decision-making, and data administration for high-net-worth clients.",
        "sv": "Plattform för förmögenhetsförvaltning åt family offices och privatbanker: aggregering av person- och tillgångsdata, AI-stödd beslutsfattning och dataadministration för förmögna klienter."
      },
      "discontinued": true,
      "aliases": [
        "ibnq ab",
        "family office platform"
      ]
    },
    {
      "id": "etimo",
      "name": "Etimo AB",
      "tagline": {
        "en": "Software development and architecture consultancy.",
        "sv": "Konsultbolag inom systemutveckling och systemarkitektur."
      },
      "description": {
        "en": "Stockholm-based software consultancy offering system architecture, custom system development, and team augmentation, plus leadership and organizational advisory from former CTOs and team leads. Engagements span TypeScript, C#, Java, Python, and microservice architectures on Azure and AWS, with TDD and CI/CD as standard practice.",
        "sv": "Stockholmsbaserat mjukvarukonsultbolag som erbjuder systemarkitektur, skräddarsydd systemutveckling och teamförstärkning, samt ledarskaps- och organisationsrådgivning från tidigare CTO:er och teamleads. Uppdragen spänner över TypeScript, C#, Java, Python och mikrotjänstarkitekturer på Azure och AWS, med TDD och CI/CD som standard."
      },
      "url": "https://www.etimo.se",
      "sourceUrls": [
        {
          "title": "Services overview",
          "url": "https://etimo.se/tjanster",
          "description": "Etimo's own Swedish-language services page describing what the consultancy actually does for clients."
        }
      ],
      "aliases": [
        "etimo ab"
      ]
    },
    {
      "id": "seb",
      "name": "SEB",
      "tagline": {
        "en": "Nordic financial group.",
        "sv": "Nordisk finanskoncern."
      },
      "description": {
        "en": "Nordic financial group offering retail banking and advisory in Sweden and the Baltics, and corporate and investment banking across the wider Nordics, Germany, and the United Kingdom.",
        "sv": "Nordisk finanskoncern med privatbank och rådgivning i Sverige och Baltikum, samt företags- och investmentbank i övriga Norden, Tyskland och Storbritannien."
      },
      "url": "https://www.seb.se",
      "sourceUrls": [
        {
          "title": "Official about page",
          "url": "https://seb.se/om-seb",
          "description": "SEB's own Swedish-language about page describing the bank's business, scale, and history."
        }
      ],
      "aliases": [
        "skandinaviska enskilda banken",
        "seb bank"
      ]
    },
    {
      "id": "timewave",
      "name": "TimeWave AB",
      "tagline": {
        "en": "Business management system for cleaning and home-service companies.",
        "sv": "Affärssystem för städ- och hemservicebolag."
      },
      "description": {
        "en": "Swedish vendor of a business management system for cleaning and home-service companies — scheduling, time tracking, invoicing, and customer management with built-in support for the RUT household-services tax deduction. Used by more than 300 companies.",
        "sv": "Svensk leverantör av ett affärssystem för städ- och hemservicebolag — schemaläggning, tidrapportering, fakturering och kundhantering med inbyggt stöd för RUT-avdraget. Används av fler än 300 bolag."
      },
      "url": "https://www.timewave.se",
      "sourceUrls": [
        {
          "title": "TimeWave website",
          "url": "https://www.timewave.se",
          "description": "TimeWave's own Swedish-language website describing the cleaning-industry business system."
        }
      ],
      "aliases": [
        "timewave ab",
        "time wave"
      ]
    },
    {
      "id": "mitt-skolval",
      "name": "Svensk Utbildningsteknologi AB",
      "tagline": {
        "en": "Swedish edtech company behind Mitt Skolval.",
        "sv": "Svenskt edtech-bolag bakom Mitt Skolval."
      },
      "description": {
        "en": "Swedish edtech company (Swedutech) behind the Mitt Skolval product. Handles school selection and student transfers for municipalities and independent school operators, aiming to place as many students as possible at a preferred school.",
        "sv": "Svenskt edtech-bolag (Swedutech) bakom produkten Mitt Skolval. Hanterar skolval och elevbyten åt kommuner och fristående skolhuvudmän, med målet att så många elever som möjligt ska få en plats vid en önskad skola."
      },
      "url": "https://www.swedutech.se",
      "sourceUrls": [
        {
          "title": "Swedutech about page",
          "url": "https://swedutech.se/about",
          "description": "About page of Swedutech (Svensk Utbildningsteknologi AB), the company behind the Mitt Skolval product."
        }
      ],
      "aliases": [
        "mittskolval",
        "mitt skolval",
        "svensk utbildningsteknologi",
        "svut"
      ]
    },
    {
      "id": "symptoms",
      "name": "Symptoms Europe AB",
      "tagline": {
        "en": "eHealth platform for patient-reported outcomes.",
        "sv": "eHälsoplattform för patientrapporterade utfall."
      },
      "description": {
        "en": "Language-independent eHealth platform where patients track symptoms, function, and quality of life through scientifically validated questionnaires they choose themselves, rather than forms prescribed by a diagnosis. The data helps clinicians plan person-centred care and measure whether interventions actually improve outcomes; researchers use it via minforskning.se.",
        "sv": "Språkoberoende eHälsoplattform där patienter följer symtom, funktion och livskvalitet via vetenskapligt validerade frågeformulär som de själva väljer, i stället för formulär som styrs av diagnos. Datan hjälper vårdgivare att planera personcentrerad vård och mäta om insatser faktiskt förbättrar utfallen; forskare använder den via minforskning.se."
      },
      "url": "https://www.symptoms.se",
      "sourceUrls": [
        {
          "title": "Official about page",
          "url": "https://www.symptoms.se/om-symptoms",
          "description": "Symptoms' own Swedish-language about page covering the platform and its purpose."
        }
      ],
      "aliases": [
        "symptoms europe",
        "symptoms ab"
      ]
    },
    {
      "id": "indicio",
      "name": "Indicio Technologies AB",
      "tagline": {
        "en": "Forecasting and scenario planning platform.",
        "sv": "Plattform för prognoser och scenarioplanering."
      },
      "description": {
        "en": "Forecasting and scenario planning platform that automates multivariate model building, weaves in external market and macro data, supports large-scale backtesting, and integrates with existing data stacks and BI tools. Used for demand, sales, and market forecasting across manufacturing, consumer goods, banking, construction, energy, retail, and e-commerce.",
        "sv": "Plattform för prognoser och scenarioplanering som automatiserar multivariat modellbyggande, väver in extern marknads- och makrodata, stöder storskalig backtestning och integrerar med befintliga datalager och BI-verktyg. Används för efterfråge-, försäljnings- och marknadsprognoser inom tillverkning, konsumentvaror, bank, bygg, energi, detaljhandel och e-handel."
      },
      "url": "https://www.indicio.com",
      "sourceUrls": [
        {
          "title": "Official about page",
          "url": "https://www.indicio.com/about",
          "description": "Indicio's own about page describing the company and its forecasting platform."
        }
      ],
      "aliases": [
        "indicio technologies",
        "indicio ab"
      ]
    },
    {
      "id": "agilator",
      "name": "Agilator AB",
      "tagline": {
        "en": "Solo consulting practice.",
        "sv": "Solokonsultbolag."
      },
      "description": {
        "en": "Niclas's own Swedish aktiebolag, used as the legal entity for solo consulting engagements taken on alongside his other roles.",
        "sv": "Niclas eget aktiebolag, som används som juridisk enhet för solokonsultuppdrag vid sidan av övriga roller."
      },
      "aliases": [
        "agilator ab"
      ]
    }
  ],
  "experience": [
    {
      "roles": [
        {
          "title": {
            "en": "IT Architect",
            "sv": "IT-arkitekt"
          },
          "startDate": "2024-04",
          "endDate": null
        }
      ],
      "companyId": "bookbeat",
      "startDate": "2024-04",
      "endDate": null,
      "stack": [
        {
          "name": "TypeScript",
          "unused": true
        },
        {
          "name": "React",
          "unused": true
        },
        "C#/.NET",
        "Microservices",
        "Azure",
        "Kubernetes",
        "Terraform",
        "GitHub actions",
        "Octopus Deploy",
        "gRPC/Protobuf",
        "Vector databases",
        "CosmosDB",
        "Redis",
        "MSSQL",
        "PostgreSQL"
      ],
      "skills": [
        "AI agents",
        "Agentic workflows",
        "RAG",
        "Chatbots",
        "MCP",
        "Prompt engineering",
        "Claude Code",
        "GitHub Copilot",
        "Codex CLI",
        "Cybersecurity",
        "Architecture",
        "Observability",
        "CI/CD",
        "Bash/Shell",
        "Mentoring"
      ]
    },
    {
      "roles": [
        {
          "title": {
            "en": "CTO",
            "sv": "CTO"
          },
          "startDate": "2023-09",
          "endDate": "2024-04"
        }
      ],
      "companyId": "ibnq",
      "startDate": "2023-09",
      "endDate": "2024-04",
      "stack": [
        "C#/.NET",
        "PostgreSQL",
        "CosmosDB",
        "Redis",
        "Azure",
        "React",
        {
          "name": "React Native",
          "unused": true
        },
        "TypeScript",
        "GitHub actions"
      ],
      "skills": [
        "Architecture",
        "Database design",
        "IT strategy",
        "Leadership",
        "Cybersecurity",
        "Bash/Shell",
        "Mentoring",
        "Project management",
        "Integrations",
        "Prompt engineering",
        "ChatGPT"
      ]
    },
    {
      "roles": [
        {
          "title": {
            "en": "Senior Consultant",
            "sv": "Seniorkonsult"
          },
          "startDate": "2020-01",
          "endDate": "2020-12"
        },
        {
          "title": {
            "en": "Manager",
            "sv": "Manager"
          },
          "startDate": "2021-01",
          "endDate": "2021-12"
        },
        {
          "title": {
            "en": "Senior Manager",
            "sv": "Senior Manager"
          },
          "startDate": "2022-01",
          "endDate": "2023-09"
        }
      ],
      "companyId": "etimo",
      "startDate": "2020-01",
      "endDate": "2023-09",
      "skills": [
        "Mentoring",
        "Technical interviews"
      ],
      "assignments": [
        {
          "roles": [
            {
              "title": {
                "en": "Software Engineer",
                "sv": "Mjukvaruingenjör"
              },
              "startDate": "2020-01",
              "endDate": "2020-02"
            }
          ],
          "clientId": "timewave",
          "startDate": "2020-01",
          "endDate": "2020-02",
          "stack": [
            "TypeScript",
            "Vue"
          ]
        },
        {
          "roles": [
            {
              "title": {
                "en": "Senior Developer",
                "sv": "Seniorutvecklare"
              },
              "startDate": "2020-02",
              "endDate": "2020-12"
            }
          ],
          "clientId": "seb",
          "startDate": "2020-02",
          "endDate": "2020-12",
          "stack": [
            "C#/.NET",
            "Azure",
            "React",
            "TypeScript",
            "Miniservices",
            "MSSQL",
            "Docker Swarm",
            "Jenkins",
            "Azure DevOps"
          ],
          "skills": [
            "Scrum",
            "CI/CD",
            "Docker",
            "PowerShell"
          ]
        },
        {
          "roles": [
            {
              "title": {
                "en": "Senior Developer",
                "sv": "Seniorutvecklare"
              },
              "startDate": "2021-01",
              "endDate": "2021-05"
            },
            {
              "title": {
                "en": "CTO",
                "sv": "CTO"
              },
              "startDate": "2021-06",
              "endDate": "2023-09"
            }
          ],
          "clientId": "mitt-skolval",
          "startDate": "2021-01",
          "endDate": "2023-09",
          "stack": [
            "React",
            "Node.js",
            "TypeScript",
            "AWS",
            "Kubernetes",
            "Terraform",
            "Linux",
            "GitHub actions",
            "MySQL",
            "Redis"
          ],
          "skills": [
            "CI/CD",
            "Cloud migration",
            "Prompt engineering",
            "ChatGPT",
            "Cybersecurity",
            "Architecture",
            "Leadership",
            "IT strategy",
            "Observability",
            "Bash/Shell",
            "Docker",
            "GDPR",
            "Mentoring",
            "Integrations"
          ],
          "aliases": [
            "Mitt Skolval"
          ]
        }
      ]
    },
    {
      "roles": [
        {
          "title": {
            "en": "CTO & Co-Founder",
            "sv": "CTO & medgrundare"
          },
          "startDate": "2015-11",
          "endDate": "2020-01"
        }
      ],
      "companyId": "symptoms",
      "startDate": "2015-11",
      "endDate": "2020-01",
      "engagement": {
        "en": "half-time",
        "sv": "halvtid"
      },
      "fte": 0.5,
      "stack": [
        {
          "name": "TypeScript",
          "unused": true
        },
        {
          "name": "Vue",
          "unused": true
        },
        "C#/.NET",
        "Azure",
        "MSSQL",
        "Docker",
        "TeamCity",
        "Octopus Deploy"
      ],
      "skills": [
        "CI/CD",
        "Cybersecurity",
        "Architecture",
        "Database design",
        "Leadership",
        "IT strategy",
        "PowerShell",
        "GDPR",
        "CE marking",
        "Risk management",
        "Project management"
      ]
    },
    {
      "roles": [
        {
          "title": {
            "en": "Backend Developer",
            "sv": "Backend-utvecklare"
          },
          "startDate": "2015-09",
          "endDate": "2020-01"
        }
      ],
      "companyId": "indicio",
      "startDate": "2015-09",
      "endDate": "2020-01",
      "engagement": {
        "en": "half-time",
        "sv": "halvtid"
      },
      "fte": 0.5,
      "stack": [
        {
          "name": "TypeScript",
          "unused": true
        },
        {
          "name": "Angular",
          "unused": true
        },
        "C#/.NET",
        "Python",
        {
          "name": "R",
          "unused": true
        },
        "MSSQL",
        "Linux",
        "TeamCity",
        "Octopus Deploy"
      ],
      "skills": [
        "CI/CD",
        "Cybersecurity",
        "Architecture",
        "Database design",
        "Integrations",
        "Bash/Shell"
      ]
    },
    {
      "roles": [
        {
          "title": {
            "en": "Founder",
            "sv": "Grundare"
          },
          "startDate": "2016-02",
          "endDate": null
        }
      ],
      "companyId": "agilator",
      "startDate": "2016-02",
      "endDate": null,
      "engagement": {
        "en": "part-time",
        "sv": "deltid"
      }
    }
  ],
  "education": [
    {
      "field": {
        "en": "Information Systems",
        "sv": "Informationssystem"
      },
      "institution": {
        "en": "Uppsala University",
        "sv": "Uppsala universitet"
      },
      "level": {
        "en": "Bachelor's program",
        "sv": "Kandidatprogram"
      },
      "credits": "165 ECTS",
      "degreeType": "bachelor",
      "totalCredits": "180 ECTS",
      "minor": {
        "credits": "30 ECTS",
        "status": "credited",
        "after": "60 ECTS"
      },
      "thesis": {
        "credits": "15 ECTS",
        "status": "skipped"
      },
      "credited": [
        {
          "name": {
            "en": "IT Law",
            "sv": "IT-rätt"
          },
          "code": "2HR118",
          "credits": "7.5 ECTS",
          "from": {
            "en": "Online Introduction to Law",
            "sv": "Nätbaserad juridisk översiktskurs"
          },
          "fromCode": "2JF068",
          "fromCredits": "15 ECTS",
          "note": {
            "en": "Took the 15 ECTS online Introduction to Law course alongside the program; 7.5 ECTS were transferred to cover the IT Law course slot.",
            "sv": "Läste den nätbaserade juridiska översiktskursen (15 ECTS) parallellt med programmet; 7,5 ECTS tillgodoräknades och täckte kursen IT-rätt."
          }
        }
      ],
      "startDate": "2014-08",
      "endDate": "2017-06",
      "notes": {
        "en": "Skipped the bachelor's thesis since I already held two relevant industry jobs in the field.",
        "sv": "Skrev ingen kandidatuppsats eftersom jag redan hade två relevanta jobb i branschen."
      },
      "courses": [
        {
          "name": {
            "en": "Information Systems A: Information Systems and System Development",
            "sv": "Informationssystem A: Informationssystem och systemutveckling"
          },
          "code": "2IS044",
          "credits": "15 ECTS",
          "completedDate": "2014-12"
        },
        {
          "name": {
            "en": "Information Systems A: Object-Oriented Programming I",
            "sv": "Informationssystem A: Objektorienterad programmering I"
          },
          "code": "2IS006",
          "credits": "7.5 ECTS",
          "completedDate": "2014-12"
        },
        {
          "name": {
            "en": "Information Systems A: Databases",
            "sv": "Informationssystem A: Databaser"
          },
          "code": "2IS007",
          "credits": "7.5 ECTS",
          "completedDate": "2015-02"
        },
        {
          "name": {
            "en": "Algorithmics",
            "sv": "Algoritmik"
          },
          "code": "1MA098",
          "credits": "7.5 ECTS",
          "completedDate": "2015-03"
        },
        {
          "name": {
            "en": "Fundamentals of Human–Computer Interaction",
            "sv": "Grundläggande människa-datorinteraktion"
          },
          "code": "2IV061",
          "credits": "7.5 ECTS",
          "completedDate": "2015-03"
        },
        {
          "name": {
            "en": "Information Systems B: Algorithms and Data Structures",
            "sv": "Informationssystem B: Algoritmer och datastrukturer"
          },
          "code": "2IS012",
          "credits": "7.5 ECTS",
          "completedDate": "2015-05"
        },
        {
          "name": {
            "en": "Information Systems B: E-Services and Web Programming",
            "sv": "Informationssystem B: E-tjänster och webbprogrammering"
          },
          "code": "2IS014",
          "credits": "7.5 ECTS",
          "completedDate": "2015-06"
        },
        {
          "name": {
            "en": "Multimedia",
            "sv": "Multimedia"
          },
          "code": "2AD327",
          "credits": "7.5 ECTS",
          "completedDate": "2016-02"
        },
        {
          "name": {
            "en": "Information and IT Security",
            "sv": "Informations- och IT-säkerhet"
          },
          "code": "2AD161",
          "credits": "7.5 ECTS",
          "completedDate": "2016-04"
        },
        {
          "name": {
            "en": "Information Systems A: Logic",
            "sv": "Informationssystem A: Logik"
          },
          "code": "2IS013",
          "credits": "7.5 ECTS",
          "completedDate": "2016-06"
        },
        {
          "name": {
            "en": "Information Systems C: Business-Oriented System Development",
            "sv": "Informationssystem C: Verksamhetsinriktad systemutveckling"
          },
          "code": "2IS022",
          "credits": "7.5 ECTS",
          "completedDate": "2016-11"
        },
        {
          "name": {
            "en": "Information Systems C: Object-Oriented Programming II",
            "sv": "Informationssystem C: Objektorienterad programmering II"
          },
          "code": "2IS023",
          "credits": "7.5 ECTS",
          "completedDate": "2016-11"
        },
        {
          "name": {
            "en": "Data Mining and Data Warehousing",
            "sv": "Data mining och data warehousing"
          },
          "code": "2AD332",
          "credits": "7.5 ECTS",
          "completedDate": "2016-12"
        },
        {
          "name": {
            "en": "Internet-Based Systems",
            "sv": "Internetbaserade system"
          },
          "code": "2AD329",
          "credits": "7.5 ECTS",
          "completedDate": "2017-01"
        },
        {
          "name": {
            "en": "Information Systems C: Research Methods",
            "sv": "Informationssystem C: Forskningsmetod"
          },
          "code": "2IS010",
          "credits": "7.5 ECTS",
          "completedDate": "2017-03"
        },
        {
          "name": {
            "en": "Information Systems: Information Infrastructure",
            "sv": "Informationssystem: Informationsinfrastruktur"
          },
          "code": "2IS033",
          "credits": "7.5 ECTS",
          "completedDate": "2017-03"
        }
      ],
      "aliases": [
        "informatics",
        "is",
        "informationssystem"
      ]
    },
    {
      "field": {
        "en": "Medicine",
        "sv": "Medicin"
      },
      "level": {
        "en": "Master's program",
        "sv": "Masterprogram"
      },
      "credits": "204.8 ECTS",
      "degreeType": "medical",
      "totalCredits": "330 ECTS",
      "thesis": {
        "credits": "30 ECTS",
        "status": "skipped"
      },
      "startDate": "2010-01",
      "endDate": "2014-04",
      "notes": {
        "en": "Decided to pivot away from medicine after studying clinical medicine and seeing first-hand how rough the IT systems were that healthcare professionals had to use every day. That experience set me on the path toward information systems.",
        "sv": "Bestämde mig för att lämna läkarbanan efter att ha läst klinisk medicin och på nära håll sett hur usla IT-systemen var som vårdpersonalen tvingades använda dagligen. Den insikten ledde mig vidare till informationssystem."
      },
      "segments": [
        {
          "institution": {
            "en": "Umeå University",
            "sv": "Umeå universitet"
          },
          "credits": "60.8 ECTS",
          "startDate": "2010-01",
          "endDate": "2011-04",
          "notes": {
            "en": "Took a half sabbatical year afterwards to relocate to Uppsala and continue the program there.",
            "sv": "Tog ett halvt sabbatsår efteråt för att flytta till Uppsala och fortsätta programmet där."
          },
          "courses": [
            {
              "name": {
                "en": "Introduction Course",
                "sv": "Introduktionskurs"
              },
              "code": "3BM000",
              "credits": "3 ECTS",
              "completedDate": "2010-01"
            },
            {
              "name": {
                "en": "Professional Development / Course 1",
                "sv": "Professionell utveckling / Kurs 1"
              },
              "code": "3ME040",
              "credits": "0.8 ECTS",
              "completedDate": "2010-02",
              "modules": [
                {
                  "name": {
                    "en": "Being a Patient or a Doctor",
                    "sv": "Att vara patient eller läkare"
                  },
                  "code": "ENDA",
                  "credits": "0.8 ECTS",
                  "completedDate": "2010-02"
                }
              ]
            },
            {
              "name": {
                "en": "Cell Structure and Function",
                "sv": "Cellens struktur och funktion"
              },
              "code": "3BM010",
              "credits": "26.2 ECTS",
              "completedDate": "2010-06"
            },
            {
              "name": {
                "en": "Structure and Function of Organ Systems",
                "sv": "Organsystemens struktur och funktion"
              },
              "code": "3BM013",
              "credits": "45 ECTS",
              "completed": false,
              "modules": [
                {
                  "name": {
                    "en": "Term 2 – Structure and Function of Organ Systems",
                    "sv": "Termin 2 Organsystemens struktur och funktion"
                  },
                  "code": "TER2",
                  "credits": "28.5 ECTS",
                  "completedDate": "2011-02"
                },
                {
                  "name": {
                    "en": "Term 3 – Structure and Function of Organ Systems",
                    "sv": "Termin 3 Organsystemens struktur och funktion"
                  },
                  "code": "TER3",
                  "credits": "16.5 ECTS"
                }
              ]
            },
            {
              "name": {
                "en": "Professional Development / Course 2",
                "sv": "Professionell utveckling / Kurs 2"
              },
              "code": "3ME041",
              "credits": "1.5 ECTS",
              "completedDate": "2010-11",
              "modules": [
                {
                  "name": {
                    "en": "Professional Development – Being a Patient or a Doctor",
                    "sv": "Professionell utveckling – att vara patient eller läkare"
                  },
                  "code": "ENDA",
                  "credits": "1.5 ECTS",
                  "completedDate": "2010-11"
                }
              ]
            },
            {
              "name": {
                "en": "Professional Development / Course 3",
                "sv": "Professionell utveckling / Kurs 3"
              },
              "code": "3ME042",
              "credits": "0.8 ECTS",
              "completedDate": "2011-04",
              "modules": [
                {
                  "name": {
                    "en": "Professional Development – Being a Patient or a Doctor",
                    "sv": "Professionell utveckling – Att vara patient eller läkare"
                  },
                  "code": "ENDA",
                  "credits": "0.8 ECTS",
                  "completedDate": "2011-04"
                }
              ]
            }
          ]
        },
        {
          "institution": {
            "en": "Uppsala University",
            "sv": "Uppsala universitet"
          },
          "credits": "144 ECTS",
          "startDate": "2011-08",
          "endDate": "2014-04",
          "courses": [
            {
              "name": {
                "en": "Circulation and Respiration",
                "sv": "Cirkulation och respiration"
              },
              "code": "3MC100",
              "credits": "10 ECTS",
              "completedDate": "2011-11"
            },
            {
              "name": {
                "en": "Clinical Anatomy and Locomotion",
                "sv": "Klinisk anatomi och rörelselära"
              },
              "code": "3AN200",
              "credits": "8 ECTS",
              "completedDate": "2011-11",
              "modules": [
                {
                  "name": {
                    "en": "Practical Exam – Dissection",
                    "sv": "Praktisk examination dissektion"
                  },
                  "code": "DISS",
                  "credits": "1.5 ECTS",
                  "completedDate": "2011-09"
                },
                {
                  "name": {
                    "en": "Practical Exam – Radiological Anatomy",
                    "sv": "Praktisk examination radiologisk anatomi"
                  },
                  "code": "RADA",
                  "credits": "1 ECTS",
                  "completedDate": "2011-11"
                },
                {
                  "name": {
                    "en": "Practical Exam – Locomotion",
                    "sv": "Praktisk examination rörelselära"
                  },
                  "code": "RÖRL",
                  "credits": "1 ECTS",
                  "completedDate": "2011-09"
                }
              ]
            },
            {
              "name": {
                "en": "Professional Development 2",
                "sv": "Professionell utveckling 2"
              },
              "code": "3AM012",
              "credits": "2.5 ECTS",
              "completedDate": "2011-12"
            },
            {
              "name": {
                "en": "Professional Development 3",
                "sv": "Professionell utveckling 3"
              },
              "code": "3AM008",
              "credits": "2.5 ECTS",
              "completedDate": "2012-01"
            },
            {
              "name": {
                "en": "Neurobiology, Homeostasis and Intervention (NHoI)",
                "sv": "Neurobiologi, homeostas och intervention (NHoI)"
              },
              "code": "3NR137",
              "credits": "19.5 ECTS",
              "completedDate": "2012-01",
              "modules": [
                {
                  "name": {
                    "en": "Neuroanatomy",
                    "sv": "Neuroanatomi"
                  },
                  "code": "5000",
                  "credits": "2 ECTS",
                  "completedDate": "2012-01"
                }
              ]
            },
            {
              "name": {
                "en": "Professional Development 4",
                "sv": "Professionell utveckling 4"
              },
              "code": "3AM010",
              "credits": "2.5 ECTS",
              "completedDate": "2012-05"
            },
            {
              "name": {
                "en": "Health Policy and Health Economics",
                "sv": "Hälsopolitik och hälsoekonomi"
              },
              "code": "3SM011",
              "credits": "7.5 ECTS",
              "completedDate": "2012-06"
            },
            {
              "name": {
                "en": "Attack and Defense",
                "sv": "Attack och försvar"
              },
              "code": "3PA014",
              "credits": "20 ECTS",
              "completedDate": "2012-08"
            },
            {
              "name": {
                "en": "Clinical Medicine II",
                "sv": "Klinisk medicin II"
              },
              "code": "3KR093",
              "credits": "30 ECTS",
              "completedDate": "2013-11",
              "modules": [
                {
                  "name": {
                    "en": "Integration II",
                    "sv": "Integrering II"
                  },
                  "code": "0100",
                  "credits": "6 ECTS",
                  "completedDate": "2013-03"
                },
                {
                  "name": {
                    "en": "Cardiovascular II",
                    "sv": "Hjärta/kärl II"
                  },
                  "code": "0200",
                  "credits": "5 ECTS",
                  "completedDate": "2013-06"
                },
                {
                  "name": {
                    "en": "Gastrointestinal",
                    "sv": "Magtarm"
                  },
                  "code": "0300",
                  "credits": "5 ECTS",
                  "completedDate": "2013-06"
                },
                {
                  "name": {
                    "en": "Integration III",
                    "sv": "Integrering III"
                  },
                  "code": "0500",
                  "credits": "1.5 ECTS",
                  "completedDate": "2013-06"
                },
                {
                  "name": {
                    "en": "Anaesthesiology",
                    "sv": "Anestesiologi"
                  },
                  "code": "0800",
                  "credits": "3 ECTS",
                  "completedDate": "2013-06"
                },
                {
                  "name": {
                    "en": "Clinical Physiology",
                    "sv": "Klinisk fysiologi"
                  },
                  "code": "0900",
                  "credits": "1 ECTS",
                  "completedDate": "2013-03"
                },
                {
                  "name": {
                    "en": "Pathology",
                    "sv": "Patologi"
                  },
                  "code": "1000",
                  "credits": "1 ECTS",
                  "completedDate": "2013-02"
                }
              ]
            },
            {
              "name": {
                "en": "Clinical Medicine I",
                "sv": "Klinisk medicin I"
              },
              "code": "3ME040",
              "credits": "28.5 ECTS",
              "completedDate": "2014-04",
              "modules": [
                {
                  "name": {
                    "en": "Integration – Biological Aging",
                    "sv": "Integrering Biologiskt åldrande"
                  },
                  "code": "1100",
                  "credits": "1.4 ECTS",
                  "completedDate": "2012-10"
                },
                {
                  "name": {
                    "en": "Integration – Atherosclerosis",
                    "sv": "Integrering Aterocleros"
                  },
                  "code": "1200",
                  "credits": "1.3 ECTS",
                  "completedDate": "2012-09"
                },
                {
                  "name": {
                    "en": "Integration – Coagulation",
                    "sv": "Integrering Koagulation"
                  },
                  "code": "1300",
                  "credits": "1.3 ECTS",
                  "completedDate": "2012-09"
                },
                {
                  "name": {
                    "en": "Integration – Respiratory Diseases",
                    "sv": "Integrering Luftvägssjukdomar"
                  },
                  "code": "1400",
                  "credits": "1.5 ECTS",
                  "completedDate": "2012-09"
                },
                {
                  "name": {
                    "en": "Propaedeutics",
                    "sv": "Propedeutik"
                  },
                  "code": "2000",
                  "credits": "1.5 ECTS",
                  "completedDate": "2012-10"
                },
                {
                  "name": {
                    "en": "Emergency Care – Clinical Training Centre Week",
                    "sv": "Akutsjukvård – KTC-veckan"
                  },
                  "code": "3101",
                  "credits": "1.5 ECTS",
                  "completedDate": "2012-11"
                },
                {
                  "name": {
                    "en": "Emergency Care – Clinical Practice",
                    "sv": "Akutsjukvård – praktik"
                  },
                  "code": "3102",
                  "credits": "4 ECTS",
                  "completedDate": "2013-01"
                },
                {
                  "name": {
                    "en": "Cardiovascular I",
                    "sv": "Hjärta/kärl I"
                  },
                  "code": "3200",
                  "credits": "5.5 ECTS",
                  "completedDate": "2013-01"
                },
                {
                  "name": {
                    "en": "Pulmonology / Geriatrics",
                    "sv": "Lung/geriatrik"
                  },
                  "code": "3300",
                  "credits": "5.5 ECTS",
                  "completedDate": "2013-01"
                },
                {
                  "name": {
                    "en": "Ethics / Law Exam",
                    "sv": "Tentamen Etik/juridik"
                  },
                  "code": "5000",
                  "credits": "1 ECTS",
                  "completedDate": "2014-04"
                }
              ]
            },
            {
              "name": {
                "en": "Leadership Training",
                "sv": "Ledarskapsutbildning"
              },
              "code": "3AM009",
              "credits": "4 ECTS",
              "completed": false,
              "modules": [
                {
                  "name": {
                    "en": "Leadership Training I",
                    "sv": "Ledarskapsutbildning I"
                  },
                  "code": "1000",
                  "credits": "1.5 ECTS",
                  "completedDate": "2013-01"
                }
              ]
            },
            {
              "name": {
                "en": "Clinical Medicine III",
                "sv": "Klinisk medicin III"
              },
              "code": "3ME033",
              "credits": "30 ECTS",
              "completed": false,
              "modules": [
                {
                  "name": {
                    "en": "Integration IV – Pharmacology",
                    "sv": "Integrering IV Farmakologi"
                  },
                  "code": "0300",
                  "credits": "1.5 ECTS",
                  "completedDate": "2014-02"
                },
                {
                  "name": {
                    "en": "Endocrinology",
                    "sv": "Endokrinologi"
                  },
                  "code": "0040",
                  "credits": "5 ECTS",
                  "completedDate": "2014-04"
                },
                {
                  "name": {
                    "en": "Locomotion / Orthopaedics",
                    "sv": "Rörelse/Ortopedi"
                  },
                  "code": "0020",
                  "credits": "5 ECTS",
                  "completedDate": "2014-06"
                }
              ]
            }
          ]
        }
      ],
      "aliases": [
        "med",
        "medicin",
        "läkarprogrammet",
        "medical school"
      ]
    }
  ],
  "courses": [
    {
      "name": {
        "en": "Game Programming in Windows – Introduction",
        "sv": "Spelprogrammering i Windows – introduktion"
      },
      "code": "DT108G",
      "institution": {
        "en": "Mid Sweden University",
        "sv": "Mittuniversitetet"
      },
      "credits": "12 ECTS",
      "startDate": "2015-06",
      "completedDate": "2015-08",
      "engagement": 0.5,
      "remote": true,
      "modules": [
        {
          "name": {
            "en": "Written Exam",
            "sv": "Tentamen"
          },
          "code": "T101",
          "credits": "3 ECTS",
          "completedDate": "2015-08"
        },
        {
          "name": {
            "en": "Project",
            "sv": "Projekt"
          },
          "code": "P101",
          "credits": "3 ECTS",
          "completedDate": "2015-08"
        },
        {
          "name": {
            "en": "Assignments 1",
            "sv": "Inlämningsuppgifter 1"
          },
          "code": "I101",
          "credits": "3 ECTS",
          "completedDate": "2015-08"
        },
        {
          "name": {
            "en": "Assignments 2",
            "sv": "Inlämningsuppgifter 2"
          },
          "code": "I201",
          "credits": "3 ECTS",
          "completedDate": "2015-08"
        }
      ],
      "skills": [
        "C++"
      ]
    },
    {
      "name": {
        "en": "Game Programming in Windows – II",
        "sv": "Spelprogrammering i Windows – II"
      },
      "code": "DT114G",
      "institution": {
        "en": "Mid Sweden University",
        "sv": "Mittuniversitetet"
      },
      "credits": "9 ECTS",
      "startDate": "2015-09",
      "engagement": 0.5,
      "remote": true,
      "completed": false,
      "modules": [
        {
          "name": {
            "en": "Written Exam",
            "sv": "Skriftlig tentamen"
          },
          "code": "T101",
          "credits": "3 ECTS",
          "completedDate": "2016-01"
        },
        {
          "name": {
            "en": "Assignments 1",
            "sv": "Inlämningsuppgifter 1"
          },
          "code": "I101",
          "credits": "1.5 ECTS",
          "completedDate": "2016-01"
        },
        {
          "name": {
            "en": "Assignments 2",
            "sv": "Inlämningsuppgifter 2"
          },
          "code": "I201",
          "credits": "1.5 ECTS",
          "completedDate": "2016-01"
        }
      ],
      "skills": [
        "C++"
      ]
    },
    {
      "name": {
        "en": "Game Design",
        "sv": "Speldesign"
      },
      "code": "2AD148",
      "institution": {
        "en": "Uppsala University",
        "sv": "Uppsala universitet"
      },
      "credits": "7.5 ECTS",
      "startDate": "2015-06",
      "completedDate": "2015-07",
      "engagement": 1,
      "modules": [
        {
          "name": {
            "en": "Labs / Seminars",
            "sv": "Laborationer/Seminarier"
          },
          "code": "4000",
          "credits": "7.5 ECTS",
          "completedDate": "2015-07"
        }
      ]
    },
    {
      "name": {
        "en": "Online Introduction to Law",
        "sv": "Nätbaserad juridisk översiktskurs"
      },
      "code": "2JF068",
      "institution": {
        "en": "Uppsala University",
        "sv": "Uppsala universitet"
      },
      "credits": "15 ECTS",
      "startDate": "2015-01",
      "completedDate": "2015-06",
      "engagement": 0.5,
      "remote": true,
      "modules": [
        {
          "name": {
            "en": "Written Exam",
            "sv": "Tentamen"
          },
          "code": "1000",
          "credits": "15 ECTS",
          "completedDate": "2015-06"
        },
        {
          "name": {
            "en": "Mandatory Requirements",
            "sv": "Fullgjort obligatorium"
          },
          "code": "FOBL",
          "credits": "0 ECTS",
          "completedDate": "2015-06"
        }
      ]
    }
  ],
  "skills": [
    {
      "key": "ai",
      "label": {
        "en": "AI",
        "sv": "AI"
      },
      "items": [
        "Spec-driven development",
        "Agent orchestration",
        "Agentic workflows",
        "AI agents",
        "Agent sandboxing",
        "Agent security",
        "Agentic testing",
        "RAG",
        "Chatbots",
        "AI evaluations",
        "Prompt engineering",
        "Claude Code",
        "Agent skills",
        "MCP",
        "Codex CLI",
        "Gemini CLI",
        "GitHub Copilot",
        "ChatGPT",
        "Ollama"
      ]
    },
    {
      "key": "languages",
      "label": {
        "en": "Languages",
        "sv": "Språk"
      },
      "items": [
        "Rust",
        "C#/.NET",
        "TypeScript",
        "Python",
        "Swift",
        "Java",
        "Kotlin",
        "C++",
        "Bash/Shell",
        "PowerShell"
      ]
    },
    {
      "key": "frameworks",
      "label": {
        "en": "Frameworks",
        "sv": "Ramverk"
      },
      "items": [
        "React",
        "React Native",
        "Vue",
        "Angular",
        "Svelte",
        "Node.js"
      ]
    },
    {
      "key": "cloud",
      "label": {
        "en": "Cloud",
        "sv": "Moln"
      },
      "items": [
        "Azure",
        "AWS",
        "Azure DevOps"
      ]
    },
    {
      "key": "databases",
      "label": {
        "en": "Databases",
        "sv": "Databaser"
      },
      "items": [
        "PostgreSQL",
        "MSSQL",
        "MySQL",
        "Redis",
        "CosmosDB",
        "Vector databases"
      ]
    },
    {
      "key": "devops",
      "label": {
        "en": "DevOps",
        "sv": "DevOps"
      },
      "items": [
        "Linux",
        "Docker",
        "Docker Swarm",
        "Kubernetes",
        "Terraform",
        "CI/CD",
        "GitHub actions",
        "Jenkins",
        "TeamCity",
        "Octopus Deploy",
        "Observability"
      ]
    },
    {
      "key": "practices",
      "label": {
        "en": "Practices",
        "sv": "Arbetssätt"
      },
      "items": [
        "Architecture",
        "Database design",
        "Cloud migration",
        "Microservices",
        "Miniservices",
        "gRPC/Protobuf",
        "RFC implementation",
        "Integrations",
        "SEO",
        "Scrum"
      ]
    },
    {
      "key": "leadership",
      "label": {
        "en": "Leadership",
        "sv": "Ledarskap"
      },
      "items": [
        "Leadership",
        "Mentoring",
        "Technical interviews",
        "IT strategy",
        "Project management"
      ]
    },
    {
      "key": "compliance",
      "label": {
        "en": "Compliance",
        "sv": "Regelefterlevnad"
      },
      "items": [
        "Cybersecurity",
        "Risk management",
        "GDPR",
        "CE marking",
        "WCAG"
      ]
    }
  ],
  "skillDetails": {
    "Spec-driven development": {
      "description": {
        "en": "Working from a written specification that captures intent, constraints, and acceptance criteria before code is written.",
        "sv": "Att arbeta utifrån en skriven specifikation som fångar intention, begränsningar och acceptanskriterier innan kod skrivs."
      },
      "benefits": {
        "en": "Reviewers and agents converge on the same target; drift becomes detectable and fixable.",
        "sv": "Granskare och agenter konvergerar mot samma mål; avdrift går att upptäcka och åtgärda."
      },
      "drawbacks": {
        "en": "Specs rot if not maintained; over-specifying small features costs more than the safety it adds.",
        "sv": "Specifikationer ruttnar om de inte underhålls; överspecificering av små funktioner kostar mer än den säkerhet den ger."
      },
      "aliases": [
        "sdd",
        "spec driven",
        "specs"
      ]
    },
    "Agent orchestration": {
      "description": {
        "en": "Coordinating multiple AI agents (often from different providers) into a single end-to-end workflow with handoffs, retries, and verification between them.",
        "sv": "Att koordinera flera AI-agenter (ofta från olika leverantörer) till ett samlat arbetsflöde med överlämningar, omförsök och verifiering mellan stegen."
      },
      "benefits": {
        "en": "Lets you pick the best agent for each step and recover from one agent's failure without restarting the whole run.",
        "sv": "Låter dig välja bästa agent för varje steg och återhämta dig från en agents misslyckande utan att starta om hela körningen."
      },
      "drawbacks": {
        "en": "Adds coordination cost, latency, and a new class of bugs that live between the agents rather than inside them.",
        "sv": "Lägger till koordineringskostnad, latens och en ny typ av buggar som lever mellan agenterna snarare än inuti dem."
      },
      "aliases": [
        "multi-agent",
        "orchestration"
      ]
    },
    "Agentic workflows": {
      "description": {
        "en": "Describing a sequence of agent steps (analyse, plan, edit, verify, ship) as a runnable, shareable artifact rather than a one-off prompt session.",
        "sv": "Att beskriva en sekvens av agentsteg (analysera, planera, ändra, verifiera, leverera) som en körbar och delbar artefakt istället för en engångsprompt."
      },
      "benefits": {
        "en": "Workflows can be versioned, replayed, and improved over time; results stop depending on whoever happened to be at the keyboard.",
        "sv": "Arbetsflöden kan versionshanteras, spelas upp och förbättras över tid; resultatet slutar bero på vem som råkar sitta vid tangentbordet."
      },
      "drawbacks": {
        "en": "Codifying a workflow too early locks in choices before you understand the problem.",
        "sv": "Att kodifiera ett arbetsflöde för tidigt låser fast val innan man förstår problemet."
      },
      "aliases": [
        "agent workflows",
        "workflow"
      ]
    },
    "AI agents": {
      "description": {
        "en": "LLMs equipped with tools, memory, and a goal — they plan, take actions, observe results, and iterate until the goal is met or they give up.",
        "sv": "LLM:er utrustade med verktyg, minne och ett mål — de planerar, agerar, observerar resultat och itererar tills målet är uppnått eller de ger upp."
      },
      "benefits": {
        "en": "Handle messy, multi-step problems where you can't enumerate every branch in advance.",
        "sv": "Hanterar röriga problem i flera steg där det inte går att räkna upp alla grenar i förväg."
      },
      "drawbacks": {
        "en": "Non-determinism, cost, and the need for guardrails — an agent with broad tool access can do real damage if unsupervised.",
        "sv": "Icke-determinism, kostnad och behov av guardrails — en agent med bred verktygsåtkomst kan ställa till verklig skada om den är oövervakad."
      },
      "aliases": [
        "agents",
        "llm agents",
        "autonomous agents"
      ]
    },
    "Agent sandboxing": {
      "description": {
        "en": "Running agents inside containers, worktrees, or VMs so they can edit files, run commands, and call networks without touching the host.",
        "sv": "Att köra agenter inuti containrar, worktrees eller VM:er så att de kan ändra filer, köra kommandon och anropa nätverk utan att röra värddatorn."
      },
      "benefits": {
        "en": "Lets you grant broader autonomy because the blast radius is contained.",
        "sv": "Låter dig ge bredare självständighet eftersom skadeområdet är inneslutet."
      },
      "drawbacks": {
        "en": "Sandboxes leak; perfect isolation costs setup time, performance, and developer ergonomics.",
        "sv": "Sandlådor läcker; perfekt isolering kostar både uppsättningstid, prestanda och ergonomi."
      },
      "aliases": [
        "sandboxing",
        "agent sandbox",
        "container isolation"
      ]
    },
    "Agent security": {
      "description": {
        "en": "Designing fine-grained, signed permission models so an agent only has access to what it needs and can't silently widen its own scope.",
        "sv": "Att designa finkorniga, signerade behörighetsmodeller så att en agent bara har åtkomst till det den behöver och inte i tysthet kan utöka sin egen omfattning."
      },
      "benefits": {
        "en": "Confines agent damage to declared scope; auditable trail of what was authorized when.",
        "sv": "Begränsar skada till deklarerat scope; granskningsbart spår av vad som tilläts när."
      },
      "drawbacks": {
        "en": "More configuration to maintain, and a permissions UX that can be its own usability problem.",
        "sv": "Mer konfiguration att underhålla och en behörighets-UX som lätt blir ett eget användarproblem."
      },
      "aliases": [
        "agent safety",
        "ai security",
        "agent permissions"
      ]
    },
    "Agentic testing": {
      "description": {
        "en": "Using an LLM to evaluate test outputs that regex or schema assertions can't cleanly capture — fuzzy verdicts about whether output is correct, helpful, or in style.",
        "sv": "Att använda en LLM för att bedöma testutdata som regex- eller schemapåståenden inte fångar — luddiga bedömningar om utdata är korrekt, hjälpsamt eller i stil."
      },
      "benefits": {
        "en": "Tests scenarios that were previously untestable in CI without expensive humans.",
        "sv": "Testar scenarier som tidigare var omöjliga att testa i CI utan dyra människor."
      },
      "drawbacks": {
        "en": "Adds non-determinism and cost; needs careful prompt design and fallbacks for the cases the model gets wrong.",
        "sv": "Lägger till icke-determinism och kostnad; kräver noggrann promptdesign och reservlogik för fall där modellen blir fel."
      },
      "aliases": [
        "agent testing",
        "ai testing",
        "llm testing"
      ]
    },
    "RAG": {
      "description": {
        "en": "Retrieval-Augmented Generation — fetching relevant documents at query time and feeding them into the LLM's context so answers are grounded in your data instead of model memory.",
        "sv": "Retrieval-Augmented Generation — hämtar relevanta dokument vid frågetillfället och stoppar in dem i LLM:ens kontext så att svaren grundas i din data istället för modellens minne."
      },
      "benefits": {
        "en": "Cheaper than fine-tuning, easier to update, and the citations make answers verifiable.",
        "sv": "Billigare än finjustering, enklare att uppdatera och citeringarna gör svaren verifierbara."
      },
      "drawbacks": {
        "en": "Quality is dominated by retrieval quality; bad chunking, stale indexes, or noisy sources poison the output.",
        "sv": "Kvaliteten domineras av sökkvaliteten; dålig chunkning, gamla index eller stökiga källor förgiftar utdata."
      },
      "aliases": [
        "retrieval-augmented generation",
        "retrieval augmented",
        "retrieval"
      ]
    },
    "Chatbots": {
      "description": {
        "en": "Conversational interfaces backed by LLMs, typically with retrieval, tools, and guardrails so the bot can answer questions and take actions safely.",
        "sv": "Konversationsgränssnitt drivna av LLM:er, vanligtvis med sökning, verktyg och guardrails så att boten kan svara på frågor och utföra åtgärder säkert."
      },
      "benefits": {
        "en": "Natural-language entry point that scales support and self-service for users.",
        "sv": "Naturligt språk som ingång som skalar support och självbetjäning för användare."
      },
      "drawbacks": {
        "en": "Hallucinations, prompt injection, and the long tail of edge cases mean a chatbot is rarely 'finished'.",
        "sv": "Hallucinationer, prompt injection och den långa svansen av edge cases gör att en chattbot sällan är 'klar'."
      },
      "aliases": [
        "chatbot",
        "conversational ai",
        "conversational interface"
      ]
    },
    "AI evaluations": {
      "description": {
        "en": "Building reproducible test suites for LLM-driven systems — datasets, scoring, and dashboards that tell you whether a change actually improved behaviour.",
        "sv": "Att bygga reproducerbara testsviter för LLM-drivna system — datamängder, poängsättning och dashboards som visar om en ändring faktiskt förbättrade beteendet."
      },
      "benefits": {
        "en": "Replaces 'feels better' with measurable progress; catches regressions before users do.",
        "sv": "Ersätter 'känns bättre' med mätbar utveckling; fångar regressioner innan användarna gör det."
      },
      "drawbacks": {
        "en": "Good evals are expensive to build and maintain; cheap evals tell you the wrong things confidently.",
        "sv": "Bra evals är dyra att bygga och underhålla; billiga evals berättar fel saker med självförtroende."
      },
      "aliases": [
        "evals",
        "ai evals",
        "model evals",
        "llm evals"
      ]
    },
    "Prompt engineering": {
      "description": {
        "en": "Designing prompts, system messages, and tool descriptions so an LLM produces the right output reliably — picking the right structure, examples, and constraints for the task.",
        "sv": "Att designa prompts, systemmeddelanden och verktygsbeskrivningar så att en LLM producerar rätt utdata på ett pålitligt sätt — att välja rätt struktur, exempel och begränsningar för uppgiften."
      },
      "benefits": {
        "en": "Often the cheapest lever for better output; small wording changes can replace fine-tuning, extra tools, or larger models.",
        "sv": "Ofta den billigaste hävstången för bättre utdata; små formuleringsändringar kan ersätta finjustering, extra verktyg eller större modeller."
      },
      "drawbacks": {
        "en": "Prompts are brittle across model versions and providers; what worked yesterday can quietly regress after an upgrade.",
        "sv": "Prompts är sköra mellan modellversioner och leverantörer; det som fungerade igår kan i tysthet försämras efter en uppgradering."
      },
      "aliases": [
        "prompting",
        "prompt design",
        "prompt writing"
      ]
    },
    "Claude Code": {
      "description": {
        "en": "Anthropic's terminal-native coding agent based on Claude — reads, edits, and executes against the local repo, with hooks, skills, and MCP for extension.",
        "sv": "Anthropics terminalbaserade kodningsagent byggd på Claude — läser, ändrar och kör mot det lokala repot, med hooks, skills och MCP för utökning."
      },
      "benefits": {
        "en": "Strong reasoning on large codebases; the CLI surface composes well with shell, git, and CI.",
        "sv": "Stark resonemangsförmåga på stora kodbaser; CLI-ytan komponeras bra med skal, git och CI."
      },
      "drawbacks": {
        "en": "Closed-source provider; usage costs scale quickly on long agentic loops.",
        "sv": "Stängd källkod hos leverantören; användningskostnaden skalar snabbt på långa agentloopar."
      },
      "url": "https://docs.claude.com/en/docs/claude-code/overview",
      "aliases": [
        "claude",
        "anthropic",
        "claude cli"
      ]
    },
    "Agent skills": {
      "description": {
        "en": "Reusable, instruction-driven extensions that Claude Code loads on demand — packaged Markdown plus assets that specialise the agent for a domain (e.g. updating a CV, refreshing a README, reviewing a PR).",
        "sv": "Återanvändbara, instruktionsdrivna utökningar som Claude Code laddar vid behov — paketerad Markdown och tillgångar som specialiserar agenten för en domän (t.ex. uppdatera ett CV, uppdatera README eller granska en PR)."
      },
      "benefits": {
        "en": "Codifies repeatable workflows in version-controlled prompts that any session can pick up; cheaper than building a custom agent from scratch.",
        "sv": "Kodifierar återanvändbara arbetsflöden i versionshanterade prompter som vilken session som helst kan plocka upp; billigare än att bygga en egen agent från grunden."
      },
      "drawbacks": {
        "en": "Tied to Claude Code's runtime; the format is still evolving and skills must be kept in sync as the spec changes.",
        "sv": "Bundet till Claude Codes körtid; formatet utvecklas fortfarande och skills måste hållas i synk när specifikationen ändras."
      },
      "aliases": [
        "skills",
        "claude skills"
      ]
    },
    "MCP": {
      "description": {
        "en": "Anthropic's Model Context Protocol — an open standard for connecting AI agents to tools, data sources, and services through a uniform client/server interface.",
        "sv": "Anthropics Model Context Protocol — en öppen standard för att koppla AI-agenter till verktyg, datakällor och tjänster genom ett enhetligt klient/server-gränssnitt."
      },
      "benefits": {
        "en": "Decouples agents from their integrations: any MCP-aware agent can use any MCP server without bespoke glue, and capabilities can be swapped or sandboxed independently.",
        "sv": "Frikopplar agenter från sina integrationer: vilken MCP-medveten agent som helst kan använda vilken MCP-server som helst utan specialskriven kod, och förmågor kan bytas ut eller sandboxas oberoende."
      },
      "drawbacks": {
        "en": "Servers live as separate processes with their own lifecycle and permissions surface; debugging the seam between agent, server, and underlying tool is harder than a direct call.",
        "sv": "Servrar lever som egna processer med egen livscykel och behörighetsyta; att felsöka skarven mellan agent, server och underliggande verktyg är svårare än ett direkt anrop."
      },
      "aliases": [
        "model context protocol"
      ]
    },
    "Codex CLI": {
      "description": {
        "en": "OpenAI's terminal coding agent — sandbox-first, runs in a container by default, with a JSON protocol for embedding in larger systems.",
        "sv": "OpenAI:s terminala kodningsagent — sandlåda först, kör i container som standard, med ett JSON-protokoll för inbäddning i större system."
      },
      "benefits": {
        "en": "Open-source CLI, strong default isolation, easy to script.",
        "sv": "CLI med öppen källkod, stark standardisolering, lätt att skripta."
      },
      "drawbacks": {
        "en": "Smaller agent ecosystem than Claude Code; some workflows still need bridging glue.",
        "sv": "Mindre agentekosystem än Claude Code; vissa arbetsflöden kräver fortfarande integrationslim."
      },
      "url": "https://github.com/openai/codex",
      "aliases": [
        "codex",
        "openai codex"
      ]
    },
    "Gemini CLI": {
      "description": {
        "en": "Google's open-source terminal agent built on Gemini, with a focus on long-context tasks and tight integration with Google's developer tooling.",
        "sv": "Googles open source-terminalagent byggd på Gemini, med fokus på uppgifter med långt sammanhang och tät integration med Googles utvecklarverktyg."
      },
      "benefits": {
        "en": "Massive context window; competitive on cost for long documents and large codebases.",
        "sv": "Stort kontextfönster; konkurrenskraftig på pris för långa dokument och stora kodbaser."
      },
      "drawbacks": {
        "en": "Tooling and ecosystem lag the Anthropic and OpenAI CLIs in places.",
        "sv": "Verktyg och ekosystem ligger på sina ställen efter Anthropic- och OpenAI-CLI:erna."
      },
      "url": "https://github.com/google-gemini/gemini-cli",
      "aliases": [
        "gemini",
        "google gemini"
      ]
    },
    "GitHub Copilot": {
      "description": {
        "en": "GitHub's AI pair-programmer, available as IDE inline suggestions, a chat surface, and a CLI for repo-level agentic work.",
        "sv": "GitHubs AI-parprogrammerare, tillgänglig som IDE-förslag inline, ett chattgränssnitt och en CLI för agentarbete på repo-nivå."
      },
      "benefits": {
        "en": "Tight integration with GitHub: pull requests, issues, and existing developer workflows.",
        "sv": "Tät integration med GitHub: pull requests, issues och befintliga utvecklingsflöden."
      },
      "drawbacks": {
        "en": "Best-in-class for IDE inline; agent capabilities trail dedicated agentic CLIs for autonomous work.",
        "sv": "Bäst i klassen för IDE-inline; agentförmågorna ligger efter dedikerade agentiska CLI:er för autonomt arbete."
      },
      "url": "https://github.com/features/copilot",
      "aliases": [
        "copilot",
        "gh copilot"
      ]
    },
    "ChatGPT": {
      "description": {
        "en": "OpenAI's flagship chat product — a general-purpose conversational interface to GPT models, with tool use, code interpreter, image generation, and a plugin ecosystem.",
        "sv": "OpenAI:s flaggskeppsprodukt — ett generellt konversationsgränssnitt till GPT-modeller, med verktygsanrop, kodtolk, bildgenerering och ett plugin-ekosystem."
      },
      "benefits": {
        "en": "Low-friction entry point for prompt experiments and one-off agentic tasks; the broadest hosted feature set in the consumer AI category.",
        "sv": "Låg tröskel för promptexperiment och engångs-agentuppgifter; den bredaste molnbaserade funktionsuppsättningen i konsument-AI-kategorin."
      },
      "drawbacks": {
        "en": "Closed product surface that changes under you; not a substitute for a controlled API integration when output stability matters.",
        "sv": "Stängd produktyta som förändras under dig; ingen ersättning för en kontrollerad API-integration när stabil utdata är viktig."
      },
      "url": "https://chat.openai.com",
      "aliases": [
        "openai chat",
        "gpt",
        "openai"
      ]
    },
    "Ollama": {
      "description": {
        "en": "Local LLM runner that exposes open-weight models behind an OpenAI-compatible API.",
        "sv": "Lokal LLM-runner som exponerar modeller med öppna vikter bakom ett OpenAI-kompatibelt API."
      },
      "benefits": {
        "en": "No data leaves the machine; predictable cost; great for CI fixtures.",
        "sv": "Ingen data lämnar maskinen; förutsägbar kostnad; utmärkt för CI-fixturer."
      },
      "drawbacks": {
        "en": "Open-weight models lag frontier models on hard reasoning; needs decent local hardware to be pleasant.",
        "sv": "Modeller med öppna vikter ligger efter frontier-modeller på svårt resonemang; kräver hyfsad lokal hårdvara för att vara behaglig."
      },
      "url": "https://ollama.com",
      "aliases": [
        "local llm",
        "open weights"
      ]
    },
    "Rust": {
      "description": {
        "en": "Systems language with an ownership model that prevents most memory and concurrency bugs at compile time.",
        "sv": "Systemspråk med en ägarskapsmodell som förhindrar de flesta minnes- och samtidighetsbuggar vid kompilering."
      },
      "benefits": {
        "en": "Memory safety without GC, fearless concurrency, single static binary deploys.",
        "sv": "Minnessäkerhet utan GC, ofarlig parallellism, distribution som en enda statisk binär."
      },
      "drawbacks": {
        "en": "Steep learning curve; iteration speed is slower than scripted languages for early-stage exploration.",
        "sv": "Brant inlärningskurva; iterationshastigheten är långsammare än skriptspråk i tidig utforskning."
      },
      "url": "https://www.rust-lang.org",
      "aliases": [
        "rustlang",
        "cargo"
      ]
    },
    "C#/.NET": {
      "description": {
        "en": "Microsoft's cross-platform managed language and runtime, with a strong standard library for web, services, and tooling.",
        "sv": "Microsofts plattformsoberoende språk och körmiljö, med ett starkt standardbibliotek för webb, tjänster och verktyg."
      },
      "benefits": {
        "en": "Excellent tooling, mature ecosystem, strong typing, predictable performance.",
        "sv": "Utmärkta verktyg, moget ekosystem, stark typning, förutsägbar prestanda."
      },
      "drawbacks": {
        "en": "Microsoft-centric ergonomics; getting first-class status outside Windows/Azure took years.",
        "sv": "Microsoft-centrerad ergonomi; det tog år att få förstaklasstatus utanför Windows/Azure."
      },
      "url": "https://dotnet.microsoft.com",
      "aliases": [
        "csharp",
        "c#",
        "dotnet",
        ".net",
        "dot net"
      ]
    },
    "TypeScript": {
      "description": {
        "en": "JavaScript with a structural type system bolted on top.",
        "sv": "JavaScript med ett strukturellt typsystem ovanpå."
      },
      "benefits": {
        "en": "Catches whole classes of bugs at the editor; refactors that would be terrifying in JS become routine.",
        "sv": "Fångar hela kategorier av buggar redan i editorn; refaktoreringar som vore skrämmande i JS blir rutin."
      },
      "drawbacks": {
        "en": "Type system has corners that are easy to lie to; build tooling is a perpetual rabbit hole.",
        "sv": "Typsystemet har hörn som är lätta att ljuga för; byggverktygen är ett evigt kaninhål."
      },
      "url": "https://www.typescriptlang.org",
      "aliases": [
        "ts",
        "tsc"
      ]
    },
    "Python": {
      "description": {
        "en": "General-purpose dynamic language widely used for data, ML, scripting, and web backends.",
        "sv": "Allmänt dynamiskt språk som ofta används inom data, ML, skript och webbackend."
      },
      "benefits": {
        "en": "Vast library ecosystem, fast iteration, easy to read; the lingua franca of ML.",
        "sv": "Enormt biblioteksekosystem, snabb iteration, lättläst; ML-världens lingua franca."
      },
      "drawbacks": {
        "en": "Performance, packaging, and runtime type errors that only surface at runtime.",
        "sv": "Prestanda, paketering och typfel som bara dyker upp vid körning."
      },
      "url": "https://www.python.org",
      "aliases": [
        "py",
        "py3",
        "python3"
      ]
    },
    "Swift": {
      "description": {
        "en": "Apple's modern systems language for iOS, macOS, and server-side workloads — type-safe, fast, and the lingua franca of the Apple developer ecosystem.",
        "sv": "Apples moderna systemspråk för iOS, macOS och serversidan — typsäkert, snabbt och Apple-ekosystemets lingua franca."
      },
      "url": "https://www.swift.org",
      "aliases": [
        "swiftlang",
        "ios development"
      ]
    },
    "Java": {
      "description": {
        "en": "Mature, statically typed JVM language with one of the largest enterprise ecosystems in the industry.",
        "sv": "Moget, statiskt typat JVM-språk med ett av branschens största företagsekosystem."
      },
      "url": "https://www.java.com",
      "aliases": [
        "jvm"
      ]
    },
    "Kotlin": {
      "description": {
        "en": "Pragmatic JVM language with first-class null safety and coroutines; the default for new Android development and a strong Java replacement on the server.",
        "sv": "Pragmatiskt JVM-språk med förstklassig null-säkerhet och coroutines; standard för ny Android-utveckling och en stark Java-ersättare på servern."
      },
      "url": "https://kotlinlang.org",
      "aliases": [
        "kt"
      ]
    },
    "C++": {
      "description": {
        "en": "Long-standing systems language for software where you need control over memory, layout, and performance.",
        "sv": "Långlivat systemspråk för mjukvara där man behöver kontroll över minne, layout och prestanda."
      },
      "url": "https://isocpp.org",
      "aliases": [
        "cpp",
        "cxx",
        "c plus plus"
      ]
    },
    "Bash/Shell": {
      "description": {
        "en": "Bash and POSIX shell — the lingua franca for stitching together commands, files, and processes on a Unix-like system.",
        "sv": "Bash och POSIX-shell — lingua franca för att knyta ihop kommandon, filer och processer på Unix-liknande system."
      },
      "aliases": [
        "bash",
        "shell",
        "sh",
        "zsh",
        "posix shell"
      ]
    },
    "PowerShell": {
      "description": {
        "en": "Microsoft's object-oriented shell and scripting language; commands return structured objects rather than text streams.",
        "sv": "Microsofts objektorienterade shell och skriptspråk; kommandon returnerar strukturerade objekt i stället för textströmmar."
      },
      "url": "https://learn.microsoft.com/powershell",
      "aliases": [
        "pwsh",
        "ps1"
      ]
    },
    "React": {
      "description": {
        "en": "Component-driven UI library for the web.",
        "sv": "Komponentdrivet UI-bibliotek för webben."
      },
      "benefits": {
        "en": "Huge ecosystem, strong hiring pool, predictable mental model around components and state.",
        "sv": "Stort ekosystem, stark rekryteringsbas, förutsägbar mental modell kring komponenter och tillstånd."
      },
      "drawbacks": {
        "en": "You're choosing an ecosystem, not a framework — the build/state/router stack is yours to assemble.",
        "sv": "Du väljer ett ekosystem, inte ett ramverk — bygg/state/router-stacken får du sätta ihop själv."
      },
      "url": "https://react.dev",
      "aliases": [
        "reactjs",
        "react.js"
      ]
    },
    "React Native": {
      "description": {
        "en": "Build native iOS/Android apps with React, bridging JS components to native UI primitives so most code is shared across platforms.",
        "sv": "Bygg native iOS-/Android-appar med React, där JS-komponenter brygger till nativa UI-primitiver så att det mesta av koden delas mellan plattformarna."
      },
      "benefits": {
        "en": "One team, one language, two stores; near-native performance for typical app workloads.",
        "sv": "Ett team, ett språk, två appbutiker; nära native prestanda för typiska appbelastningar."
      },
      "drawbacks": {
        "en": "Native modules and platform quirks still leak through; upgrades can be painful.",
        "sv": "Nativmoduler och plattformsegenheter läcker igenom; uppgraderingar kan vara smärtsamma."
      },
      "url": "https://reactnative.dev",
      "aliases": [
        "rn",
        "reactnative"
      ]
    },
    "Vue": {
      "description": {
        "en": "Approachable component framework with single-file components, a built-in reactivity system, and an opinionated default stack (Router, Pinia).",
        "sv": "Lättillgängligt komponentramverk med single-file-komponenter, inbyggd reaktivitet och en åsiktsstyrd standardstack (Router, Pinia)."
      },
      "url": "https://vuejs.org",
      "aliases": [
        "vuejs",
        "vue.js"
      ]
    },
    "Angular": {
      "description": {
        "en": "Google's batteries-included frontend framework — opinionated about structure, DI, RxJS, and the build pipeline.",
        "sv": "Googles ramverk med batterier inkluderade — tydliga åsikter om struktur, DI, RxJS och byggpipelinen."
      },
      "url": "https://angular.dev",
      "aliases": [
        "angularjs"
      ]
    },
    "Svelte": {
      "description": {
        "en": "Compiler-first frontend framework: components compile to lean imperative DOM updates instead of running a virtual DOM at runtime.",
        "sv": "Kompilatorbaserat frontend-ramverk: komponenter kompileras till smala, imperativa DOM-uppdateringar istället för att köra en virtuell DOM vid körning."
      },
      "url": "https://svelte.dev",
      "aliases": [
        "sveltekit",
        "svelte.js"
      ]
    },
    "Node.js": {
      "description": {
        "en": "Server-side JavaScript runtime built on V8.",
        "sv": "Serverbaserad JavaScript-körmiljö byggd på V8."
      },
      "benefits": {
        "en": "Same language across stack, huge package ecosystem, fast for I/O-bound workloads.",
        "sv": "Samma språk i hela stacken, stort paketekosystem, snabbt för I/O-bundna arbetsbelastningar."
      },
      "drawbacks": {
        "en": "CPU-bound work needs careful design; the npm ecosystem occasionally bites in supply-chain ways.",
        "sv": "CPU-tunga uppgifter kräver omsorgsfull design; npm-ekosystemet bits ibland på leveranskedjenivå."
      },
      "url": "https://nodejs.org",
      "aliases": [
        "node",
        "nodejs"
      ]
    },
    "Azure": {
      "description": {
        "en": "Microsoft's cloud, with deep integration into the wider Microsoft stack (Entra ID, .NET, Office).",
        "sv": "Microsofts moln, med djup integration i den övriga Microsoft-stacken (Entra ID, .NET, Office)."
      },
      "benefits": {
        "en": "First-class for .NET shops; broad regulated/regional coverage in Europe.",
        "sv": "Förstaklasstöd för .NET-företag; bred täckning för reglerade och regionala krav i Europa."
      },
      "drawbacks": {
        "en": "Portal UX and naming churn; some services lag the AWS equivalents in maturity.",
        "sv": "Portal-UX och ständigt ändrade namn; vissa tjänster ligger efter AWS-motsvarigheterna i mognad."
      },
      "url": "https://azure.microsoft.com",
      "aliases": [
        "microsoft azure",
        "msazure"
      ]
    },
    "AWS": {
      "description": {
        "en": "The widest, deepest public cloud — if a primitive exists in the cloud, AWS probably ships it.",
        "sv": "Det bredaste och djupaste publika molnet — finns en primitiv i molnet så finns den troligen hos AWS."
      },
      "benefits": {
        "en": "Unmatched service breadth; mature region/availability story; vast hiring pool.",
        "sv": "Oslagbar tjänstebredd; mogen region- och tillgänglighetsstory; stor rekryteringsbas."
      },
      "drawbacks": {
        "en": "Pricing is intricate; IAM and networking ergonomics can swallow weeks of work.",
        "sv": "Prissättningen är invecklad; IAM och nätverk kan sluka veckor av arbete."
      },
      "url": "https://aws.amazon.com",
      "aliases": [
        "amazon web services",
        "amazon cloud"
      ]
    },
    "GitHub actions": {
      "description": {
        "en": "GitHub Actions YAML pipelines that run on every push or pull request — building, testing, validating, and deploying without leaving the repo.",
        "sv": "GitHub Actions-pipelines i YAML som körs vid varje push eller pull request — bygger, testar, validerar och driftsätter utan att lämna repot."
      },
      "benefits": {
        "en": "Lives next to the code it tests; the marketplace covers most common steps; free tier handles small projects comfortably.",
        "sv": "Lever bredvid koden den testar; marketplace täcker de flesta vanliga stegen; gratisnivån räcker för mindre projekt."
      },
      "drawbacks": {
        "en": "YAML composition is awkward at scale; minutes and matrix builds get expensive on private repos.",
        "sv": "YAML-komposition blir klumpig vid skala; körminuter och matrix-byggen blir dyra på privata repon."
      },
      "url": "https://docs.github.com/actions",
      "aliases": [
        "gh actions",
        "ghactions",
        "github workflows"
      ]
    },
    "Jenkins": {
      "description": {
        "en": "Long-running, plugin-driven CI/CD server that runs builds and pipelines on dedicated agents.",
        "sv": "Etablerad, plugindriven CI/CD-server som kör byggen och pipelines på dedikerade agenter."
      },
      "benefits": {
        "en": "Self-hostable, language-agnostic, and battle-tested with a plugin for nearly every tool you might integrate.",
        "sv": "Kan köras självhostat, språkneutralt och beprövat med plugin för nästan alla verktyg man kan tänkas integrera mot."
      },
      "drawbacks": {
        "en": "Plugin sprawl, Groovy DSL quirks, and master/agent operations are real ongoing maintenance.",
        "sv": "Pluginspridning, egenheter i Groovy-DSL:en och master/agent-drift är reellt löpande underhåll."
      },
      "url": "https://www.jenkins.io",
      "aliases": [
        "jenkins ci"
      ]
    },
    "TeamCity": {
      "description": {
        "en": "JetBrains' build server — fast incremental builds, build chains, and first-class support for .NET and JVM ecosystems.",
        "sv": "JetBrains byggserver — snabba inkrementella byggen, byggkedjor och förstklassigt stöd för .NET- och JVM-ekosystemen."
      },
      "url": "https://www.jetbrains.com/teamcity",
      "aliases": [
        "team city"
      ]
    },
    "Octopus Deploy": {
      "description": {
        "en": "Release-management and deployment tool that picks up build artifacts and promotes them across environments with auditable, repeatable steps.",
        "sv": "Verktyg för release- och driftsättning som tar emot byggartefakter och promotar dem genom miljöer med spårbara, upprepbara steg."
      },
      "benefits": {
        "en": "Strong separation between build and deploy; environment-aware variables and approvals make production releases predictable.",
        "sv": "Tydlig separation mellan bygg och driftsättning; miljöanpassade variabler och godkännanden gör produktionsreleaser förutsägbara."
      },
      "url": "https://octopus.com",
      "aliases": [
        "octopus"
      ]
    },
    "Azure DevOps": {
      "description": {
        "en": "Microsoft's CI/CD, repo, and work-tracking suite, with Pipelines (YAML) and Boards as the most-used pieces.",
        "sv": "Microsofts svit för CI/CD, repo och ärendehantering, där Pipelines (YAML) och Boards är de mest använda delarna."
      },
      "url": "https://azure.microsoft.com/products/devops",
      "aliases": [
        "ado",
        "vsts",
        "azuredevops"
      ]
    },
    "PostgreSQL": {
      "description": {
        "en": "Open-source relational database with first-class support for JSON, full-text search, geospatial, and a strong extension ecosystem.",
        "sv": "Open source-relationsdatabas med förstklassigt stöd för JSON, fulltextsökning, geodata och ett starkt utbyggnadsekosystem."
      },
      "benefits": {
        "en": "Reliable, standards-compliant, runs everything from a hobby app to a large fleet without changing engines.",
        "sv": "Pålitlig, standardenlig, hanterar allt från en hobbyapp till stor produktion utan att byta motor."
      },
      "drawbacks": {
        "en": "Operational tuning (vacuum, replication, connection pooling) requires real expertise at scale.",
        "sv": "Driftsetting (vacuum, replikering, anslutningspooling) kräver verklig expertis vid skala."
      },
      "url": "https://www.postgresql.org",
      "aliases": [
        "postgres",
        "pg",
        "psql"
      ]
    },
    "MSSQL": {
      "description": {
        "en": "Microsoft's enterprise relational database, with first-class tooling (SSMS, Profiler) and powerful T-SQL.",
        "sv": "Microsofts relationsdatabas för företag, med förstklassiga verktyg (SSMS, Profiler) och kraftfullt T-SQL."
      },
      "url": "https://www.microsoft.com/sql-server",
      "aliases": [
        "microsoft sql server",
        "sql server",
        "sqlserver",
        "ms sql"
      ]
    },
    "MySQL": {
      "description": {
        "en": "Widely deployed open-source relational database.",
        "sv": "Brett utbyggd open source-relationsdatabas."
      },
      "benefits": {
        "en": "Easy to operate, well-understood scaling patterns, abundant managed offerings.",
        "sv": "Enkel att drifta, välkända skalningsmönster, många hanterade alternativ."
      },
      "drawbacks": {
        "en": "Feature set lags Postgres in places (JSON, extensions, indexing); historical defaults can bite.",
        "sv": "Funktionsuppsättningen ligger efter Postgres på sina ställen (JSON, tillägg, indexering); historiska standardvärden kan bita."
      },
      "url": "https://www.mysql.com",
      "aliases": [
        "maria",
        "mariadb"
      ]
    },
    "Redis": {
      "description": {
        "en": "In-memory key-value store used as cache, message broker, rate limiter, and a hundred other things.",
        "sv": "Nyckel-värde-lager i minnet som används som cache, meddelandekö, rate limiter och hundra andra saker."
      },
      "url": "https://redis.io",
      "aliases": [
        "kv store",
        "key-value store",
        "in-memory store"
      ]
    },
    "CosmosDB": {
      "description": {
        "en": "Azure's globally distributed, multi-model database — SQL, MongoDB, Cassandra, and table APIs over the same engine.",
        "sv": "Azures globalt distribuerade flermodelldatabas — SQL-, MongoDB-, Cassandra- och table-API:er över samma motor."
      },
      "url": "https://azure.microsoft.com/products/cosmos-db",
      "aliases": [
        "cosmos",
        "azure cosmos",
        "cosmos db"
      ]
    },
    "Vector databases": {
      "description": {
        "en": "Specialised stores for high-dimensional embeddings, indexed with approximate-nearest-neighbour algorithms (HNSW, IVF) to power semantic search, retrieval-augmented generation, and similarity-driven recommendation.",
        "sv": "Specialiserade lager för högdimensionella embeddings, indexerade med approximate-nearest-neighbour-algoritmer (HNSW, IVF) för semantisk sökning, retrieval-augmented generation och rekommendationer."
      },
      "benefits": {
        "en": "Sub-second similarity search at millions of items; the missing piece for RAG and recommendation in modern apps.",
        "sv": "Likhetssökning under sekunden på miljontals poster; den saknade pusselbiten för RAG och rekommendationer i moderna appar."
      },
      "drawbacks": {
        "en": "Index quality and embedding choice dominate results; operational tuning and re-indexing costs add up at scale.",
        "sv": "Indexkvalitet och val av embedding dominerar resultaten; driftsetting och återindexering kostar vid skala."
      },
      "aliases": [
        "vector db",
        "vector store",
        "embeddings db",
        "vectordb"
      ]
    },
    "Linux": {
      "description": {
        "en": "Open-source Unix-like operating system that runs almost every server, container, and cloud workload in production today.",
        "sv": "Öppen källkods-Unix-liknande operativsystem som idag driver i princip varje server, container och molnbelastning i produktion."
      },
      "url": "https://kernel.org",
      "aliases": [
        "gnu/linux",
        "unix"
      ]
    },
    "Terraform": {
      "description": {
        "en": "HashiCorp's declarative infrastructure-as-code tool — resources defined in HCL, plans diffed against live state, changes applied idempotently.",
        "sv": "HashiCorps deklarativa infrastructure-as-code-verktyg — resurser definieras i HCL, planer diffas mot live-tillståndet, ändringar appliceras idempotent."
      },
      "benefits": {
        "en": "Reproducible infrastructure across environments and providers; plan/apply gives a clear preview before changes hit production.",
        "sv": "Reproducerbar infrastruktur mellan miljöer och leverantörer; plan/apply ger en tydlig förhandsvisning innan ändringar når produktion."
      },
      "drawbacks": {
        "en": "State files are a sensitive operational asset; provider drift and module versioning bite teams that don't invest in conventions.",
        "sv": "Statefiler är en känslig drifttillgång; leverantörsdrift och modulversioner biter team som inte investerar i konventioner."
      },
      "url": "https://www.terraform.io",
      "aliases": [
        "tf",
        "iac",
        "infrastructure as code"
      ]
    },
    "Observability": {
      "description": {
        "en": "Logs, metrics, and traces wired together so you can ask new questions about a running system without redeploying it.",
        "sv": "Loggar, mätvärden och spår kopplade så att man kan ställa nya frågor om ett körande system utan att deploya om det."
      },
      "benefits": {
        "en": "Faster incident resolution; data-driven capacity and reliability decisions instead of guessing.",
        "sv": "Snabbare incidentlösning; datadrivna kapacitets- och tillförlitlighetsbeslut i stället för gissningar."
      },
      "drawbacks": {
        "en": "Cardinality, retention, and ingestion costs grow fast; bad signals are worse than no signals because they invite false confidence.",
        "sv": "Kardinalitet, retention och ingest-kostnader växer snabbt; dåliga signaler är värre än inga eftersom de inbjuder till falsk självsäkerhet."
      },
      "aliases": [
        "o11y",
        "monitoring",
        "telemetry",
        "tracing"
      ]
    },
    "Docker": {
      "description": {
        "en": "Containers — package an application with its dependencies into a portable, reproducible image.",
        "sv": "Containrar — paketera en applikation med sina beroenden i en portabel och reproducerbar avbildning."
      },
      "benefits": {
        "en": "Reproducible across machines; isolates the runtime; the lingua franca of CI and orchestration tools.",
        "sv": "Reproducerbar mellan maskiner; isolerar körmiljön; CI- och orkestreringsvärldens lingua franca."
      },
      "drawbacks": {
        "en": "Image bloat and layer caching gotchas; security review of base images is your responsibility.",
        "sv": "Image-svullnad och lager-caching-fällor; säkerhetsgranskning av basavbildningar är ditt ansvar."
      },
      "url": "https://www.docker.com",
      "aliases": [
        "containers",
        "dockerfile",
        "oci"
      ]
    },
    "Docker Swarm": {
      "description": {
        "en": "Docker's built-in container orchestrator — clusters Docker hosts together so services can be scheduled, scaled, and load-balanced across them.",
        "sv": "Dockers inbyggda containerorkestrator — klustrar Docker-värdar så att tjänster kan schemaläggas, skalas och lastbalanseras över dem."
      },
      "benefits": {
        "en": "Far simpler than Kubernetes for small fleets; uses the same Docker CLI and Compose files teams already know.",
        "sv": "Betydligt enklare än Kubernetes för små miljöer; använder samma Docker-CLI och Compose-filer som teamen redan kan."
      },
      "drawbacks": {
        "en": "Smaller ecosystem and slower-moving than Kubernetes; rarely the right choice for large or multi-cloud deployments.",
        "sv": "Mindre ekosystem och långsammare utveckling än Kubernetes; sällan rätt val för stora eller flermolnsdriftsättningar."
      },
      "url": "https://docs.docker.com/engine/swarm/",
      "aliases": [
        "swarm",
        "docker swarm mode"
      ]
    },
    "Kubernetes": {
      "description": {
        "en": "Container orchestrator that schedules, scales, and heals workloads across a cluster.",
        "sv": "Containerorkestrator som schemalägger, skalar och självreparerar arbetslaster över ett kluster."
      },
      "benefits": {
        "en": "Portable across clouds; rich ecosystem; declarative model that pairs well with GitOps.",
        "sv": "Portabel mellan moln; rikt ekosystem; deklarativ modell som passar väl med GitOps."
      },
      "drawbacks": {
        "en": "Operational complexity is high; small teams often pay more in ops than the orchestration buys them.",
        "sv": "Driftkomplexiteten är hög; små team betalar ofta mer i drift än vad orkestreringen ger tillbaka."
      },
      "url": "https://kubernetes.io",
      "aliases": [
        "k8s",
        "kube"
      ]
    },
    "CI/CD": {
      "description": {
        "en": "Continuous integration and delivery — every change is built, tested, and deployable on every push, with humans only in the approval loop.",
        "sv": "Kontinuerlig integration och leverans — varje ändring byggs, testas och är driftsättbar vid varje push, med människor enbart i godkännandeloopen."
      },
      "aliases": [
        "continuous integration",
        "continuous delivery",
        "cicd",
        "pipelines"
      ]
    },
    "Architecture": {
      "description": {
        "en": "Deciding the structure, boundaries, and trade-offs of a system so today's features can ship and tomorrow's are still possible.",
        "sv": "Att bestämma struktur, gränser och avvägningar i ett system så att dagens funktioner kan levereras och morgondagens fortfarande är möjliga."
      },
      "aliases": [
        "architect",
        "system design",
        "software architecture"
      ]
    },
    "Database design": {
      "description": {
        "en": "Modelling data into tables, columns, keys, and indexes that match the read/write patterns of the system — and choosing where to relax normalisation for performance.",
        "sv": "Att modellera data i tabeller, kolumner, nycklar och index som matchar systemets läs- och skrivmönster — och att välja var normalisering ska luckras upp för prestanda."
      },
      "benefits": {
        "en": "A schema that fits the workload pays back daily in query speed, integrity, and the ease of every future change.",
        "sv": "Ett schema som passar arbetslasten betalar tillbaka dagligen i frågehastighet, integritet och hur enkelt varje framtida ändring blir."
      },
      "drawbacks": {
        "en": "Early choices are sticky; the cost of fixing a poor schema rises with every row and every dependent query.",
        "sv": "Tidiga val är sega; kostnaden för att rätta ett dåligt schema ökar för varje rad och varje beroende fråga."
      },
      "aliases": [
        "db design",
        "schema design",
        "data modelling",
        "data modeling"
      ]
    },
    "Cloud migration": {
      "description": {
        "en": "Moving workloads from on-prem or one cloud to another — re-platforming services, refactoring data stores, and rewiring identity, networking, and CI/CD around the destination's primitives.",
        "sv": "Att flytta arbetslaster från on-prem eller mellan moln — att replattformsutveckla tjänster, refaktorera datalager och koppla om identitet, nätverk och CI/CD kring destinationens primitiver."
      },
      "benefits": {
        "en": "Unlocks managed services, elastic capacity, and a smaller ops footprint; forces overdue cleanup of forgotten dependencies.",
        "sv": "Låser upp hanterade tjänster, elastisk kapacitet och mindre driftbörda; tvingar fram översedd städning av bortglömda beroenden."
      },
      "drawbacks": {
        "en": "Lift-and-shift rarely captures the cloud's value; deeper re-architecture stretches the migration window and lengthens the period of double-running cost.",
        "sv": "Lift-and-shift fångar sällan molnets värde; djupare omarkitektering förlänger migreringsfönstret och perioden av dubbla driftkostnader."
      },
      "aliases": [
        "cloud migrations",
        "re-platforming",
        "lift and shift"
      ]
    },
    "Microservices": {
      "description": {
        "en": "Splitting an application into independently deployable services, usually owned by separate teams and communicating over a network.",
        "sv": "Att dela upp en applikation i självständigt driftsättbara tjänster, vanligtvis ägda av olika team och som kommunicerar över nätverk."
      },
      "benefits": {
        "en": "Independent deploys, scale, and ownership; failures stay local.",
        "sv": "Oberoende driftsättningar, skalning och ägarskap; fel hålls lokala."
      },
      "drawbacks": {
        "en": "Network is now a part of every feature; observability, contracts, and consistency become hard problems.",
        "sv": "Nätverket är nu en del av varje funktion; observerbarhet, kontrakt och konsistens blir svåra problem."
      },
      "aliases": [
        "micro services",
        "msvc"
      ]
    },
    "Miniservices": {
      "description": {
        "en": "Pragmatic middle ground between monolith and microservices — a small number of well-bounded services rather than dozens of tiny ones.",
        "sv": "Pragmatisk medelväg mellan monolit och mikrotjänster — ett fåtal välavgränsade tjänster istället för dussintals små."
      },
      "benefits": {
        "en": "Most of the deployment independence with much less operational tax.",
        "sv": "Det mesta av leveransoberoendet med betydligt mindre driftbelastning."
      },
      "drawbacks": {
        "en": "Less granular scaling and ownership; service boundaries still demand discipline.",
        "sv": "Mindre granulär skalning och ägarskap; tjänstegränser kräver fortfarande disciplin."
      },
      "aliases": [
        "mini services"
      ]
    },
    "gRPC/Protobuf": {
      "description": {
        "en": "Schema-first RPC over HTTP/2 with Protocol Buffers as the wire format.",
        "sv": "Schema-först-RPC över HTTP/2 med Protocol Buffers som wire-format."
      },
      "benefits": {
        "en": "Generated clients in every language; binary payloads and HTTP/2 streams shrink latency vs. JSON over HTTP/1.1.",
        "sv": "Genererade klienter i alla språk; binära payloads och HTTP/2-strömmar minskar latens jämfört med JSON över HTTP/1.1."
      },
      "drawbacks": {
        "en": "Browser support is awkward (gRPC-Web bridges, but isn't free); harder to debug than text protocols without the right tooling.",
        "sv": "Webbläsarstödet är klumpigt (gRPC-Web bryggar, men är inte gratis); svårare att felsöka än textprotokoll utan rätt verktyg."
      },
      "url": "https://grpc.io",
      "aliases": [
        "grpc",
        "protobuf",
        "protocol buffers",
        "proto",
        "proto3"
      ]
    },
    "RFC implementation": {
      "description": {
        "en": "Reading an IETF RFC end-to-end and producing a conforming implementation: parsing the normative MUST/SHOULD/MAY language, modelling state machines, and writing test vectors that prove the spec is met.",
        "sv": "Att läsa en IETF-RFC från pärm till pärm och skriva en regelrätt implementation: tolka de normativa MUST/SHOULD/MAY-formuleringarna, modellera tillståndsmaskiner och skriva testvektorer som bevisar att specifikationen följs."
      },
      "aliases": [
        "rfc",
        "request for comments"
      ]
    },
    "Integrations": {
      "description": {
        "en": "Building and maintaining the connective tissue between systems — APIs, webhooks, message queues, third-party SDKs — so data flows reliably across service boundaries.",
        "sv": "Att bygga och underhålla bindväven mellan system — API:er, webhooks, meddelandeköer och tredjeparts-SDK:er — så att data flödar tillförlitligt över tjänstegränser."
      },
      "benefits": {
        "en": "Unlocks workflows no single service can deliver alone and lets each system stay focused on its own responsibility.",
        "sv": "Möjliggör arbetsflöden som ingen enskild tjänst klarar själv och låter varje system fokusera på sitt eget ansvar."
      },
      "drawbacks": {
        "en": "Every integration adds a fault line — schema drift, rate limits, auth churn — that breaks at the worst time and is expensive to monitor.",
        "sv": "Varje integration lägger till en brytlinje — schema drift, rate limits, auth-byten — som spricker vid sämsta tillfället och är dyr att övervaka."
      },
      "aliases": [
        "integration",
        "third-party integrations",
        "etl"
      ]
    },
    "SEO": {
      "description": {
        "en": "Search engine optimisation — shaping a site's structure, metadata, performance, and content so search engines and AI answer engines can find, understand, and surface it.",
        "sv": "Sökmotoroptimering — att utforma en sajts struktur, metadata, prestanda och innehåll så att sökmotorer och AI-svarstjänster kan hitta, förstå och visa den."
      },
      "benefits": {
        "en": "Cheap, durable distribution — well-indexed pages keep earning impressions long after the work is done.",
        "sv": "Billig och uthållig spridning — välindexerade sidor fortsätter ge visningar långt efter att arbetet är gjort."
      },
      "drawbacks": {
        "en": "Feedback is slow and noisy; ranking signals shift as engines update, so yesterday's playbook rots.",
        "sv": "Återkopplingen är långsam och brusig; rankingsignaler ändras när motorerna uppdateras, så gårdagens recept ruttnar."
      },
      "aliases": [
        "search engine optimization",
        "search engine optimisation",
        "geo",
        "generative engine optimization"
      ]
    },
    "Scrum": {
      "description": {
        "en": "Specific Agile framework with fixed-length sprints, defined roles (PO, Scrum Master, team), and a small set of mandatory ceremonies.",
        "sv": "Konkret agilt ramverk med fasta sprintlängder, definierade roller (PO, Scrum Master, team) och ett fåtal obligatoriska ceremonier."
      },
      "benefits": {
        "en": "Predictable cadence; common vocabulary across organisations.",
        "sv": "Förutsägbar takt; gemensamt vokabulär över organisationer."
      },
      "drawbacks": {
        "en": "Ceremony heavy for small teams; sprint boundaries can fight long-running technical work.",
        "sv": "Ceremonitungt för små team; sprintgränser krockar ibland med längre tekniskt arbete."
      },
      "url": "https://scrumguides.org",
      "aliases": [
        "agile",
        "sprint",
        "kanban"
      ]
    },
    "Leadership": {
      "description": {
        "en": "Setting direction, building trust, and getting people moving towards a shared goal.",
        "sv": "Att sätta riktning, bygga tillit och få människor att röra sig mot ett gemensamt mål."
      },
      "aliases": [
        "leading",
        "lead",
        "ledarskap",
        "team management",
        "team lead",
        "people management",
        "engineering management"
      ]
    },
    "Mentoring": {
      "description": {
        "en": "Helping individual engineers grow by sharing context, asking better questions than you answer, and creating space to fail safely.",
        "sv": "Att hjälpa enskilda ingenjörer växa genom att dela kontext, ställa bättre frågor än du svarar på och skapa utrymme att misslyckas säkert."
      },
      "aliases": [
        "mentor",
        "mentorship",
        "coaching"
      ]
    },
    "Technical interviews": {
      "description": {
        "en": "Assessing engineering candidates through structured conversations, code review, and pair-programming exercises — calibrated against a rubric so signal stays consistent across interviewers.",
        "sv": "Att bedöma ingenjörskandidater genom strukturerade samtal, kodgranskning och parprogrammeringsövningar — kalibrerade mot en rubrik så att signalen blir konsekvent mellan intervjuare."
      },
      "aliases": [
        "interviewing",
        "candidate assessment",
        "engineering interviews",
        "tech interviews"
      ]
    },
    "IT strategy": {
      "description": {
        "en": "Aligning technology investment with business goals over a 1–3 year horizon — buy/build, platform choices, sourcing, and where to put the bets.",
        "sv": "Att rikta teknikinvesteringar mot verksamhetsmål på 1–3 års sikt — köpa/bygga, plattformsval, sourcing och var satsningarna ska läggas."
      },
      "aliases": [
        "tech strategy",
        "technology strategy"
      ]
    },
    "Project management": {
      "description": {
        "en": "Driving a defined piece of work to completion within scope, time, and cost — risk tracking, dependencies, stakeholders, and reporting.",
        "sv": "Att driva ett avgränsat arbete i mål inom omfattning, tid och kostnad — riskhantering, beroenden, intressenter och rapportering."
      },
      "aliases": [
        "pm",
        "project lead",
        "project planning"
      ]
    },
    "Cybersecurity": {
      "description": {
        "en": "Protecting systems and data through threat modelling, secure design, identity, monitoring, and incident response.",
        "sv": "Att skydda system och data genom hotmodellering, säker design, identitet, övervakning och incidenthantering."
      },
      "benefits": {
        "en": "Reduces probability and impact of breaches; an audited posture is a sales asset in regulated markets.",
        "sv": "Minskar sannolikhet och konsekvens av intrång; en granskad säkerhetsposition är en försäljningsfördel på reglerade marknader."
      },
      "drawbacks": {
        "en": "Friction trade-off with developer ergonomics; treated as a feature it lags, treated as a function of every feature it scales.",
        "sv": "Friktionsavvägning mot utvecklarergonomi; behandlas det som en funktion blir det eftersläpande, behandlas det som en del av varje funktion skalar det."
      },
      "aliases": [
        "cyber",
        "security",
        "infosec",
        "appsec"
      ]
    },
    "Risk management": {
      "description": {
        "en": "Identifying, ranking, and treating risks across product, security, and operations.",
        "sv": "Att identifiera, rangordna och hantera risker över produkt, säkerhet och drift."
      },
      "aliases": [
        "risk",
        "risk analysis"
      ]
    },
    "GDPR": {
      "description": {
        "en": "EU regulation governing how personal data is collected, processed, stored, and shared.",
        "sv": "EU-förordning som reglerar hur personuppgifter samlas in, behandlas, lagras och delas."
      },
      "benefits": {
        "en": "Forcing function for data hygiene that pays back beyond compliance.",
        "sv": "Tvingande kraft för datahygien som ger värde långt utöver regelefterlevnad."
      },
      "drawbacks": {
        "en": "Documentation and consent flows add real friction; cross-border transfers are a moving target.",
        "sv": "Dokumentation och samtyckesflöden ger reell friktion; gränsöverskridande överföringar är ett rörligt mål."
      },
      "url": "https://gdpr.eu",
      "aliases": [
        "data protection",
        "dataskydd",
        "gdpr compliance"
      ]
    },
    "CE marking": {
      "description": {
        "en": "EU conformity marking for products — including software medical devices — declaring they meet the relevant directives.",
        "sv": "EU:s överensstämmelsemärkning för produkter — inklusive medicintekniska programvaror — som intygar att de uppfyller relevanta direktiv."
      },
      "aliases": [
        "ce mark",
        "ce märkning"
      ]
    },
    "WCAG": {
      "description": {
        "en": "W3C accessibility standard that defines testable success criteria — perceivable, operable, understandable, robust — for making web content usable by people with disabilities.",
        "sv": "W3C:s tillgänglighetsstandard som definierar testbara framgångskriterier — uppfattningsbar, hanterbar, begriplig, robust — för att göra webbinnehåll användbart för personer med funktionsnedsättning."
      },
      "benefits": {
        "en": "Bakes accessibility into the same review and CI gates as the rest of the build, and aligns with EU EN 301 549 / EAA obligations.",
        "sv": "Bakar in tillgänglighet i samma gransknings- och CI-grindar som resten av bygget, och linjerar mot EU:s EN 301 549 och tillgänglighetsdirektivet."
      },
      "drawbacks": {
        "en": "AA conformance demands real design and engineering work — color contrast, focus order, ARIA semantics — and automated checks only catch a fraction of failures.",
        "sv": "AA-konformitet kräver verkligt design- och utvecklingsarbete — kontrast, fokusordning, ARIA-semantik — och automatiska kontroller fångar bara en bråkdel av bristerna."
      },
      "url": "https://www.w3.org/WAI/standards-guidelines/wcag/",
      "aliases": [
        "accessibility",
        "a11y",
        "web accessibility",
        "tillgänglighet"
      ]
    }
  },
  "languages": [
    {
      "name": {
        "en": "Swedish",
        "sv": "Svenska"
      },
      "code": "sv",
      "level": {
        "en": "Native",
        "sv": "Modersmål"
      },
      "proficiency": "native"
    },
    {
      "name": {
        "en": "English",
        "sv": "Engelska"
      },
      "code": "en",
      "level": {
        "en": "Professional",
        "sv": "Professionell"
      },
      "proficiency": "professional"
    }
  ],
  "print": {
    "fontFamily": "\"EB Garamond Variable\", \"EB Garamond\", Garamond, \"Adobe Garamond Pro\", \"Apple Garamond\", \"ITC Garamond\", Georgia, \"Times New Roman\", Times, serif",
    "headingFontFamily": "\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif",
    "fontSize": "10.5pt",
    "lineHeight": 1.4,
    "page": {
      "size": "A4",
      "margin": "2.5cm 2.2cm"
    },
    "spacing": {
      "section": "16pt",
      "entry": "12pt",
      "subEntry": "8pt",
      "paragraph": "4pt",
      "headerToBody": "20pt"
    },
    "headings": {
      "name": "24pt",
      "title": "12pt",
      "section": "10pt",
      "entry": "11pt",
      "subEntry": "10.5pt",
      "subHeading": "9pt"
    },
    "pageBreaks": {
      "orphans": 3,
      "widows": 3,
      "avoidInsideEntry": true,
      "avoidInsideSubEntry": true,
      "keepHeadingWithNext": true
    },
    "includeNotes": true
  }
}
