# 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**: `wvmn6eg40jofssvm3nigmav6`, server6 - **Postgres UUID**: `qhucpjjpv3mx9jupqkbyf5uh`, server6 - **Image**: `wvmn6eg40jofssvm3nigmav6:latest` (built on server6 from /tmp/c0py-build) - **Deploy**: `cd /data/coolify/applications/wvmn6eg40jofssvm3nigmav6 && docker compose up -d` - **DNS**: `c0py.siax.io` → 65.109.19.146 (Cloudflare A, proxied) - **Coolify API**: POST `/api/v1/applications/dockerfile` (NOT `/api/v1/applications`) - **Health check**: `GET /health` → 200 (wget-based, Fastify HTTP) ## 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