Hand-written

Every page is hand-written HTML, CSS, and vanilla JavaScript. There's no framework and no bundler. Each tool on this site is a self-contained HTML file that works on its own.

The build script

A small script, build.js, turns the source files into the live site. It:

  • Renders the resume from a Markdown file into HTML
  • Generates a Chinese version of each translated page
  • Builds the sitemap
  • Checks every internal link, and fails the build if one is broken

There's no static site generator behind any of this. With around 30 pages that change slowly, copying a bit of markup between files is cheaper than adopting a new tool.

Chinese pages

Each Chinese page is generated at build time. The build script matches English text in the page against a translation file and swaps in the Chinese. The translation was done with machine help, and it hasn't been checked yet by a native Chinese speaker.

Testing and linting

Tests run on Jest. Linting and formatting run on ESLint, Prettier, Stylelint, and HTMLHint. Git hooks run the linters before a commit and the tests before a push, and the site deploys to GitHub Pages only after the build, the tests, and the linters all pass.

Design

The theme switcher cycles between light, dark, and your system setting. Keyboard shortcuts work across the site — press ? to see the list. Text uses your system's own font, not a downloaded one.

Source

View the source on GitHub