Some checks failed
Build & Release APK / build (push) Failing after 15s
Guided session timer: progressive squeeze-holds (5s +1s/3 sessions, cap 30s), reverse-kegel push holds, quick flicks in/out. Local-only progress in AsyncStorage; signed APK via Gitea Actions on the desktop runner. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1.5 KiB
1.5 KiB
Kegel
Pelvic floor trainer for sexual performance — a free, local-only take on what Stamina was before it went paid. Expo / React Native, Android + iOS.
How it works
A session is four guided blocks driven by a step timer with haptic cues:
- Holds — 8 × squeeze-and-hold. This is the progressive-overload driver: holds start at 5s and grow +1s every 3 completed sessions (capped at 30s). Manual ±1s adjustment in Settings.
- Pushes — 5 × reverse kegel (gently bear down). Scales at half the rate of holds, capped at 12s.
- Quick squeezes — 10 × 1s burst contractions with 1s release.
- Quick pushes — 10 × 1s burst pushes with 1s release.
Progress (session count, difficulty adjustment) lives in AsyncStorage — no server, no account.
Layout
src/app/— expo-router screens:index(home),session(timer),settingssrc/lib/workout.ts— pure session-plan + progression logicsrc/lib/store.ts— tiny local store persisted to AsyncStorageandroid/— committed prebuild output; CI builds it directly
Development
npm install
npm start # Expo dev server
npm run typecheck
Release
Push to main → Gitea Actions on the desktop runner (runs-on: desktop,
never the VPS) builds a signed APK and publishes a Gitea release — install via
Obtainium. Keystore: ~/.android-keys/kegel-release.jks (repo secrets
KEYSTORE_B64, KEYSTORE_PASSWORD; alias kegel). iOS runs via
npx expo run:ios from a Mac.