This website
A lean personal site to share projects and notes, built on EmDash and self-hosted on my own VPS.
This site. A lean personal place to share what I'm building, with an editor in the browser so publishing a project or a note takes minutes instead of an evening.
Why
For a long time, my projects stayed on my laptop. I wanted one public place to put them, in the spirit of the personal sites that regularly show up on Hacker News: a narrow column, plain text, projects and notes, no marketing.
I had three requirements:
- Easy to publish. Writing something shouldn't require opening a code editor or running a build.
- My own hosting. It should run on my own VPS, not on a platform I can't move away from.
- Lean. Fast pages, no tracking, nothing that needs maintaining for its own sake.
Why EmDash
I started with a plain static site generator, but publishing meant editing files and deploying. WordPress would have solved the editing part, but brings a lot of weight with it.
EmDash sits in between: an open source CMS built on Astro, with a full admin interface, structured content and plugins. I wrote about my first impressions in From WordPress to EmDash: first impressions.
How it's built
- EmDash on Astro, rendered on the server, so new content is live as soon as it's published
- SQLite for all content, and a local folder for uploads: the whole site is one Node process and two folders to back up
- Node in standalone mode, behind nginx as a reverse proxy, managed by systemd on the VPS
- Paths for the database and uploads come from environment variables, so the same build runs locally and in production
Content model
- Projects come first. Each project has a summary, a year, a phase (active, done, experiment or paused), optional links and a set of technologies. Technologies are linked, so you can see every project built with, say, Home Assistant.
- Writing is for the longer stories behind the projects: how something was built, what went wrong, what I learned. Posts have tags.
- Pages like About are simple content pages.
Design
Deliberately plain. One narrow column, system fonts, lists instead of cards, links that look like links, and a dark mode that follows your system setting. No web fonts, no JavaScript framework for visitors, no cookie banner, because there's nothing to consent to.
Contact without an email address
I'd like people to be able to reach me, without publishing my email address. The About page has a small contact form instead. Messages land in the admin, protected against spam bots with a hidden honeypot field. Email notifications follow once the site runs on the VPS.
How I publish
Most of the time, I write in the EmDash editor in the browser. I also use EmDash's command line tool, which converts Markdown to EmDash's structured content format. That's what makes it easy to work on texts together with AI: I bring the ideas, experiences and drafts, and AI helps turn them into clear English. I'm open about that on the About page.
Learnings
- Start lean, then add design. Beginning with a bare template and adding only what I needed kept the site small and fast.
- Structured content pays off. Fields like year, phase and technologies make it easy to build lists and filters without hard-coding anything.
- Seed files are for empty databases. EmDash only applies its seed file to a fresh database. After that, content lives in the database, and the seed is a starting point, not a source of truth.
- Plugins are small but young. The forms plugin did exactly what I needed, with a few rough edges to smooth over in the theme.
Status
Running and filled with the first projects and posts. Not yet on its final home: deployment to my VPS and a domain are next.
Next steps
- Deploy to my own VPS
- A domain name
- Email notifications for the contact form
- An RSS feed, so people can follow along