Brenton Cleeland

Footy Fixture (.txt)

Published on

I've made a quick and dirty website for viewing the AFL fixture called footyfixture(.txt). Check it out if you're sick of bloated websites filled with tracking and gambling advertising.

If you go to the Official AFL Fixture you might not realise immediately that the page is loading 870 KB (4.38 MB uncompressed) of Javascript, 116 KB (1.09 MB uncompressed) of CSS and 848 KB (2.3 MB uncompressed) of images. All up, that page downloads over 2 MB of content to show you what effectively amounts to 9 rows from a table. That 2 MB uncompresses to almost 10 MB of content to show you the current round of matches.

Couple that huge size with a total of 25 different domains being connected to, at least 17 of which are used for serving ads or some other sort of tracking. If you leave the page open for 5 minutes it ends up making > 200 HTTP requests for various things. In amoungst those requests are constant check ins with analytics services, refreshes of the betting odds for the matches and information about your browser session being sent to performance monitoring tools.

To battle that, for my own personal use, I've made a plain text version of the fixture. This is inspired by Plain Text Sports, F1 Calendar and my continuing push towards more modest and minimalist web experiences.

Footy Fixture has some very simple goals:

The reality is that 198 games is actually a decent amount of data, and even when you make the source somewhat ugly HTML is very verbose. We come in at a little over 5 KB when gzipped. There's no javascript on the page and just a little bit of CSS to get that monospaced-text file look.

The data comes straight from afl.com.au via their afliapi.afl.com.au endpoint for listing matches. You can see this endpoint being called repeatedly from the official fixture page. Check out Julia Evan's deep dive into using undocumented web apis for a strategy you can use to discover and use these sorts of APIs. In this case there's definitely some rate limiting or bot detection in place – I'm only calling this API once every 5 seconds, and only building the project a couple of times a day to avoid being blocked.