尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
workout/fuel log
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A mobile-first fitness tracking web app: log workouts, runs, and meals in plain English, and Claude turns each entry into structured data plus a line of coaching feedback. Built with Next.js (App Router) + Tailwind CSS, persisted in Supabase (Postgres), and deployed as a standard web app.
workouts, runs, meals, favorites.claude-sonnet-4-6, server-side only) — parses free-text entries into structured fields via a forced tool call, and returns coaching feedback in the same response.All AI parsing and database access happens in Next.js API routes
(app/api/**/route.ts), which run server-side — the Anthropic key and the
Supabase service role key are never sent to the browser.
supabase/schema.sql. This creates the workouts, runs, meals, and favorites tables (with RLS enabled and no public policies — all access goes through the service role key server-side).service_role secret key.Create a key at console.anthropic.com if you don't have one.
Copy .env.example to .env.local and fill in the three values:
cp .env.example .env.local
ANTHROPIC_API_KEY=sk-ant-...
SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_SERVICE_ROLE_KEY=eyJ...
npm install
npm run dev
Open http://localhost:3000 — resize your browser to a phone width (or open on an actual phone) to see the intended mobile layout.
This is a standard Next.js app — deploy it anywhere Next.js runs (Vercel is the simplest path since API routes need a Node.js server, not a static host):
ANTHROPIC_API_KEY,
SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY) in the Vercel project settings.Any other Node-capable host (Render, Railway, Fly.io, a VPS with next start,
etc.) works the same way — set the three env vars and run npm run build && npm start.
raw_text) alongside the
AI-parsed structured fields and a coaching_feedback string — so nothing is
lost if the parse is imperfect, and you can always see what was originally typed.favorites snapshot the parsed structured data for a past entry, so
"log again" from History re-inserts a new row instantly without calling
Claude a second time.lib/marathonPlan.ts) is fully static/deterministic —
it computes each week's date range backward from the race date and requires
no database or API calls.