--- post_date: 2026-06-30 description: How I mirror my Gemini capsule to the web without abandoning geminispace. --- # Moving my weblog off Gemini (without leaving it) *This is placeholder text laid out so you can see how a full post reads. Replace it with the real `.gmi` content when you export the capsule — the structure below covers everything a converted Gemini post will need: headings, lists, quotes, code, and links.* I've kept a capsule at `gemini://gemini.ctrl-c.club/~tjp/` for a few years now. Gemini is a lovely place to write: the format is so constrained that there's nothing to fiddle with, and the whole thing rewards plain, linear prose. But I wanted a web presence too — one that fits in with the personal sites I keep finding in webrings. ## The plan The goal was never to abandon geminispace. It was to have both, from one source of truth. Gemtext is close enough to Markdown that a small converter gets you most of the way there: - Keep writing `.gmi` files in my capsule. - Run a converter that emits HTML with the same structure. - Wrap each page in the site template you're reading now. ## The converter Gemtext has exactly one block-level construct per line, which makes parsing almost insultingly simple. Here's the core of it: ```sh while IFS= read -r line; do case "$line" in "### "*) echo "

${line#### }

" ;; "## "*) echo "

${line### }

" ;; "# "*) echo "

${line## }

" ;; "=> "*) emit_link "$line" ;; "* "*) emit_list_item "$line" ;; "> "*) echo "
${line#> }
" ;; "") echo "" ;; *) echo "

$line

" ;; esac done < "$1" ``` That's genuinely most of it. The fiddly parts are link lines (`=>` can be a bare URL or have link text) and collapsing runs of `* ` lines into a single `