Skip to content

Commit a381b7a

Browse files
fix all conflicts
1 parent a3688a9 commit a381b7a

5 files changed

Lines changed: 401 additions & 258 deletions

File tree

package.json

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
{
2-
"name": "my-react-tailwind-app",
2+
"name": "GitHub Tracker",
33
"private": true,
44
"version": "0.0.0",
55
"type": "module",
6+
67
"scripts": {
78
"dev": "vite --host",
89
"build": "vite build",
@@ -11,9 +12,9 @@
1112
"test:backend": "jasmine spec/**/*.spec.cjs",
1213
"preview": "vite preview",
1314
"docker:dev": "docker compose --profile dev up --build",
14-
"docker:prod": "docker compose --profile prod up -d --build",
15-
"test": "jasmine"
15+
"docker:prod": "docker compose --profile prod up -d --build"
1616
},
17+
1718
"dependencies": {
1819
"@emotion/react": "^11.11.3",
1920
"@emotion/styled": "^11.11.0",
@@ -36,6 +37,7 @@
3637
"recharts": "^3.8.1",
3738
"tailwindcss": "^3.4.14"
3839
},
40+
3941
"devDependencies": {
4042
"@eslint/js": "^9.13.0",
4143
"@testing-library/jest-dom": "^6.9.1",
@@ -47,29 +49,33 @@
4749
"@types/react-dom": "^18.3.7",
4850
"@types/react-redux": "^7.1.34",
4951
"@types/react-router-dom": "^5.3.3",
52+
5053
"@vitejs/plugin-react-swc": "^3.5.0",
54+
5155
"autoprefixer": "^10.4.20",
5256
"bcryptjs": "^3.0.3",
57+
5358
"eslint": "^9.13.0",
5459
"eslint-plugin-react": "^7.37.2",
5560
"eslint-plugin-react-hooks": "^5.0.0",
5661
"eslint-plugin-react-refresh": "^0.4.14",
57-
"express": "^5.2.1",
62+
5863
"express-session": "^1.18.2",
64+
5965
"globals": "^15.11.0",
60-
"jasmine": "^5.9.0",
61-
"mongoose": "^9.6.2",
62-
"passport": "^0.7.0",
63-
"passport-local": "^1.0.0",
64-
"supertest": "^7.1.4",
65-
"typescript-eslint": "^8.59.3",
66-
"vite": "^5.4.10",
66+
6767
"jasmine": "^5.13.0",
6868
"jasmine-spec-reporter": "^7.0.0",
69+
6970
"jsdom": "^29.1.1",
71+
7072
"passport": "^0.7.0",
7173
"passport-local": "^1.0.0",
74+
7275
"supertest": "^7.2.2",
76+
77+
"typescript-eslint": "^8.59.3",
78+
7379
"vite": "^5.4.10",
7480
"vitest": "^4.1.6"
7581
}

src/components/Footer.tsx

Lines changed: 118 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,129 +1,184 @@
1-
import { FaGithub } from 'react-icons/fa';
1+
import { useState } from 'react';
22
import { Link } from 'react-router-dom';
3+
import {
4+
FaGithub,
5+
FaTwitter,
6+
FaDiscord,
7+
FaArrowRight,
8+
FaEnvelope,
9+
FaInfoCircle,
10+
} from 'react-icons/fa';
311

412
function Footer() {
513
const [email, setEmail] = useState('');
614

7-
const handleSubscribe = (e: React.FormEvent) => {
15+
const handleSubscribe = (e: React.FormEvent<HTMLFormElement>) => {
816
e.preventDefault();
9-
// Removed raw console logging of emails to protect user data privacy (PII leak fix)
17+
18+
// Replace with API call
1019
alert('Thank you for subscribing!');
20+
1121
setEmail('');
1222
};
1323

1424
return (
15-
<footer className="w-full relative overflow-hidden transition-colors duration-300 border-t border-zinc-200 dark:border-zinc-800/80
16-
/* Light Mode: Restored your original crisp daylight background */
17-
bg-white
18-
/* Dark Mode: Retained matching deep navy navbar theme background */
19-
dark:bg-[#0f172a]
20-
font-sans select-none before:absolute before:inset-0 before:bg-gradient-to-b before:from-blue-500/5 before:to-transparent before:pointer-events-none"
25+
<footer
26+
className="
27+
w-full relative overflow-hidden transition-colors duration-300
28+
border-t border-zinc-200 dark:border-zinc-800/80
29+
bg-white dark:bg-[#0f172a]
30+
font-sans select-none
31+
before:absolute before:inset-0
32+
before:bg-gradient-to-b before:from-blue-500/5
33+
before:to-transparent before:pointer-events-none
34+
"
2135
>
2236
<div className="max-w-7xl mx-auto px-8 pt-16 pb-10 relative z-10">
23-
24-
{/* Upper Area: Clean Layout Grid from the image */}
37+
{/* Upper Section */}
2538
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-12 gap-10 pb-12 border-b border-zinc-200 dark:border-zinc-800/60">
26-
27-
{/* Column 1: Brand Presentation */}
39+
40+
{/* Brand */}
2841
<div className="lg:col-span-5 flex flex-col space-y-4">
29-
<Link to="/" className="flex items-center space-x-3 text-xl font-bold tracking-tight group w-fit">
42+
<Link
43+
to="/"
44+
className="flex items-center space-x-3 text-xl font-bold tracking-tight group w-fit"
45+
>
3046
<div className="p-2.5 bg-zinc-900 dark:bg-zinc-100 text-white dark:text-zinc-950 rounded-xl shadow-sm group-hover:scale-105 transition-transform duration-200">
3147
<FaGithub className="h-5 w-5" />
3248
</div>
49+
3350
<span className="font-bold text-zinc-900 dark:text-zinc-50">
3451
GitHub Tracker
35-
</a>
52+
</span>
53+
</Link>
3654

3755
<p className="text-sm leading-6 text-gray-600 dark:text-gray-400 max-w-sm">
3856
Track repositories, analyze contributions, and explore GitHub
3957
insights with a clean and intuitive interface.
4058
</p>
4159
</div>
4260

43-
{/* Navigation Links */}
44-
<div className="space-y-3">
61+
{/* Quick Links */}
62+
<div className="lg:col-span-3 space-y-4">
4563
<h3 className="text-sm font-semibold uppercase tracking-wider text-gray-900 dark:text-white">
4664
Quick Links
4765
</h3>
48-
49-
<form onSubmit={handleSubscribe} className="flex flex-col sm:flex-row items-stretch gap-2 w-full max-w-sm lg:max-w-none">
66+
67+
<div className="flex flex-col space-y-3">
68+
<Link
69+
to="/contact"
70+
className="inline-flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400 hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors"
71+
>
72+
<FaEnvelope className="h-3.5 w-3.5" />
73+
Contact Us
74+
</Link>
75+
76+
<Link
77+
to="/about"
78+
className="inline-flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400 hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors"
79+
>
80+
<FaInfoCircle className="h-3.5 w-3.5" />
81+
About
82+
</Link>
83+
</div>
84+
</div>
85+
86+
{/* Newsletter */}
87+
<div className="lg:col-span-4 space-y-4">
88+
<h3 className="text-sm font-semibold uppercase tracking-wider text-gray-900 dark:text-white">
89+
Subscribe
90+
</h3>
91+
92+
<form
93+
onSubmit={handleSubscribe}
94+
className="flex flex-col sm:flex-row items-stretch gap-2"
95+
>
5096
<input
5197
type="email"
5298
required
5399
placeholder="Enter email address"
54100
value={email}
55101
onChange={(e) => setEmail(e.target.value)}
56-
className="flex-grow text-sm px-4 py-3 bg-zinc-50 dark:bg-zinc-800/40 border border-zinc-200 dark:border-zinc-700/50 rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-500/20 focus:border-blue-500 text-zinc-900 dark:text-white placeholder-zinc-400 dark:placeholder-zinc-500 transition-all"
102+
className="
103+
flex-grow text-sm px-4 py-3
104+
bg-zinc-50 dark:bg-zinc-800/40
105+
border border-zinc-200 dark:border-zinc-700/50
106+
rounded-xl
107+
focus:outline-none focus:ring-2
108+
focus:ring-blue-500/20 focus:border-blue-500
109+
text-zinc-900 dark:text-white
110+
placeholder-zinc-400 dark:placeholder-zinc-500
111+
transition-all
112+
"
57113
/>
114+
58115
<button
59116
type="submit"
60-
className="px-5 py-3 text-sm font-bold bg-blue-600 hover:bg-blue-700 text-white rounded-xl shadow-sm active:scale-[0.98] transition-all duration-300 hover:shadow-lg hover:shadow-blue-500/20 flex items-center justify-center space-x-1.5 whitespace-nowrap"
117+
className="
118+
px-5 py-3 text-sm font-bold
119+
bg-blue-600 hover:bg-blue-700
120+
text-white rounded-xl shadow-sm
121+
active:scale-[0.98]
122+
transition-all duration-300
123+
hover:shadow-lg hover:shadow-blue-500/20
124+
flex items-center justify-center gap-1.5
125+
whitespace-nowrap
126+
"
61127
>
62128
<span>Subscribe</span>
63129
<FaArrowRight className="h-3.5 w-3.5" />
64130
</button>
65131
</form>
66132
</div>
133+
</div>
67134

68-
<div className="flex flex-col space-y-2">
69-
<Link
70-
to="/contact"
71-
className="inline-flex items-center gap-2 text-sm hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors"
72-
>
73-
<FaEnvelope className="h-3.5 w-3.5" />
74-
Contact Us
75-
</Link>
135+
{/* Bottom Bar */}
136+
<div className="flex flex-col md:flex-row items-center justify-between gap-6 pt-6">
76137

77-
<Link
78-
to="/about"
79-
className="inline-flex items-center gap-2 text-sm hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors"
80-
>
81-
<FaInfoCircle className="h-3.5 w-3.5" />
82-
About
83-
</Link>
84-
</div>
138+
{/* Copyright */}
139+
<div className="text-center md:text-left text-gray-600 dark:text-gray-400">
140+
<p className="text-xs md:text-sm font-semibold">
141+
&copy; {new Date().getFullYear()}{' '}
142+
<span className="font-semibold">GitHub Tracker</span>. All rights reserved.
143+
</p>
85144
</div>
86-
87-
{/* Social Icons (Right Aligned) - Icon sizes increased to h-5 w-5 */}
88-
<div className="flex items-center space-x-5 order-1 sm:order-3">
89-
<a
90-
href="https://github.com/GitMetricsLab/github_tracker"
91-
target="_blank"
92-
rel="noopener noreferrer"
145+
146+
{/* Social Icons */}
147+
<div className="flex items-center space-x-5">
148+
<a
149+
href="https://github.com/GitMetricsLab/github_tracker"
150+
target="_blank"
151+
rel="noopener noreferrer"
93152
className="text-zinc-400 dark:text-zinc-500 hover:text-zinc-900 dark:hover:text-zinc-100 transition-all duration-300 hover:-translate-y-1 hover:scale-110"
94153
aria-label="GitHub Repository"
95154
>
96-
<FaGithub className="h-7 w-7" />
155+
<FaGithub className="h-6 w-6" />
97156
</a>
98-
<a
99-
href="https://x.com/your_handle"
100-
target="_blank"
101-
rel="noopener noreferrer"
157+
158+
<a
159+
href="https://x.com/your_handle"
160+
target="_blank"
161+
rel="noopener noreferrer"
102162
className="text-zinc-400 dark:text-zinc-500 hover:text-sky-500 dark:hover:text-zinc-100 transition-all duration-300 hover:-translate-y-1 hover:scale-110"
103163
aria-label="Twitter"
104164
>
105-
<FaTwitter className="h-7 w-7" />
165+
<FaTwitter className="h-6 w-6" />
106166
</a>
107-
<a
108-
href="https://discord.gg/your_invite"
109-
target="_blank"
110-
rel="noopener noreferrer"
111-
className="text-zinc-400 dark:text-zinc-500 hover:text-indigo-500 dark:hover:text-zinc-100 transition-all duration-300 hover:-translate-y-1 hover:scale-110"
167+
168+
<a
169+
href="https://discord.gg/your_invite"
170+
target="_blank"
171+
rel="noopener noreferrer"
172+
className="text-zinc-400 dark:text-zinc-500 hover:text-indigo-500 dark:hover:text-zinc-100 transition-all duration-300 hover:-translate-y-1 hover:scale-110"
112173
aria-label="Discord"
113174
>
114-
<FaDiscord className="h-7 w-7" />
175+
<FaDiscord className="h-6 w-6" />
115176
</a>
116177
</div>
117178
</div>
118-
<div className="p-2 border-t border-gray-200 dark:border-gray-800 text-center text-gray-600 dark:text-gray-400">
119-
<p className="text-xs md:text-sm font-semibold">
120-
&copy; {new Date().getFullYear()}{" "}
121-
<span className="font-semibold">GitHub Tracker</span>. All rights reserved.
122-
</p>
123-
</div>
124179
</div>
125180
</footer>
126181
);
127182
}
128183

129-
export default Footer;
184+
export default Footer;

0 commit comments

Comments
 (0)