Nelson Coelho
Painel de treino para Nelson Coelho com detalhes de corrida, métricas de recuperação e análise de desempenho
翻譯準備中
AI 摘要 · 網站內容
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A local-first exercise and wellness tracking PWA. Record how you feel, body measurements, exercise, and video watches throughout the day, then review them in your history.
| Framework | Next.js 15 (App Router, static export) |
| UI | React 19, shadcn/ui (Radix primitives), Tailwind CSS |
| Charts | Recharts |
| Local storage | IndexedDB (Dexie.js) |
| Optional sync | Google Sheets API, Google Drive API (OAuth 2.0) |
| PWA | next-pwa |
| Tests | Vitest, Testing Library |
| Deployment | GitHub Pages (GitHub Actions) |
npm install
npm run dev
Open http://localhost:3000.
Google sync is optional. Without a client ID the app works locally, but Google sign-in is unavailable.
In Google Cloud Console, create or select a project.
Under APIs & Services → Library, enable both of these APIs:
| API | Used for |
|---|---|
| Google Sheets API | Creating the "ExerLog Data" spreadsheet and reading/writing all records |
| Google Drive API | Finding the spreadsheet, and the "ExerLog Photos" folder and photo files |
If the Sheets API is disabled, sync fails with "Failed to create spreadsheet".
Configure the OAuth consent screen. The app requests the drive.file and userinfo.email scopes. While the app is in testing, add each Google account that will sign in as a test user.
Under APIs & Services → Credentials, create an OAuth 2.0 Client ID of type Web application, and add the authorized JavaScript origins (for example http://localhost:3000 and https://fuji3to4.github.io). No redirect URI is needed.
Copy .env.example to .env.local and set the client ID:
NEXT_PUBLIC_GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
Restart npm run dev after changing it. The value is embedded at build time.
For the GitHub Pages deployment, add the same value as the repository secret NEXT_PUBLIC_GOOGLE_CLIENT_ID (used by .github/workflows/deploy.yml).
npm run build
npm run test
MEASUREMENT_ITEMS in src/features/measurements/measurement-items.ts with id, labelKey, unit, decimals, min, max, and showInGraph. The id must not collide with id, date, recordedAt, note, or updatedAt.labelKey to src/features/i18n/messages/en.ts and ja.ts.The input field, history, graph, CSV export, and spreadsheet column follow from these changes.
The built-in catalog is generated from public/exercises.csv at build time. If that file is missing, the app uses src/features/catalog/exercise-catalog.default.ts. Generation runs automatically before development, build, and test commands. Do not edit the generated src/features/catalog/exercise-catalog.ts by hand; update public/exercises.csv instead.
App data is stored locally in your browser's IndexedDB. Google Sheets sync is optional: data is sent to Google only after you sign in and connect sync. Exported CSV files are downloaded to your device.
ExerLogは、運動とコンディションを記録するローカルファーストのPWAです。日々の体調、身体測定、運動、動画の視聴を記録し、履歴から振り返ることができます。
| フレームワーク | Next.js 15 (App Router、静的エクスポート) |
| UI | React 19、shadcn/ui (Radix primitives)、Tailwind CSS |
| グラフ | Recharts |
| ローカルストレージ | IndexedDB (Dexie.js) |
| 任意の同期 | Google Sheets API、Google Drive API (OAuth 2.0) |
| PWA | next-pwa |
| テスト | Vitest、Testing Library |
| デプロイ | GitHub Pages (GitHub Actions) |
npm install
npm run dev
http://localhost:3000 を開いてください。
Google同期は任意です。クライアントIDを設定しなくてもアプリはローカルで動作しますが、Googleサインインは使えません。
Google Cloud Console でプロジェクトを作成または選択します。
APIとサービス → ライブラリ で、次の2つの API を両方有効にします。
| API | 用途 |
|---|---|
| Google Sheets API | 「ExerLog Data」スプレッドシートの作成、全データの読み書き |
| Google Drive API | スプレッドシートの検索、「ExerLog Photos」フォルダと写真ファイル |
Sheets API が無効だと、同期時に「Failed to create spreadsheet」になります。
OAuth 同意画面を設定します。アプリが要求するスコープは drive.file と userinfo.email です。テスト中の場合は、サインインする Google アカウントをテストユーザーに追加してください。
APIとサービス → 認証情報 で、種類「ウェブ アプリケーション」の OAuth 2.0 クライアント ID を作成し、承認済みの JavaScript 生成元(例: http://localhost:3000、https://fuji3to4.github.io)を追加します。リダイレクト URI は不要です。
.env.example を .env.local にコピーし、クライアントIDを設定します。
NEXT_PUBLIC_GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
値はビルド時に埋め込まれるため、変更後は npm run dev を再起動してください。
GitHub Pages へのデプロイでは、同じ値をリポジトリのシークレット NEXT_PUBLIC_GOOGLE_CLIENT_ID に登録します(.github/workflows/deploy.yml で使用)。
npm run build
npm run test
src/features/measurements/measurement-items.ts の MEASUREMENT_ITEMS に、id・labelKey・unit・decimals・min・max・showInGraph を設定した項目を追加します。id は id・date・recordedAt・note・updatedAt と重複させないでください。src/features/i18n/messages/en.ts と ja.ts に labelKey の表示名を追加します。入力項目・履歴・グラフ・CSV・スプレッドシートの列は、これらの変更に連動します。
組み込みカタログはビルド時に public/exercises.csv から生成されます。このファイルがない場合は src/features/catalog/exercise-catalog.default.ts が使われます。生成処理は開発・ビルド・テストの各コマンドの前に自動実行されます。生成物の src/features/catalog/exercise-catalog.ts は直接編集せず、public/exercises.csv を変更してください。
アプリのデータはブラウザーのIndexedDBに保存されます。Google Sheets同期は任意です。サインインして同期を接続した場合にのみ、Googleへデータが送信されます。CSVエクスポートは端末にダウンロードされます。