1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
// SPDX-License-Identifier: CC-BY-SA-4.0
// Copyright © Paweł Redman
#import "/common.typ": post, link-self, img, static
#show: post.with(
title: "Migration to Typst",
date: datetime(year: 2026, month: 6, day: 18),
)
After #link-self("gsoc/index")[Google Summer of Code 2020], I began working for Nokia. As a full-time software engineer, I lost interest in programming as a hobby. Because I couldn't really blog about the cool stuff I was doing at work, this site was rotting for almost 6 years.
#figure(
img(static("blog/site_before_typst.png")),
caption: [Rotting redman.xyz from before the migration],
)
A DokuWiki update broke my #link("https://redman.xyz/git/opticks/")[custom theme], and at some point LaTeX stopped working too. I just couldn't be bothered to fix any of it.
Two things changed my mind: #link("https://typst.app")[Typst] and AI.
= Typst
For the longest time, I was looking for a good and universal markup language. I tried:
- Markdown, which is too limited.
- reStructuredText, which is slightly less limited Markdown.
- Wikitext, which is much less limited, but only because it counts raw HTML as "markup".
- HTML, which is way too verbose for writing prose or math.
- BBCode, which makes me feel old just for mentioning it.
- #link-self("blog/latex_vs_typst")[LaTeX], the tenth circle of Hell.
Also, all but LaTeX treat math as a second-class citizen. They require plugins, extra pain, and maintenance, and still use the TeX language anyway.
#link("https://typst.app")[Typst] is so well-designed that every other markup immediately felt obsolete. It's as simple as Markdown for prose, yet seamlessly integrates advanced typesetting, equations, diagrams, and a proper scripting language. On top of that, compile times are measured in milliseconds.
As of this writing, HTML output is still experimental. Even so, it's already the most pleasant way to write a personal blog I've ever experienced, and by a long shot.
= AI
Typst alone wouldn't be enough. I still had to convert tens of articles full of equations from Wikitext to Typst. This was an excellent use case for AI, though.
LLMs are scarily good at coding if they're tightly constrained, especially when the work is very tedious. I started by writing common Typst code by hand so that every article would only have a minimal preamble that set everything up. Then I wrote a stub article. At that point, GPT 5.5 had enough context to mass-convert all my pages, making only a few minor mistakes in math. The whole process cost me \$6 and one afternoon.
One important instruction I had in my `AGENTS.md` was: "keep text verbatim." LLMs like to fix typos and rephrase bad English, and I wanted to keep my articles 100% mine.
This is a pattern I've been using very successfully for a while now. Write the hardest, least obvious 10% of code yourself and let the LLM do the remaining 90%. It's not blind vibe-coding if you know exactly where you're going.
= The new site
|