safeeyes
Protect your eyes from eye strain using this simple and beautiful, yet extensible break reminder
翻訳待ち
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 ↗