|
1 | 1 | # Hello blog |
2 | 2 |
|
3 | | -When I decided to start writing about technical topics, I needed a simple way to publish blog posts. The requirements were straightforward: write in Markdown, generate static HTML, support RSS feeds, and keep everything version-controlled in Git. Most importantly, I wanted something I could understand completely, maintain easily, and that wouldn't break on major upgrades. |
| 3 | +I stumbled across the [refactoring english book](https://refactoringenglish.com/) this summer. This got me motivated to try (technical) writing myself. However, I needed a simple way to publish blog posts and an excuse why I can't start writing immediatly. So me being in developer mode, I told myself: |
4 | 4 |
|
5 | | -## Existing tools were overkill |
6 | 5 |
|
7 | | -The static site generator ecosystem is vast, but most solutions come with significant complexity: |
| 6 | +> "First things first, instead of practicing my writing, reading the book or sketching drafts of what I actually could write about, start with a custom static site generator." |
8 | 7 |
|
9 | | -[**Hugo**](https://gohugo.io/) is fast and popular, but it's a massive framework with hundreds of features I'd never use. The configuration files, theme system, and plugin ecosystem add layers of abstraction that make it hard to understand what's actually happening. When something breaks or I want to customize behavior, it is too complex for me to reason about all this. And I have had issues in the past where untouched static websites suddenly would no longer build after one or two years. |
| 8 | +But this now became the first article and I like it. |
| 9 | + |
| 10 | +## TL;DR |
| 11 | + |
| 12 | +This blog is generated by 400 lines of handwritten [go code](https://github.com/nobloat/blog/blob/main/main.go), mainly because it is fun, but also because I was annoyed by all the breaking changes with each update of existing solutions. |
| 13 | + |
| 14 | +This can't happen anymore :) |
| 15 | + |
| 16 | + |
| 17 | +## Existing tools got me distracted |
| 18 | + |
| 19 | +The static site generator ecosystem [is vast](https://github.com/myles/awesome-static-generators), but most solutions come with significant complexity. |
| 20 | + |
| 21 | +[**Hugo**](https://gohugo.io/) is fast and popular and I have used it in the past already. But, it's a massive framework with hundreds of features I'd never use but still have to pay for in *complexity tokens*. The configuration files, theme system, and plugin ecosystem add layers of abstraction that make it hard to understand what's actually happening. When something breaks or I want to customize behavior, it is too complex for me to reason about all this. And I have had issues in the past where untouched static websites suddenly would no longer build after one or two years. |
10 | 22 |
|
11 | 23 | [**Jekyll**](https://jekyllrb.com/) requires Ruby, Bundler, and a complex gem ecosystem. Every time I'd want to update or deploy, I'd need to ensure the right Ruby version, manage gem dependencies, and deal with potential version conflicts. The overhead of maintaining a Ruby environment just to generate static HTML felt excessive. |
12 | 24 |
|
13 | 25 | [**Next.js**](https://nextjs.org/) and other React-based static site generators are powerful, but they bring the entire JavaScript ecosystem with them. Node modules, build tools, transpilation, and the constant churn of the npm ecosystem—all for what is essentially text processing and template rendering. |
14 | 26 |
|
15 | 27 | Even simpler tools like [**Zola**](https://www.getzola.org/) or [**11ty**](https://www.11ty.dev/) still require learning their specific conventions, configuration formats, and template languages. They're better than the heavyweights, but they're still frameworks with their own abstractions. |
16 | 28 |
|
17 | | -What I needed was clear: write Markdown files, run a simple command, get HTML. No configuration files, no theme system, no plugin architecture. Everything should be in Git, work with text editors, and require no setup beyond having Go installed. |
| 29 | +What I needed was: |
| 30 | + |
| 31 | +- write Markdown files |
| 32 | +- run a simple command, get HTML. |
| 33 | +- Everything should be in Git, work with text editors, and require no setup beyond having Go installed. |
| 34 | +- No configuration files, no theme system, no plugin architecture I would need to learn first. |
18 | 35 |
|
19 | 36 | None of the existing solutions met these requirements. They either required complex setup, had too many dependencies, introduced unnecessary abstractions, or were too opinionated about structure. Plus this might be a fun project for a sunny afternoon in the park. |
20 | 37 |
|
@@ -129,9 +146,9 @@ This is the only external dependency ([github.com/fsnotify/fsnotify](https://git |
129 | 146 |
|
130 | 147 | ## Conclusion |
131 | 148 |
|
132 | | -This blog generator does exactly what I need: converts Markdown to HTML, generates an index and RSS feed, and outputs static files. It's under 400 lines of code, uses only the go standard library for core functionality, and I understand every part of it. |
| 149 | +This blog generator does exactly what I need: converts Markdown to HTML, generates an index and RSS feed, and outputs static files. **It's under 400 lines of code**, uses only the go standard library for core functionality, and I understand every part of it. |
133 | 150 |
|
134 | | -It might not be suitable for someone who needs complex features like tags, categories, pagination, or theme systems. But for a simple technical blog, it's perfect. It fits the "nobloat" philosophy. |
| 151 | +It might not be suitable for someone who needs complex features like tags, categories, pagination, or theme systems. But for a simple technical blog, it's perfect. It fits the *"nobloat" philosophy*. |
135 | 152 |
|
136 | 153 | The entire codebase is very small, making it easy to read, modify, and maintain. |
137 | 154 |
|
|
0 commit comments