DEV Community

Cover image for LocalCheck - Check In , then Check Up
iJess
iJess

Posted on

LocalCheck - Check In , then Check Up

DEV Weekend Challenge: Community

This is a submission for the DEV Weekend Challenge: Community


The Community

Every pickup basketball player knows the ritual. It's 4pm. You open the group chat you swore you'd mute last week and type the same message you've typed a hundred times:

"Anyone at the court?"

Then you wait. Replies trickle in. Half the thread goes silent. Someone says "on my way" and never shows. You either arrive to a full run with a 45-minute wait, or you're standing alone on an empty slab wondering where everybody went.

I built LocalCheck for pickup basketball communities — the informal networks of regulars who show up at the same courts, week after week, held together by nothing but word-of-mouth and chaotic group texts. These communities exist in every city, every neighborhood, every park. They deserve better infrastructure than a spam-heavy chat thread.


What I Built

LocalCheck is a real-time court check-in app that answers the only three questions that actually matter:

  1. Who's at the court right now?
  2. Who's planning to come?
  3. Who's got next?

Now — Tap "I'm Here" when you arrive. Your court's feed updates live for everyone connected. Check-ins auto-expire after 2 hours so the count stays honest.

Schedule — Post when you're planning to show up so others can see a run is building before they leave the house.

Compete — Log 1v1 results and track Elo ratings on a court leaderboard. Wins against stronger opponents move the needle more. The ranking is real.

Runs — Create organized games (2v2, 5v5), manage RSVPs, and auto-generate balanced teams by Elo rating — no more 10-minute captain standoffs in the cold.

The experience is centered on the court as the unit of community. You join the courts you play at. You see only what matters to your run.


Demo

🏀 Live App: localcheck.lovable.app

The app is fully functional with sample data. Create a profile, check in to a court, log a 1v1, and watch the run come together.


Code

Welcome to your Lovable project

Project info

URL: https://lovable.dev/projects/REPLACE_WITH_PROJECT_ID

How can I edit this code?

There are several ways of editing your application.

Use Lovable

Simply visit the Lovable Project and start prompting.

Changes made via Lovable will be committed automatically to this repo.

Use your preferred IDE

If you want to work locally using your own IDE, you can clone this repo and push changes. Pushed changes will also be reflected in Lovable.

The only requirement is having Node.js & npm installed - install with nvm

Follow these steps:

# Step 1: Clone the repository using the project's Git URL.
git clone <YOUR_GIT_URL>

# Step 2: Navigate to the project directory.
cd <YOUR_PROJECT_NAME>

# Step 3: Install the necessary dependencies.
npm i

# Step 4: Start the development server with auto-reloading and an instant preview.
npm run dev
Enter fullscreen mode Exit fullscreen mode

Edit a file directly in GitHub


How I Built It

Layer Tech
Frontend React 18 + TypeScript + Vite
Styling Tailwind CSS + shadcn/ui
Backend Supabase (Postgres + Auth + Realtime)
State TanStack Query + Zustand
Animation Framer Motion
Platform Lovable

Real-time check-ins — The core of LocalCheck runs on Supabase's LISTEN/NOTIFY system. When someone taps "I'm Here," every player at that court sees it instantly via a PostgreSQL channel subscription — no polling, no refresh needed.

const subscription = supabase
  .channel(`court:${courtId}`)
  .on('postgres_changes',
    { event: '*', schema: 'public', table: 'checkins' },
    (payload) => updateCheckins(payload.new)
  )
  .subscribe();
Enter fullscreen mode Exit fullscreen mode

Elo for 1v1s — Starting rating: 1000. K-factor scales with games played so new players move faster. Upsets earn bigger jumps. The leaderboard reflects actual court standing.

Auto-balanced teams — A greedy algorithm splits players into even sides by Elo when organizing runs. Games start faster and fairer.

Mobile-first, outdoor-optimized — Large tap targets for cold hands, high contrast for sunlight, minimal text input. Check-ins queue if signal is spotty at the park.


Built for the regulars. Shoutout to everyone at the local court who complained about the group chat — this one's for you. 🏀

Top comments (0)