From cf6e76e650e4f129ef3b30131432c3208f59d026 Mon Sep 17 00:00:00 2001 From: Tajim Date: Thu, 27 Aug 2026 16:36:59 +0600 Subject: [PATCH 01/38] feat(ui): upgrade mobile navigation to standard slide-over drawer --- resources/js/components/NavBar.vue | 408 +++++++++++++++++++---------- 1 file changed, 273 insertions(+), 135 deletions(-) diff --git a/resources/js/components/NavBar.vue b/resources/js/components/NavBar.vue index 093cdd7..5a0de3e 100644 --- a/resources/js/components/NavBar.vue +++ b/resources/js/components/NavBar.vue @@ -14,8 +14,13 @@ import { FolderGit2, BookOpen, LogIn, + GraduationCap, + Info, + Sparkles, + Users, + HeartHandshake, } from 'lucide-vue-next'; -import { computed, ref, onMounted, onBeforeUnmount } from 'vue'; +import { computed, ref, onMounted, onBeforeUnmount, watch } from 'vue'; import { useDarkMode } from '@/lib/useDarkMode'; import AppLogo from './AppLogo.vue'; @@ -37,6 +42,10 @@ const isProjectsActive = computed(() => currentUrl.value.startsWith('/projects'), ); const isBlogsActive = computed(() => currentUrl.value.startsWith('/blogs')); +const isHomeActive = computed( + () => currentUrl.value === '/' || currentUrl.value.startsWith('/?'), +); +const isSscActive = computed(() => currentUrl.value.startsWith('/ssc')); const dropdownOpen = ref(false); const mobileMenuOpen = ref(false); @@ -58,6 +67,17 @@ const closeMobileMenu = () => { mobileMenuOpen.value = false; }; +// Prevent background scroll when mobile drawer is open +watch(mobileMenuOpen, (isOpen) => { + if (typeof document !== 'undefined') { + if (isOpen) { + document.body.style.overflow = 'hidden'; + } else { + document.body.style.overflow = ''; + } + } +}); + const handleClickOutside = (e: MouseEvent) => { if (dropdownRef.value && !dropdownRef.value.contains(e.target as Node)) { closeDropdown(); @@ -77,6 +97,10 @@ onMounted(() => { onBeforeUnmount(() => { document.removeEventListener('click', handleClickOutside); + if (typeof document !== 'undefined') { + document.body.style.overflow = ''; + } + if (removeNavListener) { removeNavListener(); } @@ -85,7 +109,7 @@ onBeforeUnmount(() => { + From cea4b6ef4d48eee2b956b489b5021bceb7c7b71a Mon Sep 17 00:00:00 2001 From: Tajim Date: Thu, 27 Aug 2026 16:38:07 +0600 Subject: [PATCH 02/38] feat(ui): relocate theme preference segmented control into mobile drawer --- resources/js/components/NavBar.vue | 63 ++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 12 deletions(-) diff --git a/resources/js/components/NavBar.vue b/resources/js/components/NavBar.vue index 5a0de3e..dcf8681 100644 --- a/resources/js/components/NavBar.vue +++ b/resources/js/components/NavBar.vue @@ -287,17 +287,6 @@ onBeforeUnmount(() => {
- - -
-
+
+ +
+

+ Appearance +

+
+ + + +
+
+ + { + From 2c85c48f9755375dd12c11c5344ccf360e60d13f Mon Sep 17 00:00:00 2001 From: Tajim Date: Thu, 27 Aug 2026 16:41:53 +0600 Subject: [PATCH 03/38] feat(ui): streamline navigation drawer items and add minimal profile sign out action --- resources/js/components/NavBar.vue | 99 ++++++++++-------------------- resources/js/pages/User/Show.vue | 33 +++++++--- 2 files changed, 56 insertions(+), 76 deletions(-) diff --git a/resources/js/components/NavBar.vue b/resources/js/components/NavBar.vue index dcf8681..2655598 100644 --- a/resources/js/components/NavBar.vue +++ b/resources/js/components/NavBar.vue @@ -14,7 +14,6 @@ import { FolderGit2, BookOpen, LogIn, - GraduationCap, Info, Sparkles, Users, @@ -45,7 +44,6 @@ const isBlogsActive = computed(() => currentUrl.value.startsWith('/blogs')); const isHomeActive = computed( () => currentUrl.value === '/' || currentUrl.value.startsWith('/?'), ); -const isSscActive = computed(() => currentUrl.value.startsWith('/ssc')); const dropdownOpen = ref(false); const mobileMenuOpen = ref(false); @@ -405,22 +403,8 @@ onBeforeUnmount(() => { : 'text-slate-600 hover:bg-slate-100/70 hover:text-slate-900 dark:text-gray-400 dark:hover:bg-gray-900/60 dark:hover:text-gray-200' " > - - HSC Curriculum - - - - - SSC Curriculum + + Home {
+ +
+

+ Account +

+
+ + + Profile + + + + + {{ isAdmin ? 'Home' : 'Staff Dashboard' }} + +
+
+

@@ -496,40 +510,10 @@ onBeforeUnmount(() => {

- - -
-

- Account -

-
- - - Profile - - - - - {{ isAdmin ? 'Home' : 'Staff Dashboard' }} - -
-
-
+

@@ -577,23 +561,6 @@ onBeforeUnmount(() => {

- - - - - Sign Out - - -

- HSCStack Platform -

diff --git a/resources/js/pages/User/Show.vue b/resources/js/pages/User/Show.vue index c799078..b5fb84e 100644 --- a/resources/js/pages/User/Show.vue +++ b/resources/js/pages/User/Show.vue @@ -18,6 +18,7 @@ import { Heart, Instagram, LogIn, + LogOut, MessageSquare, UploadCloud, Users, @@ -404,18 +405,30 @@ const handleAppreciate = () => { - +
- - - Edit - +
+ + + +
+
+ +
+ + +
+ +
+ +

+ Sign out of your account? +

+

+ Are you sure you want to log out of HSCStack? You will need to sign in again to access your private data. +

+ +
+ + + + Sign Out + +
+
+
+
From 640cd8326b4f2c98eb1e3c1fe46f6cf3bcf3df0a Mon Sep 17 00:00:00 2001 From: Tajim Date: Thu, 27 Aug 2026 16:47:11 +0600 Subject: [PATCH 05/38] feat(ui): dynamic minimal footer for content/profile pages and full footer for home --- resources/js/components/Footer.vue | 95 +++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 3 deletions(-) diff --git a/resources/js/components/Footer.vue b/resources/js/components/Footer.vue index f770fd2..d22a1b7 100644 --- a/resources/js/components/Footer.vue +++ b/resources/js/components/Footer.vue @@ -1,5 +1,5 @@ From d2b7c6a5502412854163bdf898cd8943e5a1d95a Mon Sep 17 00:00:00 2001 From: Tajim Date: Thu, 27 Aug 2026 16:49:19 +0600 Subject: [PATCH 06/38] feat(ui): refine desktop full footer and minimal mobile footer --- resources/js/components/Footer.vue | 69 ++++++++---------------------- 1 file changed, 19 insertions(+), 50 deletions(-) diff --git a/resources/js/components/Footer.vue b/resources/js/components/Footer.vue index d22a1b7..5941ed7 100644 --- a/resources/js/components/Footer.vue +++ b/resources/js/components/Footer.vue @@ -24,10 +24,12 @@ const isFullFooter = computed(() => { From bdff338a6df4bc520f027b60ee49217d66b6566d Mon Sep 17 00:00:00 2001 From: Tajim Date: Thu, 27 Aug 2026 16:50:00 +0600 Subject: [PATCH 07/38] style(ui): add top whitespace padding above logo in mobile footer --- resources/js/components/Footer.vue | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/resources/js/components/Footer.vue b/resources/js/components/Footer.vue index 5941ed7..865553d 100644 --- a/resources/js/components/Footer.vue +++ b/resources/js/components/Footer.vue @@ -235,11 +235,13 @@ const isFullFooter = computed(() => {