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 */}
+
+
+ {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}
)}