Skip to content

Latest commit

 

History

136 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pull-up Trainer: local-first pull-up PWA in Poster / Swiss design

Live demo Vue 3 TypeScript Vite PWA

Vitest Playwright CI status GPL-3.0 Version 1.0.0

Local-first pull-up training PWA.
One built-in evidence-based program, full offline. No ads, no accounts, no cloud.
Open live app →

Built-in program, rest timer, 6-step cycles, weekly streaks, 14 themes, offline PWA

Screenshots

Pull-up Trainer app screens: home, workout, rest timer, calendar, stats

About

Pull-up Trainer is a mobile-first progressive web app for structured pull-up training. Everything runs locally in your browser via IndexedDB. Your history and progress never leave the device.

The built-in program generates each workout from your max-rep anchor (M*) and current step in a 6-workout cycle. Progression, deloads, retests, and scheduling follow rules described on the in-app Why this program page. Install as a PWA for offline use and quick access from your home screen.

Program at a glance

Each workout has five sets: four working sets at fixed percentages of your anchor M*, plus a final max set with a step-specific minimum Nk.

M* Working sets (1–4) Final-set minimums N₁…N₆
3 3, 2, 2, 2 2, 3, 4, 4, 4, 4
7 5, 5, 5, 4 5, 6, 7, 8, 8, 8
15 11, 9, 9, 8 9, 10, 11, 12, 13, 14
25 18, 15, 15, 13 15, 16, 17, 18, 19, 20

Default schedule: three non-consecutive days per week with at least 48 hours between sessions. Two failures on the same step trigger an automatic deload; six successful steps complete a cycle.

Tech stack

  • Vue 3 (Composition API), Vue Router, Pinia, vue-i18n (EN / RU)
  • Vite, TypeScript, vite-plugin-pwa
  • Dexie (IndexedDB), JSON export/import for history and full backup
  • Vitest, Vue Test Utils, Playwright, ESLint, Prettier
  • GitHub Pages with CI deploy

Development

npm ci
npm run dev          # local dev server
npm run typecheck    # vue-tsc
npm run lint
npm run test         # unit tests
npm run test:e2e     # Playwright (auto-builds preview server)
npm run build
npm run preview      # preview production build

Design system

The app uses Poster / Swiss: flat fills, 2px borders, 2px radius, offset shadows, mono caps labels, and display uppercase headings. Default palette is P01 Volt (14 palettes × light/dark).

Resource Path
Design spec spec/design/poster-design.md
Theme tokens spec/design/theme-tokens.css
App icon spec/design/assets/logo/icon.svg
Asset gallery spec/design/assets/preview.html
Swiss grid pattern spec/design/assets/patterns/swiss-grid.svg

License

GPL-3.0. Copyright Gregory Koganovsky.

Third-party notice: icons by Lucide (ISC). See public/NOTICE and spec/design/assets/LICENSES/Lucide-ISC.txt.

What this app does NOT include
  • Ads, donations, paywalls, or subscriptions
  • User accounts or cloud sync
  • Push reminders (not feasible in a static PWA v1)
  • Voice cues, background music, camera, or social features

About

Mobile-first PWA for structured pull-up training. Data stays on your device in IndexedDB. One built-in program, works offline. No ads, accounts, or cloud.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages