flutter
Flutter는 wger용 피트니스·운동 앱입니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Prediction league for Formula 1 fans. Friends predict race weekend results before qualifying starts, and the app scores them automatically once results are in.
Work in progress.
Requires Node.js 24 (see .nvmrc and engines in package.json, which Vercel reads).
npm install
npm run db:migrate # apply migrations to the database in DATABASE_URL
npm run dev # http://localhost:3000
The app reads its secrets from environment variables. Locally, put them in .env.local
(ignored by git). On Vercel, set them in the project settings.
| Variable | What it is |
|---|---|
DATABASE_URL | Postgres connection string from Neon. The Neon integration on Vercel sets it. |
BETTER_AUTH_SECRET | Random secret that signs session cookies, at least 32 characters: openssl rand -base64 32. |
BETTER_AUTH_URL | The app's own URL: http://localhost:3000 locally, the production URL on Vercel. |
GOOGLE_CLIENT_ID | OAuth client ID from Google Cloud Console (APIs & Services → Credentials). |
GOOGLE_CLIENT_SECRET | Secret of the same OAuth client. |
APP_ADMIN_EMAILS | Comma-separated emails of the App Admins, who create the League and refresh the calendar at /admin. |
The Google OAuth client needs <BETTER_AUTH_URL>/api/auth/callback/google as an authorized
redirect URI, for every URL the app signs in from. Preview deploys have changing URLs, so
sign-in works on production and locally.
Postgres on Neon, accessed with Drizzle (ADR-0004). The schema is in src/db/schema.ts and the
SQL migrations generated from it are in drizzle/.
npm run db:generate # after changing the schema: write a new migration to drizzle/
npm run db:migrate # apply pending migrations to DATABASE_URL
Tests run against PGlite, an in-memory Postgres, with the same migrations
(src/db/test-database.ts), so they need no database server.
These are the same checks CI runs on every push and pull request:
npm run typecheck # TypeScript, after generating Next.js route types
npm run lint # ESLint
npm test # Vitest, single run
npm run test:watch reruns tests on file changes.
The app is deployed to Vercel at https://f1-predictor-omega.vercel.app/: main goes to production, and every pull request gets a
preview deploy.
Production deploys apply pending migrations to Neon before building (buildCommand in
vercel.json); a failed migration fails the deploy. Preview deploys skip migrations, so a pull
request never changes the production database.