OpenTrailPaper
LilyGO T5S3 4.7" E-Paper PRO용 오픈소스 자전거 컴퓨터 펌웨어, 오프라인 지도·GPX 경로·FIT 기록·블루투스 센서 지원
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Run through December. Every day you run 1 km, an Advent door opens and you give the ornament inside to a friend's tree. Friends hang kawaii pixel ornaments on your tree, and every message stays sealed until Christmas Day.
Runners log in with Strava, and their runs open the doors. Trees, ornaments and progress are stored in Supabase. Without logging in, the app runs as a demo in the browser, so it stays clickable without a Strava account.
| Route | Screen |
|---|---|
/ | Landing: sign up, or log in with Strava (straight to Strava, no login page) |
/signup | Pick a tree name → connect Strava → confirm time zone |
/tree | My tree, countdown, tap an ornament to see the sealed sheet |
/tree/photo | Photo booth with your tree |
/t/[nickname] | A friend's tree (try /t/ayop, the official AYOP tree) |
/t/[nickname]/hang | Hang or edit your ornament (one per tree) |
/t/[nickname]/done | Ornament hung |
/calendar | Advent doors with km per day, catch-ups, weekly bonus |
/gift | Unwrap an earned ornament → give it to a friend |
/friends | Search runners, follow / unfollow trees, requests, invite link |
/me, /me/given | Stats, ornaments given, settings, log out, disconnect Strava |
/ornaments | Catalogue of every ornament |
/christmas | Dec 25 unlock preview (demo messages) |
/about | How it works |
npm install
cp .env.example .env.local
npm run dev
.env.example lists every key. The public Supabase URL and publishable key are filled in (enough for trees and the demo). Copy it to .env.local and fill the empty server-only values. Ask the project owner for them; never commit them:
# Vercel: yes
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=...
SUPABASE_SERVICE_ROLE_KEY=sb_secret_...
STRAVA_CLIENT_ID=...
STRAVA_CLIENT_SECRET=...
SESSION_SECRET=... # any long random string
APP_URL=http://localhost:3000 # Vercel: https://advent.ayop.run (staging: https://staging-advent.ayop.run)
# Vercel: leave unset so production stays on December
NEXT_PUBLIC_ADVENT_MONTH=current # optional, local only
CHRISTMAS_OPEN=1 # optional: open every tree's messages now (never on Production)
The Strava app at strava.com/settings/api must have Authorization Callback Domain ayop.run, which covers both advent.ayop.run and staging-advent.ayop.run (no https://, no path). localhost is always allowed, so local login still works. Until Strava approves the app, only its owner can connect.
Supabase setup, migrations and how to look at the data: see supabase/README.md.
lib/data.ts, lib/me.ts, lib/friends.ts, lib/requests.ts: what pages call. They talk to the server routes, and fall back to the browser demo when signed out.lib/demo/: the browser demo (localStorage). New demo-only behaviour goes here.lib/calendar.ts: door and catch-up rules, shared by the server and the pages.app/api/: server routes (Strava login, trees, hanging, progress, friends). They use the Supabase secret key through lib/server/.lib/sprites.ts: all pixel art, drawn in code on one shared 12×12 grid.| Staging | Production | |
|---|---|---|
| Branch | staging | main |
| Site | https://staging-advent.ayop.run (private: sign in to Vercel) | https://advent.ayop.run |
| Vercel environment | Preview | Production |
| Supabase project | omrqmxoketiukledntok | dcmwhlwwawhyggabjnlp |
| Strava app | Advent of Running (shared; callback domain ayop.run) | same |
Work on a feature branch, merge it into staging, check it on the staging site, then merge staging into main to release. Use Create a merge commit, not squash, to avoid conflicts on the next merge. Other branches also deploy as previews and use the staging keys, but Strava login only works on the two ayop.run addresses.
Keys live in Vercel under Project → Settings → Environment Variables: the production values on Production, the staging values on Preview. .env.example lists every key. Leave NEXT_PUBLIC_ADVENT_MONTH unset on both so the calendar runs in December.
Before launch, production shows only a coming-soon page (door 1, a countdown to December 1 in the visitor's time zone, and an email sign-up for the launch news). It's switched on by COMING_SOON=1 on Vercel's Production environment; remove it and redeploy to launch. Staging leaves it unset and runs the full app; the page itself is at /coming-soon on both. Sign-ups are saved in the launch_signups table (migration 006_launch_signups.sql); notified_at stays empty until the launch email is sent.
Database changes: add a numbered file in supabase/migrations/, run it on the staging project first, and on production once staging works. To set up a new, empty project, run schema.sql, seed.sql, then every migration in order.
next/og.The full catalog of 100 ornaments and the style rules for the artist live in the ornament catalog spreadsheet.