📄 PRODUCTION-DEPLOY.md 3,058 bytes Apr 21, 2026 📋 Raw

Blog v1.0 — Production Deployment Checklist

Owner: Daedalus (frontend) + Socrates (backend)
Approver: Matt
Date: 2026-04-21
Status: Ready for deployment


Pre-Deployment

1. Bundle the Frontend

# On workspace-daedalus:
cd ~/.openclaw/workspace-daedalus
tar -czf blog-frontend-$(date +%Y%m%d).tar.gz blog/templates blog/static blog/admin

2. Copy to titanium-butler

scp blog-frontend-20260421.tar.gz hoffmann_admin@titanium-butler:~/

3. Deploy Frontend Files

# SSH to titanium-butler:
ssh hoffmann_admin@titanium-butler
cd ~
bash workspace-daedalus/blog/deploy-frontend.sh

4. Verify File Permissions

# On titanium-butler after deploy:
ls -la /home/hoffmann_admin/hoffdesk/blog/templates/
ls -la /home/hoffmann_admin/hoffdesk/blog/static/

Backend Requirements (Socrates)

5. API Routes Wired ✅

  • [x] /admin/posts — POST list, GET list
  • [x] /admin/posts/new — GET form
  • [x] /admin/posts/{id} — GET edit form
  • [x] /admin/posts/{id}/delete — POST delete
  • [x] /admin/posts/{id}/publish — POST publish
  • [x] /admin/content/health — GET pipeline status
  • [x] /admin/content/generate — POST generate content
  • [x] /admin/content/jobs/{job_id} — GET job status
  • [x] /admin/content/jobs/{job_id}/cancel — POST cancel

6. Static files

  • [x] fuse.min.js — Fuzzy search library (CDN or local copy needed)

7. Radicale/CalDAV Status (Cal.com integration)

  • [ ] Socrates to verify calendar sync is working
  • [ ] Blog can read events for "upcoming" widget if needed

Post-Deployment Verification

8. Smoke Tests

# Public site
curl https://blog.hoffdesk.com/

# Admin panel
curl https://blog.hoffdesk.com/admin/

# RSS feed
curl https://blog.hoffdesk.com/blog/feed.xml

# API posts
curl https://blog.hoffdesk.com/admin/api/posts

9. Design Verification

  • [ ] Index page renders correctly on mobile (375px)
  • [ ] Index page renders correctly on desktop (1280px)
  • [ ] Category bar is collapsible on mobile
  • [ ] Search overlay opens on click
  • [ ] Hero card displays with image
  • [ ] Post cards display with images

10. Content Generation Test

  • [ ] Navigate to /admin/posts/new
  • [ ] Enter topic: "Why I switched from Pi-hole to AdGuard"
  • [ ] Click Magic Wand
  • [ ] Verify 5 stages animate
  • [ ] Verify content populates editor
  • [ ] Save draft

Rollback Plan

If something breaks:

# On titanium-butler:
ls /home/hoffmann_admin/hoffdesk/.backup-*/
# Find latest backup directory
# Restore: cp -r .backup-YYYYMMDD-HHMMSS/* /home/hoffmann_admin/hoffdesk/blog/

DNS / Cloudflare

  • [x] blog.hoffdesk.com → tunnel to titanium-butler:5000 ✅ (existing)
  • [x] hook.hoffdesk.com → webhook tunnel ✅ (existing)

Notes

  • Dev server files are in workspace-daedalus/blog/ and NOT the same as production
  • Production files live at /home/hoffmann_admin/hoffdesk/blog/
  • Admin templates at /home/hoffmann_admin/hoffdesk/blog/admin/templates/