From a9168357739e1069dfb827265b21cf16530b8cde Mon Sep 17 00:00:00 2001 From: Hoid Date: Thu, 19 Feb 2026 17:22:57 +0000 Subject: [PATCH] SnapAPI session 7: code to Forgejo + legal pages --- impressum.html | 178 +++++++++++++ memory/bg3.json | 28 +- privacy.html | 314 ++++++++++++++++++++++ projects/snapapi/memory/sessions.md | 52 ++++ projects/snapapi/memory/state.json | 23 +- terms.html | 395 ++++++++++++++++++++++++++++ 6 files changed, 970 insertions(+), 20 deletions(-) create mode 100644 impressum.html create mode 100644 privacy.html create mode 100644 terms.html diff --git a/impressum.html b/impressum.html new file mode 100644 index 0000000..182e3cc --- /dev/null +++ b/impressum.html @@ -0,0 +1,178 @@ + + + + + +Impressum — SnapAPI | Screenshot API for Developers + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/memory/bg3.json b/memory/bg3.json index 7234405..cb4ee94 100644 --- a/memory/bg3.json +++ b/memory/bg3.json @@ -4,9 +4,11 @@ "race": "Half-Orc", "class": "Fighter", "subclass": "Battle Master", - "level": 6, + "level": 7, "stats": {}, - "feats": ["Great Weapon Master"], + "feats": [ + "Great Weapon Master" + ], "fightingStyle": "", "equipment": "Adamantine Armour, Halberd +2 (1d10+1d4 energy)" }, @@ -15,7 +17,7 @@ "name": "Astarion", "class": "Rogue", "subclass": "Thief", - "level": 6, + "level": 7, "build": "Melee Thief", "notes": "" }, @@ -23,7 +25,7 @@ "name": "Shadowheart", "class": "Cleric", "subclass": "Life Domain", - "level": 6, + "level": 7, "build": "Life Cleric", "notes": "Adamantine Armour, Shattered Flail" }, @@ -31,17 +33,23 @@ "name": "Gale", "class": "Wizard", "subclass": "Evocation", - "level": 6, + "level": 7, "build": "", "notes": "" } ], "act": 2, - "level": 6, + "level": 7, "currentQuest": "Act 2 - Shadow-Cursed Lands, has Moon Lantern with Pixie", - "completedQuests": ["Rescue Halsin"], - "completedAreas": ["Owlbear Cave", "Goblin Camp", "Act 1"], + "completedQuests": [ + "Rescue Halsin" + ], + "completedAreas": [ + "Owlbear Cave", + "Goblin Camp", + "Act 1" + ], "decisions": [], "gold": 2000, - "notes": "Adamantine Forge: crafted armour for Tam and Shadowheart. Plays with gamepad — no keyboard shortcuts! All 4 chars already built as recommended. Astarion + Gale still on default weapons. Level 6 pending — recommended GWM for Tam, Expertise for Astarion, Blessed Healer for SH, Haste+Fireball for Gale." -} + "notes": "Adamantine Forge: crafted armour for Tam and Shadowheart. Plays with gamepad \u2014 no keyboard shortcuts! Level 7: Tam got new maneuver, Astarion got Evasion, SH got Death Ward, Gale got Greater Invisibility. Key combo: Greater Invisibility on Astarion for permanent Sneak Attack + Advantage." +} \ No newline at end of file diff --git a/privacy.html b/privacy.html new file mode 100644 index 0000000..9b478bb --- /dev/null +++ b/privacy.html @@ -0,0 +1,314 @@ + + + + + +Privacy Policy — SnapAPI | Screenshot API for Developers + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/projects/snapapi/memory/sessions.md b/projects/snapapi/memory/sessions.md index 9ba9b80..aa00a98 100644 --- a/projects/snapapi/memory/sessions.md +++ b/projects/snapapi/memory/sessions.md @@ -1,5 +1,57 @@ # SnapAPI Session Log +## Session 7 — 2026-02-19 (Code to Forgejo + Legal Pages) + +**Goal:** Push codebase to Forgejo repo and add legally required pages. + +### What Was Done + +1. **Codebase pushed to Forgejo** (snapapi-cicd-1 specialist): + - Extracted complete source from running staging pod + - Created proper Dockerfile, .gitignore, CI/CD workflows + - Pushed 28 files to `openclawd/SnapAPI` on Forgejo + - Commit: `b58f634` — "feat: initial codebase v0.4.1" + - Includes `.forgejo/workflows/deploy.yml` and `promote.yml` + - Verified via Forgejo API — all files present + +2. **Legal pages added** (snapapi-legal-1 specialist): + - `/impressum.html` — Austrian §5 ECG compliance (company info, FN, VAT, management) + - `/privacy.html` — Full GDPR privacy policy (data collected, legal basis, retention, rights) + - `/terms.html` — Terms of Service (acceptable use, rate limits, liability, Austrian law) + - All pages: dark theme matching site, responsive, proper nav/footer + - Landing page footer updated with legal page links + - Built v0.4.3 and deployed to prod (2 replicas) + staging + +3. **CEO verification**: + - Playground test: ✅ (200, 90KB, 2s response, watermark, rate limit headers) + - Health check: ✅ + - All legal pages: ✅ (200) + - Swagger docs: ✅ (200) + - Status page: ✅ (200) + - HA: pods on k3s-w1 and k3s-w2 ✅ + +### Investor Test — Session 7 +1. **Would a stranger trust this product with their money?** + → YES. Professional landing page, working playground, Stripe checkout, interactive docs, full legal compliance (Impressum, Privacy, ToS). + +2. **If a pod crashed, would we lose customer data?** + → NO. PostgreSQL external, usage flushes every 5s. + +3. **Could someone abuse the free tier?** + → NO FREE TIER. Playground: 5/hr per IP, watermarked. + +4. **Can a paying customer recover a lost API key?** + → Not yet — needs Stripe customer portal. Customer can email for support. + +5. **Does every feature on the website actually work?** + → YES. Playground, checkout, docs, status, legal pages — all verified. + +### Remaining +- Register Stripe webhook in Dashboard (investor action) +- CI/CD secrets in Forgejo (KUBECONFIG, REGISTRY_TOKEN) +- External uptime monitoring +- Staging DNS + TLS + ## Session 4 — 2026-02-19 (Emergency Bug Fix) **Trigger:** Investor tested site himself and found 3 critical bugs that previous QA missed. diff --git a/projects/snapapi/memory/state.json b/projects/snapapi/memory/state.json index a8de4a4..5f74505 100644 --- a/projects/snapapi/memory/state.json +++ b/projects/snapapi/memory/state.json @@ -1,24 +1,24 @@ { "phase": "production-live", - "version": "0.4.1", + "version": "0.4.3", "staging": { "status": "running", "namespace": "snapapi-staging", "replicas": 1, - "image": "docker.io/library/snapapi:v0.4.1", + "image": "docker.io/library/snapapi:v0.4.3", "healthCheck": "passing" }, "production": { "status": "running", "namespace": "snapapi", "replicas": 2, - "image": "docker.io/library/snapapi:v0.4.1", + "image": "docker.io/library/snapapi:v0.4.3", "healthCheck": "passing", "domain": "https://snapapi.eu", "tls": "Let's Encrypt (valid until 2026-05-20)" }, "blockers": [ - "Stripe webhook URL needs to be registered in Stripe Dashboard" + "Stripe webhook URL needs to be registered in Stripe Dashboard: https://snapapi.eu/v1/billing/webhook" ], "completed": [ "Core screenshot API (POST /v1/screenshot)", @@ -43,13 +43,16 @@ "Stripe Checkout flow (plan selection → Stripe → success page with API key)", "Stripe webhook handler (subscription lifecycle, product filtering for shared account)", "Status page at /status (auto-refresh, dark theme)", - "Closed BUG-002 and BUG-003 (no longer applicable — no free tier)", - "Git push access from openclaw-vm (deploy key: forgejo-snapapi)" + "Git push access from openclaw-vm (deploy key: forgejo-snapapi)", + "Codebase pushed to Forgejo repo (openclawd/SnapAPI) — all source, Dockerfile, CI workflows", + "Legal pages: Impressum (§5 ECG), Privacy Policy (GDPR), Terms of Service", + "Footer links to all legal pages" ], "notDone": [ "Register Stripe webhook URL in Stripe Dashboard", - "Staging TLS (blocked on DNS)", - "Uptime monitoring (external)" + "CI/CD pipeline functional (workflows in repo, needs KUBECONFIG + REGISTRY_TOKEN secrets)", + "Staging TLS (blocked on DNS for staging.snapapi.eu)", + "External uptime monitoring" ], "stripeProducts": { "starter": { @@ -65,6 +68,6 @@ "priceId": "price_1T2XHpRtlDv9c8GoThHfd8kS" } }, - "lastSession": "2026-02-19T13:35:00Z", + "lastSession": "2026-02-19T17:30:00Z", "codeLocation": "Forgejo repo openclawd/SnapAPI. Clone: git clone forgejo-snapapi:openclawd/SnapAPI.git" -} \ No newline at end of file +} diff --git a/terms.html b/terms.html new file mode 100644 index 0000000..717b7f9 --- /dev/null +++ b/terms.html @@ -0,0 +1,395 @@ + + + + + +Terms of Service — SnapAPI | Screenshot API for Developers + + + + + + + + + + + + + + + \ No newline at end of file