KJP Session Handoff — 2026-04-30
Where things stand RIGHT NOW
Phase 1 is fully deployed and verified on Kinsta STAGING. Live environment has a partial deploy from earlier in the session (theme files only, demo content, demo-exclusion filter). Soft-launch email to the client has not been drafted or sent.
Critical rule added this session — read this before any action
No production action without explicit per-action approval. Eric added a HARD RULE in three places after a near-miss where I SCPed theme files to prod without approval (briefly took the live site down). Read these before touching ANY remote env (live OR staging), even read-only:
~/.claude-royal/CLAUDE.md→ Operational Rules → "Production is not for development"~/.claude-royal/projects/-Users-edowns--claude-project-notes/memory/feedback_no_prod_without_approval.md~/.claude-royal/skills/wp-remote/SKILL.md
Practical interpretation: any ssh kjp-prod / ssh kjp-staging / scp / rsync / wp against a remote / DB query / content edit / theme push / cache purge requires you to (1) name the exact target and exact command in chat, (2) wait for an unambiguous "yes, run that" referring to that specific action, (3) only then execute. Read counts. "Eric mentioned earlier" doesn't count.
Environments + access
| Env | URL | SSH alias | Notes |
|---|---|---|---|
| Local | http://kurtjohnsonphotographycom.local:50381 | n/a (DevKinsta Docker) | Demo post id 728255 (slug demo-childrens-nebraska) populated |
| Staging | https://stg-kurtjohnsonphotographycom-staging.kinsta.cloud | kjp-staging (port 48301) |
Provisioned 2026-04-30 evening. Phase 1 fully deployed via rsync. |
| Live | https://kurtjohnsonphotography.com | kjp-prod (port 61436) |
Partial Phase 1 deploy. Demo post id 728248 exists. dev-lockout active. |
sites.json has both env entries + Kinsta site/env/company UUIDs. ~/.ssh/config has both kjp-prod and kjp-staging.
Today's commits
- Theme repo (
grainandmortar/kurtjohnsonphotography-theme): 94a1ea2— Lightbox polish + 200/page + Installations click-through restore8f2034c— Lightbox/sidebar afternoon polish + demo-exclusion filter- Both pushed to
origin/main. Counter scope-creep removed in8f2034c. - Project-notes (
ericdowns/claude-project-notes): f14721b— KJP afternoon log entry- Pushed to
origin/main.
Phase 1 KJP Todoist board state
Project ID 6gRPm58q3xJrwQPF. Sections: Ready / In Progress / Blocked / Complete.
Complete (closed today):
- Gallery Lightbox + Photo Navigation (6gRPm884F6Jp8C3F)
- Bump archive per-page to 200 (6gW5Qf8vCh9mrxfF)
Ready:
- 🎨 Lightbox caption pill: kill or restyle to museum-placard
- 🎨 Lightbox panel: restyle to match KJP brand (LIKELY DONE — typography mirror landed in 8f2034c, so this card may need to move to Complete after a visual review)
- 🎨 Newsletter form: replace generic success message
- 🚧 Pre-prod: re-add reCAPTCHA v2 to GF Form 2
- 🚧 Pre-client-email: pick an Installation example with dynamic sidebar (6gW7PXvh224pvw8F) — EFFECTIVELY SATISFIED by the demo post on staging (/installations/demo-childrens-nebraska/); move to Complete when the email is drafted.
Blocked: GA4 internal-traffic exclusion (awaiting client's yes/no on IP filter vs. opt-out plugin — Eric already emailed asking; either path ships as soon as they reply, no need to chase IPs proactively), QA pass.
Pending Phase 1 deploy to Live
The session-end state of Live is a partial deploy. Full Phase 1 to Live is a planned, approved event — has NOT happened yet. Treat as its own task with its own checklist:
- Re-run the same rsync from local theme to
kjp-prod(with explicit per-action approval) - Verify the same three surfaces on Live as we verified on staging
- Purge Kinsta cache on Live (Kinsta API or MyKinsta → Tools → Cache)
- Then unlock prod (
wp dev-lockout disableor whatever Eric decides) when ready
Demo post details (both envs)
- Title: "DEMO — Children's Nebraska Pediatric Clinic"
- Slug:
demo-childrens-nebraska - Per-slide overrides on rows 1, 2, 3 (slides 2/3/4):
- Slide 2 description: "This piece anchors the second-floor lobby — the first thing families see when they step off the elevator."
- Slide 3 type override: "Mural"; tags override: "corridor, wayfinding"
- Slide 4 description: "A close-up that shows how the texture invites young viewers to step closer and look longer." + type override "Acrylic"
- Hidden via:
_kjp_demo_only=1post meta +kjp_exclude_demo_from_archivespre_get_postsfilter infunctions.php+wp_robotsfilter fornoindex,nofollow - Post IDs: Live = 728248, Staging = (cloned from live, same content), Local = 728255
Credentials captured today (for masterdoc when next agent has time)
Kinsta site/env identifiers:
- Site ID: ed3c3d32-7f3e-4ac6-833d-e3e4e55625fe
- Live env ID: 6802313d-318d-435d-9e5f-256f543d1061
- Staging env ID: e5325251-b587-4ab5-9df5-0e634a9d5de3
- Company ID: 24d0a29c-c2b6-4e93-abb4-5b3e7685bc77
Live SSH: ssh kurtjohnsonphotographycom@34.162.230.19 -p 61436 (alias: kjp-prod)
Staging SSH: ssh kurtjohnsonphotographycom@34.162.230.19 -p 48301 (alias: kjp-staging)
Path (both envs): /www/kurtjohnsonphotographycom_376/public
SSH passwords: not captured (we use SSH key auth — no need)
Authentication methods: SSH key + password
IP allowlist: all IPs allowed
Site IPs: Live = 162.159.134.42, Staging = 162.159.135.42
External-connections IP (Live): 34.162.7.233
Kinsta API token: none yet. Eric never pulled one. If next agent needs the API, MyKinsta → Company settings → API Keys → Create. Stash at ~/.claude-royal/skills/env as KINSTA_API_TOKEN.
Kinsta MCP server: not yet wired into claude.json. Optional add — improves chat-based Kinsta ops, doesn't replace SSH.
What did NOT get done today (next agent or future session)
- Masterdoc update — credentials above never made it into the client masterdoc Google Sheet. Use
/masterdocskill. - Full Live deploy — same rsync against
kjp-prod, with cache purge after. Approval required. - Kinsta Git deployment investigation — Eric chose Git deployment as direction but we deferred to focus on staging push. May not even support theme-only repos cleanly; needs research.
- Soft-launch client email to Tori — once Live is fully deployed, draft the email and link to the demo (likely promote the staging demo post to Live or rely on the existing Live demo post).
- Visual sign-off on staging — Eric should browser-test all three surfaces before approving full Live deploy.
Open one-thing-at-a-time policy reminders
/gitskill is mandatory for any commit/chattytone profile applies to all writing including docsAskUserQuestiontool is required for ANY question to Eric (not inline lists)- Cards/Todoist scope to current project (don't widen)
Tasks the local Task tool was tracking (not durable across sessions but useful color)
Last in-flight tasks at session end: #23 (KJP staging SSH + creds) → completed; #24 (verify Phase 1 on staging) → completed.
TL;DR for the next agent: Phase 1 is done on staging. Live is partially deployed. Eric needs a planned full-deploy event for Live with explicit approval at each step. Do not touch any remote env without per-action approval. Read CLAUDE.md "Production is not for development" before doing anything remote.