Package architecture
The blog and changelog system ships as the @nextsaasai/blog package with a dual-export structure. Server-side operations — filesystem reading, MDX compilation, frontmatter parsing — export from @nextsaasai/blog. Client-side React components — timeline layouts, search, table of contents — export from @nextsaasai/blog/client. This separation keeps server-only dependencies (Node.js fs, MDX compilers) out of client bundles entirely.
Content files use MDX with YAML frontmatter validated by Zod schemas at build time. Invalid or missing fields produce clear error messages instead of silent rendering failures. Syntax highlighting runs through Shiki with dual-theme support, applying separate themes for light and dark mode without runtime theme switching overhead.
Blog features
Blog posts are organized by filesystem directories that map directly to navigation categories. Each category gets its own filtered view and RSS 2.0 feed. Detail pages include a social sharing dropdown with support for X/Twitter, LinkedIn, Facebook, WhatsApp, Email, and clipboard copying — plus native share API integration on supported devices.
Changelog features
The changelog uses a vertical timeline layout. Entries render their full content inline on the list page — no click-through required to read an update. Each entry carries a version number and date. A quick variant exists for minor updates that need only a paragraph or two, while the full variant supports headings, code blocks, and collapsible <Details> sections for longer release notes. Contributor avatars appear on each entry, linking updates to the team members who shipped them.