diff --git a/README.md b/README.md index 5477ed8..43ad143 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,2 @@ # RainnnyCLUB -My personal portfolio website hosted [here](https://rainnny.club) - -## TODO -- [x] Mobile Responsiveness -- [ ] Discord Integration (Status, Activity, etc) -- [ ] Add Configuration \ No newline at end of file +My personal portfolio website hosted [here](https://rainnny.club) \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 93d405f..59c8efb 100644 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/next.config.mjs b/next.config.mjs index 023d692..8bb82c7 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -7,6 +7,10 @@ const nextConfig = { protocol: "https", hostname: "cdn.rainnny.club", }, + { + protocol: "https", + hostname: "cdn.discordapp.com", + }, { protocol: "https", hostname: "bonfire.wtf", diff --git a/package.json b/package.json index 9609460..376e21d 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "react-dom": "^18", "sharp": "^0.33.5", "tailwind-merge": "^2.5.2", - "tailwindcss-animate": "^1.0.7" + "tailwindcss-animate": "^1.0.7", + "use-lanyard": "^1.5.2" }, "devDependencies": { "typescript": "^5", diff --git a/src/app/(pages)/page.tsx b/src/app/(pages)/page.tsx index 87f4817..07eefbf 100644 --- a/src/app/(pages)/page.tsx +++ b/src/app/(pages)/page.tsx @@ -1,6 +1,9 @@ import Greeting from "@/components/landing/greeting"; import Navbar from "@/components/landing/navbar"; import { ReactElement } from "react"; +import Navigation from "@/components/landing/navigation"; +import BlurFade from "@/components/ui/blur-fade"; +import DiscordStatus from "@/components/landing/discord-status"; const LandingPage = (): ReactElement => (
@@ -13,6 +16,10 @@ const LandingPage = (): ReactElement => ( }} > + + + +
); diff --git a/src/components/landing/discord-status.tsx b/src/components/landing/discord-status.tsx new file mode 100644 index 0000000..9c074e7 --- /dev/null +++ b/src/components/landing/discord-status.tsx @@ -0,0 +1,89 @@ +"use client"; + +import { ReactElement } from "react"; +import { Activity, Data, DiscordUser, useLanyardWS } from "use-lanyard"; +import BlurFade from "@/components/ui/blur-fade"; +import Image from "next/image"; +import { cn } from "@/lib/utils"; +import { PlayIcon } from "@heroicons/react/24/outline"; + +const statusColors = { + online: "bg-green-500", + idle: "bg-yellow-500", + dnd: "bg-red-500", +}; + +const DiscordStatus = (): ReactElement => { + const discordData: Data | undefined = useLanyardWS("504147739131641857"); + const discordUser: DiscordUser | undefined = discordData?.discord_user; + return ( +
+ {discordData && discordUser && ( + + {/* Avatar & Status */} +
+ {`${discordUser.username}'s + {discordData.discord_status !== "offline" && ( +
+ )} +
+ + {/* Username & Basic Activity */} +
+
+

+ {discordUser.display_name} +

+

+ {discordUser.username} +

+
+ + {discordData.activities.length > 0 && ( + + )} +
+ + )} +
+ ); +}; + +const BasicActivityDisplay = ({ + activity, +}: { + activity: Activity; +}): ReactElement => { + const prefix = + activity.type === 0 + ? "Playing" + : activity.type === 1 + ? "Streaming" + : "Listening to"; + + return ( +
+ {prefix} {activity.name}{" "} + +
+ ); +}; + +export default DiscordStatus; diff --git a/src/components/landing/greeting.tsx b/src/components/landing/greeting.tsx index 9ed7e94..7f1ff01 100644 --- a/src/components/landing/greeting.tsx +++ b/src/components/landing/greeting.tsx @@ -6,12 +6,12 @@ import moment, { Moment } from "moment"; import Image from "next/image"; import { ReactElement } from "react"; import { FlipWords } from "@/components/ui/flip-words"; -import Navigation from "./navigation"; const Greeting = (): ReactElement => { const now: Moment = moment(Date.now()); return (
+ {/* Picture */} { /> + {/* Intro */}

{ "text-black dark:!text-transparent bg-clip-text bg-gradient-to-br from-zinc-300/85 to-white" )} words={[ - `A ${now.diff(moment([2002, 10, 13]), "years")} year old${" "} + `A ${now.diff(moment([2002, 10, 13]), "years")} year old passionate software engineer living in Canada with ${moment([2016, 8, 1]).fromNow(true)} of experience!`, ]} /> - - - -

); }; diff --git a/src/components/landing/navigation.tsx b/src/components/landing/navigation.tsx index e0b3a05..571606f 100644 --- a/src/components/landing/navigation.tsx +++ b/src/components/landing/navigation.tsx @@ -64,7 +64,12 @@ const Navigation = (): ReactElement => { {/* Selected Content */} {selected && ( - +
{selected.content}
)}