Home
VA.
Back to Documentation

Publishing a piece of content

Step by step for creating a post, a project, a doc or a newsletter issue in this repository.

2 min read

Every piece of content on this site is an .mdx file versioned in Git. There's no admin panel: publishing means creating a file and pushing.

1. Pick the collection and the locale

Files live under content/{locale}/{collection}/:

CollectionShows up atPurpose
projects/en/projectsPortfolio
blog/en/blogArticles and notes
docs/en/docsTechnical reference
newsletter/en/newsletterIssues

Available locales are pt and en.

2. Create the file

The filename is the URL slug. content/en/blog/my-post.mdx becomes /en/blog/my-post.

Use the same filename in both locales. That's what lets the language switcher take a reader from the Portuguese post straight to the English version. If the translation doesn't exist yet, switching lands on the section index instead of erroring.

3. Fill in the frontmatter

The YAML block at the top of the file. title and date are required:

---
title: "Post title"
description: "One or two sentences. Shows in the listing and in search results."
date: "2026-07-26"
tags: ["Next.js", "TypeScript"]
---

The full field list, including the collection-specific ones, is in the frontmatter reference.

4. Write

Regular Markdown, with a few extras:

  • Tables, task lists and strikethrough work (GitHub Flavored Markdown).
  • Code blocks get automatic syntax highlighting in both themes — just name the language after the backticks.
  • ## and ### headings are picked up automatically by the "On this page" sidebar.

Start the body at ##. There's no #: the page title already comes from the frontmatter.

5. Keep it as a draft (optional)

To write without publishing, add:

published: false

The file disappears from listings, RSS and the sitemap, but stays reachable by direct URL during development.

6. Publish

git add content/
git commit -m "post: post title"
git push

Vercel builds and deploys in about a minute. Since pages are generated statically at build time, new content only appears after a deploy — editing a file on GitHub triggers one too.

Running it locally first

npm run dev

The server reloads on every save. Before pushing, it's worth running:

npm run build

The build fails if any file is missing title or date — the safety net that keeps broken frontmatter out of production.

Tags

  • MDX
  • workflow