Futbol Veritabanı
8 büyük ligin kulüpleri, kadroları ve oyuncu istatistikleri — Transfermarkt verisi
Translation pending
Track your training days — log every set with weight and reps, and see what you lifted last time.
Sports & fitnessTypeScript · JavaScriptGitHub @rannienOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A personal workout tracker for a fixed weekly plan: open it at the gym, log your sets, and let it
tell you what you lifted last time. Everything is stored locally in your browser — no account, no
backend, no data leaving your device.Read the full README ↗A personal workout tracker for a fixed weekly plan: open it at the gym, log your sets, and let it tell you what you lifted last time. Everything is stored locally in your browser — no account, no backend, no data leaving your device.
Live: https://rep-track-ten.vercel.app
Next.js 16 (App Router, React 19, static prerender) · Tailwind CSS v4 · shadcn/ui (base-nova on Base UI) · Recharts · TypeScript · vitest · oxlint + oxfmt · pnpm. Originally scaffolded with v0.app.
Every route is statically prerendered and all training state lives in localStorage (treated as
a trust boundary — stored payloads are runtime-validated on load). The only server-side work is
fetching exercise metadata from the WWWorkout catalogue, revalidated hourly (ISR); set
WWWORKOUT_URL to point at another catalogue instance (default https://wwworkout.vercel.app).
pnpm install
pnpm dev # http://localhost:3000
| Command | What it does |
|---|---|
pnpm build / pnpm start | production build / serve it |
pnpm test | vitest unit tests (pure logic in lib/) |
pnpm typecheck | tsc --noEmit |
pnpm lint / pnpm lint:fix | oxlint |
pnpm format / pnpm format:check | oxfmt |
pnpm perf:bundle | per-route bundle drift vs the recorded baseline (after pnpm build) |
pnpm perf:latency | TTFB percentile smoke against $PERF_BASE_URL |
pnpm catalog:sync | refresh the offline catalogue snapshot from WWWorkout |
CI runs formatting, linting, type-checking and tests on every push and pull request, alongside three scanning layers: a production dependency audit, CodeQL static analysis (SAST), and a gitleaks secrets scan. Performance checks live in perf/, deliberately outside the CI test path.
The workout plans are data, not UI. Each plan is one module —
lib/plan-barbell-strength.ts,
lib/plan-dumbbell-hybrid.ts — holding a WorkoutDay[]; edit one to
change days, exercises, or targets (or build your own in the Planner, no code needed). To add a plan, write a third module, register it in
lib/plans.ts, and add its selector pair to the reveal rule at the bottom of
app/globals.css.
Two identifiers are load-bearing:
(dayId, calendar date), so renaming a
day id detaches every session already logged under it. Ids must also be unique across plans.pnpm catalog:sync to refresh the bundled snapshot
(lib/catalog-snapshot.json) used when the catalogue is unreachable.Data-integrity tests in lib/workouts.test.ts and lib/plans.test.ts guard all of it; custom plans
built in the Planner are validated by lib/custom-plans.ts (tests in lib/custom-plans.test.ts).
All training data stays in your browser's localStorage. There is no sync and no tracking of
your training data; the only way it leaves the device is the backup file you export yourself.
The only network request the app's server makes is fetching the public exercise catalogue from
WWWorkout (refreshed hourly) — it sends nothing about you or your training. Device preferences —
active plan, theme, units, rest length — live in localStorage too and are deliberately not part
of the backup file, which holds sessions and custom plans only. Browsers may evict local storage under pressure —
export a backup now and then (the app reminds you).