diff --git a/components/about/Intro.tsx b/components/about/Intro.tsx index 1c99f18..bd86db0 100644 --- a/components/about/Intro.tsx +++ b/components/about/Intro.tsx @@ -31,7 +31,7 @@ const AboutIntro = () => {
-
+
(~ ̄▽ ̄)~ { className="h-auto w-full object-contain" />
-
+
(~ ̄▽ ̄)~ = ({ />
-

{position}

+

{position},

+ + {company} +

{description}

@@ -57,7 +63,7 @@ const ResumeCard: React.FC = ({ const Resume = () => { return ( -
+

Take a look at my{" "} resume diff --git a/components/landing/About.tsx b/components/landing/About.tsx index b1d2ad5..338ac98 100644 --- a/components/landing/About.tsx +++ b/components/landing/About.tsx @@ -29,7 +29,7 @@ const About = () => { initial={{ opacity: 0, y: 20 }} whileInView={{ opacity: 1, y: 0 }} transition={{ delay: 0.4, type: "spring" }} - className="mx-auto mt-20 grid min-h-screen max-w-7xl scroll-mt-20 grid-cols-1 gap-16 px-5 text-center lg:mt-0 lg:grid-cols-2 lg:text-left" + className="mx-auto mt-20 grid min-h-screen max-w-7xl scroll-mt-20 grid-cols-1 gap-16 px-5 text-center lg:grid-cols-2 lg:text-left xl:mt-5" >
diff --git a/components/landing/Experience.tsx b/components/landing/Experience.tsx index c45af17..ca86d6d 100644 --- a/components/landing/Experience.tsx +++ b/components/landing/Experience.tsx @@ -41,7 +41,13 @@ const ExperienceCard: React.FC = ({

-

{position}

+

{position},

+ + {company} +

{description}

diff --git a/components/landing/Intro.tsx b/components/landing/Intro.tsx index 1cb958c..ef1f5c9 100644 --- a/components/landing/Intro.tsx +++ b/components/landing/Intro.tsx @@ -30,16 +30,18 @@ const Intro = () => {

I'm{" "} - + Kunal Keshan , -
+
a
from{" "} - Chennai + + Chennai +

diff --git a/components/landing/Portfolio.tsx b/components/landing/Portfolio.tsx index e9f166b..10d256b 100644 --- a/components/landing/Portfolio.tsx +++ b/components/landing/Portfolio.tsx @@ -104,7 +104,7 @@ const Portfolio: React.FC<{ showTill?: number }> = ({ showTill }) => { initial={{ opacity: 0, y: 20 }} whileInView={{ opacity: 1, y: 0 }} transition={{ delay: 0.4, type: "spring" }} - className="mx-auto mt-20 min-h-screen max-w-7xl px-5 lg:mt-0" + className="mx-auto mt-20 min-h-screen max-w-7xl px-5 xl:mt-5" >

Some fine additions to my{" "} diff --git a/components/landing/Services.tsx b/components/landing/Services.tsx index 5208f98..32f8bb8 100644 --- a/components/landing/Services.tsx +++ b/components/landing/Services.tsx @@ -18,10 +18,7 @@ const ServiceCard: React.FC = ({ description, }) => { return ( - +
= ({

{title}

{description}

- +
); }; diff --git a/components/landing/Testimonials.tsx b/components/landing/Testimonials.tsx index 8a92132..85c771e 100644 --- a/components/landing/Testimonials.tsx +++ b/components/landing/Testimonials.tsx @@ -8,6 +8,7 @@ import { FaArrowLeft, FaArrowRight, FaQuoteLeft } from "react-icons/fa"; import MemeTooltip from "../reusable/MemeTooltip"; import TRIBUTES from "../../data/tributes"; import Image from "next/image"; +import Link from "next/link"; const TributesWithTestimonials = TRIBUTES.filter( (tribute) => tribute.testimonial !== undefined @@ -15,12 +16,26 @@ const TributesWithTestimonials = TRIBUTES.filter( type TributeDataType = typeof TRIBUTES[number]; -const TestimonialCard: React.FC = ({ - testimonial, +const TestimonialName: React.FC = ({ name, - company, - image, + slug, + feature, }) => { + return feature ? ( + + {name} + + ) : ( +

{name}

+ ); +}; + +const TestimonialCard: React.FC = (props) => { + const { testimonial, name, company, image } = props; + return (
@@ -32,7 +47,7 @@ const TestimonialCard: React.FC = ({

-

{name}

+

{company.position} at {company.name}

diff --git a/components/layouts/Footer.tsx b/components/layouts/Footer.tsx index 12b3b56..1eafe2d 100644 --- a/components/layouts/Footer.tsx +++ b/components/layouts/Footer.tsx @@ -25,6 +25,10 @@ const Footer = () => { name: "Contact", url: "/contact", }, + { + name: "Resume", + url: "/resume", + }, { name: "Links", url: "/links", diff --git a/components/layouts/Navbar.tsx b/components/layouts/Navbar.tsx index 595f1e8..9309905 100644 --- a/components/layouts/Navbar.tsx +++ b/components/layouts/Navbar.tsx @@ -41,7 +41,7 @@ const Navbar = () => { whileInView={{ opacity: 1, y: 0 }} transition={{ delay: 0.2, type: "spring" }} > -
+
{ className="h-full w-full object-cover" /> -
    +
      {navOptions.map((option, index) => (
    • = ({ image }) => { return (
      = ({ children }) => { return ( <> - +
      {children}
      diff --git a/package.json b/package.json index 2031014..550d69b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kunalkeshan-dev", - "version": "0.1.0", + "version": "0.2.0", "private": true, "scripts": { "dev": "next dev", diff --git a/pages/resume.tsx b/pages/resume.tsx index a58c378..8827284 100644 --- a/pages/resume.tsx +++ b/pages/resume.tsx @@ -7,6 +7,7 @@ import React from "react"; import Head from "next/head"; import PublicLayout from "../layouts/PublicLayout"; import WorkInProgress from "../components/reusable/WorkInProgress"; +import Resume from "../components/about/Resume"; const ResumePage = () => { return ( @@ -15,7 +16,7 @@ const ResumePage = () => { Resume | Kunal Keshan - + ); diff --git a/pages/tributes/[tributeSlug]/index.tsx b/pages/tributes/[tributeSlug]/index.tsx new file mode 100644 index 0000000..3ec79d0 --- /dev/null +++ b/pages/tributes/[tributeSlug]/index.tsx @@ -0,0 +1,67 @@ +/** + * Tributes Page + */ + +// Dependencies +import React from "react"; +import Head from "next/head"; +import PublicLayout from "../../../layouts/PublicLayout"; +import WorkInProgress from "../../../components/reusable/WorkInProgress"; +import { motion } from "framer-motion"; +import TRIBUTES from "../../../data/tributes"; +import { + GetServerSideProps, + InferGetServerSidePropsType, + NextPage, +} from "next"; + +const IndividualTributePage: NextPage< + InferGetServerSidePropsType +> = ({ tribute }) => { + const { name } = tribute; + + return ( + <> + + {name} + + + + + + + + ); +}; + +export default IndividualTributePage; + +type Tribute = typeof TRIBUTES[number]; + +export const getServerSideProps: GetServerSideProps<{ + tribute: Tribute; +}> = async (context) => { + const { tributeSlug } = context.query; + + const tribute = TRIBUTES.find( + (trib) => trib.slug === tributeSlug && trib.feature + ); + + if (!tribute) { + return { + redirect: { + destination: "/projects", + permanent: false, + }, + }; + } + + return { + props: { tribute }, + }; +}; diff --git a/pages/tributes/index.tsx b/pages/tributes/index.tsx index 1ea1193..cbe5096 100644 --- a/pages/tributes/index.tsx +++ b/pages/tributes/index.tsx @@ -6,8 +6,120 @@ import React from "react"; import Head from "next/head"; import PublicLayout from "../../layouts/PublicLayout"; -import WorkInProgress from "../../components/reusable/WorkInProgress"; import { motion } from "framer-motion"; +import TRIBUTES from "../../data/tributes"; +import Link from "next/link"; +import Image from "next/image"; +import { + FaInstagram, + FaTwitter, + FaGlobe, + FaLinkedin, + FaYoutube, +} from "react-icons/fa"; + +const TributeIndividuals = TRIBUTES.filter((tribute) => tribute.feature); + +type TributeDataType = typeof TRIBUTES[number]; + +const TributeCard: React.FC = ({ + slug, + name, + company, + image, + intro, + socials, + website, +}) => { + const socialsInfo = [ + { + name: "Website", + Icon: FaGlobe, + url: website, + }, + { + name: "LinkedIn", + Icon: FaLinkedin, + url: socials!.linkedin, + }, + { + name: "Instagram", + Icon: FaInstagram, + url: socials!.instagram, + }, + { + name: "Twitter", + Icon: FaTwitter, + url: socials!.twitter, + }, + { + name: "YouTube", + Icon: FaYoutube, + url: socials!.youtube, + }, + ]; + + return ( +
    • +
      + + {name} + + + {company.name} + +
      +

      + {name}{" "} +
      + {company.position} @{company.name} +
      +

      +

      + {intro} +

      + + Learn more + +
      + {socialsInfo.map( + (social, index) => + social.url && ( + + + + ) + )} +
      +
    • + ); +}; const TributesPage = () => { return ( @@ -22,7 +134,25 @@ const TributesPage = () => { transition={{ delay: 0.4, type: "spring" }} className="mx-auto mt-10 mb-20 max-w-7xl px-5" > - +

      + My Tribute to those{" "} + + who shaped + {" "} + who I am today +

      +

      + I've been fortunate to have had many amazing individuals cross + paths with me and play a crucial role in my growth and shaping me + into who I am today. This page is my tribute to those who have made + a lasting impact on my life and inspired me to keep pushing forward. + Join me as I take a walk down memory lane and share my story. +

      +
        + {TributeIndividuals.map((tribute, index) => ( + + ))} +