Full-stack · Louisiana Chess Association
LCA Website Platform
Outcome: The Louisiana Chess Association's full platform, built from scratch: tournaments, registration and payments, clubs, membership and news in one place.



Homepage: photo slideshow hero over live columns of tournaments, Facebook posts and clubs.
HOW IT'S BUILT
- 01React + TypeScript UI
- 02Pages Functions API
- 03D1 database
- 04Supabase · Stripe · Resend
- 05Cloudflare deploy
The problem
I took over the association's website in June 2025. It was a Google Sites page, with tournament registration handled on a separate third-party site.
The data
Designed for about 600 member profiles, 50 people online at once, and tournaments every couple of months with up to 100 players. The database holds members, clubs, tournaments, registrations, payments and games, built up across more than 20 migrations.
Approach
React 19, TypeScript, Vite, Tailwind and shadcn/ui on the front end; Cloudflare Pages Functions and a D1 (SQLite) database behind it; Supabase for sign-in, Stripe for memberships and entry fees, and Resend for email. Features include tournament registration and management with a FIDE Dutch pairing engine, a club directory with a map, a news feed from the association's Facebook page, admin tools for group email and site announcements, and club logo uploads stored in R2.
Validation
Before launch I audited the codebase and fixed what turned up, including a Stripe webhook without signature verification and an endpoint that exposed contact-form messages. The backend now has 50 integration and 62 unit tests that run in CI on every pull request touching it.
Result
Launched at louisianachess.org in July 2026, replacing the old Google Sites page.