A blog you actually own
Markdown files, no database, no platform that can disappear.
Build time ~3 hrs
A blog is the ideal second project: simple enough to finish, real enough to be useful, and it teaches you templating, routing and deployment in one go. Files on disk means no database and nothing to maintain.
1. Decide the shape
Posts as Markdown files, one per post, with front matter at the top for title, date and description. Filename becomes the URL. That's the whole content model, and it will still make sense in ten years.
2. Build the two pages
Build a static blog. Stack: <plain PHP / a static site generator / plain HTML with a build script — recommend one and say why>. Content: Markdown files in /posts, each with front matter for title, date, description and draft. Two pages: - The index: every non-draft post, newest first, showing title, date and description. - The post page: the rendered post, with the date and a link back. Plus: an RSS feed, a sitemap, and correct meta tags — title, description, canonical, Open Graph — on every page. No JavaScript unless something genuinely needs it.
3. Make it readable
This is the whole product. Body text around 18px, line height about 1.6, line length capped near 70 characters, real contrast. Headings that stand out. Code blocks that don't overflow on a phone.
That's most of typography for a blog. Everything beyond it is decoration.
4. Ship the feed
RSS is not dead and costs you twenty lines. It's how people who like your writing get the next one without you needing an email list, a newsletter platform or their address.
5. Then write
The hardest part is not the build — it's that a finished blog with no posts is a very comfortable place to stop. Publish something imperfect in the first week, before you polish the CSS.
Draft support in the front matter is the feature that makes you write. Being able to leave a half-finished post in the folder without it going live is worth more than any theme.