This site uses no database. Posts, projects and services are generated from Markdown files. Why I chose this path and how it works.
semih.fun isn’t connected to a database. Every post, every project and every service is a Markdown file in the repository. Adding a new post is as easy as creating a file and pushing it.
Why no database?
For a portfolio and blog, a database is often an unnecessary moving part. Static pages:
- need no server and open fast anywhere through a CDN,
- leave no attack surface,
- keep a record of every change through Git history.
A post’s journey
The block at the top of the file (frontmatter) is the page’s identity: title, description, date, tags and a shared key for finding its counterpart in the other language.
---
title: CRM or ERP?
description: Which one first?
lang: en
key: crm-vs-erp
pubDate: 2026-09-09
tags: [CRM, ERP]
---
Astro reads these files at build time, validates them against a schema and generates a page for each. Turkish and English files carrying the same key are linked to each other with hreflang.
For search and AI engines
Every page ships with its own title, description, canonical URL and structured data. The sitemap, RSS and an llms.txt file are generated from the same content. So the moment a post is published, it is readable by both search engines and AI answer engines.