Compare commits
10 Commits
0e0a4f5c07
...
renovate/l
Author | SHA1 | Date | |
---|---|---|---|
|
6343e1fef4 | ||
aa4fb4cc27 | |||
2b544ca2e5 | |||
b502683b6c | |||
|
425ffca5f4 | ||
|
a25b9f7947 | ||
09092e33cd | |||
|
a7962c33d1 | ||
606a58be1b | |||
8347793ec9 |
10
package.json
10
package.json
@ -17,12 +17,12 @@
|
|||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"framer-motion": "^11.3.30",
|
"framer-motion": "^11.3.30",
|
||||||
"lucide-react": "^0.439.0",
|
"lucide-react": "^0.469.0",
|
||||||
"moment": "^2.30.1",
|
"moment": "^2.30.1",
|
||||||
"next": "^14.2.7",
|
"next": "^15.0.0",
|
||||||
"next-themes": "^0.3.0",
|
"next-themes": "^0.3.0",
|
||||||
"react": "^18",
|
"react": "^19.0.0-rc-45804af1-20241021",
|
||||||
"react-dom": "^18",
|
"react-dom": "^19.0.0-rc-45804af1-20241021",
|
||||||
"sharp": "^0.33.5",
|
"sharp": "^0.33.5",
|
||||||
"tailwind-merge": "^2.5.2",
|
"tailwind-merge": "^2.5.2",
|
||||||
"tailwindcss-animate": "^1.0.7",
|
"tailwindcss-animate": "^1.0.7",
|
||||||
@ -36,6 +36,6 @@
|
|||||||
"postcss": "^8",
|
"postcss": "^8",
|
||||||
"tailwindcss": "^3.4.1",
|
"tailwindcss": "^3.4.1",
|
||||||
"eslint": "^8",
|
"eslint": "^8",
|
||||||
"eslint-config-next": "14.2.13"
|
"eslint-config-next": "15.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ const RootLayout = ({
|
|||||||
}: Readonly<{
|
}: Readonly<{
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
}>): ReactElement => (
|
}>): ReactElement => (
|
||||||
<html lang="en">
|
<html lang="en" suppressHydrationWarning>
|
||||||
<body className={cn(inter.className, "antialiased")}>
|
<body className={cn(inter.className, "antialiased")}>
|
||||||
<ThemeProvider
|
<ThemeProvider
|
||||||
attribute="class"
|
attribute="class"
|
||||||
|
@ -104,7 +104,7 @@ const BannerAvatar = ({
|
|||||||
const Bio = ({ bio }: { bio: string }): ReactElement => (
|
const Bio = ({ bio }: { bio: string }): ReactElement => (
|
||||||
<SimpleTooltip content={bio}>
|
<SimpleTooltip content={bio}>
|
||||||
<div className="p-2 bg-zinc-100 dark:bg-zinc-950/65 text-sm rounded-xl">
|
<div className="p-2 bg-zinc-100 dark:bg-zinc-950/65 text-sm rounded-xl">
|
||||||
{truncateText(bio, 15)}
|
{truncateText(bio, 10)}
|
||||||
</div>
|
</div>
|
||||||
</SimpleTooltip>
|
</SimpleTooltip>
|
||||||
);
|
);
|
||||||
|
@ -12,7 +12,7 @@ const HomelabContent = (): ReactElement => (
|
|||||||
<b>UPS:</b> 1350VA
|
<b>UPS:</b> 1350VA
|
||||||
</li>
|
</li>
|
||||||
<li className="my-2.5" />
|
<li className="my-2.5" />
|
||||||
<li>
|
<ul>
|
||||||
<b>Proxmox Node-01:</b>
|
<b>Proxmox Node-01:</b>
|
||||||
<li>
|
<li>
|
||||||
- <b>Motherboard:</b> Prime B550-PLUS
|
- <b>Motherboard:</b> Prime B550-PLUS
|
||||||
@ -26,7 +26,7 @@ const HomelabContent = (): ReactElement => (
|
|||||||
<li>
|
<li>
|
||||||
- <b>Storage:</b> 8TB (x2 4TB, x1 4TB Parity) Unraid Array
|
- <b>Storage:</b> 8TB (x2 4TB, x1 4TB Parity) Unraid Array
|
||||||
</li>
|
</li>
|
||||||
</li>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
);
|
);
|
||||||
export default HomelabContent;
|
export default HomelabContent;
|
||||||
|
@ -8,8 +8,8 @@ import Link from "next/link";
|
|||||||
import { ReactElement } from "react";
|
import { ReactElement } from "react";
|
||||||
import Project from "@/types/project";
|
import Project from "@/types/project";
|
||||||
import { ScrollArea } from "@/components/ui/scroll-area";
|
import { ScrollArea } from "@/components/ui/scroll-area";
|
||||||
import Image from "next/image";
|
|
||||||
import { truncateText } from "@/lib/utils";
|
import { truncateText } from "@/lib/utils";
|
||||||
|
import SimpleTooltip from "@/components/ui/simple-tooltip";
|
||||||
|
|
||||||
const projects: Project[] = [
|
const projects: Project[] = [
|
||||||
{
|
{
|
||||||
@ -27,6 +27,14 @@ const projects: Project[] = [
|
|||||||
link: "https://usetether.rest/user/504147739131641857",
|
link: "https://usetether.rest/user/504147739131641857",
|
||||||
startDate: moment([2024, 8, 8]),
|
startDate: moment([2024, 8, 8]),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Pulse App",
|
||||||
|
description:
|
||||||
|
"A lightweight service monitoring solution for tracking the availability of whatever service your heart desires!",
|
||||||
|
icon: "https://pulseapp.cc/media/logo.png",
|
||||||
|
link: "https://pulseapp.cc",
|
||||||
|
startDate: moment([2024, 9, 22]),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "Bonfire",
|
name: "Bonfire",
|
||||||
description:
|
description:
|
||||||
@ -76,55 +84,64 @@ const MyWork = (): ReactElement => {
|
|||||||
return (
|
return (
|
||||||
<ScrollArea className="h-[17.75rem]">
|
<ScrollArea className="h-[17.75rem]">
|
||||||
<div className="max-w-[55rem] flex flex-wrap gap-3 justify-center">
|
<div className="max-w-[55rem] flex flex-wrap gap-3 justify-center">
|
||||||
{projects.map((project, index) => (
|
{projects.map((project: Project, index: number) => (
|
||||||
<Link
|
<SimpleTooltip
|
||||||
key={index}
|
key={index}
|
||||||
href={project.link || "#"}
|
content={
|
||||||
target="_blank"
|
<p className="max-w-[23rem] text-center">
|
||||||
>
|
{project.description}
|
||||||
<MagicCard
|
|
||||||
className="w-[15rem] lg:w-[25rem] p-3.5 opacity-95"
|
|
||||||
gradientColor={
|
|
||||||
theme === "dark" ? "#262626" : "#D9D9D9"
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{/* Icon, Name & Years Active */}
|
|
||||||
<div className="flex flex-col lg:flex-row gap-0 md:gap-3 justify-center lg:justify-start lg:items-center">
|
|
||||||
<div className="flex gap-3">
|
|
||||||
<Image
|
|
||||||
className="rounded-full"
|
|
||||||
src={project.icon}
|
|
||||||
alt={`The ${project.name} Project Icon`}
|
|
||||||
width={24}
|
|
||||||
height={24}
|
|
||||||
/>
|
|
||||||
<h1 className="font-semibold select-none pointer-events-none">
|
|
||||||
{project.name}
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
<div className="flex gap-1 text-sm">
|
|
||||||
<span className="text-green-400/80">
|
|
||||||
{project.startDate.format("MMM YYYY")}
|
|
||||||
</span>
|
|
||||||
🞄
|
|
||||||
{project.endDate ? (
|
|
||||||
<span className="text-red-400/80">
|
|
||||||
{project.endDate.format("MMM YYYY")}
|
|
||||||
</span>
|
|
||||||
) : (
|
|
||||||
<span className="text-green-400/80">
|
|
||||||
Present
|
|
||||||
</span>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Description */}
|
|
||||||
<p className="mt-2.5 text-black dark:!text-transparent bg-clip-text bg-gradient-to-br from-zinc-300/80 to-white">
|
|
||||||
{truncateText(project.description, 136)}
|
|
||||||
</p>
|
</p>
|
||||||
</MagicCard>
|
}
|
||||||
</Link>
|
>
|
||||||
|
<Link href={project.link || "#"} target="_blank">
|
||||||
|
<MagicCard
|
||||||
|
className="w-[15rem] lg:w-[25rem] p-3.5 opacity-95"
|
||||||
|
gradientColor={
|
||||||
|
theme === "dark" ? "#262626" : "#D9D9D9"
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{/* Icon, Name & Years Active */}
|
||||||
|
<div className="flex flex-col lg:flex-row gap-0 md:gap-3 justify-center lg:justify-start lg:items-center">
|
||||||
|
<div className="flex gap-3">
|
||||||
|
<img
|
||||||
|
className="rounded-full"
|
||||||
|
src={project.icon}
|
||||||
|
alt={`The ${project.name} Project Icon`}
|
||||||
|
width={24}
|
||||||
|
height={24}
|
||||||
|
/>
|
||||||
|
<h1 className="font-semibold select-none pointer-events-none">
|
||||||
|
{project.name}
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
<div className="flex gap-1 text-sm">
|
||||||
|
<span className="text-green-400/80">
|
||||||
|
{project.startDate.format(
|
||||||
|
"MMM YYYY"
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
|
🞄
|
||||||
|
{project.endDate ? (
|
||||||
|
<span className="text-red-400/80">
|
||||||
|
{project.endDate.format(
|
||||||
|
"MMM YYYY"
|
||||||
|
)}
|
||||||
|
</span>
|
||||||
|
) : (
|
||||||
|
<span className="text-green-400/80">
|
||||||
|
Present
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Description */}
|
||||||
|
<p className="mt-2.5 text-black dark:!text-transparent bg-clip-text bg-gradient-to-br from-zinc-300/80 to-white">
|
||||||
|
{truncateText(project.description, 136)}
|
||||||
|
</p>
|
||||||
|
</MagicCard>
|
||||||
|
</Link>
|
||||||
|
</SimpleTooltip>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</ScrollArea>
|
</ScrollArea>
|
||||||
|
@ -11,6 +11,11 @@ const skillset: Skill[] = [
|
|||||||
icon: "https://img.icons8.com/color/2x/java-coffee-cup-logo.png",
|
icon: "https://img.icons8.com/color/2x/java-coffee-cup-logo.png",
|
||||||
link: "https://www.java.com",
|
link: "https://www.java.com",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "TypeScript",
|
||||||
|
icon: "https://img.icons8.com/fluent/2x/typescript.png",
|
||||||
|
link: "https://www.typescriptlang.org",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "JavaScript",
|
name: "JavaScript",
|
||||||
icon: "https://img.icons8.com/fluent/2x/javascript.png",
|
icon: "https://img.icons8.com/fluent/2x/javascript.png",
|
||||||
@ -72,11 +77,6 @@ const skillset: Skill[] = [
|
|||||||
icon: "https://img.icons8.com/fluent/2x/figma.png",
|
icon: "https://img.icons8.com/fluent/2x/figma.png",
|
||||||
link: "https://www.figma.com",
|
link: "https://www.figma.com",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "Postman",
|
|
||||||
icon: "https://img.icons8.com/dusk/2x/postman-api.png",
|
|
||||||
link: "https://www.postman.com",
|
|
||||||
},
|
|
||||||
|
|
||||||
// Frameworks & Libraries
|
// Frameworks & Libraries
|
||||||
{
|
{
|
||||||
|
@ -54,35 +54,28 @@ const Links = (): ReactElement => (
|
|||||||
<NavigationMenuItem>
|
<NavigationMenuItem>
|
||||||
<NavigationMenuTrigger>Useful Links</NavigationMenuTrigger>
|
<NavigationMenuTrigger>Useful Links</NavigationMenuTrigger>
|
||||||
<NavigationMenuContent>
|
<NavigationMenuContent>
|
||||||
<NavigationMenuLink>
|
<UsefulLinksContent />
|
||||||
<UsefulLinksContent />
|
|
||||||
</NavigationMenuLink>
|
|
||||||
</NavigationMenuContent>
|
</NavigationMenuContent>
|
||||||
</NavigationMenuItem>
|
</NavigationMenuItem>
|
||||||
|
|
||||||
{/* Donate */}
|
{/* Donate */}
|
||||||
<NavigationMenuItem>
|
<NavigationMenuItem>
|
||||||
<Link
|
<NavigationMenuLink
|
||||||
|
className={cn(
|
||||||
|
navigationMenuTriggerStyle(),
|
||||||
|
"gap-2 select-none"
|
||||||
|
)}
|
||||||
href="https://buymeacoffee.com/Rainnny7"
|
href="https://buymeacoffee.com/Rainnny7"
|
||||||
legacyBehavior
|
target="_blank"
|
||||||
passHref
|
|
||||||
>
|
>
|
||||||
<NavigationMenuLink
|
<span className="hidden sm:flex">Buy me a Coffee</span>
|
||||||
className={cn(
|
<span className="sm:hidden">Donate</span>
|
||||||
navigationMenuTriggerStyle(),
|
<HeartIcon
|
||||||
"gap-2 select-none"
|
className="text-red-500 animate-pulse"
|
||||||
)}
|
width={20}
|
||||||
target="_blank"
|
height={20}
|
||||||
>
|
/>
|
||||||
<span className="hidden sm:flex">Buy me a Coffee</span>
|
</NavigationMenuLink>
|
||||||
<span className="sm:hidden">Donate</span>
|
|
||||||
<HeartIcon
|
|
||||||
className="text-red-500 animate-pulse"
|
|
||||||
width={20}
|
|
||||||
height={20}
|
|
||||||
/>
|
|
||||||
</NavigationMenuLink>
|
|
||||||
</Link>
|
|
||||||
</NavigationMenuItem>
|
</NavigationMenuItem>
|
||||||
</NavigationMenuList>
|
</NavigationMenuList>
|
||||||
</NavigationMenu>
|
</NavigationMenu>
|
||||||
|
@ -25,7 +25,8 @@
|
|||||||
"@/*": [
|
"@/*": [
|
||||||
"./src/*"
|
"./src/*"
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"target": "ES2017"
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"next-env.d.ts",
|
"next-env.d.ts",
|
||||||
|
Reference in New Issue
Block a user