This repository contains the source for huntercolson.dev, Hunter Colson's personal website.
The site is a static Jekyll project. There is no application backend or database; Jekyll turns the Markdown, layouts, data files, CSS, JavaScript, and assets in this repository into the public site.
- Essays, posts, and tutorials written in Markdown.
- Jekyll layouts and includes that define the site structure.
- Small browser scripts for navigation, tag filtering, table-of-contents behavior, and homepage interactions.
- Site styles, fonts, icons, and downloads.
- Lightweight validation scripts for checking posts and front-end code.
_config.yml Jekyll configuration, collections, and build excludes
_data/ Site navigation and structured page data
_includes/ Shared Jekyll partials
_layouts/ Page and post layouts
_posts/ Published blog posts
_tutorials/ Published tutorials
assets/ Site fonts, downloads, and icons
css/ Site stylesheets
js/ Browser modules for navigation, filtering, TOC, and homepage effects
pages/ Top-level listing pages
tests/ JavaScript unit checks
tools/ Validation helpers
To run the site locally:
npm install
bundle config set --local path vendor/bundle
bundle install
bundle exec jekyll serve --host 127.0.0.1 --port 4000Then open http://127.0.0.1:4000.
Local dependency folders such as vendor/bundle, .bundle, and generated build output are ignored by git.
Useful checks for the source:
npm run prepublish:posts
npm test
bundle exec jekyll buildjs/main.jsstarts the page and handles external links.js/ui.jsowns navigation, the scrolling header, anchors, and theme controls.js/post.jsowns the article contents drawer and current-section tracking.js/blog-tags.jsfilters the existing listing markup; there is no duplicate JSON feed.js/utils.jscontains shared focus and scroll helpers.js/hero-scramble.jsandjs/home-lab.jspreserve the homepage effects.
The stylesheets are plain CSS; no CSS compiler is needed. Theme selection runs in
_includes/head.html before first paint. Core controls initialize without waiting
for fonts. Keep the version strings on module imports aligned when releasing a
script change, so browsers receive the updated dependency graph.
Run the complete validation before publishing:
sh tools/validate.shThis runs lint and regression tests, builds Jekyll, validates the generated HTML,
and checks local links, fragment targets, fonts, and module imports. It requires
Node, the Ruby dependencies above, and Python 3. npm run lint:html and
npm run check:site require a fresh build. npm run build only builds locally;
it does not publish. GitHub Pages publishes the root of main.
For UI changes, also check both themes at phone and desktop widths, scrolling after clicking the theme button, keyboard focus, Escape/overlay drawer dismissal, contents jumps, tag filters with Back/Forward, and reduced-motion rendering.