OpenAthlete
AGPLv3 endurance training platform: EU-oriented hosting, transparent CTL/ATL/TSB logic in code, self-hosting, and full export. Built in Grenoble.
Find local players to match skill levels and plan games around Provo
Translation pending
AI summary · website content
Sports & fitnessJavaScript · CSSGitHub @IS-Double-o-7OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A sports-matching app for finding people to play with around Provo: swipe to match players, chat, plan games, browse courts, and track daily challenges and stats.
Live site: https://is-double-o-7.github.io/provopickup/ (GitHub Pages, deployed from main)
Moving to a new city, starting grad school, or just aging out of an old friend group leaves a lot of people in Provo with the same problem: they want to play a sport, and they have nobody to play it with. Pickup games exist, but finding one means knowing somebody who already knows about it. The people most affected are students and recent transplants — they have the time and the interest, but not yet the network. Rally Provo solves this by treating pickup sports the way a dating app treats dating. You build a profile with the sports you play, your skill level in each, and when you are usually free, then swipe through other players nearby and match with the ones who line up. Once two people match they can message each other, and from that conversation they can put a real game on a shared calendar — a sport, a court, a date and a time. The app also tracks the courts and fields around Provo, daily challenges to keep people playing, and stats so you can see your streak and how many new people you have met. The result is that a stranger in Provo can go from "I want to play pickleball" to a scheduled game with a real person in a few minutes.
What a user can do, and whether it works today. Complete means it was exercised end
to end (user → frontend → Supabase → back) and the result was checked; the Evidence
column says how. Anything that has not been checked that way is Not complete, even if
the code exists. Last reviewed October 30, 2026 against main and the live site.
| # | Requirement | Status | Evidence |
|---|---|---|---|
| L1 | A visitor sees the Log in / Sign up page before anything else, until they are signed in | Complete | Live site; responsive check at 8 screen sizes (#16) |
| L2 | A new user can create an account with an email and a password (6+ characters) | Complete | A real account was created on the live site; it exists in Supabase Auth |
| L3 | A new account must confirm its email before first log-in, and the link returns to the site | Complete | Verified on the live site 2026-11-03. Site URL and redirect URLs now point at GitHub Pages; a real sign-up confirmed in 12s and landed signed in at the profile setup step |
| L4 | A returning user can log in, and stays signed in after a reload | Complete | Live site, Brook's account (Oct 30) |
| L5 | A new user must create a profile before using the app: photo, first name, at least one sport with a skill level, at least one availability slot; bio optional | Complete | Live: the account's profile, sport, availability and photo rows exist in Supabase; photo loads from Storage (200, image/jpeg) |
| L6 | A user who already has a profile goes straight to the app on log-in | Complete | Live site, Brook's account; 4 login cases tested in #13 |
| L7 | A user can edit their photo, name, sports, bio and availability from Your profile | Not complete | Works against a stand-in database (#5, #9); not yet checked live |
| L8 | Log out always returns to the login page | Not complete | Tested against a stand-in, including a failed sign-out request (#15); not yet checked live |
| L9 | Phone numbers and birthdays are visible only to their owner | Complete | Live database: a signed-out client reads 0 rows from profile_private and cannot read auth_uid (#8, #11) |
| L10 | A user cannot create or change another user's profile | Complete | Live database: an update against another profile changes 0 rows; a second profile per account is rejected (#7) |
| L11 | A player can permanently delete their profile and login from Your profile (type DELETE to confirm) | Not complete | Works against a stand-in database: profile, photo, sports, availability, swipes and login removed, old password rejected. Needs migration 009 applied, then a live check |
| # | Requirement | Status | Evidence |
|---|---|---|---|
| M1 | The deck shows other players with name, photo (or initials), bio, sports with levels, and availability; no age, distance or home court | Complete | Live site, Brook's account |
| M2 | A user never sees themselves or the demo "You" profile in the deck | Complete | Fixed in #17 and confirmed live |
| M3 | Like and pass are saved, and that player does not come back after a reload | Complete | Live: 10 likes and a pass saved as choice rows |
| M4 | Undo right after a pass brings that player back | Complete | Live: the pass row was deleted and the card returned |
| M5 | Review passed players brings back everyone passed, and keeps likes | Complete | Live: passes deleted, all 10 likes kept |
| M6 | A match appears only when both players like each other, and shows in Your matches | Not complete | Verified on the live database (#7) and against a stand-in with two accounts (#10); not yet seen in the live app, which needs a second real account |
| M7 | A player cannot see who has liked them until it is a match | Complete | Live database: another account reads 0 rows from choice (#7) |
| M8 | Filter the deck by sport | Not complete | In the UI; not yet checked against live data |
This is the beginning of the README. Read the rest at the original. Read the full README ↗
| L12 | Players must be 18 or older: profile setup requires a birthday, and anyone under 18 can't finish it or change their birthday to under 18 | Not complete | Front end done (#61): tested 'turns 18 tomorrow' (refused, nothing saved) and 'turns 18 today' (allowed). Accounts made earlier get an 'Add birthday' reminder. A database check for 18+ is still to come (#7, Jordan) |