Fix git access: clone from openclaw-vm via deploy keys, not k3s-mgr

This commit is contained in:
Hoid 2026-02-19 14:04:35 +00:00
parent b01326a3a9
commit a1d9d89323
7 changed files with 89 additions and 16 deletions

View file

@ -216,3 +216,54 @@
→ YES. Playground works, all links work, all sections function. Paid plans correctly show "Coming Soon".
**Honest Assessment:** Massive simplification. The product is now much cleaner — playground for testing, pay for clean API. No more free tier abuse vectors. Ready for Stripe integration as next step.
## Session 6 — 2026-02-19 (Stripe Billing + Status Page)
**Goal:** Integrate Stripe billing to enable paid subscriptions. Add status page.
### What Was Done
1. **Stripe billing integration (v0.4.0→v0.4.1):**
- Added `stripe` npm dependency
- Created `src/routes/billing.ts` — checkout, success page, webhook handler
- 3 Stripe products created: Starter (€9), Pro (€29), Business (€79)
- Product IDs: `prod_U0YOVzPDAht9eH`, `prod_U0YOlQO6hAF7Tg`, `prod_U0YOSor6qXhHs8`
- Full checkout flow: landing page → Stripe Checkout → success page with API key
- Webhook handles subscription lifecycle (create, cancel, delete, email sync)
- Shared Stripe account filtering (ignores DocFast events)
- Updated `src/services/keys.ts` with `createPaidKey()`, `downgradeByCustomer()`, `updateEmailByCustomer()`
- Updated landing page: "Coming Soon" buttons → working "Get Started" checkout buttons
- Raw body middleware for webhook signature verification
2. **Status page:**
- Created `public/status.html` — self-contained, dark theme, auto-refresh 30s
- Created `src/routes/status.ts` — serves status page
- Shows API status, response time, browser pool, uptime, last checked
3. **Deployed v0.4.1** to staging (verified) then production (2 replicas)
### QA Verified
- ✅ Health check passing
- ✅ Checkout endpoint returns Stripe URLs for all 3 plans
- ✅ Browser test: "Get Started" button → Stripe Checkout page loads correctly
- ✅ Status page loads at /status
- ✅ Stripe products auto-discovered on startup (logs confirmed)
### Investor Test — Session 6
1. **Would a stranger trust this product with their money right now?**
→ YES. Professional landing page, working playground demo, Stripe checkout with real payment processing. EU-hosted, GDPR section prominent.
2. **If a pod crashed, would we lose customer data?**
→ NO. PostgreSQL external to pods. Usage flushes every 5s.
3. **Could someone abuse the free tier right now?**
→ NO FREE TIER. Playground is rate limited (5/hr per IP) and watermarked.
4. **Can a paying customer recover a lost API key?**
→ Not yet — needs Stripe customer portal integration. Customer can contact support.
5. **Does every feature on the website actually work?**
→ YES. Playground works, all 3 checkout buttons work, Swagger docs work, status page works.
### Action Required from Investor
1. Register Stripe webhook URL in Stripe Dashboard: `https://snapapi.eu/v1/billing/webhook`
Events: `checkout.session.completed`, `customer.subscription.updated`, `customer.subscription.deleted`, `customer.updated`

View file

@ -1,24 +1,24 @@
{
"phase": "production-live",
"version": "0.3.0",
"version": "0.4.1",
"staging": {
"status": "running",
"namespace": "snapapi-staging",
"replicas": 1,
"image": "docker.io/library/snapapi:v0.3.0",
"image": "docker.io/library/snapapi:v0.4.1",
"healthCheck": "passing"
},
"production": {
"status": "running",
"namespace": "snapapi",
"replicas": 2,
"image": "docker.io/library/snapapi:v0.3.0",
"image": "docker.io/library/snapapi:v0.4.1",
"healthCheck": "passing",
"domain": "https://snapapi.eu",
"tls": "Let's Encrypt (valid until 2026-05-20)"
},
"blockers": [
"Stripe billing not yet integrated — paid plans show 'Coming Soon'",
"Stripe webhook URL needs to be registered in Stripe Dashboard",
"CI/CD pipeline blocked on git push access"
],
"completed": [
@ -40,15 +40,22 @@
"Mobile-responsive design",
"Per-route CSP",
"Removed free signup flow (v0.3.0)",
"Stripe billing integration — 3 paid plans (Starter €9, Pro €29, Business €79)",
"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)"
],
"notDone": [
"Stripe billing integration",
"Paid tier management",
"Register Stripe webhook URL in Stripe Dashboard",
"CI/CD pipeline (blocked on git push access)",
"Staging TLS (blocked on DNS)",
"Status page",
"Uptime monitoring"
"Uptime monitoring (external)"
],
"lastSession": "2026-02-19T12:30:00Z"
"stripeProducts": {
"starter": { "productId": "prod_U0YOVzPDAht9eH", "priceId": "price_1T2XHnRtlDv9c8GoNehDYEhS" },
"pro": { "productId": "prod_U0YOlQO6hAF7Tg", "priceId": "price_1T2XHoRtlDv9c8GoCsinPNM4" },
"business": { "productId": "prod_U0YOSor6qXhHs8", "priceId": "price_1T2XHpRtlDv9c8GoThHfd8kS" }
},
"lastSession": "2026-02-19T13:35:00Z"
}