Tomi Chen

duosmium logo and text

Duosmium Results

January 2021 – Ongoing Source Live on the web

Web Science Olympiad

Duosmium Results is a Science Olympiad tournament results archive. Originally Unosmium created by RoboMarth, two other students took over the project, creating Duosmium. I joined the team in January 2021, contributing code and results. In February 2022, I took on a complete rewrite of the (previously Middleman) site in Eleventy. This significantly cut build times, especially with the addition of Netlify’s On-Demand Builders. I also rewrote the sciolyff package in JavaScript.

Throughout 2022, I contributed several new features to improve results viewing, contributing, and tournament scoring, leading Duosmium to become the gold standard in Science Olympiad results. Features like automatic award slides generation simplified life for tournament directors, while features like superscored results and filtering made Duosmium the go-to for competitors.

In summer of 2023, I took on the primary development of a custom, in-house scoring system, built in SvelteKit and using a Supabase backend. With this system, we hope to streamline (parts) of the tournament process, and make it easier for tournament directors to run their tournaments.

Duosmium Results is used by students and tournaments across the country for Science Olympiad results, with over 30k users and 50k monthly pageviews during the peak season. Duosmium has also been used as the official exclusive results provider for over 100 competitions, including the 2022 National Tournament, several state and regional competitions, and many high-caliper invitational tournaments.

a screenshot of duosmium results

2022 Duosmium Rewrite

Why?

As Duosmium grew, builds with Middleman were becoming longer and longer. Before the rewrite, builds would frequently take up to 10 minutes, which was not good to say the least. We were on the Netlify free plan, which only allowed 300 build minutes per month. In development, testing changes would require waiting 10 minutes for the site to rebuild, which made it almost impossible to add features or fix issues.

Choosing a new static site generator

After some consideration, I decided to rewrite the site using Eleventy. Not only is Eleventy still actively developed, its structure is very similar to Middleman. Eleventy also enables the use of Netlify’s On-Demand Builders, which further cuts build times.

Because of the similar structures, porting the site to Eleventy was pretty easy. It mostly consisted of changing the ERB templates to Nunjucks and rewriting some helper functions to JavaScript. Rewriting sciolyff, the results format parse, was a bit trickier. I had to be careful not to introduce any regressions!

New features

The new architecture allowed for features not previously possible. For example, superscored results (where team results from the same school are combined) were now possible since they could be generated at request time, and cached indefinitely. If we had to generate them at build time, we would’ve needed to build over 1200 pages, most of which will never be accessed.

Other features I contributed include score histograms, event filtering, explicit placements, high-score-wins scoring, improved search, and a new SciolyFF Previewer/CSV Converter.

I also added tests to sciolyff using AVA to hopefully catch any regressions. I didn’t implement any unit testing because I’m lazy and end to end snapshot testing is “”“good enough”“” 😁