Tomi Chen

Tomi’s Blog

Sometimes I make things, and sometimes I’ll write about what I’ve made. This blog aims to explain my thought process behind decisions I make, as well as other things I find interesting.

RSS Feed.

Latest Posts

APR. 16, 2022

Responsive Images in Markdown with Eleventy Image

I love markdown's simplicity and convenience, but sometimes you need a little more than the default image tag. In this post, I walk through how responsive images (with the picture tag) are handled on this blog in a way that doesn't compromise the authoring experience.


APR. 10, 2022

A Contrast-Focused Color Picker

Choosing colors with good contrast is a critical part of accessible design in all formats and mediums, but it can be difficult to pick these colors with tooling that wasn’t created with contrast in mind. I’ve always wanted to have a color picker that would visually display which colors had sufficient contrast against a base color, but couldn’t find any existing tools that had this feature. So I built it myself!


JAN. 18, 2022

Redesigning SciOlyID: My process for building websites

sciolyid logo and text

This post will outline my process for building and designing websites, from planning to production. I'll go into how I redesigned the SciOlyID website through structure, functionality, and design.


SEP. 5, 2021

Tracking Positive COVID-19 Cases in My School District

covid tracker social image

Last month, school started in person, and while masks are required, students are still crowded into classrooms. Our school district has a Positive Case Dashboard that lists the number of students and staff on campuses that test positive for COVID-19, but no historical tracking or info on daily changes. I decided to use Simon Willison’s git scraping technique to store historical data about positive cases and track changes over time.


JUN. 9, 2021

Improving Mobile and Keyboard Usability in TwemojiExplorer

I recently built TwemojiExplorer, a website that gives convenient access to Twitter's Twemoji emoji set. Since the site is primarily a tool for my personal use, I did not put too much thought into keyboard or mobile usability during the initial development process. Now that I have a bit of time, I decided to tweak a couple of small things to make the experience better.


JUN. 8, 2021

Searching and Displaying Large Datasets with Svelte

social image

Searching large datasets can be a challenge, especially with live updates as the user types. Not only is re-rendering thousands of DOM nodes taxing on memory, but the heavy processing involved can also make the page unresponsive. Here, I'll share my process of working through these issues and improving the user experience on a new project.


JUN. 1, 2021

Rate-Limiting Your Serverless Endpoints Without A Database

social preview

Serverless is all the rage in modern web development, especially serverless functions—threads that spin up for each request. This is great for keeping costs low, but it also means that each request starts fresh, so any rate-limiting information needs to be persisted to a database. Right? Perhaps not...


APR. 11, 2021

The Creation of CapitalFish: An incremental game built with SvelteKit

Over spring break, I decided to try out SvelteKit, which recently released its public beta. I thought it would be a great opportunity to build something fun. I already had the idea of creating an incremental game similar to Cookie Clicker, so what better way to learn a new thing than actually using that new thing? Join me as I rant about JS frameworks and explain how I created the game!


JAN. 19, 2021

Converting BirdID's web API to FastAPI

Over the weekend, I worked on converting BirdID's web API to FastAPI instead of Flask. While I did not notice many performance issues or other issues with Flask itself, I was noticing some errors relating to using to connect up Flask (which is synchronous) and a lot of the associated BirdID functions (since is asynchronous).


DEC. 21, 2020

First Blog Post

Hello! Welcome to my blog! I've just spent the last few days adding this blog to the site—making and styling templates, updating fonts, and ensuring images are responsive. While a personal site is never truly finished, it's now in a state where I feel comfortable publishing.