personal website powered by a custom Typst-based static site generator https://web.youwen.dev/
  • Haskell 67.6%
  • Nix 16.5%
  • Typst 11.2%
  • JavaScript 3.5%
  • Just 1.2%
Find a file
2026-01-05 15:32:56 -08:00
.github/workflows treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
css treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
cv cv: clean up education dividers 2026-01-03 16:06:50 -08:00
fonts treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
nix treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
posts fix(universal-constructions): functor names 2026-01-05 15:32:56 -08:00
root content(/): update quote 2026-01-03 20:18:31 -08:00
src feat: add notes dir 2026-01-04 02:22:21 -08:00
static treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
typst/pkgs/html-shim/0.1.0 fix: figures in pdf export 2026-01-04 05:05:44 -08:00
.envrc initial commit 2025-04-20 15:25:15 -07:00
.gitattributes treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
.gitignore treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
.hlint.yaml treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
.prettierrc chore: enable prettier 2025-12-04 16:03:40 -08:00
cabal.project treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
flake.lock flake.lock: Update 2026-01-02 21:19:48 +00:00
flake.nix feat: use minhtml to minify everything 2026-01-03 17:32:10 -08:00
fourmolu.yaml treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
justfile treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
LICENSE treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00
README.md fixup! fix(readme): link 2026-01-02 16:33:22 -08:00
rednoise.cabal chore: remove -X args from cabal (alr specified in extensions) 2026-01-03 18:02:00 -08:00
tailwind.config.js treewide: replace with redesign from https://code.functor.systems/youwen/rednoise 2026-01-02 04:25:46 -08:00

web.youwen.dev

This is my personal site. It is built using a rather hacked version of the Hakyll system, a static site generation framework configured using the Haskell language.

You can view the site at web.youwen.dev, deployed using GitHub pages and cached through Cloudflare's CDN.

tech stack

build time

  • Haskell
    • Hakyll (the static site generator library I use)
    • blaze (an HTML combinator library I use for templating)
    • clay (CSS preprocessor as a Haskell eDSL)
    • pandoc (this one needs no introduction)
    • LiquidHaskell (a highly experimental theorem prover which refines Haskell types using logical predicates to guarantee correctness, developed at UCSD)
  • Nix
  • Typst

run time

  • HTML
  • CSS (tailwind)
  • JavaScript (almost none, soon to become PureScript)

hacking

(only works on Linux because Im lazy.)

Install nix, then run this to compile the SSG binary, which you can run with result/bin/rednoise watch for a hot reloading server. Here you can hack on the Typst source files to edit the content without recompiling everything.

nix build

To run a local preview server (not hot reloading) of the production website (sans the fonts),

nix run
# server will run at localhost:8000

To get a development environment,

nix develop

Or you can direnv allow, if you have it. A pre-commit hook will also be installed automatically. Inspect justfile for useful scripts.

Before submitting a PR run all Haskell tests, formatting checks, lints, etc, using

nix build .#checks.x86_64-linux.pre-commit-check

Note that nix flake check always fails due to haskell.nix IFD jank so we have to run the pre-commit-check explicitly, which bundles all other checks.

license

Most markup content (primarily in Typst files) is CC-BY-SA-4.0. The rest (that is, everything not covered by the Creative Commons license), including but not limited to logical code units, is GPL3 licensed. This includes any Typst code that does not contain useful content (i.e. prose), but rather is used for programming purposes.