What it is
pointer is a Next.js 16 starter for marketing sites where the content lives in the repository rather than a CMS. Each page is one MDX file in content/pages/, each post one file in app/blog/posts/, and both compose the same library of React components. There is no database and no runtime fetching: everything is statically generated at build time. You can see it running at pointer-roboto.vercel.app.
The component library is the part that makes it usable for a full marketing site rather than a blog with extra steps. Hero, Feature, CTA, and stats sections cover page layout; pricing, testimonial, changelog, and feature cards cover the blocks that usually get rebuilt from scratch on every project; FAQ, logo cloud, callout, and button handle the rest. A pricing page is a few nested components in an MDX file, not a bespoke route.
Because content is code, everything git already does applies to it: full history, review on a pull request, a preview deployment per branch, and a coding agent that can edit pages without a CMS API in the way.
It runs on React 19, Tailwind CSS v4, and Zod v4, and it's the starting point for our Next.js development work.
What you get
- File-based MDX content for pages and blog posts, with no CMS or database to run.
- A composable component library covering heroes, features, pricing, testimonials, changelogs, FAQs, and logo clouds.
- A blog with categories, filtering, and post-to-post navigation.
- Dynamic Open Graph images generated per page with custom fonts.
- SEO built in: sitemap,
robots.txt, RSS feed, and JSON-LD structured data. - System-aware dark mode with a light and dark toggle.
- Static generation throughout, so builds are fast and pages ship as static output.
How to use it
Clone the repository and install dependencies.
Component props and examples are documented in docs/MDX_COMPONENTS.md in the repo.
How we use it
pointer is where we start when a client needs a marketing site their developers will maintain in git, rather than an editorial workflow that calls for Sanity.