From e969e395f60afa0f737427365d1d1cb2b2cd09df Mon Sep 17 00:00:00 2001 From: Alexander Erickson Date: Mon, 15 Dec 2025 13:19:01 -0500 Subject: [PATCH 01/71] Test --- todo.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/todo.txt b/todo.txt index 776a387..c992c37 100644 --- a/todo.txt +++ b/todo.txt @@ -21,7 +21,7 @@ Tasks: - update readme.md for all the new features and how to use them ✅ - add a button for the shop on the homescreen - make user-greeting in header have the user's response summarized by AI then put there - - Add a Public PGP key to Security.md +✅ - Add a Public PGP key to Security.md - Fix Calender Cutoff ⚠️ - Change all alert messages to toast notifs and add toast notifs where needed - Workout Library add a reverse organization feature (bottom to top) From a718ee66a6138228d15b300ebf1482764aeb9699 Mon Sep 17 00:00:00 2001 From: Alexander Erickson Date: Mon, 15 Dec 2025 13:21:07 -0500 Subject: [PATCH 02/71] Attempting to merge local branch with global branch --- todo.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/todo.txt b/todo.txt index 8eaf41d..3f2a1cc 100644 --- a/todo.txt +++ b/todo.txt @@ -57,3 +57,4 @@ Alex's Todo list: - Header.css - Footer.css - workout library giving two toasts every time you add/remove a workout. + - fix local branch issue From 1fa5c4d697d2ae6e96d3712247020adefe5d5556 Mon Sep 17 00:00:00 2001 From: Alexander Erickson Date: Mon, 15 Dec 2025 13:34:53 -0500 Subject: [PATCH 03/71] Test --- todo.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/todo.txt b/todo.txt index 3f2a1cc..8eaf41d 100644 --- a/todo.txt +++ b/todo.txt @@ -57,4 +57,3 @@ Alex's Todo list: - Header.css - Footer.css - workout library giving two toasts every time you add/remove a workout. - - fix local branch issue From 657c6d43f73f2d9b0b3fe434ccb31cf137ce7527 Mon Sep 17 00:00:00 2001 From: we09532 Date: Mon, 15 Dec 2025 14:12:45 -0500 Subject: [PATCH 04/71] fix: Enhance rate limiter by using ipKeyGenerator for better IP handling; update tsconfig to exclude express-rate-limit module --- src/server/authServer.js | 4 ++-- tsconfig.json | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/authServer.js b/src/server/authServer.js index 1eff77e..1aac7ee 100644 --- a/src/server/authServer.js +++ b/src/server/authServer.js @@ -10,7 +10,7 @@ leoProfanity.loadDictionary(); import express from 'express'; import userDataStoreRouter from './userDataStore.js'; -import rateLimit from 'express-rate-limit'; +import rateLimit, { ipKeyGenerator } from 'express-rate-limit'; import cors from 'cors'; import bodyParser from 'body-parser'; import { v4 as uuidv4 } from 'uuid'; @@ -56,7 +56,7 @@ const adminUsersLimiter = rateLimit({ } // Final fallback to IP - return req.ip || req.connection.remoteAddress || 'unknown'; + return ipKeyGenerator(req); } }); diff --git a/tsconfig.json b/tsconfig.json index 4684981..5f68c4d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -24,5 +24,6 @@ } }, "include": ["src", "src/types"], + "exclude": ["node_modules/express-rate-limit/tsconfig.json"], "references": [{ "path": "./tsconfig.node.json" }] } From 5660ac75971c51eb907b7369a63b4a0dc9862fb9 Mon Sep 17 00:00:00 2001 From: we09532 Date: Mon, 15 Dec 2025 19:08:50 -0500 Subject: [PATCH 05/71] feat: Implement intro overlay handling in Header, Footer, and WelcomePage components; manage UI visibility and scrolling during intro --- src/components/Footer.tsx | 24 ++++++++++++++ src/components/Header.tsx | 27 ++++++++++++++++ src/components/WelcomePage.tsx | 57 ++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index c6aeb1a..2965b95 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { Link } from 'react-router-dom'; import './Footer.css'; import { Dumbbell } from 'lucide-react'; @@ -9,6 +10,29 @@ interface FooterProps { export default function Footer({ themeMode = 'auto', onChangeThemeMode }: FooterProps) { const cur = themeMode || 'auto'; + // Hide footer while intro overlay is active + const [introActive, setIntroActive] = React.useState(false); + React.useEffect(() => { + const onStart = () => setIntroActive(true); + const onEnd = () => setIntroActive(false); + // Initialize from body class in case the event fired before this component mounted + try { + const already = Boolean(document && document.body && document.body.classList && document.body.classList.contains('intro-active')); + if (already) setIntroActive(true); + } catch (e) {} + try { + window.addEventListener('fitbuddyai-intro-start', onStart as EventListener); + window.addEventListener('fitbuddyai-intro-end', onEnd as EventListener); + } catch (e) {} + return () => { + try { + window.removeEventListener('fitbuddyai-intro-start', onStart as EventListener); + window.removeEventListener('fitbuddyai-intro-end', onEnd as EventListener); + } catch (e) {} + }; + }, []); + + if (introActive) return null; return (