import type { Project } from '@lib/schema';

/*
  Homelab — capability page (lighter template): no TL;DR/decisions/gallery rendered.
  Content reflects the real setup inspected on the host (Ubuntu 24.04, ~30 Docker
  services behind Traefik with Authentik SSO, CrowdSec, Pi-hole, Gitea CI).
*/
export const homelab: Project = {
  id: 'homelab',
  name: 'Self-hosted infrastructure lab',
  order: 3,
  status: 'active',
  template: 'capability',
  stack: [
    { name: 'Ubuntu' },
    { name: 'Docker' },
    { name: 'Traefik' },
    { name: 'Authentik' },
    { name: 'CrowdSec' },
    { name: 'Gitea CI' },
  ],
  links: [],
  diagram: {
    viewBox: '0 0 1120 310',
    title: { en: 'Homelab topology', no: 'Hjemmelab-topologi' },
    desc: {
      en: 'Traffic arrives through Cloudflare to a Traefik reverse proxy that terminates TLS and applies Authentik single sign-on, then routes to self-hosted services: Gitea and its CI runner, application containers, and a media stack.',
      no: 'Trafikk kommer via Cloudflare til en Traefik reverse proxy som terminerer TLS og bruker Authentik single sign-on, og rutes videre til egendriftede tjenester: Gitea med CI-runner, applikasjonscontainere og en mediastack.',
    },
    nodes: [
      {
        id: 'cloudflare',
        x: 40,
        y: 124,
        w: 170,
        h: 68,
        kind: 'external',
        label: 'Cloudflare',
        sub: { en: 'DNS · edge · WAF', no: 'DNS · edge · WAF' },
      },
      {
        id: 'traefik',
        x: 290,
        y: 124,
        w: 180,
        h: 68,
        kind: 'primary',
        label: 'Traefik',
        sub: { en: 'reverse proxy · TLS', no: 'reverse proxy · TLS' },
      },
      {
        id: 'authentik',
        x: 290,
        y: 232,
        w: 180,
        h: 56,
        kind: 'internal',
        label: 'Authentik',
        sub: { en: 'SSO · forward-auth', no: 'SSO · forward-auth' },
      },
      {
        id: 'gitea',
        x: 560,
        y: 44,
        w: 210,
        h: 60,
        kind: 'internal',
        label: 'Gitea + runner',
        sub: { en: 'self-hosted git · CI/CD', no: 'egendriftet git · CI/CD' },
      },
      {
        id: 'apps',
        x: 560,
        y: 128,
        w: 210,
        h: 60,
        kind: 'internal',
        label: 'App containers',
        sub: { en: 'JobTrack · this site', no: 'JobTrack · denne siden' },
      },
      {
        id: 'media',
        x: 560,
        y: 212,
        w: 210,
        h: 60,
        kind: 'internal',
        label: 'Media stack',
        sub: { en: 'Jellyfin · *arr', no: 'Jellyfin · *arr' },
      },
    ],
    edges: [
      { d: 'M210 158 H290', kind: 'flow' },
      { d: 'M380 192 V232', kind: 'flow', label: 'auth', labelX: 400, labelY: 218 },
      { d: 'M470 150 L560 74', kind: 'flow' },
      { d: 'M470 158 H560', kind: 'flow' },
      { d: 'M470 166 L560 242', kind: 'flow' },
    ],
  },
  media: [],
  content: {
    en: {
      valueProp:
        'Where I run, break and fix real infrastructure — around thirty containerised services behind a single reverse proxy.',
      cardTeaser:
        'Ubuntu + Docker · Traefik · Authentik SSO · CrowdSec · Gitea CI — ~30 self-hosted services, and the deploy target for this site.',
      tldr: {
        what: 'A self-hosted home server running ~30 production-style services.',
        why: 'To keep operations and security skills hands-on.',
        stack: 'Ubuntu · Docker · Traefik · Authentik · CrowdSec · Gitea.',
        role: 'Operator.',
      },
      sections: [
        {
          kind: 'problem',
          heading: 'What it is',
          anchorId: 'problem',
          blocks: [
            {
              type: 'p',
              text: 'An Ubuntu 24.04 server running around thirty Docker services behind a Traefik reverse proxy, with single sign-on, an intrusion-prevention layer, DNS filtering and a full CI/CD setup. It’s where I get ongoing, hands-on practice with deployment, security and real-world operations — including the self-hosted Gitea instance and runner that build and deploy this very portfolio.',
            },
          ],
        },
        {
          kind: 'architecture',
          heading: 'How it fits together',
          anchorId: 'architecture',
          blocks: [
            {
              type: 'ul',
              items: [
                'Traefik terminates TLS and routes every service, fronted by Cloudflare, with separate internal and external entrypoints and HTTP/3.',
                'Authentik provides single sign-on as a Traefik forward-auth middleware in front of internal tools; CrowdSec adds intrusion prevention and Pi-hole handles DNS filtering.',
                'Gitea and a Gitea Actions runner give me self-hosted git and CI/CD — the build-and-deploy target for this site.',
                'The Docker socket is exposed to Traefik only through a hardened socket-proxy, and each application runs on its own isolated Docker network.',
                'Portainer and Dozzle handle container management and logs; alongside these run application, media and utility stacks.',
              ],
            },
          ],
        },
        {
          kind: 'next',
          heading: 'What’s next',
          anchorId: 'next',
          blocks: [
            {
              type: 'p',
              text: 'Retiring the legacy WordPress site now that this portfolio replaces it, then tightening backup verification and expanding automated health checks and alerting across the stack.',
            },
          ],
        },
      ],
    },
    no: {
      valueProp:
        'Der jeg drifter, ødelegger og fikser ekte infrastruktur — rundt tretti containeriserte tjenester bak én reverse proxy.',
      cardTeaser:
        'Ubuntu + Docker · Traefik · Authentik SSO · CrowdSec · Gitea CI — ~30 egendriftede tjenester, og utrullingsmålet for denne siden.',
      tldr: {
        what: 'En egendriftet hjemmeserver med ~30 produksjonslignende tjenester.',
        why: 'For å holde drifts- og sikkerhetsferdighetene praktiske.',
        stack: 'Ubuntu · Docker · Traefik · Authentik · CrowdSec · Gitea.',
        role: 'Operatør.',
      },
      sections: [
        {
          kind: 'problem',
          heading: 'Hva det er',
          anchorId: 'problem',
          blocks: [
            {
              type: 'p',
              text: 'En Ubuntu 24.04-server som kjører rundt tretti Docker-tjenester bak en Traefik reverse proxy, med single sign-on, et lag for inntrengingsvern, DNS-filtrering og full CI/CD. Det er her jeg får løpende, praktisk øving på utrulling, sikkerhet og ekte drift — inkludert den egendriftede Gitea-instansen og runneren som bygger og ruller ut denne porteføljen.',
            },
          ],
        },
        {
          kind: 'architecture',
          heading: 'Hvordan det henger sammen',
          anchorId: 'arkitektur',
          blocks: [
            {
              type: 'ul',
              items: [
                'Traefik terminerer TLS og ruter alle tjenester, med Cloudflare foran, egne interne og eksterne entrypoints og HTTP/3.',
                'Authentik gir single sign-on som en Traefik forward-auth-middleware foran interne verktøy; CrowdSec legger til inntrengingsvern og Pi-hole håndterer DNS-filtrering.',
                'Gitea og en Gitea Actions-runner gir egendriftet git og CI/CD — bygge- og utrullingsmålet for denne siden.',
                'Docker-socketen eksponeres kun til Traefik gjennom en herdet socket-proxy, og hver applikasjon kjører på sitt eget isolerte Docker-nettverk.',
                'Portainer og Dozzle håndterer containere og logger; ved siden av kjører applikasjons-, media- og verktøystacker.',
              ],
            },
          ],
        },
        {
          kind: 'next',
          heading: 'Veien videre',
          anchorId: 'videre',
          blocks: [
            {
              type: 'p',
              text: 'Legge ned den gamle WordPress-siden nå som denne porteføljen erstatter den, og deretter stramme inn verifisering av sikkerhetskopier og utvide automatiske helsesjekker og varsling på tvers av stacken.',
            },
          ],
        },
      ],
    },
  },
};
