My personal website
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Fix a nit with the stylesheet Jul 20, 2018

My personal website

This is probably uninteresting to you unless you want to see the source code of my personal website. And if you do, you're looking at a giant, perpetual work in progress. Nothing too interesting.

Things I still have left to do:

  • Make a Heroku server to deal with AJAX-based email better.

  • Make the blog more scalable (hundreds of posts should be paginated). Low priority until I actually have a lot of posts.


You need at least Node.js v4.0 to build this. And although this might build on Windows or OS X (I'm running Linux), since I have made efforts to try to make the build system work there, I can't guarantee anything.

First, before you run anything, run npm i.

  • node server - Start the dev server.

  • node make clean - Clean dist/.

  • node make compile - Compile the site in dist/. This cleans the directory first.

  • node make lint - Lint the JavaScript in the code base.

  • node make - Run lint, then compile. It's equivalent to node make lint compile

  • There's also node make deploy, but that requires push privileges first.

If you'd prefer, there's also npm run compile for node make and npm run server for node server

Description of files:

  • src/

    Where all the client files are. This includes Pug, CSS, and JS files.

  • blog/

    Where my blog posts live, all written in Markdown, particularly GitHub-Flavored Markdown (with YAML metadata). The metadata + a short preview generated by scripts/compile-markdown-preview.js is pulled out and compiled, and the results for all files aggregated into dist/blog.json (which doesn't exist in this directory). The contents are stripped and written to dist/blog/ The server does an equivalent action, but recompiles the data on demand.

    You can find more info within the README there for the format.

  • original/

    All the full-size original fonts and images that don't make it to the web.

  • dist/

    Where all the auto-generated files are.

  • dist-base/

    A template for dist/

  • make.js, scripts/make.js

    Built off of my homegrown build system, an experiment with a truly concurrent JS build system, not merely asynchronous like Gulp or Grunt. And this isn't exactly a massive website written in 10 different languages, so that simplifies the matter.

  • server.js, scripts/server.js

    A simple dev server. Easy to use, and works for the job. It took a fraction of the time it would normally take for most of the premade solutions for the initial prototype (before the blog and transition from plain CSS to Stylus).

    Note that this loads the home page at http://localhost:8080/website, so that I can guarantee it's viewable on both and

  • scripts/

    My build system experiment + helper utilities.


  • Pug, for preprocessing HTML.

  • Stylus to preprocess the CSS.

  • Autoprefixer, for automatically adding prefixes to the CSS. This is used via the autoprefixer-stylus plugin.

  • Express + a couple related middlewares, for a simple development server that "just works" without extra annoying configuration (it's only a few small files).

  • HTML Minifier + Clean CSS + UglifyJS for minifying the files before they go into the wild, where people don't need to download pretty source code to view pretty content. 😉

  • A custom build system for this thing, as an experiment with a truly concurrent JavaScript-based and promise-based build system. The initial callback-based prototype was written about as quick as a typical setup would take, but it didn't scale very well. So I turned to promises, and started experimenting. It turned out surprisingly elegant.

  • GitHub Pages, to host this thing.


© 2018 and later, Isiah Meadows. Some Rights Reserved.

All the content in this website is under the CC-BY 4.0 International, and the source code of this website is under the ISC License, unless otherwise stated. Both of these licenses may be viewed in the LICENSE file.

One example includes my music, in which many of the older songs are under the CC-BY-SA or CC-BY-NC licenses. I am trying my best to make sure that's clear here and in the website. Note that those aren't even hosted here.