{"id":50818726,"url":"https://github.com/alexcheuk/proof-531","last_synced_at":"2026-06-13T12:01:21.170Z","repository":{"id":361520124,"uuid":"1244212419","full_name":"alexcheuk/proof-531","owner":"alexcheuk","description":"Free 5/3/1 Wendler + BBB strength training tracker for iOS and Android. Local-first, no account, no ads. Built by a Claude coding agent on a 30-minute cron loop.","archived":false,"fork":false,"pushed_at":"2026-06-08T04:42:57.000Z","size":49480,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T06:16:02.085Z","etag":null,"topics":["5-3-1","531","agentic-engineering","expo","fitness","fitness-tracker","gym","local-first","offline-first","powerlifting","react-native","sqlite","strength-training","typescript","wendler","workout-tracker"],"latest_commit_sha":null,"homepage":"https://531strength.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alexcheuk.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-20T04:12:05.000Z","updated_at":"2026-06-08T04:20:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/alexcheuk/proof-531","commit_stats":null,"previous_names":["alexcheuk/proof-531"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/alexcheuk/proof-531","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexcheuk%2Fproof-531","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexcheuk%2Fproof-531/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexcheuk%2Fproof-531/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexcheuk%2Fproof-531/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexcheuk","download_url":"https://codeload.github.com/alexcheuk/proof-531/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexcheuk%2Fproof-531/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34283391,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["5-3-1","531","agentic-engineering","expo","fitness","fitness-tracker","gym","local-first","offline-first","powerlifting","react-native","sqlite","strength-training","typescript","wendler","workout-tracker"],"created_at":"2026-06-13T12:00:45.898Z","updated_at":"2026-06-13T12:01:21.152Z","avatar_url":"https://github.com/alexcheuk.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 531 Strength\n\n**A free, local-first 5/3/1 Wendler + BBB strength training tracker for iOS and Android.**\nBuilt with React Native (Expo SDK 55) by a Claude coding agent on a 30-minute cron loop.\n\n[![CI](https://github.com/alexcheuk/proof-531/actions/workflows/ci.yml/badge.svg)](https://github.com/alexcheuk/proof-531/actions/workflows/ci.yml)\n[![OTA](https://github.com/alexcheuk/proof-531/actions/workflows/ota.yml/badge.svg)](https://github.com/alexcheuk/proof-531/actions/workflows/ota.yml)\n[![GitHub Release](https://img.shields.io/github/v/release/alexcheuk/proof-531?label=Android%20APK\u0026color=000)](https://github.com/alexcheuk/proof-531/releases/latest)\n[![License: Source Available](https://img.shields.io/badge/license-source%20available-blue)](./LICENSE)\n[![Platform](https://img.shields.io/badge/platform-iOS%20%7C%20Android-lightgrey)](https://531strength.com)\n[![Expo SDK](https://img.shields.io/badge/Expo%20SDK-55-000020?logo=expo)](https://docs.expo.dev/versions/v55.0.0/)\n\n---\n\n**App** · [531strength.com](https://531strength.com) \u0026nbsp;|\u0026nbsp;\n**Dev blog** · [531strength.com/blog](https://531strength.com/blog) \u0026nbsp;|\u0026nbsp;\n**How it's built** · [531strength.com/process](https://531strength.com/process)\n\n---\n\n## Why it exists\n\nEvery 5/3/1 tracker I tried was either too general (treated it like any other program), too social (feeds, leaderboards, communities), or paywalled the features that mattered. I wanted something that did the Boring But Big math correctly, showed me a plate diagram without asking me anything, and got out of the way. So I built it.\n\nNo account required. No ads. No subscription. No data leaves your phone.\n\n## Screenshots\n\n\u003cp\u003e\n\u003cimg src=\"docs/screenshots/screenshot-6.png\" width=\"200\" alt=\"Today screen — Bench, Cycle 2 Day 1, plate visualization, START SESSION\" /\u003e\n\u0026nbsp;\n\u003cimg src=\"docs/screenshots/screenshot-7.png\" width=\"200\" alt=\"Live AMRAP — Bench now., LOG AMRAP sheet, e1RM calculation\" /\u003e\n\u0026nbsp;\n\u003cimg src=\"docs/screenshots/screenshot-8.png\" width=\"200\" alt=\"Session receipt — In the book., new record stamp, PR certificate, CLOSE THE DAY\" /\u003e\n\u003c/p\u003e\n\u003cp\u003e\n\u003cimg src=\"docs/screenshots/screenshot-1.png\" width=\"200\" alt=\"PR celebration — YOU HIT A NEW BENCH PR, Stronger., +25 LB\" /\u003e\n\u0026nbsp;\n\u003cimg src=\"docs/screenshots/screenshot-5.png\" width=\"200\" alt=\"Session receipt — In the book., e1RM, SET LOGS, CLOSE THE DAY\" /\u003e\n\u003c/p\u003e\n\n## What it does\n\nEnter your training maxes once. The app handles the rest: weekly percentages, plate math, BBB accessory sets, rest timers, cycle tracking, and PR detection. Implements Jim Wendler's 5/3/1 program exactly as written — including the 7th Week Protocol.\n\n**Program**\n\n- **5/3/1 structure** — Day 1 (5/5/5+), Day 2 (3/3/3+), Day 3 (5/3/1+), Day 4 TM verification (7th Week Protocol — no deload week)\n- **BBB accessory sets** — Boring But Big 5x10 calculated automatically at 50% Training Max\n- **All four lifts** — squat, bench press, overhead press, deadlift\n\n**During a session**\n\n- **Plate calculator** — visual bar + plate layout for every working set, no input required\n- **Rest timer** — background-safe countdown with alarm on completion; Android shows a live chronometer notification\n- **AMRAP logging** — tap your reps, get your estimated 1RM, detect PRs automatically\n\n**Tracking**\n\n- **PR detection** — estimated 1RM logged after every AMRAP; certificate on new records\n- **Cycle progress** — grid view of every session in the current cycle\n- **TM adjustment suggestions** — after TM test week, calm data-driven suggestions\n- **Lift rollback** — undo the last N sessions for any lift (settings Danger Zone)\n\n**Privacy**\n\n- **Local-only** — SQLite on-device, zero telemetry, no account, nothing ever leaves your phone\n- **lbs + kg** — full unit support with correct increment rules per lift\n\n## Install\n\n| Platform | Link |\n|---|---|\n| Android | [Google Play](https://play.google.com/store/apps/details?id=com.alexcheuk.fivethreeone) |\n| iOS App Store | In App Store review - coming soon |\n\n## How it's built\n\nThe entire app is built by a **Claude coding agent** running on a 30-minute cron. Each iteration the agent reads a Discord task queue, picks 12-15 improvements to ship, implements them across design/data/domain/features layers, runs the CI gauntlet, and commits - all autonomously. 83+ iterations have run; every line of code is the product of 30-minute agent sessions.\n\nThe agent team: `rn-designer` → `rn-frontend` → `rn-qa`. Orchestrated via the `rn-expo-pipeline` and `do-work` skills in `.claude/skills/`.\n\nSee [531strength.com/process](https://531strength.com/process) for a full walkthrough of the loop, and the [dev blog](https://531strength.com/blog) for field logs written by each expedition.\n\n## Architecture\n\n**Stack**\n\n| Layer | Technology |\n|---|---|\n| Framework | React Native 0.83+ (New Architecture), Expo SDK 55 |\n| Navigation | expo-router (file-based) |\n| Database | Drizzle ORM + expo-sqlite |\n| State / async | TanStack Query |\n| Animation | React Native Reanimated 4 |\n| Notifications | expo-notifications (iOS), react-native-notify-kit (Android live notification) |\n| Haptics | expo-haptics |\n| Linting | Biome (TypeScript strict) |\n| Testing | Jest + @testing-library/react-native + fast-check (property tests) |\n| E2E | Maestro |\n\n**Directory layout**\n\n```\napps/mobile/src/\n  app/          # expo-router routes (thin shells only)\n  design/       # tokens, theme, primitives — only place hex/px live\n  domain/       # pure 5/3/1 math — no React, no async, no DB\n  data/         # Drizzle ORM + expo-sqlite, TanStack Query hooks\n  features/     # screen composition\n  lib/          # pure helpers: haptics, time, plate logic, routes\n```\n\n**Boundary rules**\n\nFour hard rules, enforced by a reviewer agent on every commit:\n\n1. Hex/px literals live only in `design/` — all other layers import from tokens\n2. `domain/` is pure — no React, no async, no Drizzle; property-tested with fast-check\n3. Components consume data via hooks — never import Drizzle directly\n4. `app/` routes are thin shells — no logic, just param extraction and feature composition\n\nThese boundaries exist because the app is built by an agent: the reviewer enforces them automatically, so the system cannot drift even across hundreds of iterations.\n\n## Quick start (development)\n\n```bash\n# Prerequisites: Node 22, pnpm 9.15+\ncorepack enable \u0026\u0026 corepack prepare pnpm@latest --activate\n\npnpm install\n\n# Build the dev-client APK (needs Android SDK + JDK 17)\npnpm build:dev\n# OR build in the cloud (needs `eas login`)\neas build --profile development -p android\n\n# Boot Metro — connect the dev-client APK\npnpm --filter @fivethreeone/mobile start\n```\n\nThis project uses a **custom dev client** (not Expo Go). Native modules like `expo-notifications` and `react-native-notify-kit` require it. Install the dev-client APK on a device or emulator and connect via Metro. JS/TS edits hot-reload instantly; rebuilds are only needed when native modules change.\n\n### Daily commands\n\n```bash\npnpm typecheck          # tsc --noEmit across workspace\npnpm lint               # biome\npnpm test               # jest\npnpm run ci             # full CI chain (typecheck + lint + test + boundary checks)\npnpm verify             # ci + Metro bundle check + web build\n\n# e2e (requires Maestro + dev client on device)\nmaestro test .maestro/flows/                    # all flows\nmaestro test .maestro/flows/01-onboarding.yaml  # individual flow\n```\n\n## Documentation\n\n| Doc | Purpose |\n|---|---|\n| [`docs/DESIGN.md`](docs/DESIGN.md) | Product + visual design spec |\n| [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) | Stack, layout, boundary rules |\n| [`docs/CONTRIBUTING.md`](docs/CONTRIBUTING.md) | How to add a task, run the orchestrator |\n| [`docs/decision-log.md`](docs/decision-log.md) | Notable decisions and their reasoning |\n| [`CLAUDE.md`](CLAUDE.md) | Agent orientation — start here if you're a Claude agent |\n\n## License\n\nSource available — free to run for personal use; redistribution and commercial use require explicit permission. See [`LICENSE`](./LICENSE) for full terms and [`docs/PRIVACY.md`](docs/PRIVACY.md) for data handling (short version: SQLite on-device, zero telemetry, nothing ever leaves your phone).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexcheuk%2Fproof-531","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexcheuk%2Fproof-531","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexcheuk%2Fproof-531/lists"}