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

blog-build.txt
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.