@@ -16,124 +16,96 @@ const socialLinks = [
1616]
1717
1818const footerLinks = [
19- {
20- title : 'Navigation' ,
21- links : [
22- { name : 'Home' , href : '/' } ,
23- { name : 'About' , href : '/about' } ,
24- { name : 'Projects' , href : '/projects' } ,
25- { name : 'Contact' , href : '/contact' } ,
26- ]
27- } ,
28- {
29- title : 'Professional' ,
30- links : [
31- { name : 'Resume' , href : '/professional' } ,
32- { name : 'Experience' , href : '/professional#experience' } ,
33- { name : 'Skills' , href : '/professional#skills' } ,
34- { name : 'Download Resume' , href : '/2025CurrentResume-DavidDonohue.pdf' } ,
35- ]
36- } ,
37- {
38- title : 'Content' ,
39- links : [
40- { name : 'Blog Posts' , href : '/content' } ,
41- { name : 'Videos' , href : '/content#videos' } ,
42- { name : 'Resources' , href : '/content#resources' } ,
43- ]
44- }
19+ { name : 'Home' , href : '/' } ,
20+ { name : 'Personal' , href : '/about' } ,
21+ { name : 'Professional' , href : '/professional' } ,
22+ { name : 'Projects' , href : '/projects' } ,
23+ { name : 'Content' , href : '/content' } ,
24+ { name : 'Contact' , href : '/contact' } ,
4525]
4626
4727export default function Footer ( { className } : FooterProps ) {
4828 const currentYear = new Date ( ) . getFullYear ( )
4929
5030 return (
5131 < footer className = { cn ( 'bg-primary-navy border-t border-primary-blue/20' , className ) } >
52- < div className = "container mx-auto px-4 sm:px-6 lg:px-8 py-12 " >
32+ < div className = "container mx-auto px-4 sm:px-6 lg:px-8 py-8 " >
5333 { /* Main Footer Content */ }
54- < div className = "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8 " >
34+ < div className = "flex flex-col md:flex-row justify-between items-center gap-6 " >
5535 { /* Brand Section */ }
5636 < motion . div
5737 initial = { { opacity : 0 , y : 20 } }
5838 whileInView = { { opacity : 1 , y : 0 } }
5939 viewport = { { once : true } }
60- className = "lg:col-span-1 "
40+ className = "text-center md:text-left "
6141 >
62- < h3 className = "text-2xl font-bold text-primary-blue mb-4" > David P. Donohue</ h3 >
63- < p className = "text-slate-300 mb-6 max-w-sm" >
64- Full-stack developer passionate about creating beautiful, functional web applications,
65- lifelong learning and the sharing of knowledge with the community.
42+ < h3 className = "text-xl font-bold text-primary-blue mb-2" > David P. Donohue</ h3 >
43+ < p className = "text-slate-300 text-sm max-w-sm" >
44+ Full-stack developer passionate about creating beautiful, functional web applications.
6645 </ p >
67- < div className = "flex space-x-4" >
68- { socialLinks . map ( ( link ) => {
69- const Icon = link . icon
70- return (
71- < motion . a
72- key = { link . name }
73- href = { link . href }
74- whileHover = { { scale : 1.1 } }
75- whileTap = { { scale : 0.95 } }
76- className = "text-slate-300 hover:text-primary-blue transition-colors"
77- aria-label = { link . name }
78- target = "_blank"
79- rel = "noopener noreferrer"
80- >
81- < Icon className = "w-6 h-6" />
82- </ motion . a >
83- )
84- } ) }
85- </ div >
8646 </ motion . div >
8747
88- { /* Footer Links */ }
89- { footerLinks . map ( ( section , index ) => (
90- < motion . div
91- key = { section . title }
92- initial = { { opacity : 0 , y : 20 } }
93- whileInView = { { opacity : 1 , y : 0 } }
94- viewport = { { once : true } }
95- transition = { { delay : ( index + 1 ) * 0.1 } }
96- >
97- < h4 className = "text-white font-semibold mb-4" > { section . title } </ h4 >
98- < ul className = "space-y-2" >
99- { section . links . map ( ( link ) => (
100- < li key = { link . name } >
101- { link . href . startsWith ( '#' ) || link . href . startsWith ( 'mailto:' ) ? (
102- < a
103- href = { link . href }
104- className = "text-slate-300 hover:text-primary-blue transition-colors"
105- >
106- { link . name }
107- </ a >
108- ) : (
109- < Link
110- href = { link . href }
111- className = "text-slate-300 hover:text-primary-blue transition-colors"
112- >
113- { link . name }
114- </ Link >
115- ) }
116- </ li >
117- ) ) }
118- </ ul >
119- </ motion . div >
120- ) ) }
48+ { /* Navigation Links */ }
49+ < motion . div
50+ initial = { { opacity : 0 , y : 20 } }
51+ whileInView = { { opacity : 1 , y : 0 } }
52+ viewport = { { once : true } }
53+ transition = { { delay : 0.1 } }
54+ className = "flex flex-wrap justify-center gap-6"
55+ >
56+ { footerLinks . map ( ( link ) => (
57+ < Link
58+ key = { link . name }
59+ href = { link . href }
60+ className = "text-slate-300 hover:text-primary-blue transition-colors text-sm"
61+ >
62+ { link . name }
63+ </ Link >
64+ ) ) }
65+ </ motion . div >
66+
67+ { /* Social Links */ }
68+ < motion . div
69+ initial = { { opacity : 0 , y : 20 } }
70+ whileInView = { { opacity : 1 , y : 0 } }
71+ viewport = { { once : true } }
72+ transition = { { delay : 0.2 } }
73+ className = "flex space-x-4"
74+ >
75+ { socialLinks . map ( ( link ) => {
76+ const Icon = link . icon
77+ return (
78+ < motion . a
79+ key = { link . name }
80+ href = { link . href }
81+ whileHover = { { scale : 1.1 } }
82+ whileTap = { { scale : 0.95 } }
83+ className = "text-slate-300 hover:text-primary-blue transition-colors"
84+ aria-label = { link . name }
85+ target = "_blank"
86+ rel = "noopener noreferrer"
87+ >
88+ < Icon className = "w-5 h-5" />
89+ </ motion . a >
90+ )
91+ } ) }
92+ </ motion . div >
12193 </ div >
12294
12395 { /* Bottom Section */ }
12496 < motion . div
12597 initial = { { opacity : 0 } }
12698 whileInView = { { opacity : 1 } }
12799 viewport = { { once : true } }
128- transition = { { delay : 0.4 } }
129- className = "mt-12 pt-8 border-t border-primary-blue/20 flex flex-col sm:flex-row justify-between items-center"
100+ transition = { { delay : 0.3 } }
101+ className = "mt-6 pt-4 border-t border-primary-blue/20 flex flex-col sm:flex-row justify-between items-center gap-2 "
130102 >
131- < p className = "text-slate-300 text-sm mb-4 sm:mb-0 " >
103+ < p className = "text-slate-300 text-xs " >
132104 © { currentYear } DavidPDonohue.com. All rights reserved.
133105 </ p >
134- < div className = "flex items-center text-slate-300 text-sm " >
106+ < div className = "flex items-center text-slate-300 text-xs " >
135107 < span > Made with</ span >
136- < Heart className = "w-4 h-4 mx-1 text-red-400" />
108+ < Heart className = "w-3 h-3 mx-1 text-red-400" />
137109 < span > using Next.js & TypeScript </ span >
138110 </ div >
139111 </ motion . div >
0 commit comments