Page

Re

Hello Internet Surfer,

I am a software developer in Canada. This is my personal website, where I blog about whatever I am learning and experiencing. In my down time, I am into a bit of running, a bit of coding, a bit of touch typing, and a bit of cubing that sort of thing. Pretty uneventful, honestly.

A little More details

  • Running: I mainly run half-marathons. My PB is 01:53:30.
  • Coding: I enjoy algorithmic problem-solving and used to be active in competitive programming. Since AI is making this less and less relevant, I haven’t competed much for a while. These days my main focus has shifted to Project Euler—I really hope to solve all the problems one day. I’m currently at 444 out of 985.
  • Touch typing: I’ve tried QWERTY, Dvorak, and Colemak-DH. I’ve reached 90+ WPM on all of them at some point, but eventually stuck with Colemak-DH. I’ve completed 56,000 races on TypeRacer, averaging 120 WPM with 99%+ accuracy. My daily driver is a low-profile, 5-column Corne. Detailed config.
  • Speed cubing: I mainly solve 3 by 3. My recent 100-solve average is 12.76 seconds, and my PB single is 7.75 seconds (scramble: F R2 D2 L2 B2 D2 R2 B' R2 B R' D' F U B' U2 B L F'). I’ve been cubing for a long time, but I’ve never competed in a WCA competition.

Nerd Stuff

Just some tech specs about how this site is built. Feel free to scroll right past this if its not your thing.

Frameworks

The site is built with Next.js and React, deployed as a static export. Styling is Tailwind CSS utility classes directly in markup, no separate stylesheet to maintain. Content lives in .dj files parsed with gray-matter for front matter and rendered with react-djot. Thats more or less the whole stack.

Why Djot

Djot is another markup language. It keeps the writing experience simple plain text first, with lightweight formatting and native math support but it still gives me precise control when I need it. The big reason I like it is attributes: Djot supports both inline and block attributes as a built-in feature. I can just write something like [this is red]{.text-red-500} and it renders as this is red with that class attached, so Tailwind can style it directly.

To make that work well in React, theres react-djot: a Djot renderer that mimics react-markdown, keeping the same component-driven workflow while using Djot instead of Markdown. It renders to React elements (no dangerouslySetInnerHTML), so it stays composable and avoids injecting raw HTML.

What I particularly like is how far its extension points go. You can override any nodes renderer via a components prop same idea as react-markdown. But each custom component also receives the raw AST node, and theres a standalone renderNode export you can call from anywhere. Together, these let you do structural transformations from the outside: for instance, this site turns [div.figure] blocks into proper <figure><figcaption> HTML entirely at the consumer level, without touching the library.

Contact & Licensing

Please feel free to email me with typo catches, broken links, or specific questions about a post. To save us both time, make sure your questions are specific and show what you have tried broad, open-ended questions are tough for me to answer over email.

Everything on this site is free to use just credit me and link back if you do.