The web began as a collection of static files. HTML documents, linked together, serving information instantly. Then came the era of the CMS—WordPress, Drupal, and later, complex headless systems wrapping databases in API layers. We gained flexibility, but we lost simplicity.
Today, we are witnessing a renaissance. Tools like Next.js, Astro, and Hugo have brought static site generation (SSG) back to the forefront, but with a modern twist. At HapticFeed, we recently migrated to a Hybrid Content Engine that combines the best of both worlds: a robust database and the raw power of the file system.
The Power of "Git as a Source of Truth"
Databases are essential for user data, comments, and dynamic analytics. But for editorial content? They often introduce unnecessary abstraction.
By treating articles as MDX files (Markdown + JSX) in our version control system, we unlock a workflow that feels native to engineers:
- Branching & Review: Content changes go through Pull Requests. Typos are bugs; style updates are refactors.
- Zero Latency: A static file is pre-rendered at build time. There is no database query to slow down the Time to First Byte (TTFB).
- Portability: Our content lives in the repo. If Supabase goes down, our core articles are still live.
Why Hybrid Matters
We didn't ditch the database entirely. Our new architecture parses local MDX files and merges them with our Supabase posts table at build time.
// A simplified look at our merge logic
const allPosts = [...dbPosts, ...localPosts].sort((a, b) =>
new Date(b.date) - new Date(a.date)
);
This gives us:
- Speed for editorial content (Git).
- Flexibility for quick updates or guest posts via the Admin Panel (Database).
- Resilience through redundancy.
Conclusion
The "Renaissance" isn't about rejecting progress; it's about reclaiming the resilience of the early web while applying modern DX (Developer Experience). We are betting on a future where the line between code and content continues to blur—and where a simple file on a disk remains the most reliable primitive we have.


