2026, next try

This commit is contained in:
Anders Englöf Ytterström 2025-12-26 18:09:17 +01:00
parent 516feae195
commit 8328354ac5
10 changed files with 547 additions and 579 deletions

View file

@ -1,384 +1,112 @@
const cardio = [
{
run_for: [4, 3],
pause_for: 2,
planned_at: "2025-02-05",
completed: false,
completed_at: null,
},
{
run_for: [5, 4],
pause_for: 2,
planned_at: "2025-02-07",
completed: false,
completed_at: null,
},
{
run_for: [6, 5],
pause_for: 2,
planned_at: "2025-02-10",
completed: false,
completed_at: null,
},
{
run_for: [7, 6],
pause_for: 2,
planned_at: "2025-02-12",
completed: false,
completed_at: null,
},
{
run_for: [12],
pause_for: 5,
planned_at: "2025-02-14",
completed: false,
completed_at: null,
},
{
run_for: [7, 6],
pause_for: 2,
planned_at: "2025-02-17",
completed: false,
completed_at: null,
},
{
run_for: [8, 7],
pause_for: 2,
planned_at: "2025-02-19",
completed: false,
completed_at: null,
},
{
run_for: [14],
pause_for: 5,
planned_at: "2025-02-21",
completed: false,
completed_at: null,
},
{
run_for: [8, 7],
pause_for: 2,
planned_at: "2025-02-24",
completed: false,
completed_at: null,
},
{
run_for: [9, 8],
pause_for: 2,
planned_at: "2025-02-26",
completed: false,
completed_at: null,
},
{
run_for: [16],
pause_for: 5,
planned_at: "2025-02-28",
completed: false,
completed_at: null,
},
{
run_for: [9, 8],
pause_for: 2,
planned_at: "2025-03-03",
completed: false,
completed_at: null,
},
{
run_for: [10, 9],
pause_for: 2,
planned_at: "2025-03-05",
completed: false,
completed_at: null,
},
{
run_for: [20],
pause_for: 5,
planned_at: "2025-03-07",
completed: false,
completed_at: null,
},
{
run_for: [10, 9],
pause_for: 2,
planned_at: "2025-03-10",
completed: false,
completed_at: null,
},
{
run_for: [11, 10],
pause_for: 2,
planned_at: "2025-03-12",
completed: false,
completed_at: null,
},
{
run_for: [23],
pause_for: 5,
planned_at: "2025-03-14",
completed: false,
completed_at: null,
},
{
run_for: [11, 10],
pause_for: 2,
planned_at: "2025-03-17",
completed: false,
completed_at: null,
},
{
run_for: [12, 11],
pause_for: 2,
planned_at: "2025-03-19",
completed: false,
completed_at: null,
},
{
run_for: [26],
pause_for: 5,
planned_at: "2025-03-21",
completed: false,
completed_at: null,
},
{
run_for: [12, 11],
pause_for: 2,
planned_at: "2025-03-24",
completed: false,
completed_at: null,
},
{
run_for: [13, 12],
pause_for: 2,
planned_at: "2025-03-26",
completed: false,
completed_at: null,
},
{
run_for: [30],
pause_for: 5,
planned_at: "2025-03-28",
completed: false,
completed_at: null,
},
];
const gym = [
{
name: "rehab 1/3",
planned_at: "2025-02-02",
completed: true,
completed_at: "2025-02-02",
},
{
name: "rehab 2/3",
planned_at: "2025-02-04",
name: "rehab 1/2",
planned_at: "2025-12-31",
completed: false,
completed_at: null,
},
{
name: "rehab 3/3",
planned_at: "2025-02-06",
completed: false,
completed_at: null,
},
{
name: "A 1:1",
planned_at: "2025-02-09",
completed: false,
completed_at: null,
},
{
name: "A 1:2",
planned_at: "2025-02-11",
completed: false,
completed_at: null,
},
{
name: "A 1:3",
planned_at: "2025-02-13",
completed: false,
completed_at: null,
},
{
name: "A 2:1",
planned_at: "2025-02-16",
completed: false,
completed_at: null,
},
{
name: "A 2:2",
planned_at: "2025-02-18",
completed: false,
completed_at: null,
},
{
name: "A 2:3",
planned_at: "2025-02-20",
completed: false,
completed_at: null,
},
{
name: "A 3:1",
planned_at: "2025-02-23",
completed: false,
completed_at: null,
},
{
name: "A 3:2",
planned_at: "2025-02-25",
completed: false,
completed_at: null,
},
{
name: "A 3:3",
planned_at: "2025-02-27",
completed: false,
completed_at: null,
},
{
name: "A 4:1",
planned_at: "2025-03-02",
completed: false,
completed_at: null,
},
{
name: "A 4:2",
planned_at: "2025-03-04",
completed: false,
completed_at: null,
},
{
name: "A 4:3",
planned_at: "2025-03-06",
completed: false,
completed_at: null,
},
{
name: "B 1:1",
planned_at: "2025-03-09",
completed: false,
completed_at: null,
},
{
name: "B 1:2",
planned_at: "2025-03-11",
completed: false,
completed_at: null,
},
{
name: "B 1:3",
planned_at: "2025-03-13",
completed: false,
completed_at: null,
},
{
name: "B 2:1",
planned_at: "2025-03-16",
completed: false,
completed_at: null,
},
{
name: "B 2:2",
planned_at: "2025-03-18",
completed: false,
completed_at: null,
},
{
name: "B 2:3",
planned_at: "2025-03-20",
completed: false,
completed_at: null,
},
{
name: "B 3:1",
planned_at: "2025-03-23",
completed: false,
completed_at: null,
},
{
name: "B 3:2",
planned_at: "2025-03-25",
completed: false,
completed_at: null,
},
{
name: "B 3:3",
planned_at: "2025-03-27",
completed: false,
completed_at: null,
},
{
name: "B 4:1",
planned_at: "2025-03-30",
completed: false,
completed_at: null,
},
{
name: "B 4:2",
planned_at: "2025-04-01",
completed: false,
completed_at: null,
},
{
name: "B 4:3",
planned_at: "2025-04-03",
completed: false,
completed_at: null,
},
{
name: "C 1:1",
planned_at: "2025-04-06",
completed: false,
completed_at: null,
},
{
name: "C 1:2",
planned_at: "2025-04-08",
completed: false,
completed_at: null,
},
{
name: "C 1:3",
planned_at: "2025-04-10",
completed: false,
completed_at: null,
},
{
name: "C 2:1",
planned_at: "2025-04-13",
completed: false,
completed_at: null,
},
{
name: "C 2:2",
planned_at: "2025-04-15",
completed: false,
completed_at: null,
},
{
name: "C 2:3",
planned_at: "2025-04-17",
completed: false,
completed_at: null,
},
{
name: "C 3:1",
planned_at: "2025-04-20",
completed: false,
completed_at: null,
},
{
name: "C 3:2",
planned_at: "2025-04-22",
completed: false,
completed_at: null,
},
{
name: "C 3:3",
planned_at: "2025-04-24",
name: "rehab 2/2",
planned_at: "2026-01-02",
completed: false,
completed_at: null,
},
{ name: "PLL 1:1", planned_at: "2026-01-05", completed: false, completed_at: null },
{ name: "PLL 1:2", planned_at: "2026-01-06", completed: false, completed_at: null },
{ name: "PLL 1:3", planned_at: "2026-01-07", completed: false, completed_at: null },
{ name: "PLL 1:4", planned_at: "2026-01-09", completed: false, completed_at: null },
{ name: "PLL 2:1", planned_at: "2026-01-12", completed: false, completed_at: null },
{ name: "PLL 2:2", planned_at: "2026-01-13", completed: false, completed_at: null },
{ name: "PLL 2:3", planned_at: "2026-01-14", completed: false, completed_at: null },
{ name: "PLL 2:4", planned_at: "2026-01-16", completed: false, completed_at: null },
{ name: "PLL 3:1", planned_at: "2026-01-19", completed: false, completed_at: null },
{ name: "PLL 3:2", planned_at: "2026-01-20", completed: false, completed_at: null },
{ name: "PLL 3:3", planned_at: "2026-01-21", completed: false, completed_at: null },
{ name: "PLL 3:4", planned_at: "2026-01-23", completed: false, completed_at: null },
{ name: "PLL 4:1", planned_at: "2026-01-26", completed: false, completed_at: null },
{ name: "PLL 4:2", planned_at: "2026-01-27", completed: false, completed_at: null },
{ name: "PLL 4:3", planned_at: "2026-01-28", completed: false, completed_at: null },
{ name: "PLL 4:4", planned_at: "2026-01-30", completed: false, completed_at: null },
{ name: "PLL 5:1", planned_at: "2026-02-02", completed: false, completed_at: null },
{ name: "PLL 5:2", planned_at: "2026-02-03", completed: false, completed_at: null },
{ name: "PLL 5:3", planned_at: "2026-02-04", completed: false, completed_at: null },
{ name: "PLL 5:4", planned_at: "2026-02-06", completed: false, completed_at: null },
{ name: "PLL 6:1", planned_at: "2026-02-09", completed: false, completed_at: null },
{ name: "PLL 6:2", planned_at: "2026-02-10", completed: false, completed_at: null },
{ name: "PLL 6:3", planned_at: "2026-02-11", completed: false, completed_at: null },
{ name: "PLL 6:4", planned_at: "2026-02-13", completed: false, completed_at: null },
{ name: "PLL 1:1", planned_at: "2026-02-16", completed: false, completed_at: null },
{ name: "PLL 1:2", planned_at: "2026-02-17", completed: false, completed_at: null },
{ name: "PLL 1:3", planned_at: "2026-02-18", completed: false, completed_at: null },
{ name: "PLL 1:4", planned_at: "2026-02-20", completed: false, completed_at: null },
{ name: "PLL 2:1", planned_at: "2026-02-23", completed: false, completed_at: null },
{ name: "PLL 2:2", planned_at: "2026-02-24", completed: false, completed_at: null },
{ name: "PLL 2:3", planned_at: "2026-02-25", completed: false, completed_at: null },
{ name: "PLL 2:4", planned_at: "2026-02-27", completed: false, completed_at: null },
{ name: "PLL 3:1", planned_at: "2026-03-02", completed: false, completed_at: null },
{ name: "PLL 3:2", planned_at: "2026-03-03", completed: false, completed_at: null },
{ name: "PLL 3:3", planned_at: "2026-03-04", completed: false, completed_at: null },
{ name: "PLL 3:4", planned_at: "2026-03-06", completed: false, completed_at: null },
{ name: "PLL 4:1", planned_at: "2026-03-09", completed: false, completed_at: null },
{ name: "PLL 4:2", planned_at: "2026-03-10", completed: false, completed_at: null },
{ name: "PLL 4:3", planned_at: "2026-03-11", completed: false, completed_at: null },
{ name: "PLL 4:4", planned_at: "2026-03-13", completed: false, completed_at: null },
{ name: "PLL 5:1", planned_at: "2026-03-16", completed: false, completed_at: null },
{ name: "PLL 5:2", planned_at: "2026-03-17", completed: false, completed_at: null },
{ name: "PLL 5:3", planned_at: "2026-03-18", completed: false, completed_at: null },
{ name: "PLL 5:4", planned_at: "2026-03-20", completed: false, completed_at: null },
{ name: "PLL 6:1", planned_at: "2026-03-23", completed: false, completed_at: null },
{ name: "PLL 6:2", planned_at: "2026-03-24", completed: false, completed_at: null },
{ name: "PLL 6:3", planned_at: "2026-03-25", completed: false, completed_at: null },
{ name: "PLL 6:4", planned_at: "2026-03-27", completed: false, completed_at: null },
{ name: "PLL 1:1", planned_at: "2026-03-30", completed: false, completed_at: null },
{ name: "PLL 1:2", planned_at: "2026-03-31", completed: false, completed_at: null },
{ name: "PLL 1:3", planned_at: "2026-04-01", completed: false, completed_at: null },
{ name: "PLL 1:4", planned_at: "2026-04-03", completed: false, completed_at: null },
{ name: "PLL 2:1", planned_at: "2026-04-06", completed: false, completed_at: null },
{ name: "PLL 2:2", planned_at: "2026-04-07", completed: false, completed_at: null },
{ name: "PLL 2:3", planned_at: "2026-04-08", completed: false, completed_at: null },
{ name: "PLL 2:4", planned_at: "2026-04-10", completed: false, completed_at: null },
{ name: "PLL 3:1", planned_at: "2026-04-13", completed: false, completed_at: null },
{ name: "PLL 3:2", planned_at: "2026-04-14", completed: false, completed_at: null },
{ name: "PLL 3:3", planned_at: "2026-04-15", completed: false, completed_at: null },
{ name: "PLL 3:4", planned_at: "2026-04-17", completed: false, completed_at: null },
{ name: "PLL 4:1", planned_at: "2026-04-20", completed: false, completed_at: null },
{ name: "PLL 4:2", planned_at: "2026-04-21", completed: false, completed_at: null },
{ name: "PLL 4:3", planned_at: "2026-04-22", completed: false, completed_at: null },
{ name: "PLL 4:4", planned_at: "2026-04-24", completed: false, completed_at: null },
{ name: "PLL 5:1", planned_at: "2026-04-27", completed: false, completed_at: null },
{ name: "PLL 5:2", planned_at: "2026-04-28", completed: false, completed_at: null },
{ name: "PLL 5:3", planned_at: "2026-04-29", completed: false, completed_at: null },
{ name: "PLL 5:4", planned_at: "2026-05-01", completed: false, completed_at: null },
{ name: "PLL 6:1", planned_at: "2026-05-04", completed: false, completed_at: null },
{ name: "PLL 6:2", planned_at: "2026-05-05", completed: false, completed_at: null },
{ name: "PLL 6:3", planned_at: "2026-05-06", completed: false, completed_at: null },
{ name: "PLL 6:4", planned_at: "2026-05-08", completed: false, completed_at: null },
{ name: "PLL 1:1", planned_at: "2026-05-11", completed: false, completed_at: null },
{ name: "PLL 1:2", planned_at: "2026-05-12", completed: false, completed_at: null },
{ name: "PLL 1:3", planned_at: "2026-05-13", completed: false, completed_at: null },
{ name: "PLL 1:4", planned_at: "2026-05-15", completed: false, completed_at: null },
{ name: "PLL 2:1", planned_at: "2026-05-18", completed: false, completed_at: null },
{ name: "PLL 2:2", planned_at: "2026-05-19", completed: false, completed_at: null },
{ name: "PLL 2:3", planned_at: "2026-05-20", completed: false, completed_at: null },
{ name: "PLL 2:4", planned_at: "2026-05-22", completed: false, completed_at: null },
{ name: "PLL 3:1", planned_at: "2026-05-25", completed: false, completed_at: null },
{ name: "PLL 3:2", planned_at: "2026-05-26", completed: false, completed_at: null },
{ name: "PLL 3:3", planned_at: "2026-05-27", completed: false, completed_at: null },
{ name: "PLL 3:4", planned_at: "2026-05-29", completed: false, completed_at: null },
{ name: "PLL 4:1", planned_at: "2026-06-01", completed: false, completed_at: null },
{ name: "PLL 4:2", planned_at: "2026-06-02", completed: false, completed_at: null },
{ name: "PLL 4:3", planned_at: "2026-06-03", completed: false, completed_at: null },
{ name: "PLL 4:4", planned_at: "2026-06-05", completed: false, completed_at: null },
{ name: "PLL 5:1", planned_at: "2026-06-08", completed: false, completed_at: null },
{ name: "PLL 5:2", planned_at: "2026-06-09", completed: false, completed_at: null },
{ name: "PLL 5:3", planned_at: "2026-06-10", completed: false, completed_at: null },
{ name: "PLL 5:4", planned_at: "2026-06-12", completed: false, completed_at: null },
{ name: "PLL 6:1", planned_at: "2026-06-15", completed: false, completed_at: null },
{ name: "PLL 6:2", planned_at: "2026-06-16", completed: false, completed_at: null },
{ name: "PLL 6:3", planned_at: "2026-06-18", completed: false, completed_at: null },
{ name: "PLL 6:4", planned_at: "2026-06-20", completed: false, completed_at: null },
];
const fast = [
@ -399,120 +127,349 @@ const fast = [
];
const diet = [
{ date: "2025-02-10", completed: false },
{ date: "2025-02-11", completed: false },
{ date: "2025-02-12", completed: false },
{ date: "2025-02-13", completed: false },
{ date: "2025-02-14", completed: false },
{ date: "2025-02-15", completed: false },
{ date: "2025-02-16", completed: false },
{ date: "2025-02-17", completed: false },
{ date: "2025-02-18", completed: false },
{ date: "2025-02-19", completed: false },
{ date: "2025-02-10", completed: false },
{ date: "2025-02-21", completed: false },
{ date: "2025-02-22", completed: false },
{ date: "2025-02-23", completed: false },
{ date: "2025-02-24", completed: false },
{ date: "2025-02-25", completed: false },
{ date: "2025-02-26", completed: false },
{ date: "2025-02-27", completed: false },
{ date: "2025-02-28", completed: false },
{ date: "2025-03-01", completed: false },
{ date: "2025-03-02", completed: false },
{ date: "2025-03-03", completed: false },
{ date: "2025-03-04", excluded: true, because: "Semmeldagen" },
{ date: "2025-03-05", completed: false },
{ date: "2025-03-06", completed: false },
{ date: "2025-03-07", completed: false },
{ date: "2025-03-08", completed: false },
{ date: "2025-03-09", completed: false },
{ date: "2025-03-10", completed: false },
{ date: "2025-03-11", completed: false },
{ date: "2025-03-12", completed: false },
{ date: "2025-03-13", completed: false },
{ date: "2025-03-14", completed: false },
{ date: "2025-03-15", completed: false },
{ date: "2025-03-16", completed: false },
{ date: "2025-03-17", completed: false },
{ date: "2025-03-18", completed: false },
{ date: "2025-03-19", completed: false },
{ date: "2025-03-20", completed: false },
{ date: "2025-03-21", completed: false },
{ date: "2025-03-22", completed: false },
{ date: "2025-03-23", completed: false },
{ date: "2025-03-24", completed: false },
{ date: "2025-03-25", completed: false },
{ date: "2025-03-26", completed: false },
{ date: "2025-03-27", completed: false },
{ date: "2025-03-28", completed: false },
{ date: "2025-03-29", excluded: true, because: "Födelsedag" },
{ date: "2025-03-30", completed: false },
{ date: "2025-03-31", completed: false },
{ date: "2025-04-01", completed: false },
{ date: "2025-04-02", completed: false },
{ date: "2025-04-03", completed: false },
{ date: "2025-04-04", completed: false },
{ date: "2025-04-05", completed: false },
{ date: "2025-04-06", completed: false },
{ date: "2025-04-07", completed: false },
{ date: "2025-04-08", completed: false },
{ date: "2025-04-09", completed: false },
{ date: "2025-04-10", completed: false },
{ date: "2025-04-11", completed: false },
{ date: "2025-04-12", completed: false },
{ date: "2025-04-13", completed: false },
{ date: "2025-04-14", completed: false },
{ date: "2025-04-15", completed: false },
{ date: "2025-04-16", completed: false },
{ date: "2025-04-17", excluded: true, because: "Påsk" },
{ date: "2025-04-18", completed: false },
{ date: "2025-04-19", completed: false },
{ date: "2025-04-10", completed: false },
{ date: "2025-04-21", completed: false },
{ date: "2025-04-22", completed: false },
{ date: "2025-04-23", completed: false },
{ date: "2025-04-24", completed: false },
{ date: "2025-04-25", completed: false },
{ date: "2025-04-26", completed: false },
{ date: "2025-04-27", completed: false },
{ date: "2025-04-28", completed: false },
{ date: "2025-04-29", completed: false },
{ date: "2025-04-30", completed: false },
{ date: "2025-05-01", completed: false },
{ date: "2025-05-02", completed: false },
{ date: "2025-05-03", completed: false },
{ date: "2025-05-04", completed: false },
{ date: "2025-05-05", completed: false },
{ date: "2025-05-06", completed: false },
{ date: "2025-05-07", completed: false },
{ date: "2025-05-08", completed: false },
{ date: "2025-05-09", completed: false },
{ date: "2025-05-10", completed: false },
{ date: "2025-05-11", completed: false },
{ date: "2025-05-12", completed: false },
{ date: "2025-05-13", completed: false },
{ date: "2025-05-14", completed: false },
{ date: "2025-05-15", completed: false },
{ date: "2025-05-16", completed: false },
{ date: "2025-05-17", completed: false },
{ date: "2025-05-18", completed: false },
{ date: "2025-05-19", completed: false },
{ date: "2025-05-10", completed: false },
{ date: "2025-05-21", completed: false },
{ date: "2025-05-22", completed: false },
{ date: "2025-05-23", completed: false },
{ date: "2025-05-24", completed: false },
{ date: "2025-05-25", completed: false },
{ date: "2025-05-26", completed: false },
{ date: "2025-05-27", completed: false },
{ date: "2025-05-28", completed: false },
{ date: "2025-05-29", completed: false },
{ date: "2025-05-30", completed: false },
{ date: "2025-05-31", completed: false },
{ date: "2026-01-05", completed: false },
{ date: "2026-01-06", completed: false },
{ date: "2026-01-07", completed: false },
{ date: "2026-01-08", completed: false },
{ date: "2026-01-09", completed: false },
{ date: "2026-01-10", completed: false },
{ date: "2026-01-11", completed: false },
{ date: "2026-01-12", completed: false },
{ date: "2026-01-13", completed: false },
{ date: "2026-01-14", completed: false },
{ date: "2026-01-15", completed: false },
{ date: "2026-01-16", completed: false },
{ date: "2026-01-17", completed: false },
{ date: "2026-01-18", completed: false },
{ date: "2026-01-19", completed: false },
{ date: "2026-01-20", completed: false },
{ date: "2026-01-21", completed: false },
{ date: "2026-01-22", completed: false },
{ date: "2026-01-23", completed: false },
{ date: "2026-01-24", completed: false },
{ date: "2026-01-25", completed: false },
{ date: "2026-01-26", completed: false },
{ date: "2026-01-27", completed: false },
{ date: "2026-01-28", completed: false },
{ date: "2026-01-29", completed: false },
{ date: "2026-01-30", completed: false },
{ date: "2026-01-31", completed: false },
{ date: "2026-02-10", completed: false },
{ date: "2026-02-11", completed: false },
{ date: "2026-02-12", completed: false },
{ date: "2026-02-13", completed: false },
{ date: "2026-02-14", completed: false },
{ date: "2026-02-15", completed: false },
{ date: "2026-02-16", completed: false },
{ date: "2026-02-17", completed: false },
{ date: "2026-02-18", completed: false },
{ date: "2026-02-19", completed: false },
{ date: "2026-02-20", completed: false },
{ date: "2026-02-21", completed: false },
{ date: "2026-02-22", completed: false },
{ date: "2026-02-23", completed: false },
{ date: "2026-02-24", completed: false },
{ date: "2026-02-25", completed: false },
{ date: "2026-02-26", completed: false },
{ date: "2026-02-27", completed: false },
{ date: "2026-02-28", completed: false },
{ date: "2026-03-01", completed: false },
{ date: "2026-03-02", completed: false },
{ date: "2026-03-03", completed: false },
{ date: "2026-03-04", completed: false },
{ date: "2026-03-05", completed: false },
{ date: "2026-03-06", completed: false },
{ date: "2026-03-07", completed: false },
{ date: "2026-03-08", completed: false },
{ date: "2026-03-09", completed: false },
{ date: "2026-03-10", completed: false },
{ date: "2026-03-11", completed: false },
{ date: "2026-03-12", completed: false },
{ date: "2026-03-13", completed: false },
{ date: "2026-03-14", completed: false },
{ date: "2026-03-15", completed: false },
{ date: "2026-03-16", completed: false },
{ date: "2026-03-17", completed: false },
{ date: "2026-03-18", completed: false },
{ date: "2026-03-19", completed: false },
{ date: "2026-03-20", completed: false },
{ date: "2026-03-21", completed: false },
{ date: "2026-03-22", completed: false },
{ date: "2026-03-23", completed: false },
{ date: "2026-03-24", completed: false },
{ date: "2026-03-25", completed: false },
{ date: "2026-03-26", completed: false },
{ date: "2026-03-27", completed: false },
{ date: "2026-03-28", completed: false },
{ date: "2026-03-29", completed: false },
{ date: "2026-03-30", completed: false },
{ date: "2026-03-31", completed: false },
{ date: "2026-04-01", completed: false },
{ date: "2026-04-02", completed: false },
{ date: "2026-04-03", completed: false },
{ date: "2026-04-04", completed: false },
{ date: "2026-04-05", completed: false },
{ date: "2026-04-06", completed: false },
{ date: "2026-04-07", completed: false },
{ date: "2026-04-08", completed: false },
{ date: "2026-04-09", completed: false },
{ date: "2026-04-10", completed: false },
{ date: "2026-04-11", completed: false },
{ date: "2026-04-12", completed: false },
{ date: "2026-04-13", completed: false },
{ date: "2026-04-14", completed: false },
{ date: "2026-04-15", completed: false },
{ date: "2026-04-16", completed: false },
{ date: "2026-04-17", completed: false },
{ date: "2026-04-18", completed: false },
{ date: "2026-04-19", completed: false },
{ date: "2026-04-20", completed: false },
{ date: "2026-04-21", completed: false },
{ date: "2026-04-22", completed: false },
{ date: "2026-04-23", completed: false },
{ date: "2026-04-24", completed: false },
{ date: "2026-04-25", completed: false },
{ date: "2026-04-26", completed: false },
{ date: "2026-04-27", completed: false },
{ date: "2026-04-28", completed: false },
{ date: "2026-04-29", completed: false },
{ date: "2026-04-30", completed: false },
{ date: "2026-05-01", completed: false },
{ date: "2026-05-02", completed: false },
{ date: "2026-05-03", completed: false },
{ date: "2026-05-04", completed: false },
{ date: "2026-05-05", completed: false },
{ date: "2026-05-06", completed: false },
{ date: "2026-05-07", completed: false },
{ date: "2026-05-08", completed: false },
{ date: "2026-05-09", completed: false },
{ date: "2026-05-10", completed: false },
{ date: "2026-05-11", completed: false },
{ date: "2026-05-12", completed: false },
{ date: "2026-05-13", completed: false },
{ date: "2026-05-14", completed: false },
{ date: "2026-05-15", completed: false },
{ date: "2026-05-16", completed: false },
{ date: "2026-05-17", completed: false },
{ date: "2026-05-18", completed: false },
{ date: "2026-05-19", completed: false },
{ date: "2026-05-20", completed: false },
{ date: "2026-05-21", completed: false },
{ date: "2026-05-22", completed: false },
{ date: "2026-05-23", completed: false },
{ date: "2026-05-24", completed: false },
{ date: "2026-05-25", completed: false },
{ date: "2026-05-26", completed: false },
{ date: "2026-05-27", completed: false },
{ date: "2026-05-28", completed: false },
{ date: "2026-05-29", completed: false },
{ date: "2026-05-30", completed: false },
{ date: "2026-05-31", completed: false },
{ date: "2026-06-01", completed: false },
{ date: "2026-06-02", completed: false },
{ date: "2026-06-03", completed: false },
{ date: "2026-06-04", completed: false },
{ date: "2026-06-05", completed: false },
{ date: "2026-06-06", completed: false },
{ date: "2026-06-07", completed: false },
{ date: "2026-06-08", completed: false },
{ date: "2026-06-09", completed: false },
{ date: "2026-06-10", completed: false },
{ date: "2026-06-11", completed: false },
{ date: "2026-06-12", completed: false },
{ date: "2026-06-13", completed: false },
{ date: "2026-06-14", completed: false },
{ date: "2026-06-15", completed: false },
{ date: "2026-06-16", completed: false },
{ date: "2026-06-17", completed: false },
{ date: "2026-06-18", completed: false },
{ date: "2026-06-19", completed: false },
{ date: "2026-06-20", completed: false },
{ date: "2026-06-21", completed: false },
{ date: "2026-06-22", completed: false },
{ date: "2026-06-23", completed: false },
{ date: "2026-06-24", completed: false },
{ date: "2026-06-25", completed: false },
{ date: "2026-06-26", completed: false },
{ date: "2026-06-27", completed: false },
{ date: "2026-06-28", completed: false },
{ date: "2026-06-29", completed: false },
{ date: "2026-06-30", completed: false },
];
const walks = [
{ date: "2026-01-05", completed: false },
{ date: "2026-01-06", completed: false },
{ date: "2026-01-07", completed: false },
{ date: "2026-01-08", completed: false },
{ date: "2026-01-09", completed: false },
{ date: "2026-01-10", completed: false },
{ date: "2026-01-11", completed: false },
{ date: "2026-01-12", completed: false },
{ date: "2026-01-13", completed: false },
{ date: "2026-01-14", completed: false },
{ date: "2026-01-15", completed: false },
{ date: "2026-01-16", completed: false },
{ date: "2026-01-17", completed: false },
{ date: "2026-01-18", completed: false },
{ date: "2026-01-19", completed: false },
{ date: "2026-01-20", completed: false },
{ date: "2026-01-21", completed: false },
{ date: "2026-01-22", completed: false },
{ date: "2026-01-23", completed: false },
{ date: "2026-01-24", completed: false },
{ date: "2026-01-25", completed: false },
{ date: "2026-01-26", completed: false },
{ date: "2026-01-27", completed: false },
{ date: "2026-01-28", completed: false },
{ date: "2026-01-29", completed: false },
{ date: "2026-01-30", completed: false },
{ date: "2026-01-31", completed: false },
{ date: "2026-02-10", completed: false },
{ date: "2026-02-11", completed: false },
{ date: "2026-02-12", completed: false },
{ date: "2026-02-13", completed: false },
{ date: "2026-02-14", completed: false },
{ date: "2026-02-15", completed: false },
{ date: "2026-02-16", completed: false },
{ date: "2026-02-17", completed: false },
{ date: "2026-02-18", completed: false },
{ date: "2026-02-19", completed: false },
{ date: "2026-02-20", completed: false },
{ date: "2026-02-21", completed: false },
{ date: "2026-02-22", completed: false },
{ date: "2026-02-23", completed: false },
{ date: "2026-02-24", completed: false },
{ date: "2026-02-25", completed: false },
{ date: "2026-02-26", completed: false },
{ date: "2026-02-27", completed: false },
{ date: "2026-02-28", completed: false },
{ date: "2026-03-01", completed: false },
{ date: "2026-03-02", completed: false },
{ date: "2026-03-03", completed: false },
{ date: "2026-03-04", completed: false },
{ date: "2026-03-05", completed: false },
{ date: "2026-03-06", completed: false },
{ date: "2026-03-07", completed: false },
{ date: "2026-03-08", completed: false },
{ date: "2026-03-09", completed: false },
{ date: "2026-03-10", completed: false },
{ date: "2026-03-11", completed: false },
{ date: "2026-03-12", completed: false },
{ date: "2026-03-13", completed: false },
{ date: "2026-03-14", completed: false },
{ date: "2026-03-15", completed: false },
{ date: "2026-03-16", completed: false },
{ date: "2026-03-17", completed: false },
{ date: "2026-03-18", completed: false },
{ date: "2026-03-19", completed: false },
{ date: "2026-03-20", completed: false },
{ date: "2026-03-21", completed: false },
{ date: "2026-03-22", completed: false },
{ date: "2026-03-23", completed: false },
{ date: "2026-03-24", completed: false },
{ date: "2026-03-25", completed: false },
{ date: "2026-03-26", completed: false },
{ date: "2026-03-27", completed: false },
{ date: "2026-03-28", completed: false },
{ date: "2026-03-29", completed: false },
{ date: "2026-03-30", completed: false },
{ date: "2026-03-31", completed: false },
{ date: "2026-04-01", completed: false },
{ date: "2026-04-02", completed: false },
{ date: "2026-04-03", completed: false },
{ date: "2026-04-04", completed: false },
{ date: "2026-04-05", completed: false },
{ date: "2026-04-06", completed: false },
{ date: "2026-04-07", completed: false },
{ date: "2026-04-08", completed: false },
{ date: "2026-04-09", completed: false },
{ date: "2026-04-10", completed: false },
{ date: "2026-04-11", completed: false },
{ date: "2026-04-12", completed: false },
{ date: "2026-04-13", completed: false },
{ date: "2026-04-14", completed: false },
{ date: "2026-04-15", completed: false },
{ date: "2026-04-16", completed: false },
{ date: "2026-04-17", completed: false },
{ date: "2026-04-18", completed: false },
{ date: "2026-04-19", completed: false },
{ date: "2026-04-20", completed: false },
{ date: "2026-04-21", completed: false },
{ date: "2026-04-22", completed: false },
{ date: "2026-04-23", completed: false },
{ date: "2026-04-24", completed: false },
{ date: "2026-04-25", completed: false },
{ date: "2026-04-26", completed: false },
{ date: "2026-04-27", completed: false },
{ date: "2026-04-28", completed: false },
{ date: "2026-04-29", completed: false },
{ date: "2026-04-30", completed: false },
{ date: "2026-05-01", completed: false },
{ date: "2026-05-02", completed: false },
{ date: "2026-05-03", completed: false },
{ date: "2026-05-04", completed: false },
{ date: "2026-05-05", completed: false },
{ date: "2026-05-06", completed: false },
{ date: "2026-05-07", completed: false },
{ date: "2026-05-08", completed: false },
{ date: "2026-05-09", completed: false },
{ date: "2026-05-10", completed: false },
{ date: "2026-05-11", completed: false },
{ date: "2026-05-12", completed: false },
{ date: "2026-05-13", completed: false },
{ date: "2026-05-14", completed: false },
{ date: "2026-05-15", completed: false },
{ date: "2026-05-16", completed: false },
{ date: "2026-05-17", completed: false },
{ date: "2026-05-18", completed: false },
{ date: "2026-05-19", completed: false },
{ date: "2026-05-20", completed: false },
{ date: "2026-05-21", completed: false },
{ date: "2026-05-22", completed: false },
{ date: "2026-05-23", completed: false },
{ date: "2026-05-24", completed: false },
{ date: "2026-05-25", completed: false },
{ date: "2026-05-26", completed: false },
{ date: "2026-05-27", completed: false },
{ date: "2026-05-28", completed: false },
{ date: "2026-05-29", completed: false },
{ date: "2026-05-30", completed: false },
{ date: "2026-05-31", completed: false },
{ date: "2026-06-01", completed: false },
{ date: "2026-06-02", completed: false },
{ date: "2026-06-03", completed: false },
{ date: "2026-06-04", completed: false },
{ date: "2026-06-05", completed: false },
{ date: "2026-06-06", completed: false },
{ date: "2026-06-07", completed: false },
{ date: "2026-06-08", completed: false },
{ date: "2026-06-09", completed: false },
{ date: "2026-06-10", completed: false },
{ date: "2026-06-11", completed: false },
{ date: "2026-06-12", completed: false },
{ date: "2026-06-13", completed: false },
{ date: "2026-06-14", completed: false },
{ date: "2026-06-15", completed: false },
{ date: "2026-06-16", completed: false },
{ date: "2026-06-17", completed: false },
{ date: "2026-06-18", completed: false },
{ date: "2026-06-19", completed: false },
{ date: "2026-06-20", completed: false },
{ date: "2026-06-21", completed: false },
{ date: "2026-06-22", completed: false },
{ date: "2026-06-23", completed: false },
{ date: "2026-06-24", completed: false },
{ date: "2026-06-25", completed: false },
{ date: "2026-06-26", completed: false },
{ date: "2026-06-27", completed: false },
{ date: "2026-06-28", completed: false },
{ date: "2026-06-29", completed: false },
{ date: "2026-06-30", completed: false },
];
export default {
cardio,
walks,
gym,
diet,
fast,

12
package-lock.json generated
View file

@ -84,6 +84,7 @@
"integrity": "sha512-l+lkXCHS6tQEc5oUpK28xBOZ6+HwaH7YwoYQbLFiYb4nS2/l1tKnZEtEWkD0GuiYdvArf9qBS0XlQGXzPMsNqQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.26.2",
@ -2401,6 +2402,7 @@
"integrity": "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@sveltejs/vite-plugin-svelte-inspector": "^4.0.1",
"debug": "^4.4.0",
@ -2474,6 +2476,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@ -2496,6 +2499,7 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@ -2703,6 +2707,7 @@
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001688",
"electron-to-chromium": "^1.5.73",
@ -4459,6 +4464,7 @@
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
@ -4511,6 +4517,7 @@
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
@ -5217,6 +5224,7 @@
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.19.6.tgz",
"integrity": "sha512-6ydekB3qyqUal+UhfMjmVOjRGtxysR8vuiMhi2nwuBtPJWnctVlsGspjVFB05qmR+TXI1emuqtZt81c0XiFleA==",
"license": "MIT",
"peer": true,
"dependencies": {
"@ampproject/remapping": "^2.3.0",
"@jridgewell/sourcemap-codec": "^1.5.0",
@ -5308,6 +5316,7 @@
"integrity": "sha512-w8CXxxbFA5zfNsR/i8HZq5bvn18AK0O9jj7hyo1YqkovLxEFa0uP0LCVGZRqiRaKRFxXhELBp8SteeAjEnfeJg==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
@ -5442,6 +5451,7 @@
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@ -5584,6 +5594,7 @@
"integrity": "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"esbuild": "^0.24.2",
"postcss": "^8.4.49",
@ -5989,6 +6000,7 @@
"integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"rollup": "dist/bin/rollup"
},

View file

@ -4,7 +4,7 @@
import { currentView } from "./lib/store";
import Summary from "./lib/Summary.svelte";
import GymProgress from "./lib/GymProgress.svelte";
import CardioProgress from "./lib/CardioProgress.svelte";
import WalksProgress from "./lib/WalksProgress.svelte";
import DietProgress from "./lib/DietProgress.svelte";
import FastProgress from "./lib/FastProgress.svelte";
import Info from "./lib/Info.svelte";
@ -18,7 +18,7 @@
<GymProgress />
{/if}
{#if $currentView === 2}
<CardioProgress />
<WalksProgress />
{/if}
{#if $currentView === 3}
<DietProgress />

View file

@ -1,14 +1,14 @@
<script lang="ts">
import DietProgress from "./DietProgress.svelte";
import P from "./svg-path";
import { gym, cardio, diet, fast } from "./store";
import { gym, walks, diet } from "./store";
export const DEG_TO_RAD = Math.PI / 180;
export const RAD_TO_DEG = 180 / Math.PI;
export const FULL_CIRCLE_IN_RADIANS = 2 * Math.PI;
const size = 400;
const segmentHeight = 16;
const segmentHeight = 32;
const span = 0.8 * FULL_CIRCLE_IN_RADIANS;
const startAngle = 0.25 * FULL_CIRCLE_IN_RADIANS + span / 2;
@ -26,18 +26,20 @@
const borderRadius = thickness / 2;
const outerRadius = radius;
const innerRadius = outerRadius - thickness;
const radEndAngle = startAngle - radLength;
const borderRadiusAngle =
(borderRadius / (outerRadius * FULL_CIRCLE_IN_RADIANS)) *
FULL_CIRCLE_IN_RADIANS;
const radEndAngle = startAngle - Math.max(radLength, 3 * borderRadiusAngle);
const isLongTrack = radLength - 2 * borderRadiusAngle > Math.PI;
const start = startAngle + (offset ?? 0);
return P()
// mitt mellan startkortsidan (ca kl 8)
.moveTo(
-Math.sin(start) * (outerRadius - borderRadius),
Math.cos(start) * (outerRadius - borderRadius),
)
// kantavrundningen till yttre långsidan
.arcTo(
borderRadius,
borderRadius,
@ -46,6 +48,7 @@
-Math.sin(start - borderRadiusAngle) * outerRadius,
Math.cos(start - borderRadiusAngle) * outerRadius,
)
// yttre långsidan, start till slut
.arcTo(
outerRadius,
outerRadius,
@ -54,6 +57,7 @@
-Math.sin(radEndAngle + borderRadiusAngle) * outerRadius,
Math.cos(radEndAngle + borderRadiusAngle) * outerRadius,
)
// kantutjämningen från yttre långsidan till slutkortsidan
.arcTo(
borderRadius,
borderRadius,
@ -62,10 +66,12 @@
-Math.sin(radEndAngle) * (outerRadius - borderRadius),
Math.cos(radEndAngle) * (outerRadius - borderRadius),
)
// linje slutkortsidan, från yttersidan till innersidan
.lineTo(
-Math.sin(radEndAngle) * (innerRadius + borderRadius),
Math.cos(radEndAngle) * (innerRadius + borderRadius),
)
// kantutjämning till innersidan
.arcTo(
borderRadius,
borderRadius,
@ -74,6 +80,7 @@
-Math.sin(radEndAngle + borderRadiusAngle) * innerRadius,
Math.cos(radEndAngle + borderRadiusAngle) * innerRadius,
)
// innersidan, slut till start
.arcTo(
innerRadius,
innerRadius,
@ -82,6 +89,7 @@
-Math.sin(start - borderRadiusAngle) * innerRadius,
Math.cos(start - borderRadiusAngle) * innerRadius,
)
// kantutjämning från innersidan till start
.arcTo(
borderRadius,
borderRadius,
@ -90,6 +98,7 @@
-Math.sin(start) * (innerRadius + borderRadius),
Math.cos(start) * (innerRadius + borderRadius),
)
// stäng, blir en rak linje till den redan existerande kantutjämningen
.close()
.stringify();
};
@ -102,7 +111,7 @@
},
{
c: "cardio",
progress: $cardio.filter((c) => c.completed).length / $cardio.length,
progress: $walks.filter((c) => c.completed).length / $walks.length,
level: 1,
},
{
@ -112,11 +121,6 @@
$diet.filter((c) => !c.excluded).length,
level: 2,
},
{
c: "fast",
progress: $fast.filter((c) => c.completed).length / $fast.length,
level: 3,
},
];
</script>
@ -129,7 +133,7 @@
fill="#fff"
opacity="0.066"
d={points(
size / 2 - level * (segmentHeight + 4),
size / 2 - level * (segmentHeight + 6),
span,
segmentHeight,
)}
@ -138,18 +142,18 @@
class={c}
fill="currentColor"
d={points(
size / 2 - level * (segmentHeight + 4),
size / 2 - level * (segmentHeight + 6),
progress * span,
segmentHeight,
)}
/>
<path
fill="#fff"
opacity="0.4"
opacity="0"
d={points(
size / 2 - level * (segmentHeight + 4) - 4,
size / 2 - level * (segmentHeight + 4) - 6,
progress * span * 0.98,
4,
6,
)}
/>
{/each}

View file

@ -1,43 +0,0 @@
<script lang="ts">
import { cardio } from "./store";
import {dm, back } from "./common";
const remaining = $cardio.length;
const days = ["ons", "fre", "mån"];
let done = $derived($cardio.filter((c) => c.completed).length);
</script>
<header>
<button class="clickable back" onclick={() => back()}>←</button>
<h1>
Konditionsträning: {done} av {remaining}
</h1>
</header>
<main>
<progress hidden max={remaining} value={done}></progress>
<div class="calendar">
{#each $cardio as col, i}
<article class="clickable">
<label>
<input type="checkbox" bind:checked={col.completed} />
<strong
>{(col.run_for as number[])
.map((m) => `${m} min`)
.join(" + ")}, {col.pause_for} vila</strong
>
<small>{days[i % 3]} {dm(col.planned_at)}</small>
</label>
</article>
{/each}
</div>
</main>
<style>
main {
background-color: #5dc5f8;
border-top: 4px solid rgba(0, 0, 0, 0.2)
}
article:nth-child(1) {
grid-column: 2;
}
</style>

View file

@ -2,7 +2,7 @@
import { gym } from "./store";
import {dm, back } from "./common";
const remaining = $gym.length;
const days = ["sön", "tis", "tor"];
const days = ["mån", "tis", "ons", "fre"];
let done = $derived($gym.filter((c) => c.completed).length);
</script>
@ -33,6 +33,10 @@
border-top: 4px solid rgba(0, 0, 0, 0.2)
}
.calendar {
grid-template-columns: repeat(4, 1fr);
}
article:nth-child(1) {
grid-column: 3;
}

View file

@ -12,25 +12,19 @@
<main>
<div class="infobox">
<h2>Hej, Anders har en 40-årskris xD</h2>
<p><em>Dessutom hägrar en vecka på Sweden rock festival.</em>
Ryggen och benen behöver vara i form.</p>
<p>
För att göra träningen litet mer belönande skapades denna app för att ge honom
möjlighet att bocka i allt han gör.
</p>
<h2>Börja löpträna</h2>
<p>Anders har tidigare löptränat, men inte gjort det kontinuerligt sedan 2017.</p>
<p><b>Metod:</b> löpträning 3 gånger per vecka: 2 pass med 2 intervaller, ett långpass. Linjär
progression med 60&ndash;120 sekunders ökning per pass.</p>
<strong>Mål: 5km löpning efter 7 veckor.</strong>
<h2>Återuppta styrkelyft</h2>
<p>Anders föredrar baslyft med frivikter. Hans PB slogs senast januari 2023.</p>
<h2>Daglig stegräkning</h2>
<p>Anders jobbar på kontor och behöver se till att röra sig.</p>
<strong>Minst 10 000 steg varje dag.</strong>
<h2>Återuppta styrketräning</h2>
<p>Anders föredrar baslyft med frivikter. Hans PB slogs senast januari 2023. Han behöver prioritera att bygga litet muskler.</p>
<p>
<b>Metod</b>: styrketräning 3 gånger per vecka. 4 veckor grundträning (A-blocket),
4 veckor specialiserad träning (B-blocket), 3 veckor toppning (C-blocket).
<b>Metod</b>: Powerbuilding, 4ggr/vecka.
</p>
<strong>Mål: 11 veckors träning, med avslutande toppning och
styrkelyftstotal.</strong>
<strong>Mål: 24 veckors träning.</strong>
<h2>Inleda diet</h2>
<p>
Anders har ett uppskattat BMI på 28-32 vid start av denna utmaning.
@ -38,7 +32,7 @@
<p>
<b>Metod</b>: Följa
<a href="https://www.youtube.com/watch?v=fB_ESE2XwOU">Alan Thralls tips</a>, som listas nedan.
Anders cheat meals: Semla på semmeldagen, fika på födelsedagen, liten godispåse på lördagar.
Anders cheat meals: Semla på semmeldagen, fika på födelsedagen.
</p>
<blockquote>
<ul>
@ -59,7 +53,7 @@
</li>
</ul>
</blockquote>
<p><strong>Mål: Följa ovan kostråd 16 veckor, med fördefinierade cheat meals.</strong></p>
<p><strong>Mål: Följa ovan kostråd jan&ndash;juni, med fördefinierade cheat meals.</strong></p>
<h2>Vem?</h2>
<p>
Anders skapade denna PWA. Han är en webbutvecklare som är pappa, älskar hårdrock och föredrar att

View file

@ -1,9 +1,8 @@
<script lang="ts">
import { gym, fast, cardio, diet, currentView } from "./store";
import { gym, fast, walks, diet, currentView } from "./store";
import Arc from "./Arc.svelte";
let gymProgress = $derived($gym.filter((c) => c.completed).length);
let cardioProgress = $derived($cardio.filter((c) => c.completed).length);
let fastProgress = $derived($fast.filter((c) => c.completed).length);
let walksProgress = $derived($walks.filter((c) => c.completed).length);
let dietProgress = $derived($diet.filter((c) => c.completed).length);
let dietTotal = $derived($diet.filter((c) => !c.excluded).length);
@ -14,34 +13,28 @@
<main>
<h1>Dags att komma i form!</h1>
<Arc />
<div class="progress">
<h2>Styrketräning, 3d/v under 11 veckor</h2>
<h2>Powerbuilding Lite</h2>
<div class="progress-row">
<progress class="gym" value={gymProgress} max={$gym.length}></progress>
<i>{gymProgress} / {$gym.length}</i>
<button class="clickable gym" onclick={() => navigate(1)}>+</button>
</div>
<h2>Konditionsträning, 3d/v under 7 veckor</h2>
<h2>10 000&ndash;15 000 steg/dag</h2>
<div class="progress-row">
<progress class="cardio" value={cardioProgress} max={$cardio.length}
<progress class="walks" value={walksProgress} max={$walks.length}
></progress>
<i>{cardioProgress} / {$cardio.length}</i>
<button class="clickable cardio" onclick={() => navigate(2)}>+</button>
<i>{walksProgress} / {$walks.length}</i>
<button class="clickable walks" onclick={() => navigate(2)}>+</button>
</div>
<h2>Diet, feb&ndash;maj</h2>
<h2>Diet, jan&ndash;maj</h2>
<div class="progress-row">
<progress class="diet" value={dietProgress} max={dietTotal}></progress>
<i>{dietProgress} / {dietTotal}</i>
<button class="clickable diet" onclick={() => navigate(3)}>+</button>
</div>
<h2>Fasta, 3d/v under maj</h2>
<div class="progress-row">
<progress class="fast" value={fastProgress} max={$fast.length}></progress>
<i>{fastProgress} / {$fast.length}</i>
<button class="clickable fast" onclick={() => navigate(5)}>+</button>
</div>
</div>
<Arc />
<div class="top-button">
<button class="clickable info" onclick={() => navigate(4)}> Va? </button>
</div>
@ -60,7 +53,7 @@
}
progress {
&.cardio {
&.walks {
--pcolor: #5dc5f8;
}
@ -185,7 +178,7 @@
background-color: var(--btn-bg);
padding: 0.25em 0.66em;
&.cardio {
&.walks {
--btn-bg: #5dc5f8;
}

View file

@ -0,0 +1,48 @@
<script lang="ts">
import { walks } from "./store";
import {dm, back } from "./common";
const remaining = $walks.length;
const days = ["ons", "fre", "mån"];
let done = $derived($walks.filter((c) => c.completed).length);
</script>
<header>
<button class="clickable back" onclick={() => back()}>←</button>
<h1>
Stegutmaning: {done} av {remaining}
</h1>
</header>
<main>
<progress hidden max={remaining} value={done}></progress>
<div class="calendar">
{#each $walks as day, i}
<article class="clickable">
{#if day.excluded}
<div class="red">
{day.because}
</div>
{:else}
<label>
<input type="checkbox" bind:checked={day.completed} />
{dm(day.date)}
</label>
{/if}
</article>
{/each}
</div>
</main>
<style>
main {
background-color: #5dc5f8;
border-top: 4px solid rgba(0, 0, 0, 0.2)
}
.calendar {
grid-template-columns: repeat(7, 1fr);
}
article:nth-child(1) {
grid-column: 1;
}
</style>

View file

@ -3,8 +3,7 @@ import { persisted } from "svelte-persisted-store";
import defaultState from "../../data/default-state";
export const currentView = writable(0);
export const cardio = persisted("cardio", defaultState.cardio);
export const walks = persisted("walks", defaultState.walks);
export const gym = persisted("gym", defaultState.gym);
export const diet = persisted("diet", defaultState.diet);
export const fast = persisted("fast", defaultState.fast);