From 0b3745bc88b3fc5cdda6ab5ff77486b940470ddb Mon Sep 17 00:00:00 2001 From: Rainnny7 Date: Thu, 29 Aug 2024 19:11:47 -0400 Subject: [PATCH] improvements --- bun.lockb | Bin 173913 -> 175030 bytes next.config.mjs | 9 +- package.json | 1 + .../landing/nav-content/homelab.tsx | 2 +- .../landing/nav-content/my-work.tsx | 127 ++++++++---------- src/components/landing/nav-content/skills.tsx | 8 +- src/components/landing/navbar.tsx | 9 +- src/components/landing/navigation.tsx | 19 +-- src/types/navigation.ts | 8 ++ src/types/project.ts | 13 ++ src/types/skill.ts | 6 + tailwind.config.ts | 22 ++- 12 files changed, 118 insertions(+), 106 deletions(-) create mode 100644 src/types/navigation.ts create mode 100644 src/types/project.ts create mode 100644 src/types/skill.ts diff --git a/bun.lockb b/bun.lockb index 37b44464f8be1044216c1a99ae52ea7af89d66b3..93d405fa2ed346ca034786bc1a27e924a3562906 100644 GIT binary patch delta 30763 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 erWB=Qc2IA1zIgvB)kW;>tZ{{H~rkjNJR delta 30502 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 diff --git a/next.config.mjs b/next.config.mjs index e3bad4d..023d692 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -3,6 +3,14 @@ const nextConfig = { output: "standalone", images: { remotePatterns: [ + { + protocol: "https", + hostname: "cdn.rainnny.club", + }, + { + protocol: "https", + hostname: "bonfire.wtf", + }, { protocol: "https", hostname: "img.icons8.com", @@ -10,5 +18,4 @@ const nextConfig = { ], }, }; - export default nextConfig; diff --git a/package.json b/package.json index 68feea8..9609460 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dependencies": { "@heroicons/react": "^2.1.5", "@radix-ui/react-navigation-menu": "^1.2.0", + "@radix-ui/react-scroll-area": "^1.1.0", "@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-tooltip": "^1.1.2", "class-variance-authority": "^0.7.0", diff --git a/src/components/landing/nav-content/homelab.tsx b/src/components/landing/nav-content/homelab.tsx index 9a3eb80..8e57d4a 100644 --- a/src/components/landing/nav-content/homelab.tsx +++ b/src/components/landing/nav-content/homelab.tsx @@ -1,7 +1,7 @@ import { ReactElement } from "react"; const HomelabContent = (): ReactElement => ( -
    +
    • Server Rack: 22U, 32" Depth
    • diff --git a/src/components/landing/nav-content/my-work.tsx b/src/components/landing/nav-content/my-work.tsx index b333550..e06fccf 100644 --- a/src/components/landing/nav-content/my-work.tsx +++ b/src/components/landing/nav-content/my-work.tsx @@ -1,98 +1,61 @@ "use client"; import { MagicCard } from "@/components/ui/magic-card"; -import moment, { Moment } from "moment"; +import moment from "moment"; import { useTheme } from "next-themes"; import { UseThemeProps } from "next-themes/dist/types"; import Link from "next/link"; import { ReactElement } from "react"; - -type Project = { - name: string; - link?: string | undefined; - previewContent: ReactElement; - startDate: Moment; - endDate?: Moment | undefined; -}; +import Project from "@/types/project"; +import Image from "next/image"; const projects: Project[] = [ { name: "This Website!", + description: "This website!", + icon: "/me.png", link: "https://github.com/Rainnny7/rainnny.club", - previewContent:
      This website!
      , startDate: moment([2024, 7, 29]), }, { name: "WildNetwork", + description: + "WildNetwork is a Minecraft server that contains multiple gamemodes, one of which is Prison, which is the most popular. I first joined the server as a Developer where I would work behind the scenes to create new features, now I'm currently working as a System Administrator.", + icon: "https://cdn.rainnny.club/x6m1QENM9gZz.png", link: "https://discord.gg/WildPrison", - previewContent: ( -

      - WildNetwork is a Minecraft server that contains multiple - gamemodes, one of which is Prison, which is the most popular. I - first joined the server as a Developer where I would work behind - the scenes to create new features, now I'm currently - working as a System Administrator. -

      - ), startDate: moment([2020, 7, 1]), }, { name: "Bonfire", + description: + "Bonfire is a platform similar to Discord that a friend and I are working on together in our free time. Bonfire is perfect for connecting with friends or building a global community. Personalize your space to chat, and hang out.", + icon: "https://bonfire.wtf/media/logo.png", link: "https://bonfire.wtf", - previewContent: ( -

      - Bonfire is a platform similar to Discord that a friend and I are - working on together in our free time. Bonfire is perfect for - connecting with friends or building a global community. - Personalize your space to chat, and hang out. -

      - ), startDate: moment([2024, 3, 30]), }, { name: "Lucity", + description: + "Lucity was a minigame network for the game Minecraft, and was owned by the YouTuber iamLucid. When I worked at Lucity, I was the development lead, I focused mainly on infrastructure, databases, and monitoring systems. A few things that I have made - a dynamically managed server system, proxy rotation via the TCPShield API, and an API that can interact with the entire network from a normal Java app.", + icon: "https://cdn.rainnny.club/UWdilkRUqTYl.png", link: "https://youtube.com/@iamLucid", - previewContent: ( -

      - Lucity was a minigame network for the game Minecraft, and was - owned by the YouTuber iamLucid. When I worked at Lucity, I was - the development lead, I focused mainly on infrastructure, - databases, and monitoring systems. A few things that I have made - - a dynamically managed server system, proxy rotation via the - TCPShield API, and an API that can interact with the entire - network from a normal Java app. -

      - ), startDate: moment([2020, 7, 1]), endDate: moment([2022, 10, 30]), }, { name: "Rainplex", - previewContent: ( -

      - Rainplex was a remake of the once popular Minecraft server, - Mineplex. Rainplex initially came to light using the plugin, - Skript where it just contained a Hub. After some time, the - entirety of the network was re-coded in the Java programming - from the ground up. Rainplex went through numerous re-codes over - the time it was active, however I have since abandoned - development due to lack of free time. -

      - ), + description: + "Rainplex was a remake of the once popular Minecraft server, Mineplex. Rainplex initially came to light using the plugin, Skript where it just contained a Hub. After some time, the entirety of the network was re-coded in the Java programming from the ground up. Rainplex went through numerous re-codes over the time it was active, however I have since abandoned development due to lack of free time.", + icon: "https://cdn.rainnny.club/QC742YfKVcyI.png", startDate: moment([2018, 8, 1]), endDate: moment([2021, 6, 11]), }, { name: "Arcane Client", + description: + "Arcane is the all-in-one Minecraft mod pack. This client was built to be similar to LunarClient for portfolio and experience sake. I have since abandoned development due to lack of free time.", + icon: "https://cdn.rainnny.club/MT45sXzZtah4.png", link: "https://github.com/ArcaneClientNET", - previewContent: ( -

      - Arcane is the all-in-one Minecraft mod pack. This client was - built to be similar to LunarClient for portfolio and experience - sake. I have since abandoned development due to lack of free - time. -

      - ), startDate: moment([2021, 6, 1]), endDate: moment([2021, 10, 1]), }, @@ -101,25 +64,47 @@ const projects: Project[] = [ const MyWork = (): ReactElement => { const { theme }: UseThemeProps = useTheme(); return ( -
      +
      {projects.map((project, index) => ( -

      - {project.name} -

      + {/* Icon, Name & Years Active */} +
      + {`The - {/* Years Active */} -

      - {project.startDate.format("MMM YYYY")} - {project.endDate && - ` - ${project.endDate.format("MMM YYYY")}`} -

      +

      + {project.name} +

      +
      + + {project.startDate.format("MMM YYYY")} + + - + {project.endDate ? ( + + {project.endDate.format("MMM YYYY")} + + ) : ( + + Present + + )} +
      +
      + + {/* Description */} +

      + {project.description} +

      ))} diff --git a/src/components/landing/nav-content/skills.tsx b/src/components/landing/nav-content/skills.tsx index 99b9f86..087a90c 100644 --- a/src/components/landing/nav-content/skills.tsx +++ b/src/components/landing/nav-content/skills.tsx @@ -2,12 +2,7 @@ import Image from "next/image"; import Link from "next/link"; import { ReactElement } from "react"; import SimpleTooltip from "@/components/ui/simple-tooltip"; - -type Skill = { - name: string; - icon: string; - link: string; -}; +import Skill from "@/types/skill"; const skillset: Skill[] = [ // Languages @@ -132,6 +127,7 @@ const Skills = (): ReactElement => ( > {`${skill.name} ( const Branding = (): ReactElement => ( ( passHref > Buy me a Coffee @@ -86,7 +89,7 @@ const Links = (): ReactElement => ( ); const UsefulLinksContent = (): ReactElement => ( -
      +
      {/* Git */}