Skip to content

tomdale/tomdale.net

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This is the source code for my website/blog, tomdale.net. It is a handrolled static site generator written in TypeScript.

License

The source code for the static site generator is released under the MIT license; I hope it is useful to you!

The contents of the site (i.e., anything not inside the src/ directory) remains my copyright with all rights reserved.

Layout

  • src/ - the source code for the static site generator
  • pages/ - Individual pages
  • posts/ - Blog posts, by convention grouped by year (but it'll find 'em wherever you put 'em)
  • public/ - Static content that will get included during a deploy
  • styles/ - Sass stylesheets. style.scss is the entry point; everything else must be manually imported.
  • templates/ - Handlebars templates. Partials start with an underscore.
  • dist/ - the built output

Commands

  • npm start - starts the development server at http://localhost:4000/
  • npm run build - builds a static version of the site to dist/
  • npm run build:production - same as above with minification and other optimizations applied
  • npm run minify - runs the minification step against dist/
  • npm run deploy - manual deploy to Netlify

Architecture

The Generator (src/generator.ts) is like a router (in fact it uses route-recognizer.js to do route matching). Files are scanned to create an in-memory database and wrapped in the appropriate model class (see src/models/).

In development, an Express server runs and routes requests to the generator, which finds the appropriate model in the in-memory database and renders it with the route's Handlebars template. (The file database and templates are rebuilt every request so changes are reflected without having to restart the server.)

When doing a static build of the site, the contents of the database are enumerated and a representation for each item is built. (This is where route-recognizer.js's ability to both serialize and deserialize paths really comes in handy.)

Markdown content is rendered with marked and syntax highlighting is done with highlight.js (see src/utils/marked.ts).

Media files can be colocated with a Markdown source file and inherit its URL. So, for example, if you had:

  • posts/foo/bar/baz/bang/dumb-post.md
  • posts/foo/bar/baz/bang/some-image.png
  • posts/foo/bar/baz/bang/songs/power-of-love.mp3

They would end up being generated at the URLs:

  • 2017/06/dumb-post/index.html (rendered post)
  • 2017/06/dumb-post/some-image.png
  • 2017/06/dumb-post/songs/power-of-love.mp3

TLDR you can put any post or page in a directory and any assets you throw in there with it will be grouped correctly based on the routing rules specified in the generator.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published