Source code of the website deployed at
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Chris Josten bdb7615044
Fix building on NixOS
6 months ago
public/static Add more support for internationalisation, style changes 2 years ago
source/nl/netsoj/chris/blog Workaround broken l10n, upgrade deps 10 months ago
translations Fix whitespace 10 months ago
views Workaround broken l10n, upgrade deps 10 months ago
.gitignore Add accidentally removed files 2 years ago Refractor code 2 years ago Added README 3 years ago
default.nix Initial commit 3 years ago
defaultClasses.lua Add more support for internationalisation, style changes 2 years ago
dub.json Fix building on NixOS 6 months ago
dub.selections.json Upgrade dependencies 6 months ago
dub.selections.nix Fix building on NixOS 6 months ago
mijnblog.nix Fix building on NixOS 6 months ago
mkDub.nix Fix building on NixOS 6 months ago
shell.nix Initial commit 3 years ago

The source code of my website


An overview of the features of this piece of software:

  • Parses MarkDown files and transforms it into webpages (well, most of the credit goes to Pandoc)
  • Automatically adds new pages/posts when added in their respective directories.
  • D should be fast, and I've tried to move all the computationally expensive parts to occur only when adding/removing pages. Templates are compiled to native code when this software is compiled.


  • Assumes all posts fit into memory
    • I'm going to resolve this either by either lazy-loading the posts into memory (while keeping metadata) or by transforming this piece of software into an static website generator.
  • Really only meant as a blog for people with some kind of technical skill.
    • Writing MarkDown is not for everyone and remembering the MetaData keys.
    • It has no GUI for writing posts.
  • Assumes you trust its page authors.
    • Although you could prevent people from editing each others articles by placing them into subfolders with distinct user rights, you cannot prevent people from faking metadata.
    • Blog writers can inject arbitrary HTML and JavaScript in their pages.
  • A lot is hard coded:
    • Menu items
      • should be able to be configured via a configuration file
    • Page types (Page, Article, Project et cetera).
      • Not planning on changing this. Theoretically it shouldn't be too hard since they mostly are a definition of required/optional metadata properties but since the templates are compiled to D code, that means that also has to be compiled. If you can compile software, you most likely could also copy some code, modify it to your needs and call it a day. Routes are also hard coded and so on.
    • Routes are hardcoded
    • Basic server settings like bind address, port, ssl certificates.
      • Should be able to be set via a configuration file or command line parameters.
    • Templates
      • This is a feature of Diet, the template language I'm using.


This program assumes pandoc is installed and is in your $PATH. Ohter dependencies are resolved with dub.


The built binary must be executed with the public directory in its working directory. It is hardcoded to listen on 3465 on "" on HTTP (not HTTPS)! It is intended to be deployed behind a reverse proxy.