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.
- 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.
- This is a feature of Diet, the template language I'm using.
- Menu items
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 "0.0.0.0" on HTTP (not HTTPS)! It is intended to be deployed behind
a reverse proxy.