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/