-
{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.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) => (
+
+ ))}
+
>