@devvistatech/devvista-kit 0.0.12 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +40 -0
  2. package/app/ClientLayout.tsx +66 -0
  3. package/app/about/page.tsx +11 -248
  4. package/app/adRequest/page.tsx +101 -25
  5. package/app/admin-profile/page.tsx +123 -0
  6. package/app/analytics/page.tsx +41 -5
  7. package/app/api/about/route.ts +2 -18
  8. package/app/api/adRequest/route.ts +7 -27
  9. package/app/api/analytics/[reportType]/route.ts +1 -64
  10. package/app/api/bio/route.ts +1 -17
  11. package/app/api/blog/route.ts +1 -19
  12. package/app/api/contacts/route.ts +1 -46
  13. package/app/api/files/route.ts +1 -15
  14. package/app/api/gallery-data/route.ts +53 -61
  15. package/app/api/schedule/route.ts +5 -21
  16. package/app/api/signup/route.ts +129 -0
  17. package/app/api/sync-user/route.ts +268 -94
  18. package/app/api/verify-admin/route.ts +46 -0
  19. package/app/blog/[id]/page.tsx +71 -52
  20. package/app/blog/page.tsx +43 -10
  21. package/app/favicon.ico +0 -0
  22. package/app/gallery/page.tsx +27 -6
  23. package/app/layout.tsx +31 -82
  24. package/app/page.tsx +20 -311
  25. package/app/products/constants/product.ts +27 -0
  26. package/app/products/page.tsx +296 -0
  27. package/app/products/productOne/page.tsx +266 -0
  28. package/app/products/productTwo/page.tsx +272 -0
  29. package/app/schedule/page.tsx +78 -40
  30. package/bin/init.js +0 -12
  31. package/components/addOns/functional/ClassList.tsx +21 -17
  32. package/components/addOns/functional/ProductList.tsx +1027 -0
  33. package/components/addOns/functional/aboutSections/AboutSection.tsx +107 -70
  34. package/components/addOns/functional/aboutSections/constants/aboutSection.ts +9 -4
  35. package/components/addOns/functional/banner/Banner.tsx +150 -0
  36. package/components/addOns/functional/banner/BannerDashboard.tsx +283 -0
  37. package/components/addOns/functional/bioSections/BioEditor.tsx +471 -0
  38. package/components/addOns/functional/bioSections/constants/bioEditor.ts +36 -0
  39. package/components/addOns/functional/blogSections/BlogDashboard.tsx +1 -1
  40. package/components/addOns/functional/blogSections/BlogFormPopUp.tsx +2 -1
  41. package/components/addOns/functional/{ImageDescCarousel.tsx → carousels/ImageDescCarousel.tsx} +166 -57
  42. package/components/addOns/functional/carousels/ProductDescCarousel.tsx +1129 -0
  43. package/components/addOns/functional/{ScheduleCarousel.tsx → carousels/ScheduleCarousel.tsx} +110 -50
  44. package/components/addOns/functional/carousels/constants.ts/productDescCarousel.ts +197 -0
  45. package/components/addOns/functional/carousels/constants.ts/scheduleCarousel.ts +20 -0
  46. package/components/addOns/functional/contactsDashboard/ContactsDashboard.tsx +1 -1
  47. package/components/addOns/functional/fileUploaders/FileUploader.tsx +437 -0
  48. package/components/addOns/functional/fileUploaders/constants/fileUploader.ts +45 -0
  49. package/components/addOns/functional/galleries/GalleryComplex.tsx +468 -267
  50. package/components/addOns/functional/galleries/GallerySimple.tsx +78 -50
  51. package/components/addOns/functional/galleries/ThreeSetGallery.tsx +260 -0
  52. package/components/addOns/functional/schedules/ScheduleGridOne.tsx +22 -8
  53. package/components/addOns/functional/schedules/ScheduleGridTwo.tsx +12 -7
  54. package/components/addOns/functional/schedules/ScheduleGridTwoBasic.tsx +12 -7
  55. package/components/addOns/non-functional/SampleCarousel.tsx +3 -3
  56. package/components/addOns/non-functional/ThreeSetGallery.tsx +3 -3
  57. package/components/addOns/non-functional/featureSections/FeaturesSection.tsx +74 -0
  58. package/components/addOns/non-functional/featureSections/constants/featuresSection.ts +30 -0
  59. package/components/addOns/non-functional/{Heros/HeroSection.tsx → heros/HomeHero.tsx} +17 -15
  60. package/components/addOns/non-functional/heros/ProductHero.tsx +111 -0
  61. package/components/addOns/non-functional/heros/constants/hero.ts +62 -0
  62. package/components/addOns/non-functional/imageCarousels/ProductSlider.tsx +6 -6
  63. package/components/addOns/non-functional/imageCarousels/ProgramCarousel.tsx +10 -10
  64. package/components/footers/footer.tsx +161 -198
  65. package/components/other/admin-menu.tsx +1 -1
  66. package/lib/auth/auth-context.tsx +225 -0
  67. package/lib/auth/auth-utils.tsx +30 -0
  68. package/lib/constants/adRequest.ts +199 -56
  69. package/lib/constants/admin-profile.ts +12 -0
  70. package/lib/constants/page.ts +15 -15
  71. package/lib/google/google-analytics-tracking.tsx +44 -0
  72. package/lib/types.ts +235 -0
  73. package/lib/utils/compressImage.tsx +32 -0
  74. package/middleware.ts +9 -5
  75. package/next.config.js +1 -1
  76. package/package.json +3 -2
  77. package/public/images/test.png +0 -0
  78. package/components/addOns/functional/BioEditor.tsx +0 -447
  79. package/components/addOns/functional/FileUploader.tsx +0 -295
  80. package/components/addOns/non-functional/FeaturesSection.tsx +0 -63
  81. package/components/types.ts +0 -50
  82. package/lib/auth-context.tsx +0 -131
  83. package/lib/verify-user.ts +0 -118
  84. /package/lib/{google-analytics.tsx → google/google-analytics.tsx} +0 -0
@@ -2,23 +2,14 @@
2
2
 
3
3
  import Link from "next/link";
4
4
  import Image from "next/image";
5
- import { Mail, Phone, MapPin, Facebook, LogIn, UserPlus, X, Settings, LogOut } from "lucide-react";
6
- import { useState, useEffect } from "react";
7
- import { SignIn, SignUp, SignedIn, SignedOut, SignOutButton as ClerkSignOutButton, useAuth } from "@clerk/nextjs";
8
- import { useStrapiAuth } from "@/lib/auth-context";
5
+ import { Mail, Phone, MapPin, Facebook, X, Linkedin } from "lucide-react";
6
+ import { useState, useEffect, useRef } from "react";
7
+ import { SignIn, SignUp, SignedIn, SignedOut, SignOutButton as ClerkSignOutButton, useAuth, useSignUp } from "@clerk/nextjs";
8
+ import { useStrapiAuth } from "@/lib/auth/auth-context";
9
9
  import { motion, AnimatePresence } from "framer-motion";
10
10
  import AdminMenu from "../other/admin-menu";
11
11
  import { SignInButton, SignUpButton, SignOutButton, SettingsButton } from "../other/button";
12
12
 
13
- interface StrapiUser {
14
- id: number;
15
- authId: string;
16
- email: string;
17
- username: string;
18
- businessAdminId?: string;
19
- userRole?: string;
20
- }
21
-
22
13
  const baseLinks = [
23
14
  { href: "/", label: "Home" },
24
15
  { href: "/about", label: "About" },
@@ -30,17 +21,19 @@ const baseLinks = [
30
21
 
31
22
  export default function Footer() {
32
23
  const { isSignedIn } = useAuth();
33
- const { user, authLoading, checkSession } = useStrapiAuth();
24
+ const { user, authLoading, error, handlePostSignUp } = useStrapiAuth();
25
+ const { signUp, isLoaded: isSignUpLoaded } = useSignUp();
34
26
  const [isLoginOpen, setIsLoginOpen] = useState(false);
35
27
  const [isSignupOpen, setIsSignupOpen] = useState(false);
36
28
  const [isAdminMenuOpen, setIsAdminMenuOpen] = useState(false);
37
- const [error, setError] = useState<string | null>(null);
29
+ const hasSignedUp = useRef(false);
38
30
 
39
31
  useEffect(() => {
40
32
  if (isSignedIn) {
41
33
  setIsLoginOpen(false);
42
34
  setIsSignupOpen(false);
43
35
  setIsAdminMenuOpen(false);
36
+ hasSignedUp.current = false;
44
37
  }
45
38
  }, [isSignedIn]);
46
39
 
@@ -49,6 +42,7 @@ export default function Footer() {
49
42
  document.body.style.overflow = "hidden";
50
43
  } else {
51
44
  document.body.style.overflow = "auto";
45
+ hasSignedUp.current = false;
52
46
  }
53
47
  return () => {
54
48
  document.body.style.overflow = "auto";
@@ -63,51 +57,59 @@ export default function Footer() {
63
57
  }, [isLoginOpen, isSignupOpen, isAdminMenuOpen]);
64
58
 
65
59
  useEffect(() => {
66
- if (!authLoading) {
67
- if (isSignedIn && !user) {
68
- checkSession().catch((err) => {
69
- console.error("Footer: Failed to sync user data", err);
70
- setError("Failed to load user data. Please try logging out and back in.");
60
+ if (
61
+ isSignUpLoaded &&
62
+ signUp?.status === "complete" &&
63
+ signUp?.createdUserId &&
64
+ signUp?.emailAddress &&
65
+ !hasSignedUp.current
66
+ ) {
67
+ hasSignedUp.current = true;
68
+
69
+ handlePostSignUp(
70
+ signUp.createdUserId,
71
+ signUp.emailAddress,
72
+ signUp.username || `user_${signUp.createdUserId.slice(0, 8)}`
73
+ )
74
+ .then(() => {
75
+
76
+ setIsSignupOpen(false);
77
+ })
78
+ .catch((error) => {
79
+ console.error("handlePostSignUp failed:", error, {
80
+ timestamp: new Date().toISOString(),
81
+ });
71
82
  });
72
- } else {
73
- setError(null);
74
- }
83
+ } else if (isSignUpLoaded) {
84
+ console.warn("SignUp conditions not met:", {
85
+ isSignUpLoaded,
86
+ status: signUp?.status,
87
+ createdUserId: signUp?.createdUserId,
88
+ email: signUp?.emailAddress,
89
+ timestamp: new Date().toISOString(),
90
+ });
75
91
  }
76
- }, [isSignedIn, user, authLoading, checkSession]);
92
+ }, [isSignUpLoaded, signUp, handlePostSignUp]);
77
93
 
78
94
  const isAdmin = isSignedIn && !!user?.businessAdminId && user?.userRole === "admin";
79
95
 
80
- if (authLoading) {
81
- return <div>Loading...</div>;
82
- }
83
-
84
- if (error) {
85
- return <div className="text-red-500">Error: {error}</div>;
86
- }
87
-
88
96
  return (
89
- <footer className="w-full bg-[#2D2D2D] text-gray-300 border-t border-gray-700">
97
+ <footer className="w-full bg-gray-600 text-gray-300 border-t border-gray-700">
90
98
  <style jsx>{`
91
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&display=swap');
92
-
93
99
  :root {
94
- --caviar: #2D2D2D;
95
- --natural-white: #F7F7F7;
96
- --blue-500: #3B82F6;
97
- --blue-600: #2563EB;
98
- --blue-700: #1D4ED8;
99
- }
100
-
101
- * {
102
- font-family: 'Inter', sans-serif;
100
+ --jubilee: #F47C7C;
101
+ --exuberant-blue: #FF69B4;
102
+ --modern-purple: #D946EF;
103
+ --brown-accent: #8B4513;
103
104
  }
104
105
 
105
106
  .glassmorphism {
106
107
  background: rgba(255, 255, 255, 0.08);
107
108
  backdrop-filter: blur(10px);
108
109
  -webkit-backdrop-filter: blur(10px);
109
- border: 1px solid rgba(255, 255, 255, 0.2);
110
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
110
+ border: 2px solid transparent;
111
+ border-image: linear-gradient(45deg, var(--exuberant-blue), var(--jubilee), var(--modern-purple)) 1;
112
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.1);
111
113
  }
112
114
 
113
115
  .modal-glassmorphism {
@@ -115,139 +117,65 @@ export default function Footer() {
115
117
  backdrop-filter: blur(10px);
116
118
  -webkit-backdrop-filter: blur(10px);
117
119
  border: 2px solid transparent;
118
- border-image: linear-gradient(45deg, var(--blue-500), var(--blue-600), var(--blue-700)) 1;
120
+ border-image: linear-gradient(45deg, var(--exuberant-blue), var(--jubilee), var(--modern-purple)) 1;
119
121
  box-shadow: 0 16px 48px rgba(0, 0, 0, 0.1);
120
122
  border-radius: 2rem;
121
- max-height: 90vh;
122
- overflow: hidden;
123
+ }
124
+
125
+ @supports not (backdrop-filter: blur(10px)) {
126
+ .glassmorphism,
127
+ .modal-glassmorphism {
128
+ background: rgba(255, 255, 255, 0.2);
129
+ }
123
130
  }
124
131
 
125
132
  .gradient-text {
126
- background: linear-gradient(90deg, var(--blue-500), var(--blue-600));
133
+ background: linear-gradient(45deg, var(--exuberant-blue), var(--jubilee), var(--modern-purple));
127
134
  -webkit-background-clip: text;
128
135
  background-clip: text;
129
136
  color: transparent;
130
137
  }
131
138
 
132
- .contact-icon {
133
- display: inline-flex;
134
- align-items: center;
135
- justify-content: center;
136
- padding: 0.75rem;
137
- border-radius: 0.5rem;
138
- background: rgba(255, 255, 255, 0.1);
139
- transition: color 0.2s ease, transform 0.2s ease;
140
- }
141
-
142
- .contact-icon:hover {
143
- color: var(--blue-500);
144
- transform: scale(1.1);
145
- }
146
-
147
- .cl-signIn-root,
148
- .cl-signUp-root {
149
- background: rgba(17, 24, 39, 0.95);
150
- border: 1px solid #374151;
151
- border-radius: 0.5rem;
152
- color: white;
153
- font-family: 'Inter', sans-serif;
154
- max-height: 80vh;
155
- overflow-y: auto;
156
- max-width: 90vw;
157
- box-sizing: border-box;
158
- }
159
-
160
- .cl-button {
161
- background: var(--blue-500);
162
- }
163
-
164
- .cl-button:hover {
165
- background: var(--blue-600);
166
- }
167
-
168
- .admin-menu-container {
169
- position: relative;
170
- }
171
-
172
- @media (max-width: 640px) {
173
- .cl-signIn-root,
174
- .cl-signUp-root {
175
- max-width: 95vw;
176
- max-height: 80vh;
177
- overflow-y: auto;
178
- padding: 0.5rem;
139
+ @media (max-width: 768px) {
140
+ .mobile-contact {
141
+ display: flex;
179
142
  }
180
-
181
- .cl-signIn-root .cl-main,
182
- .cl-signUp-root .cl-main {
183
- font-size: 0.9rem;
184
- }
185
-
186
- .cl-signIn-root .cl-headerTitle,
187
- .cl-signUp-root .cl-headerTitle {
188
- font-size: 1.25rem;
189
- }
190
-
191
- .cl-signIn-root .cl-formFieldInput,
192
- .cl-signUp-root .cl-formFieldInput {
193
- padding: 0.5rem;
194
- font-size: 0.9rem;
195
- background: #1f2937;
196
- color: #ffffff;
197
- border: 1px solid #4b5563;
198
- }
199
-
200
- .cl-button {
201
- padding: 0.5rem;
202
- font-size: 0.9rem;
203
- }
204
-
205
- .modal-glassmorphism {
206
- backdrop-filter: none;
207
- background: rgba(255, 255, 255, 0.2);
208
- padding: 1rem;
209
- max-height: 85vh;
143
+ .desktop-contact {
144
+ display: none;
210
145
  }
211
146
  }
212
147
 
213
- @supports not (backdrop-filter: blur(10px)) {
214
- .glassmorphism,
215
- .modal-glassmorphism {
216
- background: rgba(255, 255, 255, 0.2);
148
+ @media (min-width: 769px) {
149
+ .mobile-contact {
150
+ display: none;
151
+ }
152
+ .desktop-contact {
153
+ display: flex;
217
154
  }
218
155
  }
219
156
  `}</style>
220
157
 
221
- <div className="w-full px-4 sm:px-6 lg:px-8 2xl:px-24 py-12 sm:py-16 glassmorphism">
222
- <div className="grid grid-cols-1 2xl:grid-cols-3 gap-8 sm:gap-12">
223
- <div className="flex flex-col items-center 2xl:items-start">
158
+ <div className="w-full px-4 sm:px-6 lg:px-24 py-12 sm:py-16 glassmorphism">
159
+ <div className="grid grid-cols-1 lg:grid-cols-3 gap-8 sm:gap-12">
160
+ <div className="flex flex-col items-center lg:items-start">
224
161
  <Link href="/" className="flex items-center space-x-4 mb-6">
225
162
  <Image
226
163
  src="/images/test.png"
227
164
  alt="DevVista Kit Logo"
228
165
  width={64}
229
166
  height={64}
230
- className="h-20 w-20 rounded-full shadow-md transition-transform duration-300 ease-in-out transform hover:scale-105"
167
+ className="h-20 w-60 transition-transform duration-300 ease-in-out transform hover:scale-105"
231
168
  quality={80}
232
169
  loading="lazy"
233
170
  />
234
- <div>
235
- <span className="text-lg sm:text-xl 2xl:text-2xl font-extrabold text-blue-500 uppercase tracking-tight">
236
- DevVista&apos;s
237
- </span>
238
- <br />
239
- <span className="text-2xl sm:text-3xl 2xl:text-4xl font-extrabold text-blue-500 uppercase tracking-tight">
240
- Kit
241
- </span>
242
- </div>
243
171
  </Link>
244
- <p className="text-sm sm:text-base 2xl:text-lg text-gray-400 text-center 2xl:text-left font-medium">
245
- The Official DevVista Kit
172
+ <p className="text-sm sm:text-base lg:text-lg text-gray-300 text-center lg:text-left font-medium">
173
+ The Official DevVista Kit
246
174
  </p>
247
175
  </div>
248
176
 
249
177
  <div className="flex flex-col items-center">
250
- <h3 className="text-lg sm:text-xl 2xl:text-2xl font-bold gradient-text mb-6 uppercase tracking-tight">
178
+ <h3 className="text-lg sm:text-xl lg:text-2xl font-bold gradient-text mb-6 uppercase tracking-tight">
251
179
  Quick Links
252
180
  </h3>
253
181
  <ul className="grid grid-cols-2 gap-x-4 gap-y-3 text-center">
@@ -255,7 +183,7 @@ export default function Footer() {
255
183
  <li key={link.href}>
256
184
  <Link
257
185
  href={link.href}
258
- className="text-sm sm:text-base 2xl:text-lg font-medium uppercase text-gray-300 hover:text-blue-400 transition-all"
186
+ className="text-sm sm:text-base lg:text-lg font-medium uppercase text-gray-300 hover:text-amber-400 transition-all"
259
187
  >
260
188
  {link.label}
261
189
  </Link>
@@ -264,83 +192,116 @@ export default function Footer() {
264
192
  </ul>
265
193
  </div>
266
194
 
267
- <div className="flex flex-col items-center 2xl:items-end">
268
- <h3 className="text-lg sm:text-xl 2xl:text-2xl font-bold gradient-text mb-6 uppercase tracking-tight">
195
+ <div className="flex flex-col items-center">
196
+ <h3 className="text-lg sm:text-xl lg:text-2xl font-bold gradient-text mb-6 uppercase tracking-tight">
269
197
  Reach Out
270
198
  </h3>
271
- <ul className="flex space-x-4 2xl:hidden">
199
+ <ul className="mobile-contact flex flex-wrap justify-center gap-4 mb-6 lg:hidden">
272
200
  <li>
273
- <a href="tel:3154154043" className="contact-icon text-gray-300" aria-label="Call 123-456-7892">
274
- <Phone className="h-6 w-6 sm:h-8 sm:w-8 text-blue-500" />
201
+ <a
202
+ href="mailto:test@gmail.com"
203
+ className="text-gray-300 hover:text-amber-400 transition-all"
204
+ aria-label="Email DevVista"
205
+ >
206
+ <Mail className="h-6 w-6" />
275
207
  </a>
276
208
  </li>
277
209
  <li>
278
- <a href="mailto:devvistainfo@gmail.com" className="contact-icon text-gray-300" aria-label="Email devvistainfo@gmail.com">
279
- <Mail className="h-6 w-6 sm:h-8 sm:w-8 text-blue-500" />
210
+ <a
211
+ href="tel:+13154875931"
212
+ className="text-gray-300 hover:text-amber-400 transition-all"
213
+ aria-label="Call Devvista"
214
+ >
215
+ <Phone className="h-6 w-6" />
280
216
  </a>
281
217
  </li>
282
218
  <li>
283
219
  <a
284
- href="https://www.google.com/maps/place/215+W+Manlius+St,+East+Syracuse,+NY+13057"
285
- className="contact-icon text-gray-300"
286
- aria-label="View 123 Syracuse, NY 12345 on Google Maps"
287
- target="_blank"
288
- rel="noopener noreferrer"
220
+ href="https://maps.app.goo.gl/aTvx3qA7r7vL3fGi8"
221
+ className="text-gray-300 hover:text-amber-400 transition-all"
222
+ aria-label="View Devvista on Google Maps"
289
223
  >
290
- <MapPin className="h-6 w-6 sm:h-8 sm:w-8 text-blue-500" />
224
+ <MapPin className="h-6 w-6" />
291
225
  </a>
292
226
  </li>
293
227
  <li>
294
228
  <a
295
- href="https://www.facebook.com/"
296
- className="contact-icon text-gray-300"
297
- aria-label="Visit our Facebook page"
298
- target="_blank"
299
- rel="noopener noreferrer"
229
+ href="https://facebook.com"
230
+ className="text-gray-300 hover:text-amber-400 transition-all"
231
+ aria-label="Visit Devvista on Facebook"
300
232
  >
301
- <Facebook className="h-6 w-6 sm:h-8 sm:w-8 text-blue-500" />
233
+ <Facebook className="h-6 w-6" />
302
234
  </a>
303
235
  </li>
304
- </ul>
305
- <ul className="space-y-3 text-center 2xl:text-right hidden 2xl:block">
306
- <li className="text-sm sm:text-base 2xl:text-lg text-gray-300 font-medium">
307
- 123 Syracuse, NY 12345
236
+ <li>
237
+ <a
238
+ href="https://x.com"
239
+ className="text-gray-300 hover:text-amber-400 transition-all"
240
+ aria-label="Visit Devvista on X"
241
+ >
242
+ <X className="h-6 w-6" />
243
+ </a>
308
244
  </li>
309
- <li className="flex items-center justify-center 2xl:justify-end space-x-3">
310
- <Phone className="h-4 w-4 sm:h-5 sm:w-5 text-blue-500" />
311
- <a href="tel:3152145466" className="text-sm sm:text-base 2xl:text-lg text-gray-300 font-medium hover:text-blue-400 transition-all">
312
- 123-456-7891
245
+ <li>
246
+ <a
247
+ href="https://linkedin.com"
248
+ className="text-gray-300 hover:text-amber-400 transition-all"
249
+ aria-label="Visit DevVista on LinkedIn"
250
+ >
251
+ <Linkedin className="h-6 w-6" />
313
252
  </a>
314
253
  </li>
315
- <li className="flex items-center justify-center 2xl:justify-end space-x-3">
316
- <Phone className="h-4 w-4 sm:h-5 sm:w-5 text-blue-500" />
317
- <a href="tel:3154154043" className="text-sm sm:text-base 2xl:text-lg text-gray-300 font-medium hover:text-blue-400 transition-all">
318
- 123-456-7892
254
+ </ul>
255
+ <ul className="desktop-contact flex-wrap justify-center gap-4 mb-6 hidden lg:flex">
256
+ <li>
257
+ <a
258
+ href="mailto:test@gmail.com"
259
+ className="flex items-center text-sm sm:text-base lg:text-lg font-medium text-gray-300 hover:text-amber-400 transition-all"
260
+ >
261
+ <Mail className="h-5 w-5 mr-2" />
262
+ test@gmail.com
319
263
  </a>
320
264
  </li>
321
- <li className="flex items-center justify-center 2xl:justify-end space-x-3">
322
- <Mail className="h-4 w-4 sm:h-5 sm:w-5 text-blue-500" />
323
- <a href="mailto:devvistainfo@gmail.com" className="text-sm sm:text-base 2xl:text-lg text-gray-300 font-medium hover:text-blue-400 transition-all">
324
- devvistainfo@gmail.com
265
+ <li>
266
+ <a
267
+ href="tel:+13154875931"
268
+ className="flex items-center text-sm sm:text-base lg:text-lg font-medium text-gray-300 hover:text-amber-400 transition-all"
269
+ >
270
+ <Phone className="h-5 w-5 mr-2" />
271
+ (315) 487-5931
325
272
  </a>
326
273
  </li>
327
- <li className="flex items-center justify-center 2xl:justify-end space-x-3">
328
- <Facebook className="h-4 w-4 sm:h-5 sm:w-5 text-blue-500" />
274
+ <li>
329
275
  <a
330
- href="https://www.facebook.com/"
331
- className="text-sm sm:text-base 2xl:text-lg text-gray-300 font-medium hover:text-blue-400 transition-all"
332
- target="_blank"
333
- rel="noopener noreferrer"
276
+ href="https://maps.app.goo.gl/aTvx3qA7r7vL3fGi8"
277
+ className="flex items-center text-sm sm:text-base lg:text-lg font-medium text-gray-300 hover:text-amber-400 transition-all"
334
278
  >
335
- Facebook
279
+ <MapPin className="h-5 w-5 mr-2" />
280
+ 123 Vista Road, Syracuse, NY
336
281
  </a>
337
282
  </li>
338
283
  </ul>
284
+ <ul className="space-y-3 text-center">
285
+ <li className="text-sm sm:text-base lg:text-lg text-stone-100 font-medium opacity-90">
286
+ 123 Vista Road Syracuse, NY, Syracuse, NY 13219
287
+ </li>
288
+ <li className="text-sm sm:text-base lg:text-lg text-stone-100 font-medium opacity-90">
289
+ <strong style={{ color: "var(--brown-accent)" }}>Summer Hours</strong> (Mar 1 – Dec 31):<br />
290
+ Mon–Fri: 8:00AM – 5:00PM
291
+ <br />
292
+ <strong style={{ color: "var(--brown-accent)" }}>Winter Hours</strong> (Jan 1 – Feb 28):<br />
293
+ Mon–Fri: 9:00AM – 4:00PM
294
+ <br />
295
+ <hr className="my-2 border-stone-400 opacity-50 w-3/4 mx-auto" />
296
+ Sat: 9:00AM – 2:00PM
297
+ <br />
298
+ Sun: Closed
299
+ </li>
300
+ </ul>
339
301
  </div>
340
302
  </div>
341
303
 
342
- {/* Authentication Buttons Moved Above the Bordered Div */}
343
- <div className="flex justify-center 2xl:justify-start mt-8 space-x-4 admin-menu-container">
304
+ <div className="desktop-auth flex justify-center lg:justify-start mt-8 space-x-4 admin-menu-container">
344
305
  {!authLoading && (
345
306
  <SignedIn>
346
307
  <div className="flex items-center space-x-2">
@@ -358,6 +319,9 @@ export default function Footer() {
358
319
  </SettingsButton>
359
320
  )}
360
321
  </div>
322
+ {error && (
323
+ <p className="text-red-500 text-sm mt-2">{error}</p>
324
+ )}
361
325
  </SignedIn>
362
326
  )}
363
327
  {!authLoading && (
@@ -380,11 +344,10 @@ export default function Footer() {
380
344
  )}
381
345
  </div>
382
346
 
383
- {/* Bordered Div Now Only Contains Copyright Text */}
384
- <div className="mt-8 pt-6 border-t border-gray-700 relative">
347
+ <div className="mt-8 pt-6 border-t border-gray-800 relative">
385
348
  <div className="flex justify-center items-center w-full mx-auto max-w-full">
386
- <p className="text-sm sm:text-base 2xl:text-lg text-gray-400 font-medium text-center">
387
- © {new Date().getFullYear()} DevVista Kit. All rights reserved.
349
+ <p className="text-sm sm:text-base lg:text-lg text-gray-300 font-medium text-center">
350
+ © {new Date().getFullYear()} DevVista. All rights reserved.
388
351
  </p>
389
352
  </div>
390
353
  </div>
@@ -414,7 +377,7 @@ export default function Footer() {
414
377
  >
415
378
  <X className="h-6 w-6" />
416
379
  </button>
417
- <SignIn routing="hash" />
380
+ <SignIn routing="hash" afterSignInUrl="/" />
418
381
  </motion.div>
419
382
  </motion.div>
420
383
  )}
@@ -441,7 +404,7 @@ export default function Footer() {
441
404
  >
442
405
  <X className="h-6 w-6" />
443
406
  </button>
444
- <SignUp routing="hash" />
407
+ <SignUp routing="hash" afterSignUpUrl="/" />
445
408
  </motion.div>
446
409
  </motion.div>
447
410
  )}
@@ -1,4 +1,3 @@
1
- // src/components/AdminMenu.tsx
2
1
  "use client";
3
2
 
4
3
  import Link from "next/link";
@@ -11,6 +10,7 @@ interface AdminMenuProps {
11
10
  }
12
11
 
13
12
  const menuItems = [
13
+ { href: "/admin-profile", label: "Admin Profile" },
14
14
  { href: "/analytics", label: "Analytics" },
15
15
  { href: "/blog", label: "Blog" },
16
16
  { href: "/adRequest", label: "Ad Requests" },