chaseadams.io

How my personal website is architected and built.

2 minute read

Site Architecture

My site is built with (with strict enabled). It's deployed and served with .

Libraries

I use a variety of JavaScript libraries and frameworks:

  • - full stack web application framework for and
  • Tailwinds CSS - styling and design system
  • , Remark and Rehype for my rendered content
  • for formatting dates
  • ts-node for running scripts

Fonts

  • Sans Serif (Title): Tillsdale (Link to BN Tillsdale)
  • Sans Serif (Body): Public Sans (using @fontsource)
  • Mono: Jet Brains Mono (using @fontsource)
  • Hand Writing: Palmer Lake

Content

All of the content files are notes written in flavored Markdown.

Notes are copied from the vault directory on my local machine into a private git repo that I use as a .

{
    "cp-notes-and-images": "rm -rf src/content/* && ts-node --esm scripts/get-notes/run.ts"
 }

The content is stored in version control simply to reduce storing and fetching it from somewhere else.

  • All posts are copied into src/content/posts/<FILENAME> and served as /posts/<SLUGIFIED FILENAME>/

When the site builds, the paths are flattened out.

As an example, the file for the content you're currently reading lives in the vault path 40 - Projects/chaseadamsio.com. When the content is served, it will be served at posts/chaseadamsio.com.

Serving content at the posts root (instead of the full path from ) makes the URL path durable. I can move it into a different directory and the URL path will persist at the same location it did before.

Scripts

I use a few scripts to stitch everything together:

  • A script to copy my files with status: published into my repo's content directory

notes.curiouslychase.com

I was originally using and serving the site but found the solution wasn't meeting my needs.

For durability purposes, I created a site that uses a redirects function to redirect my paths from notes.curiouslychase.com to curiouslychase.com/posts.

Overview

This is an section that allows me to keep tabs on what's published and if it's missing metadata.

dv.table(["Note", "Description"], dv.pages().filter((p) => {
return p.status === "published" && !p.fileClass
}).map(p => [p.file.link]))

changelog

  • 2023-06-14 updated note to match new build and deploy ( and )
  • 2022-10-05 - added "notes" to the homepage