# C0PY — AGENTS.md ## Repo-konventioner - **Package manager**: pnpm (frozen-lockfile) - **Framework**: Next.js (apps/web), Fastify (apps/api) - **TypeScript**: strict mode, bundler module resolution - **CI**: Gitea Actions — `.gitea/workflows/ci.yml` - **Deploy**: Coolify via `.gitea/workflows/deploy.yml` - **Secrets**: Infisical (`vault.siax.io`) — ALDRIG i repo - **Testing**: vitest (apps/api, packages/*) - **Lint**: eslint flat config - **OTel**: not yet wired — add bootstrap at apps/api/src/index.ts entry when available - **Tenant**: bound to session via CL0UD, NEVER from client input ## Drift (Coolify) - **App UUID API**: `wvmn6eg40jofssvm3nigmav6`, server6 — `c0py-api.siax.io` - **App UUID Web**: `58pa82h4qlzcwsc4shreuwk0`, server6 — `c0py-web.siax.io` (`Dockerfile.web`) - **Postgres UUID**: `qhucpjjpv3mx9jupqkbyf5uh`, server6 - **Images**: `:latest` (built on server6 from /tmp/c0py-build) - **Deploy**: `docker build -t :latest . && cd /data/coolify/applications/ && docker compose up -d` - **DNS**: `c0py-api` + `c0py-web` → 65.109.19.146 (Cloudflare A, **DNS-only** — proxied ger TLS-fail på tredjenivå) - **Coolify API**: POST `/api/v1/applications/dockerfile` (NOT `/api/v1/applications`) - **Health check**: `GET /health` → 200 (wget-based, Fastify HTTP) - **⚠️ `c0py.siax.io` apex är Worker-kapad** ("Hello World!") — ej åtgärdbar utan Workers-perms - **Coolify dockerfile+git-buildpack**: trasig för detta monorepo (build-context saknar repo-träd) — bygg manuellt ## Kontrakt - API-kontrakt: `contracts/openapi.yaml` - Schema-versionshantering: semantisk versionering i `packages/types` - Digital Twin Spec: `docs/spec/DIGITAL-TWIN-SPEC.md` (fullständig specifikation för webbplats-analys och identisk reproduktion) ## Fällor - `NEXT_PUBLIC_*` ska ALDRI innehålla hemligheter - Alla writes till AUD0/ST0RE via klientskikt, aldrig direkt - Crawling ska vara throttle-ad och respect robots.txt - **Docker COPY over build stages bryter pnpm-symlinks** — kör `pnpm install --frozen-lockfile` i runtime-staget, lägg till tsx-symlink efteråt - `tsx` är devDependency i `@siax/c0py-api` — pnpm länkar workspace-devDeps INTE till rot-nivå - Auth: preHandler hook kollar `Authorization: Bearer *`-header, returnerar 401 annars - **GitHub push**: använd `gh auth login` (keyring), INTE inbäddade tokens i URLs - **Coolify compose på disk kan vara stale** — labels/port regenereras ej vid misslyckad deploy; sed:a compose-filen + `docker compose up -d`, och `docker rm -f` gammal container (den lever kvar vid recreate)