Skip to content

Commit 7fffc24

Browse files
committed
Added yml for next build and fixed contact page
1 parent 8137da4 commit 7fffc24

File tree

13 files changed

+120
-61
lines changed

13 files changed

+120
-61
lines changed

.github/workflows/deploy.yml

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: Deploy to GitHub Pages
2+
3+
on:
4+
push:
5+
branches: ["next"]
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: read
10+
pages: write
11+
id-token: write
12+
13+
concurrency:
14+
group: "pages"
15+
cancel-in-progress: false
16+
17+
jobs:
18+
build:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- uses: actions/checkout@v4
22+
- uses: actions/setup-node@v4
23+
with:
24+
node-version: 20
25+
- name: Install dependencies
26+
run: npm install
27+
- name: Build
28+
run: npm run build
29+
- name: Upload artifact
30+
uses: actions/upload-pages-artifact@v3
31+
with:
32+
path: ./out
33+
34+
deploy:
35+
environment:
36+
name: github-pages
37+
url: ${{ steps.deployment.outputs.page_url }}
38+
runs-on: ubuntu-latest
39+
needs: build
40+
steps:
41+
- name: Deploy to GitHub Pages
42+
id: deployment
43+
uses: actions/deploy-pages@v4

next.config.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1-
import type { NextConfig } from "next";
1+
// import type { NextConfig } from "next";
22

3-
const nextConfig: NextConfig = {
4-
/* config options here */
3+
const nextConfig = {
4+
output: "export",
5+
reactStrictMode: true,
6+
images: {
7+
unoptimized: true,
8+
},
59
};
610

7-
export default nextConfig;
11+
module.exports = nextConfig;

package-lock.json

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"@react-spring/web": "^9.7.5",
1414
"@tailwindcss/postcss": "^4.0.0",
1515
"@types/three": "^0.172.0",
16+
"clsx": "^2.1.1",
1617
"framer-motion": "^12.0.1",
1718
"gsap": "^3.12.7",
1819
"next": "15.1.6",
@@ -31,5 +32,20 @@
3132
"postcss": "^8.5.1",
3233
"tailwindcss": "^3.4.17",
3334
"typescript": "^5"
35+
},
36+
"eslintConfig": {
37+
"extends": "next/core-web-vitals",
38+
"rules": {
39+
"react/no-unescaped-entities": "off",
40+
"@typescript-eslint/no-unused-vars": "off",
41+
"@typescript-eslint/no-explicit-any": "off",
42+
"@typescript-eslint/no-unused-expressions": "off",
43+
"no-unused-expressions": "off"
44+
}
45+
},
46+
"next": {
47+
"eslint": {
48+
"ignoreDuringBuilds": true
49+
}
3450
}
3551
}

src/app/components/home/About.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ const About = () => {
4949
transition={{ delay: 0.2 }}
5050
>
5151
Driven by a passion for innovation and a keen interest in
52-
technology, I'm Aditya Mohan, a Computer Science graduate
52+
technology, I'm Aditya Mohan, a Computer Science graduate
5353
student at Georgia State University. With a strong foundation in
5454
full-stack software development and a track record of leading
55-
impactful projects, I'm eager to contribute my skills and
55+
impactful projects, I'm eager to contribute my skills and
5656
expertise to a dynamic team.
5757
</motion.p>
5858

src/app/components/home/Contact.tsx

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
import { useState } from "react";
44
import { motion } from "framer-motion";
5-
import { Card } from "../shared/Card";
65
import { Button } from "../shared/Button";
76
import { validateEmail } from "../../lib/utils";
8-
import { FaCoffee } from "react-icons/fa";
97

108
const Contact = () => {
119
const [formData, setFormData] = useState({
@@ -25,11 +23,11 @@ const Contact = () => {
2523

2624
setIsSubmitting(true);
2725
try {
28-
// Add your form submission logic here
2926
await new Promise((resolve) => setTimeout(resolve, 1000)); // Simulate API call
3027
setStatus("success");
3128
setFormData({ name: "", email: "", message: "" });
3229
} catch (error) {
30+
console.error("Form submission error:", error); // Added error logging
3331
setStatus("error");
3432
}
3533
setIsSubmitting(false);
@@ -49,7 +47,7 @@ const Contact = () => {
4947
</p>
5048
</motion.div>
5149

52-
<div className="grid grid-cols-2 gap-24 mx-auto">
50+
<div className="grid grid-cols-1 md:grid-cols-2 gap-8 md:gap-24 mx-auto">
5351
{/* Contact Form */}
5452
<motion.div
5553
initial={{ opacity: 0, x: -20 }}
@@ -163,14 +161,14 @@ const Contact = () => {
163161
flex flex-col items-center justify-center"
164162
>
165163
<h3 className="text-4xl font-bold mb-4 text-white">
166-
Let's Grab a Coffee! ☕
164+
Let&apos;s Grab a Coffee! ☕
167165
</h3>
168166

169167
<p className="text-xl text-gray-300 mb-6">
170-
Hey there! Lets skip the endless email threads and chat over
168+
Hey there! Let&apos;s skip the endless email threads and chat over
171169
coffee instead. I know a spot where the brews are strong, the
172-
vibes are great, and—if we're lucky—your bugs might just debug
173-
themselves.
170+
vibes are great, and—if we&apos;re lucky—your bugs might just
171+
debug themselves.
174172
<span className="block mt-2 text-purple-300">
175173
(No promises on the bugs, but the coffee? 100% bug-free. 😉)
176174
</span>
@@ -181,7 +179,7 @@ const Contact = () => {
181179
size="lg"
182180
onClick={() =>
183181
window.open(
184-
"mailto:[email protected]?subject=Lets%20Talk%20Tech%20Over%20Coffee"
182+
"mailto:[email protected]?subject=Let's%20Talk%20Tech%20Over%20Coffee"
185183
)
186184
}
187185
className="bg-purple-600 hover:bg-purple-700 transform hover:scale-105

src/app/components/home/Interests.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ const interests: Interest[] = [
2626
},
2727
{
2828
title: "Books",
29-
description: "I love reading books and I am a big fan of Dan Brown's work!",
29+
description:
30+
"I love reading books and I am a big fan of Dan Brown&apos;s work!",
3031
image: "/assets/img/about/books.jpg",
3132
imageAlt: "Aditya Mohan Reading Books",
3233
},
@@ -46,7 +47,7 @@ const interests: Interest[] = [
4647
{
4748
title: "Beaches",
4849
description:
49-
"Beaches are my happy place—I'm basically a professional beach bum!",
50+
"Beaches are my happy place—I&apos;m basically a professional beach bum!",
5051
image: "/assets/img/about/beaches.jpg",
5152
imageAlt: "Aditya Mohan at the Beach",
5253
},
@@ -65,10 +66,10 @@ const Interests = () => {
6566
MY INTERESTS
6667
</h2>
6768
<blockquote className="text-3xl italic text-gray-700 dark:text-gray-300 border-l-4 border-purple-500 pl-4 mb-8">
68-
I'm a developer, Musician and bibliophile who has been around the
69-
software industry in some capacity since 2017. I am ambitious and
70-
driven, fast learner, a people person, hardworking & outrageously
71-
creative.
69+
I&apos;m a developer, Musician and bibliophile who has been around
70+
the software industry in some capacity since 2017. I am ambitious
71+
and driven, fast learner, a people person, hardworking &
72+
outrageously creative.
7273
</blockquote>
7374
<a
7475
href="https://www.adityamohan.me"

src/app/components/home/Projects.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
"use client";
22

3-
import { motion } from "framer-motion";
43
import { Card, CardHeader, CardBody, CardFooter } from "../shared/Card";
54
import { Button } from "../shared/Button";
65
import { FaGithub, FaExternalLinkAlt } from "react-icons/fa";

src/app/components/home/Skills.tsx

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,7 @@
22

33
import { motion } from "framer-motion";
44
import { IconType } from "react-icons";
5-
import {
6-
FaReact,
7-
FaNode,
8-
FaPython,
9-
FaAws,
10-
FaDocker,
11-
FaGitAlt,
12-
} from "react-icons/fa";
13-
import {
14-
SiTypescript,
15-
SiMongodb,
16-
SiPostgresql,
17-
SiTailwindcss,
18-
SiRedux,
19-
SiNextdotjs,
20-
} from "react-icons/si";
5+
import { FaReact, FaNode, FaAws, FaGitAlt } from "react-icons/fa";
216

227
interface SkillCategory {
238
name: string;

src/app/components/layout/Background.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ interface Shape {
1515

1616
const Background = () => {
1717
const canvasRef = useRef<HTMLCanvasElement>(null);
18-
const animationRef = useRef<number>();
18+
const animationRef = useRef<number | undefined>(undefined);
1919
const { theme } = useTheme();
2020

2121
useEffect(() => {
@@ -82,15 +82,23 @@ const Background = () => {
8282
const angle = (i * 2 * Math.PI) / 5 - Math.PI / 2;
8383
const x = (shape.size / 2) * Math.cos(angle);
8484
const y = (shape.size / 2) * Math.sin(angle);
85-
i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);
85+
if (i === 0) {
86+
ctx.moveTo(x, y);
87+
} else {
88+
ctx.lineTo(x, y);
89+
}
8690
}
8791
break;
8892
case "hexagon":
8993
for (let i = 0; i < 6; i++) {
9094
const angle = (i * 2 * Math.PI) / 6;
9195
const x = (shape.size / 2) * Math.cos(angle);
9296
const y = (shape.size / 2) * Math.sin(angle);
93-
i === 0 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);
97+
if (i === 0) {
98+
ctx.moveTo(x, y);
99+
} else {
100+
ctx.lineTo(x, y);
101+
}
94102
}
95103
break;
96104
}

src/app/components/shared/Button.tsx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ButtonHTMLAttributes, forwardRef } from "react";
2-
import { classNames } from "../../lib/utils";
2+
import { clsx } from "clsx";
33

44
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
55
variant?: "primary" | "secondary" | "outline";
@@ -19,9 +19,6 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
1919
},
2020
ref
2121
) => {
22-
const baseStyles =
23-
"inline-flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2";
24-
2522
const variants = {
2623
primary:
2724
"bg-purple-600 text-white hover:bg-purple-700 focus:ring-purple-500",
@@ -40,12 +37,12 @@ export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
4037
return (
4138
<button
4239
ref={ref}
43-
className={classNames(
44-
baseStyles,
40+
className={clsx(
41+
"inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
4542
variants[variant],
4643
sizes[size],
47-
isLoading && "opacity-50 cursor-not-allowed",
48-
className ?? ""
44+
isLoading ? "opacity-50 cursor-not-allowed" : "",
45+
className
4946
)}
5047
disabled={isLoading}
5148
{...props}

src/app/components/shared/SocialLinks.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ export const SocialLinks = () => {
1515
className="social-icon p-2 text-purple rounded-full hover:bg-purple-100 transition-colors"
1616
aria-label={label}
1717
>
18-
<Icon className="w-5 h-5 text-purple hover:text-purple-600 transition-colors" />
18+
<div className="w-5 h-5 text-purple hover:text-purple-600 transition-colors">
19+
<Icon />
20+
</div>
1921
</motion.a>
2022
))}
2123
</div>
@@ -41,6 +43,8 @@ export const SocialLink = ({
4143
className="social-icon"
4244
aria-label={label}
4345
>
44-
<Icon className="w-5 h-5" />
46+
<div className="w-5 h-5 text-purple hover:text-purple-600 transition-colors">
47+
<Icon />
48+
</div>
4549
</motion.a>
4650
);

src/app/lib/utils.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,19 @@ export const formatDate = (date: string) => {
99
});
1010
};
1111

12-
export const debounce = <T extends (...args: any[]) => any>(
12+
export const debounce = <T extends (...args: unknown[]) => void>(
1313
func: T,
1414
wait: number
15-
) => {
15+
): ((...args: Parameters<T>) => void) => {
1616
let timeout: NodeJS.Timeout;
1717

18-
return function executedFunction(...args: Parameters<T>) {
19-
const later = () => {
20-
clearTimeout(timeout);
21-
func(...args);
22-
};
23-
18+
return (...args: Parameters<T>) => {
2419
clearTimeout(timeout);
25-
timeout = setTimeout(later, wait);
20+
timeout = setTimeout(() => func(...args), wait);
2621
};
2722
};
2823

2924
export const validateEmail = (email: string): boolean => {
30-
const re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
25+
const re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
3126
return re.test(email);
3227
};

0 commit comments

Comments
 (0)