KPL Ops command center

Copy commands, open localhost checkout, Stripe test dashboards, logs, and API billing — one page for repeat workflows.

Local site & checkout

Terminal A. Use http://127.0.0.1:8788, not file://.

cd C:\Python10Proj\kpl-analytics venv\Scripts\python website\serve_checkout.py

Stripe test & webhooks

Local: Terminal B stripe listen → paste whsec_… into .env as STRIPE_WEBHOOK_SECRET, restart Terminal A. Prod: Dashboard endpoint on HTTPS URL → different whsec_… on the droplet only.

cd C:\Python10Proj\kpl-analytics .\scripts\stripe.ps1 listen --forward-to http://127.0.0.1:8788/api/stripe/webhook --events payment_intent.succeeded,invoice.paid
.\scripts\stripe.ps1 login

Test card 4242 4242 4242 4242 · any future expiry · any CVC.

Environment · .env

Repo root .env = local test. Server gets its own copy after deploy. Webhook secret is per endpoint (listen vs Dashboard URL).

# Local (already in your .env) STRIPE_CHECKOUT_BASE_URL=http://127.0.0.1:8788 STRIPE_WEBHOOK_SECRET=whsec_… # stripe listen KPL_FULFILLMENT_EMAIL=0 KPL_FULFILLMENT_TEST_TO=pauldyon@gmail.com KPL_COOKIE_SECURE=0 KPL_TRUST_PROXY=0
# Droplet /opt/kpl-analytics/.env (after Caddy + systemd) STRIPE_CHECKOUT_BASE_URL=https://www.kplanalytics.com STRIPE_WEBHOOK_SECRET=whsec_… # Stripe Dashboard → Add endpoint → signing secret # pk_test_… / sk_test_… first; pk_live_… / sk_live_… when ready KPL_COOKIE_SECURE=1 KPL_TRUST_PROXY=1 KPL_WEBSITE_HOST=127.0.0.1 KPL_WEBSITE_PORT=8788 KPL_FULFILLMENT_EMAIL=0 # KPL_FULFILLMENT_TEST_TO=pauldyon@gmail.com # only with sk_test_ on server # + SERPER, PLACES, PAGESPEED, CLAUDE/XAI, gmail_token under secrets/

Template: .env.example · checklist: docs/PHASE4_PREP_SHEET.md

Logs & fulfillment

After checkout: STARTED → PASS in fulfillment ledger.

# tail fulfillment (PowerShell) Get-Content -Path logs\fulfillment_ledger.jsonl -Tail 8

Audit pipeline (Main.py)

Separate from Stripe. Spend shows in today's transactions_*.jsonl → run_cost.

cd C:\Python10Proj\kpl-analytics venv\Scripts\python Main.py
venv\Scripts\python Main.py --fresh
cd C:\Python10Proj\kpl-analytics venv\Scripts\python scripts\regen_pdf_from_data.py runs\YYYYMMDD_slug\slug_*_data.json

Phase 4 · Namecheap DNS + DigitalOcean

Domain at Namecheap · Basic 2 GB Ubuntu droplet · HTTPS after Caddy + app deploy. Edit Droplet IP / Host in the header.

Primary site: www.kplanalytics.com · A www → droplet IP · email forward hello@kplanalytics.com → Gmail. Later: redirect www.kpl-analytics.com → primary on Caddy.

Status: DNS → droplet ✓ · app + Caddy HTTPS ⬜ · Stripe prod webhook ⬜

# once per PC (creates .ssh if missing) New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.ssh" ssh-keygen -t ed25519 -C "paul-digitalocean" -f "$env:USERPROFILE\.ssh\id_ed25519_do" -N '""' notepad "$env:USERPROFILE\.ssh\id_ed25519_do.pub"
ssh -i "$env:USERPROFILE\.ssh\id_ed25519_do" root@167.172.241.47
nslookup www.kplanalytics.com
# on droplet (SSH) — first boot apt update && apt upgrade -y apt install -y git python3 python3-venv python3-pip ufw ufw allow OpenSSH ufw allow 80/tcp ufw allow 443/tcp ufw --force enable

Stripe webhook (Dashboard): Add endpoint → URL below → events payment_intent.succeeded, invoice.paid → Reveal signing secret → STRIPE_WEBHOOK_SECRET on server · STRIPE_FULFILLMENT_PRODUCTION.md.

https://www.kplanalytics.com/api/stripe/webhook

API billing & provider consoles

Google Places, PageSpeed, Serper, Anthropic, Stripe dashboards.

KPL commands & tests

Fulfillment + checkout security tests; set KPL_RATE_LIMIT_DISABLED=1 for burst API tests.

cd C:\Python10Proj\kpl-analytics venv\Scripts\python -m unittest tests.test_fulfillment_job_config -v
git status -sb

Docs & references

Open from repo (file explorer) or via this server when Terminal A is running.

Copied