summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorWolfgang Müller2019-07-21 21:09:36 +0200
committerWolfgang Müller2019-07-21 21:09:36 +0200
commit4fe23d93c4f39b08f5bc4320af37ba109e618295 (patch)
tree5fd739e5189f68bb6ea9f5edc60aa68325adfe44
downloadsite-4fe23d93c4f39b08f5bc4320af37ba109e618295.tar.gz
Initial import
-rw-r--r--.gitignore4
-rw-r--r--Makefile36
-rw-r--r--fonts/alegreya-cyrillic-ext.woff2bin0 -> 15540 bytes
-rw-r--r--fonts/alegreya-cyrillic.woff2bin0 -> 16448 bytes
-rw-r--r--fonts/alegreya-greek-ext.woff2bin0 -> 9092 bytes
-rw-r--r--fonts/alegreya-greek.woff2bin0 -> 11548 bytes
-rw-r--r--fonts/alegreya-latin-ext.woff2bin0 -> 21568 bytes
-rw-r--r--fonts/alegreya-latin.woff2bin0 -> 25672 bytes
-rw-r--r--fonts/alegreya-sans-bold-cyrillic-ext.woff2bin0 -> 11160 bytes
-rw-r--r--fonts/alegreya-sans-bold-cyrillic.woff2bin0 -> 11880 bytes
-rw-r--r--fonts/alegreya-sans-bold-greek-ext.woff2bin0 -> 8572 bytes
-rw-r--r--fonts/alegreya-sans-bold-greek.woff2bin0 -> 8876 bytes
-rw-r--r--fonts/alegreya-sans-bold-latin-ext.woff2bin0 -> 18344 bytes
-rw-r--r--fonts/alegreya-sans-bold-latin.woff2bin0 -> 20460 bytes
-rw-r--r--fonts/alegreya-sans-bold-vietnamese.woff2bin0 -> 7348 bytes
-rw-r--r--fonts/alegreya-sans-italic-cyrillic-ext.woff2bin0 -> 11480 bytes
-rw-r--r--fonts/alegreya-sans-italic-cyrillic.woff2bin0 -> 12488 bytes
-rw-r--r--fonts/alegreya-sans-italic-greek-ext.woff2bin0 -> 8612 bytes
-rw-r--r--fonts/alegreya-sans-italic-greek.woff2bin0 -> 9080 bytes
-rw-r--r--fonts/alegreya-sans-italic-latin-ext.woff2bin0 -> 18488 bytes
-rw-r--r--fonts/alegreya-sans-italic-latin.woff2bin0 -> 21116 bytes
-rw-r--r--fonts/alegreya-sans-italic-vietnamese.woff2bin0 -> 7152 bytes
-rw-r--r--fonts/alegreya-sans-regular-cyrillic-ext.woff2bin0 -> 11140 bytes
-rw-r--r--fonts/alegreya-sans-regular-cyrillic.woff2bin0 -> 11716 bytes
-rw-r--r--fonts/alegreya-sans-regular-greek-ext.woff2bin0 -> 8524 bytes
-rw-r--r--fonts/alegreya-sans-regular-greek.woff2bin0 -> 8864 bytes
-rw-r--r--fonts/alegreya-sans-regular-latin-ext.woff2bin0 -> 17872 bytes
-rw-r--r--fonts/alegreya-sans-regular-latin.woff2bin0 -> 20388 bytes
-rw-r--r--fonts/alegreya-sans-regular-vietnamese.woff2bin0 -> 7176 bytes
-rw-r--r--fonts/alegreya-vietnamese.woff2bin0 -> 7652 bytes
-rw-r--r--logo.svg7
-rw-r--r--posts/beton-brut.md134
-rw-r--r--posts/concrete.md48
-rw-r--r--posts/img/brutalist-websites.pngbin0 -> 286211 bytes
-rw-r--r--posts/img/weltschmerz.pngbin0 -> 45345 bytes
-rw-r--r--posts/old-days.md73
-rw-r--r--posts/the-cat.md65
-rw-r--r--posts/transcript.md42
-rw-r--r--posts/verify-with-signify.md51
-rw-r--r--posts/weltschmerz.md77
-rw-r--r--scss/_responsive_fonts.scss26
-rw-r--r--scss/_webfonts.scss259
-rw-r--r--scss/man.scss39
-rw-r--r--scss/style.scss125
-rw-r--r--templates/index.xml19
-rw-r--r--templates/post.xml15
-rw-r--r--util/mdconv.sh20
47 files changed, 1040 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3f98f75
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+atom.xml
+man.css
+style.css
+*.html
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..58361c8
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,36 @@
+POSTS_MD = $(wildcard posts/*.md)
+POSTS_XML = $(wildcard posts/*.xml)
+
+SCSS = $(wildcard scss/_*.scss)
+
+HTML = $(POSTS_MD:.md=.html) $(POSTS_XML:.xml=.html)
+
+.PHONY: site
+site: index.html atom.xml style.css man.css
+
+index.html: templates/index.xml $(HTML)
+ sblg -o $@ -t templates/index.xml $(HTML)
+
+atom.xml: templates/atom.xml $(HTML)
+ sblg -ao $@ -t templates/atom.xml $(HTML)
+
+%.html: %.xml templates/post.xml
+ sblg -co $@ -t templates/post.xml $<
+
+%.xml: %.md util/mdconv.sh
+ sh util/mdconv.sh $< >$@
+
+style.css: scss/style.scss $(SCSS)
+ sassc -t expanded $< >$@
+
+man.css: scss/man.scss $(SCSS)
+ sassc -t expanded $< >$@
+
+clean:
+ rm -f $(HTML) index.html atom.xml style.css man.css
+
+deploy:
+ rsync -avhP fonts index.html style.css man.css logo.svg atom.xml coleridge:www/oriole.systems/
+ rsync -avhP posts/*.html coleridge:www/oriole.systems/posts/
+
+.PHONY: clean deploy
diff --git a/fonts/alegreya-cyrillic-ext.woff2 b/fonts/alegreya-cyrillic-ext.woff2
new file mode 100644
index 0000000..42ac8ae
--- /dev/null
+++ b/fonts/alegreya-cyrillic-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-cyrillic.woff2 b/fonts/alegreya-cyrillic.woff2
new file mode 100644
index 0000000..124ffff
--- /dev/null
+++ b/fonts/alegreya-cyrillic.woff2
Binary files differ
diff --git a/fonts/alegreya-greek-ext.woff2 b/fonts/alegreya-greek-ext.woff2
new file mode 100644
index 0000000..d5c835d
--- /dev/null
+++ b/fonts/alegreya-greek-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-greek.woff2 b/fonts/alegreya-greek.woff2
new file mode 100644
index 0000000..c786e8d
--- /dev/null
+++ b/fonts/alegreya-greek.woff2
Binary files differ
diff --git a/fonts/alegreya-latin-ext.woff2 b/fonts/alegreya-latin-ext.woff2
new file mode 100644
index 0000000..a9ef1b2
--- /dev/null
+++ b/fonts/alegreya-latin-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-latin.woff2 b/fonts/alegreya-latin.woff2
new file mode 100644
index 0000000..c47936e
--- /dev/null
+++ b/fonts/alegreya-latin.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-bold-cyrillic-ext.woff2 b/fonts/alegreya-sans-bold-cyrillic-ext.woff2
new file mode 100644
index 0000000..43b5ba1
--- /dev/null
+++ b/fonts/alegreya-sans-bold-cyrillic-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-bold-cyrillic.woff2 b/fonts/alegreya-sans-bold-cyrillic.woff2
new file mode 100644
index 0000000..dafc6f8
--- /dev/null
+++ b/fonts/alegreya-sans-bold-cyrillic.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-bold-greek-ext.woff2 b/fonts/alegreya-sans-bold-greek-ext.woff2
new file mode 100644
index 0000000..49c5654
--- /dev/null
+++ b/fonts/alegreya-sans-bold-greek-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-bold-greek.woff2 b/fonts/alegreya-sans-bold-greek.woff2
new file mode 100644
index 0000000..7415e7b
--- /dev/null
+++ b/fonts/alegreya-sans-bold-greek.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-bold-latin-ext.woff2 b/fonts/alegreya-sans-bold-latin-ext.woff2
new file mode 100644
index 0000000..1896761
--- /dev/null
+++ b/fonts/alegreya-sans-bold-latin-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-bold-latin.woff2 b/fonts/alegreya-sans-bold-latin.woff2
new file mode 100644
index 0000000..4ea8f12
--- /dev/null
+++ b/fonts/alegreya-sans-bold-latin.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-bold-vietnamese.woff2 b/fonts/alegreya-sans-bold-vietnamese.woff2
new file mode 100644
index 0000000..83a26cb
--- /dev/null
+++ b/fonts/alegreya-sans-bold-vietnamese.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-italic-cyrillic-ext.woff2 b/fonts/alegreya-sans-italic-cyrillic-ext.woff2
new file mode 100644
index 0000000..4ead31c
--- /dev/null
+++ b/fonts/alegreya-sans-italic-cyrillic-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-italic-cyrillic.woff2 b/fonts/alegreya-sans-italic-cyrillic.woff2
new file mode 100644
index 0000000..3ebce2c
--- /dev/null
+++ b/fonts/alegreya-sans-italic-cyrillic.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-italic-greek-ext.woff2 b/fonts/alegreya-sans-italic-greek-ext.woff2
new file mode 100644
index 0000000..4ddc332
--- /dev/null
+++ b/fonts/alegreya-sans-italic-greek-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-italic-greek.woff2 b/fonts/alegreya-sans-italic-greek.woff2
new file mode 100644
index 0000000..c1cebd7
--- /dev/null
+++ b/fonts/alegreya-sans-italic-greek.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-italic-latin-ext.woff2 b/fonts/alegreya-sans-italic-latin-ext.woff2
new file mode 100644
index 0000000..c15ce0e
--- /dev/null
+++ b/fonts/alegreya-sans-italic-latin-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-italic-latin.woff2 b/fonts/alegreya-sans-italic-latin.woff2
new file mode 100644
index 0000000..22c7a00
--- /dev/null
+++ b/fonts/alegreya-sans-italic-latin.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-italic-vietnamese.woff2 b/fonts/alegreya-sans-italic-vietnamese.woff2
new file mode 100644
index 0000000..3b31705
--- /dev/null
+++ b/fonts/alegreya-sans-italic-vietnamese.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-regular-cyrillic-ext.woff2 b/fonts/alegreya-sans-regular-cyrillic-ext.woff2
new file mode 100644
index 0000000..f81ae10
--- /dev/null
+++ b/fonts/alegreya-sans-regular-cyrillic-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-regular-cyrillic.woff2 b/fonts/alegreya-sans-regular-cyrillic.woff2
new file mode 100644
index 0000000..3434d6e
--- /dev/null
+++ b/fonts/alegreya-sans-regular-cyrillic.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-regular-greek-ext.woff2 b/fonts/alegreya-sans-regular-greek-ext.woff2
new file mode 100644
index 0000000..f85a417
--- /dev/null
+++ b/fonts/alegreya-sans-regular-greek-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-regular-greek.woff2 b/fonts/alegreya-sans-regular-greek.woff2
new file mode 100644
index 0000000..19ba950
--- /dev/null
+++ b/fonts/alegreya-sans-regular-greek.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-regular-latin-ext.woff2 b/fonts/alegreya-sans-regular-latin-ext.woff2
new file mode 100644
index 0000000..cc81c01
--- /dev/null
+++ b/fonts/alegreya-sans-regular-latin-ext.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-regular-latin.woff2 b/fonts/alegreya-sans-regular-latin.woff2
new file mode 100644
index 0000000..cef491f
--- /dev/null
+++ b/fonts/alegreya-sans-regular-latin.woff2
Binary files differ
diff --git a/fonts/alegreya-sans-regular-vietnamese.woff2 b/fonts/alegreya-sans-regular-vietnamese.woff2
new file mode 100644
index 0000000..93ef977
--- /dev/null
+++ b/fonts/alegreya-sans-regular-vietnamese.woff2
Binary files differ
diff --git a/fonts/alegreya-vietnamese.woff2 b/fonts/alegreya-vietnamese.woff2
new file mode 100644
index 0000000..061d8ec
--- /dev/null
+++ b/fonts/alegreya-vietnamese.woff2
Binary files differ
diff --git a/logo.svg b/logo.svg
new file mode 100644
index 0000000..020e465
--- /dev/null
+++ b/logo.svg
@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 105.83333 105.83334">
+ <rect width="100%" height="100%" fill="#ffd400"/>
+ <g transform="translate(0 -191.16664)">
+ <circle cx="52.916668" cy="244.08331" r="39.6875" fill="#fff" stroke="#000" stroke-dashoffset="13.2291654" stroke-linecap="square" stroke-linejoin="bevel" stroke-width="2.64583337" transform="translate(0 .00000113)"/>
+ <circle cx="52.916672" cy="244.0833" r="10.352553"/>
+ </g>
+</svg>
diff --git a/posts/beton-brut.md b/posts/beton-brut.md
new file mode 100644
index 0000000..3c28211
--- /dev/null
+++ b/posts/beton-brut.md
@@ -0,0 +1,134 @@
+title: Béton Brut
+date: 2019-07-21
+author: Wolfgang Müller
+
+It is hard to believe that it took me well over half a year to finally
+come to the point where I can publish this website on my new domain and
+leave the old one behind. There's a few reasons it took this long, and
+for once, surprisingly, they are not at all software-related. It was a
+journey through uncertainty, insecurity, and compulsive hesitancy, which
+is why this post will mostly be a reflective one.
+
+## Legacy Woes
+
+Last year in November I had a bunch of free time on my hands, and I very
+innocently decided to work on a new site design. Back then I only really
+wanted to change a few things, since a full makeover seemed a bit too
+daunting. Still, after throwing around a bunch of ideas in my head, it
+seemed more clear that I would have to abandon the bulk of what I
+already had. Mainly this was because the old site was built on a
+considerable amount of legacy code: I was using AsciiDoc, which I had
+fallen out of favour with, and most of the site was being held together
+by an unwieldy Makefile and a couple of hacky shell scripts.
+
+So whilst it was easy enough to add new content, changing the design or
+even merely attempting to tweak core concepts was impossible without a
+bigger rewrite.
+
+Another concern was my growing disdain for a few of the things that I
+had published. Ideally I thought it'd be best to rewrite the bits that I
+didn't like and keep the rest, but I couldn't find a sufficient amount
+of motivation. I ended up neglecting to write any new posts on the site,
+and knowing I had stuff online that I kind of despised made me feel
+depressed every time I thought about it. I felt that the site could no
+longer reasonably present the kind of person I was. I felt that I was
+lying.
+
+## Honest Design
+
+Around the same time I stumbled upon [Brutalist
+Websites](https://brutalistwebsites.com/) (since defunct, and only
+reasonably browsable by removing the prominent overlay), which curated a
+collection of _brutalist_ websites.
+
+![Brutalist Websites](img/brutalist-websites.png)
+
+There was always a certain - perhaps morbid - fascination I had with
+Brutalism and its idea of _béton brut_, raw concrete. The German word
+for this concept, _Sichtbeton_, takes a more experiential approach; it
+is simply concrete that is unobstructedly visible. There's no attempt to
+hide the underpinning, instead it is displayed with a certain kind of
+pride. Core to the whole concept is a notion of honesty, of being
+utterly clear about what a thing is made of.
+
+So when I felt that I was lying about what kind of person I was, it
+seemed only fitting to create something new in that sort of style, and
+to take to heart the idea of being more honest to the outside world and
+myself.
+
+## The Foundation
+
+Not only did that mean creating a new design, it also meant starting
+from scratch and looking for a new engine to build the whole website. I
+quickly decided to use [sblg](https://kristaps.bsd.lv/sblg/) to generate
+HTML files from templates, and
+[lowdown](https://kristaps.bsd.lv/lowdown/) to convert markdown files to
+XML content that sblg understands.
+
+The whole project would live in only a couple of directories, tied
+together with a much simpler and cleaner Makefile this time. Compared to
+AsciiDoc, site generation was blazingly fast and very robust. It only
+took me about a day or two to fully tweak everything the way I wanted it
+to behave.
+
+## Small Steps
+
+What ended up taking 90% of the rest of the time was the design. With
+the idea of being fully honest came a problem: I started questioning
+certain decisions because of what they might reveal about myself, what
+they might look like from an outside perspective. I noticed that, for a
+very long time, I had been genuinely insecure about releasing anything
+that was in any way personal to me.
+
+For instance, the idea very early on was to have one single page
+containing everything I published; be it a piece of software, a poem, or
+some sort of essay. This resulted in a lot of internal conflict as I
+often considered my poetry to be "pretentious" and inherently less
+impactful than a software project. Suddenly I was wanting to have two
+sites, one for the "real" and technical projects, and one for the more
+personal. In turn that would mean that I was actively censoring my
+output by categorizing it away to a more obscure part of the site.
+
+Another problem was an almost compulsive need to tweak the most
+insignificant parts of the design towards a sense of perfection and
+coherence that was frankly unattainable. Because of a lot of internal
+turmoil, it became impossible to do any further work I would feel
+positive of.
+
+In the end the solution was to take considerable time off personal
+projects and reflect on and try to dismantle those problems and
+insecurities. I learned that it is very helpful to talk to trustworthy
+friends about this, and to find a comfortable space in which to
+experiment with being more immediately public with projects, ideas, or
+thoughts - even if you think they are unrefined and not ready. This is
+especially helpful if one tends to feel vulnerable after having
+published or when considering to publish. Initially it is perfectly fine
+to create a "mock public" space that no one can see initially, but which
+can be made more public as time goes on (a locked Twitter or Fediverse
+profile, for example). The idea is to build confidence in the act of
+publishing itself, and to take away the vulnerability and fear.
+
+## Horizon
+
+Building this sort of confidence in publishing personal content is
+time-consuming and not always easy. You may feel the intense urge to
+undo a publication or to re-read it until it sounds drab and uninspired.
+In those cases, maybe ask a friend for feedback, but most importantly:
+take a step back and take some time off. It may read wholly differently
+tomorrow.
+
+As for technical work, if you, like me, feel sometimes that what you do
+is unimportant, unrecognized, or invisible, it might help to start a
+document in which you collect even the smallest things that have some
+sort of impact day to day. Julia Evan's idea of a [brag
+document](https://jvns.ca/blog/brag-documents/) is a helpful resource. I
+tend to be overly humble myself and want to highlight the following excerpt,
+which helped me understand something no one had explained to me before:
+
+> One thing I want to emphasize, for people who don't like to brag, is –
+> **you don't have to try to make your work sound better than it is**. Just
+> make it sound **exactly as good as it is**!
+
+Like _béton brut_, be uncompromisingly honest about your work. Don't
+make it sound better than it is, but most importantly, learn that it
+has value and that there is no shame in showing it.
diff --git a/posts/concrete.md b/posts/concrete.md
new file mode 100644
index 0000000..ecae66c
--- /dev/null
+++ b/posts/concrete.md
@@ -0,0 +1,48 @@
+title: Concrete
+date: 2017-03-08
+author: Wolfgang Müller
+
+Concrete. Drab, lifeless surfaces, complete in their sterility. Dust
+from abrasion dancing around in the few shafts of light like
+poisoned spores, carrying death across the hallway. Lying against
+the blood-stained wall, this should be his last moment in life. Born
+in concrete, deep below the earth, away from sunshine, green grass,
+sunflowers, singing birds; Killed in concrete just the same, smashed
+against the wall, shot into the lungs and shoulders, bleeding out far
+away from light or happiness.
+
+The others were all already gone. Strewn about, lying atop of each
+other, dead eyes, pale skin. Grey and feeble, like the concrete all
+around. Pools of blood under the bodies, a dark coagulated red. Life
+forgotten now seeping into the devouring pores of the cement floor.
+
+"I'll end up like them, eaten up, rotting here where there is
+no sunshine. I'll end up in the belly of the concrete monstrosity, my
+skeleton grinning sheepishly at the unlucky dwellers who find this vault
+expecting riches, but getting only death; death grimacing back, and the
+concrete, silent as ever, watching, waiting."
+
+A putrid smell lay in the room, ironlike, miasmatic, and
+dusty. Thankfully only a few more breaths left. Complete silence,
+except for the ghastly wheezing of ruptured lungs. A last reminder of
+life dwindling between the uncaring walls. Nobody listening except the
+elongated and lobeless concrete ears, the rough surfaces like petrified
+skin.
+
+Darkness slowly crept in; first at the edges, concealing the unnatural
+smiles of mutilated faces. Faces of friends, family, faces of enemies,
+of bullies. Everyone's face. Nobody's face.
+
+He drew his last breath. The darkness crept more towards the center,
+towards that one fixpoint; towards the concrete wall he had been staring
+at all this time. His enemy. Mankind's enemy. And yet it was just a
+wall. Something so simple had become the name for all the horrors in the
+world, and it was staring back. Endlessly it was staring back, loudly
+accusing in complete silence.
+
+It resounded in the corpse-filled room, mangled vocal chords in an
+undead chorus.
+
+It resounded in his dying, confused mind.
+
+Concrete.
diff --git a/posts/img/brutalist-websites.png b/posts/img/brutalist-websites.png
new file mode 100644
index 0000000..d116bb6
--- /dev/null
+++ b/posts/img/brutalist-websites.png
Binary files differ
diff --git a/posts/img/weltschmerz.png b/posts/img/weltschmerz.png
new file mode 100644
index 0000000..2c46430
--- /dev/null
+++ b/posts/img/weltschmerz.png
Binary files differ
diff --git a/posts/old-days.md b/posts/old-days.md
new file mode 100644
index 0000000..41bcb7c
--- /dev/null
+++ b/posts/old-days.md
@@ -0,0 +1,73 @@
+title: Old Days
+date: 2016-06-03T02:44:44Z
+author: Wolfgang Müller
+
+In the lowland of the taiga;
+And vast forests boreal
+Midst wapiti and wild reindeer,
+Lynx, stoat, squirrel, snowshoe, brown bear,
+Lives a hermit in remembrance
+Of old days and the explosion.
+
+Green the firs, bicoloured birches
+Waving proudly in light wind;
+Poplars shedding crimson catkins.
+And the hermit, longing, silent
+Standing lonely on the brink
+Of tundra, opens weary eyes and sees.
+
+Oak trees bending, whipping back;
+Barks then tinged by hellish fire,
+Songbirds in a sky of black.
+The mushroom cloud, the ball of red:
+People fleeing, hoping, dying,
+To the church walls shadows burnt.
+
+In the seas the water boiling,
+Blistering from the reflection
+Of the short-lived man-made sun.
+Uriel in heaven crying,
+Mourning loss of the creation
+That, in war, unmade itself.
+
+No more seasons, only winter;
+Everlasting winter, with grey soot
+Like snowflakes falling gently
+Down to blackened soil; a Hell
+on Earth, forever dead and frozen.
+Upon mankind a shadow cast.
+
+So the hermit with his gas mask,
+Breathing filters and asbestos
+Makes his way, past sickly tree stumps,
+Past the rotten flesh, past poison
+Past the hollow shells of old
+Through miasma to catharsis;
+
+Through the lowland of the taiga;
+In vast graveyards boreal
+Midst wapiti and dead reindeer,
+Lynx, stoat, squirrel, snowshoe, brown bear,
+Through miasma past the tombstones
+Past the unmarked grave and carcass.
+
+Face turned west another fire,
+Older still than the creation;
+Shimmering subtly, orange, crimson
+Through the clouds and casting rays
+Upon the rolling hills afar,
+Lights like ghostly sirens calling.
+
+And the harp, resurging music,
+Calming shadows, living beings,
+Forests, meadows, nature, beauty!
+From that subtle light display
+Made the hermit so resentful
+And envious of death's embrace.
+
+Far away inside a bunker
+Beneath the old charred earth forgotten
+Lies dormant in a silo still
+The array of rockets primed;
+Awaiting silent, patient, stoic
+An end, and the explosion.
diff --git a/posts/the-cat.md b/posts/the-cat.md
new file mode 100644
index 0000000..c3ffd40
--- /dev/null
+++ b/posts/the-cat.md
@@ -0,0 +1,65 @@
+title: The Cat
+date: 2016-08-04T10:49:20Z
+author: Wolfgang Müller
+
+One should live in a house like a cat, finding repose on almost every
+surface. To the cat, the whole house is a shelter. Every table, every
+sofa, every chair, every bed, indeed every floor is an invitation to
+find some rest. Do we not find cats, again and again, in the most
+unusual and unexpected places? We find them there, lying and sleeping
+with a kind of lightness and peace as if they themselves had designed
+that space specifically for them. We find them there snugly in a ball,
+breathing softly to themselves and relaxing their claws.
+
+Now, in this instance, they need them not. In this instance the whole
+world around them, usually a cat's plaything and center of attention,
+ceases to exist almost, as if they, in their peaceful huddledness,
+transcended life and entered the realm of daydreaming. A human realm,
+not an animal one. Of which things do they dream? Do they dream of the
+mouse that eluded them in the existential battle for life and retreated
+back to its hole, its own shelter? Do they maybe dream of the fields in
+which they were kings and queens, unchallenged monarchs of old?
+
+Truly there is something kingly about cats; a certain evolutionary
+dignity. How is it that they live content with beings displaying even
+greater hubris? Or maybe they just want to learn? How innocent, though,
+in their pursuit of this. How unburdened, how free. Whom do they see
+when they look at us? What do they feel when we talk to them?
+
+Can it be that it is only instinct that drives them? They exhibit such
+humanness, they exhibit an animal soul. It is a purer soul, a more
+simple one, but it is a soul. What do they feel when we gently stroke
+their fur with our hands? Do they feel the same kind of love? How is it
+to live a cat's life?
+
+I said earlier that cats lie down to repose anywhere. Like a human,
+however, they have their favourite spots. Always these spots have a
+distinctly human element. It is the small opening under our beds that
+we so cherished as a child, dreaming of and building at the same time
+a warm and safe den ourselves. It is next to our spot on the sofa, as
+if we radiated a familiarity and comfort there even in our absence.
+It is in the bags we use for our shopping, the suitcases we use for
+travelling.
+
+It is on our discarded clothes on the table, floor, chair or bed, as
+if they wanted to absorb the fragrances of our lives and thus come
+closer to our person. It is our smell that is home to them, our ``having
+lived'' in something, on something, that is so dear to them. Maybe
+they want to feel the pain that was inflicted upon us, or the joy and
+happiness that was diffused through the clothes as we wore them. They
+are not all without us, and while we are gone they are emptier inside
+for the loss, seeking refuge, seeking a nest, seeking shelter from the
+rain in the touched and transformed things we left behind. We are their
+mothers and fathers to them, we are their family. This bond transcends
+species, it is therefore something inherent in life. It is a soulful
+longing for nearness, a longing for exchange of life, and what makes
+life what it is.
+
+My cats cannot comprehend what I have written here, but I believe
+fully that they feel the same way. The cat hair on my clothes is their
+attempt at sharing this warmness, this closeness. And when the cat
+lies down close to me and purrs with all the excellence of beauty and
+reverberation, then I feel loved in the universe and want to share that
+love. Maybe in this simplicity we should look for love and give it back
+with all our heart. Maybe in this simplicity we have found the core of
+us and the dignified true expression of the animal, and of nature.
diff --git a/posts/transcript.md b/posts/transcript.md
new file mode 100644
index 0000000..5d3f333
--- /dev/null
+++ b/posts/transcript.md
@@ -0,0 +1,42 @@
+title: A Transcript
+date: 2018-12-30
+author: Wolfgang Müller
+
+though one thing still disturbs me greatly
+and I don't know whether I am alone in this
+but it is most obvious at night, in the dark
+or in the haze, the fog;
+that I am not fully there - that there is
+in another space, another self, not me
+but indistinguishble from me,
+yet wholly alien.
+
+it is irksome to know this, and
+whilst I have come to learn how to cope,
+it never fully leaves me, this thought
+that I am fake.
+
+it seems an impossible situation, to be
+and not to be at the same time, and to
+hide and show as necessary, just so;
+yes, the necessity of it is still of
+great difficulty. I am not sure
+whether to continue or not, to be,
+to not be, at the same time.
+
+since, in the past, it worked and
+sometimes made it easy.
+yet, it is not honest, and I fear
+being eaten up from the inside
+by this self, and for it
+to take over.
+
+then, nothing will be true
+but everything will go on as if
+it were.
+
+and so I leave this query with
+utmost confusion and no real
+hope of assurance
+that my self be saved and the other
+to be discarded.
diff --git a/posts/verify-with-signify.md b/posts/verify-with-signify.md
new file mode 100644
index 0000000..8853554
--- /dev/null
+++ b/posts/verify-with-signify.md
@@ -0,0 +1,51 @@
+title: Verifying snapshots with signify
+date: 2019-01-01
+author: Wolfgang Müller
+
+I use the [signify](https://flak.tedunangst.com/post/signify) tool to
+cryptographically sign all software downloads you will find on this
+site.
+
+Whilst you technically don't need `signify` to verify the _integrity_ of
+downloaded files, I strongly recommend using it to also verify the
+_signature_. A portable version of the tool is available
+[here](https://github.com/aperezdc/signify).
+
+### Obtaining the signature and checksum
+
+If you decide to use `signify` to verify downloaded files, you need to obtain
+the detached signature linked on the respective project page and the public
+release key (see below). Otherwise, you only need to fetch the checksum.
+
+### Obtaining the public key
+
+To fully verify a download with `signify`, first obtain [my public
+key](/release.pub). I keep a copy of the same key on DNS, feel free to
+verify it therewith:
+
+ $ drill TXT releasekey.oriole.systems
+
+Another copy of the key exists on the freenode IRC servers, in my
+taxonomy data:
+
+ /msg NickServ taxonomy vehk
+
+You may want to keep the public key saved on your system for future
+verifications.
+
+### Verification with signify
+
+Once you have downloaded my public key, run the following to verify your
+download:
+
+ $ signify -C -p release.pub -x <snapshot>.SHA256.sig
+ Signature Verified
+ <snapshot>: OK
+
+### Verification with sha256sum
+
+Alternatively, if you don't want to install `signify`, you can use
+the `sha256sum` tool to only verify the integrity of the download:
+
+ $ sha256sum -c <snapshot>.SHA256
+ <snapshot>: OK
diff --git a/posts/weltschmerz.md b/posts/weltschmerz.md
new file mode 100644
index 0000000..bdaeced
--- /dev/null
+++ b/posts/weltschmerz.md
@@ -0,0 +1,77 @@
+title: weltschmerz - A terminal emulator in Vala
+date: 2019-07-12
+author: Wolfgang Müller
+
+## Synopsis
+
+weltschmerz is a small and simple terminal emulator built upon the
+Virtual Terminal Emulator widget. It's written in Vala, supports
+clickable URLs, can reload its configuration whilst running, and has
+very basic search functionality.
+
+![weltschmerz in action](img/weltschmerz.png)
+
+As a VTE app, weltschmerz supports practically every contemporary
+terminal emulator feature. It is built to be a stable and practical
+terminal emulator for daily use.
+
+## Download
+
+- [weltschmerz-1.0.0.tar.gz](/snapshots/weltschmerz/weltschmerz-1.0.0.tar.gz)
+ ([signature](/snapshots/weltschmerz/weltschmerz-1.0.0.tar.gz.SHA256.sig),
+ [checksum](/snapshots/weltschmerz/weltschmerz-1.0.0.tar.gz.SHA256),
+ [verify?](verify.html),
+ [archive](/snapshots/weltschmerz))
+- [git repository](https://git.oriole.systems/weltschmerz.git) (clone only, no web interface)
+
+## Requirements
+
+- [VTE](https://wiki.gnome.org/Apps/Terminal/VTE) >= 2.91
+- [Vala](https://wiki.gnome.org/Projects/Vala) >= 0.40.12
+- [GTK+](https://www.gtk.org/) >= 3.0
+
+## Usage & Configuration
+
+See [`weltschmerz(1)`](/man/weltschmerz.1.html).
+
+## Build
+
+weltschmerz can be built with any POSIX-conformant make or with
+[Meson](https://mesonbuild.com). The latter may be interesting to
+distribution packagers or people already comfortable with this
+particular build system.
+
+__Note:__ if your Vala compiler executable is not named `valac`, you
+need to export the environment variable `VALAC` containing the correct
+name before you can build weltschmerz:
+
+ export VALAC='valac-0.42'
+
+### Makefile
+
+Run the following to build and install weltschmerz to the default
+location (`/usr/local`):
+
+ make install
+
+The Makefile honors the environment variables `PREFIX`, `DESTDIR`,
+`BINDIR`, and `MANDIR`. For instance, if you want to install weltschmerz
+to your home directory, call make like so:
+
+ PREFIX=/home/user make install
+
+### Meson
+
+Create the build directory and configure the Meson build like so:
+
+ meson build
+ cd build
+ meson configure
+
+The build can be configured extensively; for more information, see
+`meson(1)`. If you want to install weltschmerz to your home directory,
+for example, pass `--prefix=/home/user` to configure.
+
+Once the build is set up, install weltschmerz:
+
+ meson install
diff --git a/scss/_responsive_fonts.scss b/scss/_responsive_fonts.scss
new file mode 100644
index 0000000..b9c3410
--- /dev/null
+++ b/scss/_responsive_fonts.scss
@@ -0,0 +1,26 @@
+@mixin font-size($size) {
+ html {
+ font-size: $size;
+ }
+}
+
+@media (max-width: 480px) {
+ @include font-size(12px);
+}
+
+@media (min-width: 480px) {
+ @include font-size(13px);
+}
+
+@media (min-width: 786px) {
+ @include font-size(14px);
+}
+
+@media (min-width: 992px) {
+ @include font-size(15px);
+}
+
+@media (min-width: 1200px) {
+ @include font-size(16px);
+}
+
diff --git a/scss/_webfonts.scss b/scss/_webfonts.scss
new file mode 100644
index 0000000..19818c5
--- /dev/null
+++ b/scss/_webfonts.scss
@@ -0,0 +1,259 @@
+$cyrillic-ext: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
+$cyrillic: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+$greek-ext: U+1F00-1FFF;
+$greek: U+0370-03FF;
+$latin-ext: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
+$latin: U+0000-00FF, U+0131, U+0152-0153, U+2190-21FF, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+$vietnamese: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
+
+@font-face {
+ font-family: 'Alegreya';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Regular'), local('Alegreya-Regular'), url(fonts/alegreya-cyrillic-ext.woff2) format('woff2');
+ unicode-range: $cyrillic-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Regular'), local('Alegreya-Regular'), url(fonts/alegreya-cyrillic.woff2) format('woff2');
+ unicode-range: $cyrillic;
+}
+
+@font-face {
+ font-family: 'Alegreya';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Regular'), local('Alegreya-Regular'), url(fonts/alegreya-greek-ext.woff2) format('woff2');
+ unicode-range: $greek-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Regular'), local('Alegreya-Regular'), url(fonts/alegreya-greek.woff2) format('woff2');
+ unicode-range: $greek;
+}
+
+@font-face {
+ font-family: 'Alegreya';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Regular'), local('Alegreya-Regular'), url(fonts/alegreya-vietnamese.woff2) format('woff2');
+ unicode-range: $vietnamese;
+}
+
+@font-face {
+ font-family: 'Alegreya';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Regular'), local('Alegreya-Regular'), url(fonts/alegreya-latin-ext.woff2) format('woff2');
+ unicode-range: $latin-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Regular'), local('Alegreya-Regular'), url(fonts/alegreya-latin.woff2) format('woff2');
+ unicode-range: $latin;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: italic;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Italic'), local('AlegreyaSans-Italic'), url(fonts/alegreya-sans-italic-cyrillic-ext.woff2) format('woff2');
+ unicode-range: $cyrillic-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: italic;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Italic'), local('AlegreyaSans-Italic'), url(fonts/alegreya-sans-italic-cyrillic.woff2) format('woff2');
+ unicode-range: $cyrillic;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: italic;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Italic'), local('AlegreyaSans-Italic'), url(fonts/alegreya-sans-italic-greek-ext.woff2) format('woff2');
+ unicode-range: $greek-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: italic;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Italic'), local('AlegreyaSans-Italic'), url(fonts/alegreya-sans-italic-greek.woff2) format('woff2');
+ unicode-range: $greek;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: italic;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Italic'), local('AlegreyaSans-Italic'), url(fonts/alegreya-sans-italic-vietnamese.woff2) format('woff2');
+ unicode-range: $vietnamese;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: italic;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Italic'), local('AlegreyaSans-Italic'), url(fonts/alegreya-sans-italic-latin-ext.woff2) format('woff2');
+ unicode-range: $latin-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: italic;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Italic'), local('AlegreyaSans-Italic'), url(fonts/alegreya-sans-italic-latin.woff2) format('woff2');
+ unicode-range: $latin;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Regular'), local('AlegreyaSans-Regular'), url(fonts/alegreya-sans-regular-cyrillic-ext.woff2) format('woff2');
+ unicode-range: $cyrillic-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Regular'), local('AlegreyaSans-Regular'), url(fonts/alegreya-sans-regular-cyrillic.woff2) format('woff2');
+ unicode-range: $cyrillic;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Regular'), local('AlegreyaSans-Regular'), url(fonts/alegreya-sans-regular-greek-ext.woff2) format('woff2');
+ unicode-range: $greek-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Regular'), local('AlegreyaSans-Regular'), url(fonts/alegreya-sans-regular-greek.woff2) format('woff2');
+ unicode-range: $greek;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Regular'), local('AlegreyaSans-Regular'), url(fonts/alegreya-sans-regular-vietnamese.woff2) format('woff2');
+ unicode-range: $vietnamese;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Regular'), local('AlegreyaSans-Regular'), url(fonts/alegreya-sans-regular-latin-ext.woff2) format('woff2');
+ unicode-range: $latin-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 400;
+ font-display: swap;
+ src: local('Alegreya Sans Regular'), local('AlegreyaSans-Regular'), url(fonts/alegreya-sans-regular-latin.woff2) format('woff2');
+ unicode-range: $latin;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: local('Alegreya Sans Bold'), local('AlegreyaSans-Bold'), url(fonts/alegreya-sans-bold-cyrillic-ext.woff2) format('woff2');
+ unicode-range: $cyrillic-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: local('Alegreya Sans Bold'), local('AlegreyaSans-Bold'), url(fonts/alegreya-sans-bold-cyrillic.woff2) format('woff2');
+ unicode-range: $cyrillic;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: local('Alegreya Sans Bold'), local('AlegreyaSans-Bold'), url(fonts/alegreya-sans-bold-greek-ext.woff2) format('woff2');
+ unicode-range: $greek-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: local('Alegreya Sans Bold'), local('AlegreyaSans-Bold'), url(fonts/alegreya-sans-bold-greek.woff2) format('woff2');
+ unicode-range: $greek;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: local('Alegreya Sans Bold'), local('AlegreyaSans-Bold'), url(fonts/alegreya-sans-bold-vietnamese.woff2) format('woff2');
+ unicode-range: $vietnamese;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: local('Alegreya Sans Bold'), local('AlegreyaSans-Bold'), url(fonts/alegreya-sans-bold-latin-ext.woff2) format('woff2');
+ unicode-range: $latin-ext;
+}
+
+@font-face {
+ font-family: 'Alegreya Sans';
+ font-style: normal;
+ font-weight: 700;
+ font-display: swap;
+ src: local('Alegreya Sans Bold'), local('AlegreyaSans-Bold'), url(fonts/alegreya-sans-bold-latin.woff2) format('woff2');
+ unicode-range: $latin;
+}
diff --git a/scss/man.scss b/scss/man.scss
new file mode 100644
index 0000000..db02e86
--- /dev/null
+++ b/scss/man.scss
@@ -0,0 +1,39 @@
+@import '_webfonts';
+@import '_responsive_fonts';
+
+body {
+ background-color: white;
+ font-family: "Alegreya Sans", sans;
+ font-size: 1.4em;
+ line-height: 1.4;
+ margin: 1em auto;
+ max-width: 1024px;
+ padding: 0 1em;
+}
+
+table {
+ border-collapse: collapse;
+}
+
+.tbl td:not(:last-child) {
+ border-right: solid 1px;
+}
+
+.tbl td {
+ padding: 0 5px;
+}
+
+table.foot {
+ margin-top: 1em;
+}
+
+table.head, table.foot { width: 100%; }
+td.head-rtitle, td.foot-os { text-align: right; }
+td.head-vol { text-align: center; }
+div.Pp { margin: 1ex 0ex; }
+div.Nd, div.Bf, div.Op { display: inline; }
+span.Pa, span.Ad { font-style: italic; }
+span.Ms { font-weight: bold; }
+dl.Bl-diag > dt { font-weight: bold; }
+code.Nm, code.Fl, code.Cm, code.Ic, code.In, code.Fd, code.Fn,
+code.Cd { font-weight: bold; font-family: inherit; }
diff --git a/scss/style.scss b/scss/style.scss
new file mode 100644
index 0000000..af35784
--- /dev/null
+++ b/scss/style.scss
@@ -0,0 +1,125 @@
+@import '_webfonts';
+@import '_responsive_fonts';
+
+$font-sans: "Alegreya Sans", sans;
+$font-serif: Alegreya, serif;
+$font-mono: Iosevka, Inconsolata, monospace;
+
+$yellow: #ffd400;
+$canary: #ffffb3;
+
+body {
+ background-color: white;
+ color: black;
+ line-height: 1.4;
+ margin: 0;
+}
+
+h1 {
+ font-family: $font-serif;
+ font-size: 3.5rem;
+ font-weight: normal;
+ margin: 0;
+}
+
+code {
+ font-family: $font-mono;
+ font-size: smaller;
+}
+
+pre {
+ background-color: $canary;
+ overflow: auto;
+ padding: .7rem;
+}
+
+pre.poetry {
+ background-color: white;
+ padding: 0;
+ font-family: $font-sans;
+}
+
+blockquote {
+ background-color: $canary;
+ padding: .7rem;
+}
+
+blockquote > p {
+ margin: 0;
+}
+
+footer {
+ background-size: 200px;
+ height: 200px;
+}
+
+.frontpage {
+ background-color: $yellow;
+ font-family: $font-serif;
+ font-size: 4rem;
+}
+
+.post {
+ font-family: $font-sans;
+ font-size: 1.5rem;
+}
+
+nav.main ul {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ list-style: none;
+ margin: .5rem;
+ padding: 0;
+}
+
+nav.main li a {
+ background-color: white;
+ border: 4px solid black;
+ box-shadow: 10px 10px 0 black;
+ color: black;
+ display: block;
+ margin: .8rem .8rem;
+ padding: 0 .8rem;
+ text-decoration: none;
+}
+
+nav.main li a:hover {
+ background-color: black;
+ color: white;
+}
+
+article {
+ margin: 1rem auto;
+ max-width: 1024px;
+ padding: 0 1rem;
+
+ header {
+ border-bottom: 1px solid darkgrey;
+
+ a {
+ background-color: white;
+ font-weight: bold;
+ text-decoration: none;
+ }
+
+ address {
+ display: none;
+ }
+
+ time { font-size: smaller; }
+ }
+
+ img {
+ display: block;
+ margin: 0 auto;
+ }
+
+ hr {
+ border: 0;
+ border-top: 1px dashed grey;
+ width: 80%;
+ }
+
+ ul { list-style: square; }
+}
diff --git a/templates/index.xml b/templates/index.xml
new file mode 100644
index 0000000..afe96ec
--- /dev/null
+++ b/templates/index.xml
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>oriole.systems</title>
+ <link rel="stylesheet" href="style.css"/>
+ <link rel="alternate" href="atom.xml" type="application/atom+xml" title="oriole.systems atom feed"/>
+ <link rel="icon" href="logo.svg"/>
+ <meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1"/>
+ </head>
+ <body class="frontpage">
+ <nav class="main" data-sblg-nav="true" data-sblg-navcontent="true">
+ <a href="${sblg-base}.html">
+ ${sblg-titletext}
+ </a>
+ </nav>
+ <footer></footer>
+ </body>
+</html>
diff --git a/templates/post.xml b/templates/post.xml
new file mode 100644
index 0000000..617ce32
--- /dev/null
+++ b/templates/post.xml
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>${sblg-titletext} &#183; oriole.systems</title>
+ <link rel="stylesheet" href="../style.css"/>
+ <link rel="alternate" href="../atom.xml" type="application/atom+xml" title="oriole.systems atom feed"/>
+ <link rel="icon" href="../logo.svg"/>
+ <meta charset="utf-8"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1"/>
+ </head>
+ <body class="post">
+ <article data-sblg-article="true" data-sblg-permlink="false"></article>
+ </body>
+</html>
+
diff --git a/util/mdconv.sh b/util/mdconv.sh
new file mode 100644
index 0000000..19f4d4c
--- /dev/null
+++ b/util/mdconv.sh
@@ -0,0 +1,20 @@
+set -e
+
+title="$(lowdown -X title "$1")"
+date="$(lowdown -X date "$1")"
+author="$(lowdown -X author "$1")"
+
+cat<<EOF
+<?xml version="1.0" encoding="UTF-8" ?>
+<article data-sblg-article="true">
+ <header>
+ <h1>$title</h1>
+ <address>$author</address>
+ <a href="..">↖</a>
+ <time datetime="$date">$(date -d"$date" '+%A, %B %e, %Y')</time>
+ </header>
+ <main>
+ $(lowdown "$1")
+ </main>
+</article>
+EOF