Files
kegel/README.md
Marcus Rehbock 0dc1bd47a7
Some checks failed
Build & Release APK / build (push) Failing after 15s
Kegel pelvic floor trainer — Expo/RN MVP
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>
2026-08-15 00:30:04 -07:00

43 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:
1. **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.
2. **Pushes** — 5 × reverse kegel (gently bear down). Scales at half the rate
of holds, capped at 12s.
3. **Quick squeezes** — 10 × 1s burst contractions with 1s release.
4. **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), `settings`
- `src/lib/workout.ts` — pure session-plan + progression logic
- `src/lib/store.ts` — tiny local store persisted to AsyncStorage
- `android/` — committed prebuild output; CI builds it directly
## Development
```sh
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.