Add Summit Stride 5K training tracker at /running

Node/Express backend with SQLite storage, WebAuthn passkey auth,
and React frontend built via Vite. Caddy routes /running/* via
handle_path labels on docker-compose.
This commit is contained in:
JamBox
2026-02-15 22:01:58 -08:00
parent 4facad4c52
commit b217747ab6
13 changed files with 1109 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
import { RunType, WeekSchedule } from "./types";
export const SCHEDULE_DATA: WeekSchedule[] = [
{
weekNum: 1,
days: [
{ type: RunType.SPEED, duration: "5 min", isKeyWorkout: true },
{ type: RunType.ACTIVE_REST },
{ type: RunType.EASY, duration: "20 min" },
{ type: RunType.ACTIVE_REST },
{ type: RunType.CROSS_TRAINING },
{ type: RunType.LONG, duration: "40 min" },
{ type: RunType.REST },
],
},
{
weekNum: 2,
days: [
{ type: RunType.SPEED, duration: "7.5 min", isKeyWorkout: true },
{ type: RunType.ACTIVE_REST },
{ type: RunType.EASY, duration: "20 min" },
{ type: RunType.ACTIVE_REST },
{ type: RunType.CROSS_TRAINING },
{ type: RunType.LONG, duration: "45 min" },
{ type: RunType.REST },
],
},
{
weekNum: 3,
days: [
{ type: RunType.SPEED, duration: "7.5 min", isKeyWorkout: true },
{ type: RunType.ACTIVE_REST },
{ type: RunType.EASY, duration: "30 min" },
{ type: RunType.EASY, duration: "30 min" },
{ type: RunType.CROSS_TRAINING },
{ type: RunType.LONG, duration: "50 min" },
{ type: RunType.REST },
],
},
{
weekNum: 4,
days: [
{ type: RunType.SPEED, duration: "10 min", isKeyWorkout: true },
{ type: RunType.EASY, duration: "30 min" },
{ type: RunType.EASY, duration: "15 min" },
{ type: RunType.EASY, duration: "30 min" },
{ type: RunType.CROSS_TRAINING },
{ type: RunType.LONG, duration: "60 min" },
{ type: RunType.REST },
],
},
{
weekNum: 5,
days: [
{ type: RunType.SPEED, duration: "12 min", isKeyWorkout: true },
{ type: RunType.EASY, duration: "25 min" },
{ type: RunType.EASY, duration: "30 min" },
{ type: RunType.EASY, duration: "30 min" },
{ type: RunType.CROSS_TRAINING },
{ type: RunType.LONG, duration: "45 min" },
{ type: RunType.REST },
],
},
{
weekNum: 6,
days: [
{ type: RunType.SPEED, duration: "6 min", isKeyWorkout: true },
{ type: RunType.ACTIVE_REST },
{ type: RunType.EASY, duration: "20 min" },
{ type: RunType.EASY, duration: "20 min" },
{ type: RunType.REST },
{ type: RunType.EVENT, duration: "", note: "Event day!" },
{ type: RunType.SLEEP },
],
},
];
export const DAYS_OF_WEEK = [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday",
];
export const BACKGROUND_IMAGE =
"https://images.unsplash.com/photo-1464822759023-fed622ff2c3b";