Project Case Study

Draftastic

A realtime team drafting app born from watching a tournament spend an hour picking teams over a conference call and a spreadsheet.

Date

2023

Type

Personal Project

Stack

Next.js (App Router), TypeScript, PostgreSQL, Tailwind, Prisma, tRPC, Shad (Radix) UI, WebSockets, Vercel

01 / Context

Context and Objective

I was in a tournament where we needed to pick teams in a 'captains style draft'. Someone was managing it over a conference call, tracking everything in a spreadsheet. It took over an hour to draft 100 participants into 20 teams. I knew this could be so much better.

I also wanted to build something properly full-stack for once. My personal projects had been pretty front-end heavy, with backends mostly just serving static data. Draftastic was my chance to build real CRUD functionality end-to-end.

Captains-style draft in progress with partially filled teams and available player pool.

Figure

A captains-style draft in progress: teams fill up in real-time as captains make their picks.

02 / Architecture

Architecture and Delivery

  • Next.js (App Router)
  • TypeScript
  • PostgreSQL
  • Tailwind
  • Prisma
  • tRPC
  • Shad (Radix) UI
  • WebSockets
  • Vercel

I used Next.js with the app router (which was brand new at the time). One of the best parts of this project was implementing tRPC for end-to-end type safety - it's genuinely delightful when your frontend and backend stay in sync automatically.

For styling I went with Tailwind CSS and Shad UI for accessible components that play nicely together. WebSockets handle realtime updates so everyone sees picks as they happen - the collaborative feel was important to get right.

Context menu for a participant showing swap, move, and reassign options.

Figure

Quick adjustments: swap players between teams or reassign on the fly.

03 / Trade-offs

Challenges and Trade-offs

The hardest part wasn't engineering - it was design. Building and designing a project this size solo really exposed my limitations. Creating a delightful experience on both mobile and desktop is genuinely difficult, and I have a new appreciation for how hard good UX really is.

Feature creep has been a constant battle. I have way more ideas for Draftastic than I have time to build (full-time job and all). Learning to ruthlessly prioritise what actually matters to users has been key to not burning out.

Auto Pick Teams dialog with options for balancing by golf handicap.

Figure

Auto Pick: balance teams algorithmically or let AI distribute by custom criteria.