EscBACK

// PERSONAL

A COLD-PITCH REDESIGN FOR A 15-YEAR TOURNAMENT ARCHIVE

An unsolicited redesign proposal for wellingtonchess.club — a rebuilt homepage and a Python migration of 95 tournaments' worth of hand-typed results into one searchable archive, with zero results retyped by hand.

CLIENT
Wellington Chess Club
ROLE
Web design, Front-end development, Data migration
DURATION
3 days
YEAR
2026

I'd been down to a few Thursday sessions at Wellington Chess Club — good group of people, genuinely well-run club. What caught my attention wasn't the chess, it was the website: fifteen years of tournament results, 2011 through 2026, sitting in hand-typed HTML with per-page inline CSS and no way to search across any of it. So I built an alternative version, on my own time, to see what it could look like. This is that build — a cold pitch I put together, not (yet) something the club asked for or has seen.

Respecting what already works

Before touching anything, I spent time figuring out what not to change. The site is fast, has no tracking, the committee is named and reachable, and the club's Instagram has 117 posts of real effort behind it. None of that needed fixing. The actual gap was structural: fifteen years of results existed only as a long list of individual year pages, each hand-formatted slightly differently depending on who was maintaining the site that year.

Parsing fifteen years of drift

The archive migration was the real work. Results had been recorded in at least four different formats over the years — round-robin score matrices, Swiss pairing lists, and a handful of legacy one-offs that didn't match either pattern. I wrote a Python script (generate.py) that detects which format a given page uses, parses it with format-specific logic, and validates the result before rendering it as a real HTML table.

The rule that mattered most: anything the script couldn't confidently parse got left in its original form rather than guessed at. Getting a chess result wrong — swapping a win for a loss, misreading a crosstable — isn't a cosmetic bug, it's a real record of someone's game being misreported. Ninety-five tournaments and 154 crosstables were converted this way, with zero results retyped by hand and zero guessed at.

One template instead of ninety-five

The original site repeated its header and navigation on every single page, which meant any small change meant editing dozens of files. The rebuild replaces that with one shared template and one stylesheet, plus a searchable archive index that sits alongside the existing year-by-year browsing rather than replacing it. External tools the club already relies on — Vega for pairings, Lichess for game broadcasts, NZCF for federation records — were left untouched and simply linked to. They already do their job; rebuilding them wasn't the point.

Why I built the pitch this way

The proposal document itself follows the same restraint as the build: every change is framed as optional, several sections are explicit about what I'd leave exactly as-is if the committee prefers, and nothing assumes the club owes me anything for unsolicited work. That's a deliberate choice — the site's redesign has to earn its case on its own, not on the strength of a sales pitch.

Where this actually stands

This hasn't been sent to the club yet. It's a live, working demo — wellington-chess-club.vercel.app — built to the point where I'd be comfortable sharing it, not a mockup. The honest next step is the cold outreach itself: sending the pitch, and finding out whether "here's a working alternative, free to host, no operational changes required" is a compelling enough case on its own.