Next.js builds the pages, next-mdx-remote renders the posts, and Shiki highlights code blocks. Adding a post means creating a file with a title, date and the text.
Working on the site
The project uses Next.js 15, with Turbopack for the development server. I change a post or component and check it in the browser. For a site this size, keeping it easy to add content matters most to me.
Share images are generated by the routes under /og, so I don't have to make a separate image for every post.
I went with a monospace font and starred section headings. The home page has work, writing and projects. I can add more later; for now, I want it to be easy to find something and read it.
How a file becomes a post
Turkish posts live under posts/tr, English posts under posts/en. Both versions use the same filename, for example navly-rag.mdx. That filename also becomes the final part of the URL.
Each file starts with the title, date and other metadata:
---
title: "A post title"
description: "A short explanation of what the post covers."
date: "2026-11-04"
---
The first paragraph of the post.That section is called frontmatter. The blog list reads the title and date from it; the post page renders the text underneath. Changing a title in the file updates both places.
MDX lets me use React components inside Markdown. This project defines rendering components for code blocks and tables. I can use those shared pieces instead of putting the presentation into each post separately.
The limit is that content lives in the filesystem. I don't publish through a browser form; editing a post means changing a source file. That's enough for my personal site. For a publication with multiple editors, I'd think about content management separately.