LBTryout
Lifeguard Tryouts onboarding app for LBFD

How the idea was born
While working as an ocean lifeguard for the Long Beach Fire Department, I spent three consecutive March tryouts running up and down the ramp at our headquarters to run the time sheets, which were then tabulated on Excel by a very tense Marine Safety Officer.
The whole process to me just felt very outdated, error-prone, and easy to automate. I wanted to give the tryout a single instant source of truth, to be able to enter a time and have the rankings update immediately. So, after the winter of my first semester of college, I set out to build this app that is now used in my agency every year during the tryouts to score over 100 participants.
What it does
LBLG Tryout digitizes the scoring workflow for the lifeguard tryout:
- Participant registration — Onboarders register candidates with their name and unique arm number.
- Two scored events — Candidates compete in a Run Swim Run event and a 1000m swim. Editors enter the finish times for each.
- Automatic Ranking — Event ranks are computed from times, and a combined ranking sums each candidate’s two event ranks to produce an overall standing.
- Public rankings view — A read-only rankings page (combined, RSR, and swim tabs) lets anyone follow the results in real time without needing to log in.
- Participant profiles — Each candidate has a detailed profile page containing their individual results and performance breakdown.
- CSV export — Editors can export any ranking table to CSV for seamless record-keeping or distribution.
How it’s built
I used Next.js and TypeScript for the front end and server components, along with Tailwind CSS and shadcn/ui for the dashboard, tables, forms, and responsive layout.
For the backend, I chose Supabase for quick authentication and PostgreSQL as the database. To keep the application highly performant and secure, I pushed the heavy ranking logic directly into a PostgreSQL view that joins both events, sums each candidate's per-event ranks, and uses a window function to compute the combined standings on the fly.
What’s next for LBLG Tryout
This is an incredibly meaningful project because I have been iterating on it for years, and it has come a long way since its first layout. Moving forward, I have two main focuses:
1. Refined Product Design
Making the application more user-friendly, intuitive, and respecting standard design heuristics (like cleaner contrast, optimal spacing, and intentional color usage rather than raw reds for errors).
2. NFC Technology Integration
Beyond visual UI improvements, I want to integrate NFC technology into the physical scoring workflow:
- Instead of manually identifying competitors at the finish line, each participant would wear a waterproof NFC wristband linked to their profile.
- Judges or volunteers would simply tap the wristband with a mobile device to instantly identify the athlete, record their split/finish times, and update the leaderboard in real time.
This will drastically minimize human error, reduce manual typing bottlenecks, and transform the application from a simple digital score sheet into a complete, end-to-end event management platform.