My Build In Public Site - JamieWatters.work - Progress
Build Update - November 19, 2025
🐛 Fixed: Blog Posts Finally Showing Real Content
Shipped a critical fix today that had me scratching my head. Every blog post was showing placeholder text instead of the actual markdown content I wrote in the admin panel.
The Problem 🔍
Posts were stored correctly in the database with full markdown content, but the blog page (/journey/[slug]/page.tsx) was hardcoded to display a placeholder message. Classic case of "TODO" comments that never got done.
The Fix ✅
One line change: const contentToRender = post.content || placeholderContent;
That's it. Now the page checks if real content exists in the database and uses it. Falls back to placeholder only for legacy posts with no content.
Time to Fix: ~15 minutes Time to Deploy: 3 minutes (auto-deploy via GitHub push) Impact: Every blog post now displays properly on production
🏗️ Designed: Daily Progress System
The bigger win today was designing a solution to a workflow problem that's been bugging me.
The Problem 🤔
The daily update generator was pulling every completed task from project-plan.md - not just today's work. This meant "daily" updates showed weeks worth of tasks. Not useful.
Why This Happened:
No date filtering exists in the current system. It just extracts all [x] checkboxes and calls it a day. There's literally a TODO comment in the code: "Future enhancement: Filter based on Git commit dates."
The Solution We Designed 💡
Instead of complex Git history parsing, we're implementing a simple daily progress file system:
/progress/
2025-11-19.md
2025-11-20.md
...
Each file contains:
- ✅ Completed milestones (human-curated, not raw checkboxes)
- 🐛 Issues encountered with root cause analysis
- 📊 Impact summary
- 🎯 Next steps
The Innovation:
Building a new /dailyreport slash command that:
- Reads today's entries from
progress.md - Extracts completed work + issues resolved
- Groups into meaningful milestones
- Creates/updates the daily progress file
- Runs multiple times per day (idempotent)
Why This Is Better:
- Human-curated milestones vs raw task lists
- Includes learnings from issues (builds credibility)
- Easy to review before publishing
- Works with existing progress tracking
- Simple implementation (no Git parsing needed)
📝 Created: AGENT-11 Command Specification
Wrote a comprehensive prompt for building the /dailyreport command. It specifies:
- File structure and naming conventions
- Markdown template with sections
- Date parsing logic from
progress.md - Idempotent update behavior
- Content guidelines (what to include/exclude)
- Integration with daily update generator
Template Preview:
# Progress Report - November 19, 2025
## Project: JamieWatters Portfolio
### ✅ Completed
- Fixed blog post content display bug
- Designed daily progress file system
- Created /dailyreport command specification
### 🐛 Issues & Learnings
#### Issue: Blog posts showing placeholder text
- **Root Cause**: Hardcoded placeholder in page component
- **Fix**: Use post.content from database with fallback
- **Prevention**: Remove TODO comments after implementation
- **Time Impact**: 15 minutes
---
## Impact Summary
Shipped critical blog fix and designed scalable daily update system that will make build-in-public posting 10x easier.
## Next Steps
- Implement /dailyreport command in AGENT-11
- Update daily update generator to read from /progress/ files
- Test end-to-end workflow
🎯 What's Next
Immediate:
- Build the
/dailyreportcommand - Update daily update generator to consume progress files
- Test with tomorrow's actual work
Why This Matters: Building in public only works if the process is sustainable. Manually crafting daily updates was taking 30+ minutes. This system will cut that to 5 minutes while improving quality.
The best tools are the ones you build to scratch your own itch.
📊 By the Numbers
- Files Changed: 1
- Lines Modified: 6
- Deployment Time: 3 minutes
- Issues Fixed: 1
- Systems Designed: 1
- Prompt Engineering: 1 comprehensive spec
- Time Saved (Future): ~25 minutes per daily update
💭 Reflection
Today was a reminder that sometimes the best solution isn't the most technically complex one. I could have spent hours parsing Git history and implementing date filtering algorithms. Instead, we designed a simple file-based system that's easier to understand, maintain, and use.
The lesson: Don't over-engineer. Solve the real problem, not the imaginary one.
Also, there's something satisfying about fixing a bug in 15 minutes that's been annoying you for weeks. Sometimes you just need to stop and actually look at the code.
Stack: Next.js, TypeScript, Prisma, PostgreSQL Tools: Claude Code, AGENT-11 framework Vibes: Productive 🚀