Personal Website

GitHub Repo

My personal website is my home on the web.

I made this site because I want to have an online presence, but I don't want to use social media (e.g. Instagram, Twitter), nor do I want to use someone else's premade blogging platform (e.g. Blogger, Tumblr, Wordpress).

My solution was to code an entire site from scratch.

Tech

This site is completely static and is written entirely in pure vanilla HTML, CSS, and JavaScript. It uses a few unavoidable premade libraries and services, but it's completely free from major frameworks (e.g. React, Vue.js, Angular).

External Libraries

GitHub Pages

This site is hosted on GitHub Pages. I chose GitHub Pages because it's free, seems reputable, and I was already going to use GitHub for source control.

My Github Pages deployment workflow

Build

Each blog post is stored as a Markdown document, and is built into HTML by my custom static site generator. My SSG searches the blog_src directory for markdown files, reads the file contents, and applies it a template to create HTML files. It also dynamically updates other files (like the All tag page) with links to each blog post. I also wrote a pre-commit hook that runs build.py before each commit, ensuring I don't forget.

Web Components

I've utilized Web Components for things like the header, footer, and buttons.

This allows me to just quickly drop in an \<ethan-header> element, and the header will be instantiated in Shadow DOM.

Style Guide

I had a moderately specific vision for what I wanted my website to look like, and I think I accomplished that well with 500+ lines of CSS.

Color Palette

Typography

Special Effects

Lighthouse

As of June 9, 2025, the site earns an average Lighthouse score of 99.75.

A Lighthouse analytic page showing 99 performance, 100 accessibility, 100 best practices, 100 SEO

It's very close to a perfect score, but I lost one point in performance because of the 520 milliseconds (half a second) it takes to download the font.

Privacy

This site does not use cookies, trackers, analytics, or any external telemetry tools. This is partially because I care about your privacy, but mostly because I don't care about your personal information and harvesting it sounds complicated. Your data remains yours because I don't want it and can't figure out how to get it.

Accessibility

This site is designed to be accessible to as many users as possible. I've done my best to follow best practices regarding meta tags, semantic markup, keyboard navigation, and alt text. Also, before each git push I test every single page in Firefox's Responsive Design Mode to ensure that the site remains functional on different devices and screens.

Conclusion

My personal website is one of my favorite projects I've ever made. It's aesthetically pleasing, serves a purpose, was fun to make, and forced me to learn new programming concepts.

I'm proud of my little corner on the web, and I hope you enjoy it as much as I do. Thanks for reading.

~Ethan