Fitness questions
Translation pending
HealthJavaScript · CSSGitHub @micromex16OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A 30-day accountability challenge. Sign in, tick off your daily check-ins, watch the leaderboard. No weight, no measurements, no body photos — just points, streaks, and a group chat.Read the full README ↗A 30-day accountability challenge. Sign in, tick off your daily check-ins, watch the leaderboard. No weight, no measurements, no body photos — just points, streaks, and a group chat.
supabase/schema.sql and click Run.settings, profiles, and entries tables with row-level security.challenge_start_date to whatever calendar date the group starts. (challenge_days defaults to 30.)The app uses email magic links. The link in the email needs to point back to where the app is hosted.
https://racetoabs.netlify.app or http://localhost:8000 for local).config.js:
window.RACE_CONFIG = {
SUPABASE_URL: "https://YOURPROJECT.supabase.co",
SUPABASE_ANON_KEY: "eyJhbGciOi...",
};
The anon key is safe to ship to the browser — RLS in schema.sql controls what users can read/write.
supabase/schema.sql is idempotent and carries its own migrations, so whenever
you pull new code, paste it into SQL Editor → New query → Run again. Your
data is left alone.
If you were running the app before per-challenge entries landed, re-run it now. The original schema declared
unique (user_id, date)onentries, which spanned every challenge — a member could only ever hold one row per calendar day in the whole table. Saving a day from one challenge overwrote the row belonging to another and re-stamped itschallenge_id, so that day vanished from the other leaderboard and the member's total looked like it had reset. The migration replaces that withunique (challenge_id, user_id, date).Days that were already re-stamped stay attached to whichever challenge saved them last; re-save them from the correct challenge to put them back. Once migrated, saving in one challenge never touches another.
The app is three static files (index.html, styles.css, app.js) plus config.js. It needs to be served over HTTP (not opened as file://) for magic-link auth to work.
Quick local test:
python3 -m http.server 8000
# open http://localhost:8000
Deploy: push the repo to GitHub and connect it to Netlify, Vercel, or Cloudflare Pages. No build step.
Every table is gated by row-level security, so this holds no matter what the client asks for:
| Visible to | |
|---|---|
| Challenge name, dates, invite code | its members only |
| Daily entries + points | its members only |
| Group chat + photos | its members only (plus whoever uploaded the photo) |
| Display name + custom goal | yourself, and people you share a challenge with |
A signed-in account that hasn't joined anything sees nothing but its own profile — no challenge list, no names, no photos. Joining requires the 6-character invite code; knowing a challenge's internal id is not enough.
| Item | Points |
|---|---|
| 30 minutes of exercise | 3 |
| Extra 5 minutes of core | 1 |
| Hit your nutrition goal | 3 |
| More than 7 hours of sleep | 2 |
| More than 60 oz of water | 2 |
| Stretched or foam rolled | 1 |
| No alcohol today | 2 |
| Less than 1 hr non-work screen time | 2 |
| Your custom goal (set per-user, e.g. "Read 30 mins") | 2 |
| Daily max | 18 |
| 30-day max | 540 |
Each user picks their own custom goal during onboarding and can change it anytime via the pencil icon on that row in the daily check-in.
To rebalance, edit the QUESTIONS array at the top of app.js.
Challenges are private. A signed-in user sees only the challenges they created or joined with an invite code — never anyone else's, and not their names, schedules, or codes.
?join=CODE pulls them straight in after sign-in), orGrab a code to share from the challenge pill in the header → Copy code or Copy link. Only members of a challenge can see its code, so an invite has to come from someone already in it.
Supabase setup tip: disable email confirmation under Authentication → Providers → Email → "Confirm email" so new users don't get a "check your email" speed bump. With it off, sign-ups create a session right away.
The app is a PWA, so it installs to the home screen and launches like a native app — no App Store, no TestFlight.
On iPhone Safari (must be Safari, not Chrome on iOS):
A blue/teal/green "RA" icon appears on the home screen. Tapping it launches the app full-screen with no Safari chrome — looks and feels native, with safe-area padding for the notch and home indicator.
index.html — markup for all four views (loading, sign-in, onboarding, app)styles.css — fitness-tracker dark themeapp.js — auth, data loading, rendering, points/streak mathconfig.js — your Supabase URL + anon key (you fill this in)supabase/schema.sql — tables, indexes, triggers, RLS policies