
The Picks Project: Building an NFL Pick'em Platform from Scratch
How I built a full-stack NFL pick'em platform from scratch to learn the modern JavaScript stack — my first project delivered 100% solo, now at 150+ users.
About a year into my role at Under Armour, I realized I was spending most of my time in a stack I hadn't built from scratch before — Next.js, Vercel, the modern full-stack JavaScript ecosystem. I was learning on the job, but I wanted a space where I could experiment without the guardrails of a large enterprise codebase.
I was already running fantasy football leagues with friends and coworkers. So I thought: what if I built a weekly pick'em alongside it? Something people could opt into, low stakes, but a real product with real users — a reason to go deep on the tools I was using at work, on my own terms.
That's how The Picks Project was born.
What It Does
The idea was simple: an automated NFL pick'em platform where users sign up, join or create groups, make their weekly picks, and track how they stack up. What started as a tool for a small group of football fans has grown into a platform with over 150 registered users and 30+ active pickers every week, running their own pools with custom rules.
How It's Built
The app is structured as a monorepo — partly for clean separation of concerns, but also with an eye toward eventually shipping a native mobile version down the road. The web app is built on Next.js, styled with Tailwind CSS, backed by Supabase for auth and the database, and deployed on Vercel.
Stack at a glance: Next.js · Tailwind CSS · Supabase · Vercel · GitHub Actions
A cron job running on Vercel scrapes the ESPN API each week to pull in schedule and game data, storing it in Supabase. That gives me a historical record I've used to build out season history views — something I added mostly for fun, but users genuinely enjoy browsing.
On the React side, I leaned into some patterns I'd been refining at Under Armour: component composition over prop drilling, custom hooks for shared data-fetching logic, and keeping pages thin while pushing complexity down into reusable modules. Nothing revolutionary, but it made the codebase a lot easier to maintain solo across multiple seasons.
Features That Grew From Real Feedback
Groups are a big part of the experience. Pool owners can create private pools, invite others, and configure custom scoring — weighting wins, penalizing wrong picks, or adding tiebreakers.
Each season I've iterated based on real feedback from real users:
- Custom pool scoring — configurable per group
- Season history views — full historical record for each group
- Slack notifications — automated alerts for cron events so I'm not babysitting the app
- Auto-generated changelogs — a GitHub Actions pipeline that creates release notes as part of CI/CD
The Bigger Lesson
The shift in mindset — from "thing I built" to "thing people use" — has been one of the most valuable parts of this project. Shipping to real users forces you to think differently about every decision. Features get cut, UX gets reconsidered, and the things you thought mattered often don't.
I've also kept SEO and polish front of mind, because a side project that looks like one isn't doing you any favors.
You can check it out and make some picks at thepicksproject.com.