Skip to content
Portfolio
Community Platform

Phasmo Tourney

Five tournaments, five formats, one archive that still serves all of them.

phasmo-tourney.vercel.app (opens in a new tab)
Overview

A dedicated site for a Phasmophobia tournament series, covering five events. Each tournament kept its own format, and the site keeps each one's structure rather than flattening them into a single template: the second added brackets and standings, the third run records and player pages, the fourth statistics, and the fifth an eliminator, vote sessions, participant agreements and a timeline.

The earlier tournaments are served from JSON and the later ones from Firestore, so the archive stays intact while live events are administered through the back end.

The visual theme is a classroom blackboard.

The brief

The Phasmophobia tournaments this archives run in a format nobody else runs, and before the site existed there was nowhere to put the results. It is the record: every run, bracket, standing and elimination across all five series is still there and still readable.

It grew with the events rather than being designed once. Each tournament added what the previous one proved it needed — brackets and standings, then run records and player pages, then statistics, then an eliminator, vote sessions and participant agreements. Five formats, none of them retrofitted onto the others.

The archive looking deliberate changed how the events read to someone arriving new: a uniquely run tournament with a scrappy scoreboard is a hobby, and the same tournament with a real record of itself is an institution.

What it does
  • 58 routes across five tournament series
  • Brackets, standings, run records and per-run detail pages
  • Vote sessions with individual ballots
  • An eliminator format with its own session data
  • Twitch chat round administration
  • Participant entry forms, agreements and applicant review
  • Tournament data posters generated for sharing
  • Statistics views built with D3 and Chart.js
  • Role-based admin access
  • Mixed data sources — JSON for the archived events, Firestore for the live ones

Want something like this?