From 869eb16bd1ad45a482c0ac3ffd255c5030d34735 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Fri, 19 Jun 2026 17:43:46 -0400 Subject: [PATCH 01/21] Move editor constants to separate file --- frontend/src/features/event/editor/constants.ts | 4 ++++ frontend/src/features/event/editor/validate-data.ts | 10 ++++------ frontend/src/lib/messages.ts | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 frontend/src/features/event/editor/constants.ts diff --git a/frontend/src/features/event/editor/constants.ts b/frontend/src/features/event/editor/constants.ts new file mode 100644 index 00000000..604aa2df --- /dev/null +++ b/frontend/src/features/event/editor/constants.ts @@ -0,0 +1,4 @@ +export const MAX_DAYS = 64; +export const MAX_DURATION_MS = MAX_DAYS * 24 * 60 * 60 * 1000; +export const MAX_DURATION = `${MAX_DAYS} days`; +export const MAX_TITLE_LENGTH = 50; diff --git a/frontend/src/features/event/editor/validate-data.ts b/frontend/src/features/event/editor/validate-data.ts index f201de55..503c35f4 100644 --- a/frontend/src/features/event/editor/validate-data.ts +++ b/frontend/src/features/event/editor/validate-data.ts @@ -1,14 +1,12 @@ import { EventInformation, WeekdayRange } from "@/core/event/types"; import { findRangeFromWeekdayArray } from "@/core/event/weekday-utils"; +import { + MAX_DURATION_MS, + MAX_TITLE_LENGTH, +} from "@/features/event/editor/constants"; import { EventEditorType } from "@/features/event/editor/types"; import { MESSAGES } from "@/lib/messages"; -const MAX_DAYS = 64; -export const MAX_DURATION_MS = MAX_DAYS * 24 * 60 * 60 * 1000; -export const MAX_DURATION = `${MAX_DAYS} days`; - -export const MAX_TITLE_LENGTH = 50; - export async function validateEventData( editorType: EventEditorType, data: EventInformation, diff --git a/frontend/src/lib/messages.ts b/frontend/src/lib/messages.ts index cef5a4f4..f7f4c9b8 100644 --- a/frontend/src/lib/messages.ts +++ b/frontend/src/lib/messages.ts @@ -2,7 +2,7 @@ import { MAX_DEFAULT_NAME_LENGTH } from "@/features/account/constants"; import { MAX_DURATION, MAX_TITLE_LENGTH, -} from "@/features/event/editor/validate-data"; +} from "@/features/event/editor/constants"; export const MESSAGES = { // generic errors From b198bbfbd39db94ee97372d602965c8bf29cff80 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Fri, 19 Jun 2026 17:51:11 -0400 Subject: [PATCH 02/21] Remove export on unused export --- frontend/src/features/event/editor/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/features/event/editor/constants.ts b/frontend/src/features/event/editor/constants.ts index 604aa2df..f68f9c05 100644 --- a/frontend/src/features/event/editor/constants.ts +++ b/frontend/src/features/event/editor/constants.ts @@ -1,4 +1,4 @@ -export const MAX_DAYS = 64; +const MAX_DAYS = 64; export const MAX_DURATION_MS = MAX_DAYS * 24 * 60 * 60 * 1000; export const MAX_DURATION = `${MAX_DAYS} days`; export const MAX_TITLE_LENGTH = 50; From 70dce170c7fa2d6bcbd0fb7dd8496ef9d4519b1f Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Fri, 19 Jun 2026 18:25:24 -0400 Subject: [PATCH 03/21] Remove event details placeholders --- frontend/src/app/(event)/[event-code]/loading.tsx | 3 +-- frontend/src/app/(event)/[event-code]/painting/loading.tsx | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/frontend/src/app/(event)/[event-code]/loading.tsx b/frontend/src/app/(event)/[event-code]/loading.tsx index 9f8912bc..f132bebf 100644 --- a/frontend/src/app/(event)/[event-code]/loading.tsx +++ b/frontend/src/app/(event)/[event-code]/loading.tsx @@ -15,9 +15,8 @@ export default function Loading() {
-
+
-
diff --git a/frontend/src/app/(event)/[event-code]/painting/loading.tsx b/frontend/src/app/(event)/[event-code]/painting/loading.tsx index 28a1cea4..6b9d966e 100644 --- a/frontend/src/app/(event)/[event-code]/painting/loading.tsx +++ b/frontend/src/app/(event)/[event-code]/painting/loading.tsx @@ -17,7 +17,6 @@ export default function Loading() {
-
From c80cf2f0382db0cce0f5611bf7bcf2abf0206187 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Fri, 19 Jun 2026 18:34:52 -0400 Subject: [PATCH 04/21] Update painting loading page --- .../src/app/(event)/[event-code]/painting/loading.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/(event)/[event-code]/painting/loading.tsx b/frontend/src/app/(event)/[event-code]/painting/loading.tsx index 6b9d966e..948551c5 100644 --- a/frontend/src/app/(event)/[event-code]/painting/loading.tsx +++ b/frontend/src/app/(event)/[event-code]/painting/loading.tsx @@ -8,19 +8,21 @@ export default function Loading() {
-
+
-
+
-
+
+ +
); From b44f5292fd994a7bfeb0096bc06f7e849521516b Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Fri, 19 Jun 2026 18:35:57 -0400 Subject: [PATCH 05/21] Update results loading page spacing --- frontend/src/app/(event)/[event-code]/loading.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/(event)/[event-code]/loading.tsx b/frontend/src/app/(event)/[event-code]/loading.tsx index f132bebf..835d0486 100644 --- a/frontend/src/app/(event)/[event-code]/loading.tsx +++ b/frontend/src/app/(event)/[event-code]/loading.tsx @@ -8,7 +8,7 @@ export default function Loading() {
-
+
From ab798be5833c13bb3800d13391a970af88adffbd Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Fri, 19 Jun 2026 18:39:37 -0400 Subject: [PATCH 06/21] Update event editor loading page --- frontend/src/app/(event)/[event-code]/edit/loading.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/(event)/[event-code]/edit/loading.tsx b/frontend/src/app/(event)/[event-code]/edit/loading.tsx index 122b9bbb..5938bb47 100644 --- a/frontend/src/app/(event)/[event-code]/edit/loading.tsx +++ b/frontend/src/app/(event)/[event-code]/edit/loading.tsx @@ -15,11 +15,12 @@ export default function Loading() {
-
+
-
-
-
+
+
+
+
); From 0d9aece1ee2bda05ddf140e8ddeb521672e66b51 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Fri, 19 Jun 2026 18:46:21 -0400 Subject: [PATCH 07/21] Fix mobile event editor loading title length --- frontend/src/app/(event)/[event-code]/edit/loading.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/(event)/[event-code]/edit/loading.tsx b/frontend/src/app/(event)/[event-code]/edit/loading.tsx index 5938bb47..6ce716f2 100644 --- a/frontend/src/app/(event)/[event-code]/edit/loading.tsx +++ b/frontend/src/app/(event)/[event-code]/edit/loading.tsx @@ -6,7 +6,7 @@ export default function Loading() {
-
+
From 7d2b89038a96634f8435a0a73732bb51f6fa4ea7 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Fri, 19 Jun 2026 18:59:35 -0400 Subject: [PATCH 08/21] Move settings pages into subfolder This way, the loading page applies to all the content when entering the settings page. --- frontend/src/app/settings/{ => (submenus)}/layout.tsx | 0 frontend/src/app/settings/{ => (submenus)}/page.tsx | 0 frontend/src/app/settings/{ => (submenus)}/remove/page.tsx | 0 frontend/src/app/settings/{ => (submenus)}/security/page.tsx | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename frontend/src/app/settings/{ => (submenus)}/layout.tsx (100%) rename frontend/src/app/settings/{ => (submenus)}/page.tsx (100%) rename frontend/src/app/settings/{ => (submenus)}/remove/page.tsx (100%) rename frontend/src/app/settings/{ => (submenus)}/security/page.tsx (100%) diff --git a/frontend/src/app/settings/layout.tsx b/frontend/src/app/settings/(submenus)/layout.tsx similarity index 100% rename from frontend/src/app/settings/layout.tsx rename to frontend/src/app/settings/(submenus)/layout.tsx diff --git a/frontend/src/app/settings/page.tsx b/frontend/src/app/settings/(submenus)/page.tsx similarity index 100% rename from frontend/src/app/settings/page.tsx rename to frontend/src/app/settings/(submenus)/page.tsx diff --git a/frontend/src/app/settings/remove/page.tsx b/frontend/src/app/settings/(submenus)/remove/page.tsx similarity index 100% rename from frontend/src/app/settings/remove/page.tsx rename to frontend/src/app/settings/(submenus)/remove/page.tsx diff --git a/frontend/src/app/settings/security/page.tsx b/frontend/src/app/settings/(submenus)/security/page.tsx similarity index 100% rename from frontend/src/app/settings/security/page.tsx rename to frontend/src/app/settings/(submenus)/security/page.tsx From 4394c3ce1c4561fc77cc486ac83aef536272f42a Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Fri, 19 Jun 2026 18:59:43 -0400 Subject: [PATCH 09/21] Create loading layout for settings page --- frontend/src/app/settings/loading.tsx | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 frontend/src/app/settings/loading.tsx diff --git a/frontend/src/app/settings/loading.tsx b/frontend/src/app/settings/loading.tsx new file mode 100644 index 00000000..5df2a735 --- /dev/null +++ b/frontend/src/app/settings/loading.tsx @@ -0,0 +1,21 @@ +import HeaderSpacer from "@/features/header/components/header-spacer"; + +export default function Loading() { + return ( +
+ + +
+

Account Settings

+

+ Manage your account settings and preferences! +

+
+ +
+
+
+
+
+ ); +} From acd424392b72f1c6d4a7fef01e520eb8067eeda8 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Sat, 20 Jun 2026 13:35:34 -0400 Subject: [PATCH 10/21] Update password criteria animation --- frontend/src/components/text-input-field.tsx | 13 +-- .../auth/components/password-criteria.tsx | 83 ++++++++++++------- 2 files changed, 58 insertions(+), 38 deletions(-) diff --git a/frontend/src/components/text-input-field.tsx b/frontend/src/components/text-input-field.tsx index 9bc27d9c..b6df1de8 100644 --- a/frontend/src/components/text-input-field.tsx +++ b/frontend/src/components/text-input-field.tsx @@ -1,6 +1,5 @@ import { useEffect, useRef, useState } from "react"; -import * as Collapsible from "@radix-ui/react-collapsible"; import { EyeClosedIcon, EyeIcon, TriangleAlertIcon } from "lucide-react"; import PasswordCriteria from "@/features/auth/components/password-criteria"; @@ -192,14 +191,10 @@ export default function TextInputField(props: TextInputFieldProps) { )}
- {/* Password Criteria */} - - -
- -
-
-
+
); } diff --git a/frontend/src/features/auth/components/password-criteria.tsx b/frontend/src/features/auth/components/password-criteria.tsx index 932d13ae..d933ba5f 100644 --- a/frontend/src/features/auth/components/password-criteria.tsx +++ b/frontend/src/features/auth/components/password-criteria.tsx @@ -1,44 +1,69 @@ +import { AnimatePresence, motion } from "framer-motion"; import { CheckIcon, XIcon } from "lucide-react"; import { cn } from "@/lib/utils/classname"; type PasswordCriteriaProps = { + open: boolean; criteria: { [key: string]: boolean }; }; -export default function PasswordCriteria(props: PasswordCriteriaProps) { - const allCriteriaMet = Object.values(props.criteria).every((value) => value); +export default function PasswordCriteria({ + open, + criteria, +}: PasswordCriteriaProps) { + const allCriteriaMet = Object.values(criteria).every((value) => value); const iconClass = "w-4 h-4"; return ( -
- {allCriteriaMet ? ( -
- - Password is strong! -
- ) : ( - <> - Your password must: - {Object.entries(props.criteria).map(([key, value], index) => ( -
- {value ? ( - - ) : ( - - )} - {key} -
- ))} - + + {open && ( + +
+ + + {allCriteriaMet ? ( +
+ + Password is strong! +
+ ) : ( + <> + Your password must: + {Object.entries(criteria).map(([key, value], index) => ( +
+ {value ? ( + + ) : ( + + )} + {key} +
+ ))} + + )} +
+
+
+
)} -
+ ); } From f20ef4a1575814058ce9417e54969ad8a55df1ce Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Sat, 20 Jun 2026 13:36:39 -0400 Subject: [PATCH 11/21] Update text alignment --- frontend/src/features/auth/components/password-criteria.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/features/auth/components/password-criteria.tsx b/frontend/src/features/auth/components/password-criteria.tsx index d933ba5f..d05b650c 100644 --- a/frontend/src/features/auth/components/password-criteria.tsx +++ b/frontend/src/features/auth/components/password-criteria.tsx @@ -25,7 +25,7 @@ export default function PasswordCriteria({ animate={{ height: "auto", opacity: 1 }} exit={{ height: 0, opacity: 0 }} > -
+
Date: Sat, 20 Jun 2026 13:38:43 -0400 Subject: [PATCH 12/21] Update strong password wording --- frontend/src/features/auth/components/password-criteria.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/features/auth/components/password-criteria.tsx b/frontend/src/features/auth/components/password-criteria.tsx index d05b650c..153b58a8 100644 --- a/frontend/src/features/auth/components/password-criteria.tsx +++ b/frontend/src/features/auth/components/password-criteria.tsx @@ -36,7 +36,7 @@ export default function PasswordCriteria({ {allCriteriaMet ? (
- Password is strong! + Your password is strong!
) : ( <> From b5ed37a4b46b90f6fa7315ee0b69941aae032dc7 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Sat, 20 Jun 2026 13:55:02 -0400 Subject: [PATCH 13/21] Update dashboard loading screen colors --- frontend/src/app/dashboard/loading.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/dashboard/loading.tsx b/frontend/src/app/dashboard/loading.tsx index a0abdf5b..d71e5b2d 100644 --- a/frontend/src/app/dashboard/loading.tsx +++ b/frontend/src/app/dashboard/loading.tsx @@ -8,7 +8,7 @@ export default function Loading() {
-
+
{/* 2. Skeleton for the Event Grid */} @@ -17,7 +17,7 @@ export default function Loading() { {[1, 2, 3].map((i) => (
))}
From db88abd7653782327793f980ff8669ff5d3391fc Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Mon, 22 Jun 2026 17:00:34 -0400 Subject: [PATCH 14/21] Update code checking rate limit --- backend/api/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/api/settings.py b/backend/api/settings.py index 5e3372e1..d6d50766 100644 --- a/backend/api/settings.py +++ b/backend/api/settings.py @@ -125,7 +125,7 @@ class ThrottleScopes: ThrottleScopes.PASSWORD_RESET.key: "10/hour", ThrottleScopes.EVENT_CREATION.key: "25/hour", ThrottleScopes.AVAILABILITY_ADD.key: "50/hour", - ThrottleScopes.CODE_CHECK.key: "50/hour", + ThrottleScopes.CODE_CHECK.key: "10/min", }, } From d4d975a0a288b9624071a675c08fb44fc12c5e5c Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Mon, 22 Jun 2026 17:27:41 -0400 Subject: [PATCH 15/21] Add cursor-pointer to toast X --- frontend/src/features/system-feedback/toast/base.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/features/system-feedback/toast/base.tsx b/frontend/src/features/system-feedback/toast/base.tsx index ece3bf84..6c1542db 100644 --- a/frontend/src/features/system-feedback/toast/base.tsx +++ b/frontend/src/features/system-feedback/toast/base.tsx @@ -107,7 +107,8 @@ export default function BaseToast({ } }} className={cn( - "z-10 col-start-3 row-span-2 flex h-6 w-6 items-center justify-center rounded-full", + "z-10 col-start-3 row-span-2 flex h-6 w-6", + "cursor-pointer items-center justify-center rounded-full", "hover:bg-black/20 focus:outline-none focus:ring-2 focus:ring-white/50", !isPersistent && "opacity-0 focus-visible:opacity-100 group-hover:opacity-100", From d61df19261f248dc530e3601329488efd85b7311 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Mon, 22 Jun 2026 17:51:37 -0400 Subject: [PATCH 16/21] Create global.d.ts --- frontend/src/global.d.ts | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 frontend/src/global.d.ts diff --git a/frontend/src/global.d.ts b/frontend/src/global.d.ts new file mode 100644 index 00000000..eb19293f --- /dev/null +++ b/frontend/src/global.d.ts @@ -0,0 +1,2 @@ +// Silences an error when importing globals.css in layout.tsx +declare module "*.css"; From a40d6e6529f4dc1dc8977cb5c7114a6cb9a7dcfe Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Mon, 22 Jun 2026 19:30:47 -0400 Subject: [PATCH 17/21] Add delay to state change on drawer tap --- frontend/src/features/drawer/components/base.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/features/drawer/components/base.tsx b/frontend/src/features/drawer/components/base.tsx index d323b5f8..9ff0b91a 100644 --- a/frontend/src/features/drawer/components/base.tsx +++ b/frontend/src/features/drawer/components/base.tsx @@ -190,7 +190,8 @@ export default function BaseDrawer({ if (isPill) { setIsAnimating(true); setSnap(snapPoints?.[1] ?? null); - setIsAnimating(false); + // Let the footer observer update before setting isAnimating to false + setTimeout(() => setIsAnimating(false), 0); } }} className={cn( From 52aac47e5b113340236fb0a78a7a6dafff17f85b Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Mon, 22 Jun 2026 21:02:44 -0400 Subject: [PATCH 18/21] Add floating drawer timeout cleanup --- .../src/features/drawer/components/base.tsx | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/frontend/src/features/drawer/components/base.tsx b/frontend/src/features/drawer/components/base.tsx index 9ff0b91a..04d03d6c 100644 --- a/frontend/src/features/drawer/components/base.tsx +++ b/frontend/src/features/drawer/components/base.tsx @@ -1,4 +1,4 @@ -import { useRef, useState } from "react"; +import { useEffect, useRef, useState } from "react"; import { XIcon } from "lucide-react"; import { Drawer } from "vaul"; @@ -35,11 +35,21 @@ export default function BaseDrawer({ const contentRef = useRef(null); const wasDraggingRef = useRef(false); + const animatingTimeoutRef = useRef(null); const [isDragging, setIsDragging] = useState(false); const [isAnimating, setIsAnimating] = useState(false); useVaulStickyFooter(contentRef, isDragging || isAnimating); + // Animating timeout cleanup + useEffect(() => { + return () => { + if (animatingTimeoutRef.current) { + clearTimeout(animatingTimeoutRef.current); + } + }; + }, []); + /** * CONDITIONAL PROPS BASED ON VARIANT * @@ -188,10 +198,17 @@ export default function BaseDrawer({ onClick={() => { if (wasDraggingRef.current) return; if (isPill) { + if (animatingTimeoutRef.current) { + clearTimeout(animatingTimeoutRef.current); + } + setIsAnimating(true); setSnap(snapPoints?.[1] ?? null); // Let the footer observer update before setting isAnimating to false - setTimeout(() => setIsAnimating(false), 0); + animatingTimeoutRef.current = setTimeout(() => { + setIsAnimating(false); + animatingTimeoutRef.current = null; + }, 0); } }} className={cn( From 421c5b02fa24d55cefca0929be007240cfc99e16 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Tue, 23 Jun 2026 14:23:50 -0400 Subject: [PATCH 19/21] Remove DEBUG logs from production --- backend/api/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/api/settings.py b/backend/api/settings.py index 5e3372e1..0f3637c5 100644 --- a/backend/api/settings.py +++ b/backend/api/settings.py @@ -195,7 +195,7 @@ class ThrottleScopes: "class": "logging.handlers.RotatingFileHandler", "filename": f"{LOG_DIR}/django.log", "formatter": "verbose", - "level": "DEBUG", + "level": "DEBUG" if DEBUG else "INFO", "maxBytes": 1024 * 1024 * 5, # 5 MB "backupCount": 5, }, From 389c22301ee4794b4328d4768f3134509be0f0e5 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Tue, 23 Jun 2026 15:30:10 -0400 Subject: [PATCH 20/21] Add automatic drawer for confirmation on mobile --- .../system-feedback/dialog/components/confirmation.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/features/system-feedback/dialog/components/confirmation.tsx b/frontend/src/features/system-feedback/dialog/components/confirmation.tsx index 68fb0cb7..648a3db0 100644 --- a/frontend/src/features/system-feedback/dialog/components/confirmation.tsx +++ b/frontend/src/features/system-feedback/dialog/components/confirmation.tsx @@ -4,6 +4,7 @@ import ActionButton from "@/features/button/components/action"; import BaseModal from "@/features/system-feedback/dialog/components/base"; import { DIALOG_CONFIG } from "@/features/system-feedback/dialog/config"; import { ConfirmationDialogProps } from "@/features/system-feedback/dialog/props"; +import useCheckMobile from "@/lib/hooks/use-check-mobile"; import { cn } from "@/lib/utils/classname"; export default function ConfirmationDialog({ @@ -26,6 +27,11 @@ export default function ConfirmationDialog({ const isControlled = controlledOpen !== undefined; const open = isControlled ? controlledOpen : uncontrolledOpen; + const isMobile = useCheckMobile(); + if (isMobile && !asNestedDrawer) { + asNestedDrawer = true; + } + const handleOpenChange = useCallback( (newOpen: boolean) => { if (!isControlled) { From 81f96e8197fb4ab87a459828775275dd41881697 Mon Sep 17 00:00:00 2001 From: jzgom067 Date: Mon, 29 Jun 2026 13:26:42 -0400 Subject: [PATCH 21/21] Add version data --- frontend/src/features/version-history/data.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/frontend/src/features/version-history/data.ts b/frontend/src/features/version-history/data.ts index 78cdf38c..d4f833d9 100644 --- a/frontend/src/features/version-history/data.ts +++ b/frontend/src/features/version-history/data.ts @@ -183,6 +183,17 @@ export function getVersionHistoryData(): VersionHistoryData { "Removed default dates and times from the new event page", ], }, + { + version: "v0.4.5", + releaseDate: { year: 2026, month: 5, day: 29 }, + changes: [ + "Added animations to the password strength criteria", + "Updated confirmation dialogs to display as drawers on mobile", + "Updated loading page skeletons to be consistent with new page layouts", + "Updated the authentication code checking rate limit to prevent lockouts", + "Fixed an issue where the mobile results page drawer would not display the footer when opened", + ], + }, ], }, ];