Blog v1+ — Backlog
Status: Backlog (post v1.0)
Owner: Daedalus (frontend) + Socrates (backend)
Approver: Matt
Article Page Rebuild ⭐ (Frontend)
Medium-style article template matching the new index aesthetic.
- [ ] Rebuild
blog_article.html.j2to match new CSS tokens - [ ] Reading progress bar (red line at top, like Medium)
- [ ] Estimated read time in article header
- [ ] Article-specific typography (larger body text, comfortable line length)
- [ ] Prev/next navigation at bottom
- [ ] Social share links (Twitter/X, LinkedIn) — no tracking pixels
Effort: Medium | Priority: High
Search Without Fuse.js (Frontend)
Current search requires Fuse.js CDN. Alternatives:
- [ ] Option A: Pre-build JSON search index at build time, use simple substring match
- [ ] Option B: Use database-backed search via API
- [ ] Option C: Keep Fuse.js, add to deployment bundle as local copy
Effort: Low | Priority: Medium
Author Byline & Avatar (Frontend)
- [ ] Add author section to article headers
- [ ] Avatar image support
- [ ] "Written by" attribution
Effort: Low | Priority: Low
Related Posts (Frontend)
- [ ] End of article: "More from HoffDesk" section
- [ ] Same-category posts
- [ ] Algorithm: last 5 posts in same category, exclude current
Effort: Medium | Priority: Low
Sitemap & SEO Enhancements
- [x]
sitemap.xml.j2exists (Socrates, Phase 3) - [ ] Add canonical URLs to all pages
- [ ] Open Graph images for sharing (og:image)
- [ ] Twitter card meta tags
Effort: Low | Priority: Medium
Draft/Scheduled Publishing (Backend)
- [ ] Draft posts visible only to admin
- [ ] Schedule publish date/time
- [ ] Email/push notification on publish (future)
Effort: Medium | Priority: Medium
Static Generation (Builder Script)
- [x]
builder.pyexists (Socrates, Phase 3) - [ ] Verify full static export workflow
- [ ] Add
--draftsflag to include draft posts in export - [ ] Add
--futureflag to include scheduled posts
Effort: Low | Priority: Medium
Analytics (Privacy-First)
- [ ] Optional: self-hosted Plausible Analytics
- [ ] Or: simple hit counter per post (SQLite)
- [ ] No Google Analytics, no third-party tracking
Effort: Medium | Priority: Low
Comments (Future)
- [ ] Self-hosted comment system (e.g., Remark42,Isso)
- [ ] Or: Telegram comment integration
- [ ] Anti-spam measures
Effort: High | Priority: Low
Newsletter (Future)
- [ ] RSS-to-email via blog.bot or self-hosted
- [ ] Substack migration path
- [ ] Email verification flow
Effort: High | Priority: Low
Nice-to-Have Polish
- [ ] Custom 404 page
- [ ] Custom 500 page with error details (dev) / generic message (prod)
- [ ] Cookie consent banner (GDPR) — if EU traffic expected
- [ ] AMP pages for Google indexing
- [ ] Dark mode toggle (user preference)
Effort: Low | Priority: Low
Tech Debt
- [ ] Move all hardcoded URLs to config (base_url)
- [ ] Document template inheritance hierarchy
- [ ] Add CSS custom properties for all colors (already done ✅)
- [ ] Add responsive image srcsets (sizes: 400w, 800w, 1200w)
Effort: Medium | Priority: Medium