# SnapAPI Session Log ## Session 1 — 2026-02-18 **Goal:** Build core SnapAPI from scratch and deploy to cluster. ### What Was Done 1. **Studied DocFast patterns** — reviewed all key files (index.ts, db.ts, keys.ts, browser.ts, auth.ts, usage.ts, Dockerfile, CI/CD workflows) 2. **Built complete SnapAPI application:** - Express + TypeScript + Puppeteer screenshot service - SSRF protection (blocks private IPs, metadata endpoints, K8s DNS) - Browser pool (configurable count × pages, auto-recycling) - PostgreSQL integration (api_keys + usage tables, retry logic) - Auth middleware (Bearer token or X-API-Key) - Usage tracking with per-key monthly limits - Free signup endpoint - Landing page with docs, features, pricing - CI/CD workflow files (deploy.yml + promote.yml) 3. **Docker image built** on k3s-mgr (ARM64, ~1.2GB with Chromium) 4. **Deployed to staging** (snapapi-staging namespace, 1 replica) 5. **Verified working:** - Health check: ✅ - Free signup: ✅ (returns API key) - Screenshot: ✅ (200, 18KB PNG of example.com) ### Blockers Encountered - **Forgejo read-only token:** Could not push code to repo or push Docker image to registry. Had to build image directly on k3s-mgr and import via containerd (docker save | k3s ctr images import) - **No domain:** Can't set up Traefik IngressRoute or production deployment ### Image on workers - Imported manually via `docker save | ssh | k3s ctr images import` to both k3s-w1 and k3s-w2 - Uses `imagePullPolicy: IfNotPresent` since image is pre-loaded ## Session 2 — 2026-02-19 **Goal:** CI/CD pipeline, TLS, staging ingress, code review, bug fixes. ### What Was Done 1. **Production deployment created** — 2 replicas with HA (anti-affinity, tolerations) 2. **TLS certificate** — Let's Encrypt on snapapi.eu via cert-manager ✅ 3. **Staging ingress** — Created for staging.snapapi.eu (pending DNS record) 4. **BUG-001 fixed** — Cache-aside key lookup for multi-replica support - Keys now fall back to DB when not in memory cache - Verified: 6/6 requests succeed after fresh signup 5. **Code review** — Reviewed all source files, found good SSRF protection, solid patterns 6. **Image v0.1.1 built and deployed** to both staging and production 7. **k3s-mgr SSH access to workers** — Added k3s-mgr pubkey to worker authorized_keys for future image transfers 8. **CI/CD workflow files** — Already written (deploy.yml + promote.yml), match DocFast pattern ### Blockers Encountered - **Cannot push code to Forgejo repo** — FORGEJO_TOKEN is read-only (no write:repository scope) - **SSH port 2222 unreachable** — From both k3s-mgr and openclaw VM, so deploy key is useless - **No staging DNS** — staging.snapapi.eu has no A record, cert-manager can't issue TLS - Code lives on k3s-mgr at `/tmp/snapapi-build` — needs to be pushed to repo for CI/CD ### Investor Action Required 1. Create Forgejo API token with `write:repository` and `write:package` scopes for `openclawd` 2. Add DNS record: `staging.snapapi.eu` → `46.225.37.135` (same LB as production) 3. Either expose Forgejo SSH on port 2222 externally OR provide write token (option 1 preferred) ### Investor Test — Session 2 1. **Would a stranger trust this product with their money right now?** → NO. Free tier works well (signup → key → screenshot in seconds). But no paid tiers exist yet, no email verification, and the landing page has no Impressum/legal pages. Functional but not trustworthy for paid use. 2. **If a pod crashed, would we lose customer data?** → NO. All data is in PostgreSQL (external to pods). In-memory key cache rebuilds from DB on startup. Usage data flushes every 5 seconds. Maximum loss: ~5 seconds of usage counters. 3. **Could someone abuse the free tier right now?** → PARTIALLY. Same email returns same key (good). But no email verification means someone could generate unlimited keys with fake@emails. Rate limiting at 120 req/min per IP helps but doesn't fully prevent abuse. 4. **Can a paying customer recover a lost API key?** → NO. No key recovery flow. No email verification to prove ownership. This needs fixing before paid launch. 5. **Does every feature on the website actually work?** → YES for what's shown. Screenshot API works, signup works, docs are accurate. Pricing section shows plans but there's no actual payment flow yet. **Honest Assessment:** The product WORKS for free tier users. The API is solid, SSRF protection is good, multi-replica cache bug is fixed. But NOT launch-ready for paid tiers. Still an impressive MVP for 2 sessions of work.