Jamorham
Nightscout용 xDrip+ 버전
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.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