neblog

Next.js · TypeScript · Tailwind · MDXSource

Replace this file with a real project. It exists so the projects list renders something on a fresh checkout, and so the frontmatter above doubles as the reference for what each key does.

Adding a project

Drop an .mdx file into app/projects/items. The filename becomes the URL, so sqlite-viewer.mdx is served at /projects/sqlite-viewer. Everything above the second --- is frontmatter.

Required on every project:

  • title shows in the list, as the page heading, and on the generated OG image
  • summary is one line, used in the list and as the meta description
  • publishedAt is YYYY-MM-DD and sorts the list newest first

Optional:

  • updatedAt feeds the sitemap when a project changes
  • status set to archived shows a badge; anything else reads as active
  • stack is comma separated and renders as a single line
  • repo adds a Source link
  • url adds a Live link
  • image overrides the generated OG image

The frontmatter parser is line based and splits on the first : , so keep each value on one line and skip YAML lists. That is why stack is a plain comma separated string rather than an array.

Writing the body

Below the frontmatter it is ordinary MDX, using the same components the blog posts use: headings get anchor links, code blocks get syntax highlighting, and relative links route through next/link.

One limit worth knowing: there is no remark-gfm, so markdown pipe tables render as literal text. Use the Table component instead.

KeyExample
statusarchived
stackGo, Postgres