safeeyes
Protect your eyes from eye strain using this simple and beautiful, yet extensible break reminder
Modular health, fitness, recovery, and body-composition workspace.
Translation pending
HealthTypeScript · PythonGitHub @PilchernOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Web-first health, fitness, recovery, and body-composition application scaffolded as a modular monorepo.
apps/web: Next.js App Router delivery shellpackages/domain: framework-free domain concepts and rulespackages/application: use cases, ports, and boundary DTOspackages/infrastructure: database, storage, auth, and feature-flag adapterspackages/integrations: provider adapters and canonical mapperspackages/jobs: background job handlers and orchestrationsupabase/: migrations, policies, and seed assetsdocs/: architecture and schema notestests/: end-to-end and shared fixturesInstall dependencies:
pnpm install
Copy the web environment template:
cp apps/web/.env.example apps/web/.env.local
Fill in the required Supabase values in apps/web/.env.local.
For local database work, start and reset Supabase:
supabase start
supabase db reset
psql postgresql://postgres:[email protected]:54322/postgres -f supabase/seed/001_local_dev_seed.sql
Start the development server:
pnpm dev
Open http://localhost:3000.
pnpm dev
pnpm build
pnpm lint
pnpm test
pnpm typecheck
pnpm format
pnpm format:write
apps/web/src/app.apps/web/src/components/shared.apps/web/src/features.packages/domain/src.packages/application/src.packages/infrastructure/src.packages/integrations/src/providers.packages/jobs/src.What changed. The program is data, not code: training_programs -> program_blocks (week range, default sets/reps/RIR) -> program_sessions (weekday, type lift/peloton/run/test/rest/walk_jog, ride prescription) -> program_exercises (sets, rep range, RIR, tempo, per-leg, measure reps/time/force, gate, readiness requirement, block_part legs/upper, from_week/until_week). program_weeks holds deload flags, program_gates the manual "cleared on" dates (with earliest dates), program_session_outcomes explicit skips (time/knee/sick/travel/other) and red-flag stops, training_settings every target and threshold. Week numbers count whole weeks from training_programs.week_anchor_date (2026-08-17), so 2026-10-19 is week 9. Seed: supabase/migrations/20261019120100_seed_acl_lower_body_program.sql (safe to rerun). Rules: packages/application/src/modules/program/ (calendar, knee check, progression, plan, walk-jog, settings). Screens: dashboard Program card, /program, the /strength program callout and logger, Settings (gates and Program targets).
Add a block (e.g. Block 4 content), in SQL through the Supabase MCP or the dashboard:
program_blocks with start_week, end_week, default sets_min/sets_max/reps_min/reps_max/rir_target, and a display rep_scheme.program_sessions: one row per weekday (day_of_week 0 = Sunday), session_type, ride fields for Peloton days. Walk-jog cannot go on Mon/Wed/Fri (table check).program_exercises per lift session, ordered by exercise_order (legs first, upper 30+). Leave sets/reps/RIR null to use the block's scheme. block_part = 'upper' for upper-body rows (loads prefill from history); side_mode = 'per_leg' for left/right work; measure = time or force; gate_key (and optional substitute_name) for gated work; readiness_requirement = 'normal' for work that only runs on a normal knee check; from_week/until_week for variations inside a block.sessions_from_block_id to the block it repeats; mark its weeks is_deload in program_weeks.program_gates (gate_key, label, optional earliest_on); it shows up in Settings.Change targets. Settings -> Program targets edits training_settings rows: load steps (barbell 5, DB 2.5 to 25 lb then 5, cuff 2.5), min RIR to add load (2), the sleep cut-off for increases (6.5 h over 3 nights), hard-set RIR (4) and the weekly quad-set target (12-16), knee-check pain cut-offs (normal 2 or less, knee-off above 3), the knee-off streak (2 days), the knee-off ROM block (15 min), the red-flag contact and phone, and the walk-jog start, step and rest days. A blank value falls back to the built-in default. New keys go in as rows plus a field in program-settings.ts.
This is the beginning of the README. Read the rest at the original. Read the full README ↗