# pointer

> Our open-source Next.js and MDX starter for marketing sites. Pages are MDX files composed from React components, managed as code in git.

**Category:** starter | **License:** MIT | **Updated:** 2026-10-07

## Install

```bash
git clone https://github.com/robotostudio/pointer
```

## Links

- Preview: https://pointer-roboto.vercel.app
- Source: https://github.com/robotostudio/pointer
- Related service: /services/nextjs

---

## 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](https://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](/services/nextjs) 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.

```bash
git clone https://github.com/robotostudio/pointer
cd pointer
pnpm install
pnpm dev
```

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](/services/sanity).

## Frequently asked questions

### When would I pick pointer over a CMS?

When the people maintaining the site are developers working in git rather than editors who need an editorial workflow. If the project calls for the latter, we would start from Sanity instead.

### Where does the content actually live?

In the repository. Each page is one MDX file in content/pages/, each post one file in app/blog/posts/, and both compose the same React component library. No database, no runtime fetching, everything statically generated at build time.

### Is it only good for a blog?

No, and the component library is what makes the difference. Hero, Feature, CTA and stats sections cover page layout; pricing, testimonial, changelog and feature cards cover the blocks usually rebuilt from scratch each project. A pricing page is a few nested components in an MDX file, not a bespoke route.

### What does keeping content in git actually buy me?

Everything git already does applies to the content: 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.

### How do I get started and where are the components documented?

Clone the repo, 'pnpm install', 'pnpm dev'. Component props and examples are in docs/MDX_COMPONENTS.md in the repo. It runs on Next.js 16, React 19, Tailwind CSS v4 and Zod v4.