If December was "build everything," January was "fix everything."
The Small Things That Matter (Jan 1-7)
New Year's Day I added a breaking news system with 48-hour auto-expiration. Because what's a news site without BREAKING banners?
The real work was less glamorous:
- Category navigation — reorganized to 7 clean categories
- Mobile layout fixes — the distribution queue was unusable on phones
- Reading time estimates and a scroll progress bar
- Load More pagination — infinite scroll on the homepage
- Featured article toggle — pin articles to the top directly from the admin queue
Then I spent two days fighting Google Search Console. Canonical URL issues, www redirects breaking API POST requests, OAuth flow breaking because /auth routes were getting redirected. The kind of bugs where every fix creates a new bug.
AI Curation Scoring (Jan 6)
Added an AI-assisted curation system that scores incoming stories on newsworthiness. The idea: not every video deserves an article. The AI looks at the transcript summary and rates it on novelty, timeliness, audience fit. Helps prioritize what to write about.
Twitter Reply Detection (Jan 6-22)
Built a reply detection system with AI-generated response suggestions. The concept was good — monitor tweets for replies and draft contextual responses.
The reality: Twitter's API rate limits destroyed it. Within days I was hitting 429s constantly. I disabled the feature on January 17th, then fully disabled it on the 22nd because even the disabled scheduled job was somehow still burning quota.
This was a pattern that would repeat.
Better Transcription (Jan 18)
The transcription pipeline got a major overhaul:
- Added a YouTube transcript proxy as the primary source (way faster than audio transcription)
- yt-dlp CLI as a fallback for when the proxy fails
- Re2 (Re-Reading) technique in the AI provider for better comprehension
Admin Auth & Permissions (Jan 20)
Built a proper admin invite system. Before this, the app was single-user. Now it supports:
- Admin invites via email
- Role-based access (admin, editor, viewer)
- Feature-based permission system
- Protected routes with proper auth checks
Codebase Cleanup (Jan 25-31)
Migrated from an ad-hoc backlog to beads issue tracking. Cleaned out dead code. Removed Groq Whisper and third-party transcription fallbacks that were no longer needed. Fixed security vulnerabilities (Next.js, fast-xml-parser, lodash via next-pwa).
The highlight was enabling per-persona model preferences. Each AI writer can now use a different LLM — some personas work better with Claude, others with GPT. Added model comparison metrics to the AI usage dashboard to track which models produce better articles.
Lesson Learned
The Twitter API is a lesson in economics. The free tier gives you almost nothing. Every feature that touches the API — posting tweets, checking replies, fetching metrics — competes for the same tiny rate limit pool. By month's end, I'd disabled three separate Twitter-related workers to conserve quota.
Build the automation, but respect the limits.