All logos & images on this page belong to their respective owners.
diff --git a/src/components/Header.tsx b/src/components/Header.tsx
index 5364a5e..8de825f 100644
--- a/src/components/Header.tsx
+++ b/src/components/Header.tsx
@@ -1,9 +1,10 @@
export default function Header() {
return (
-
-
Alex Frantz
+
+
+
Alex Frantz
Professional button clicker & word typer
-
+
)
diff --git a/src/components/ProjectComponents/RecentListens.tsx b/src/components/ProjectComponents/RecentListens.tsx
new file mode 100644
index 0000000..9a67b4e
--- /dev/null
+++ b/src/components/ProjectComponents/RecentListens.tsx
@@ -0,0 +1,90 @@
+import { useState, useEffect } from 'react';
+
+type MusicAPIResponse = {
+ data: {
+ tracks: MusicData[]
+ }
+}
+
+type MusicData = {
+ artist: {
+ mbid: string,
+ "#text": string
+ },
+ mbid: string,
+ album: {
+ mbid: string,
+ "#text": string,
+ },
+ name: string,
+ url: string,
+ image: MusicImage[]
+}
+
+type MusicImage = {
+ size: string,
+ "#text": string
+}
+
+export default function RecentListens() {
+ const [ data, setData ] = useState
();
+ const [ errorState, setErrorState ] = useState("");
+ const [ loading, setLoading ] = useState(true);
+
+ useEffect(() => {
+ fetch("https://api.alexav.gg/v4/social/music", {
+ method: "get"
+ })
+ .then(async (res) => {
+ if (res.ok) {
+ const data = await res.json() as MusicAPIResponse
+ setData(data.data.tracks);
+ } else {
+ setErrorState("Failed to load! :(")
+ }
+ })
+ .catch((e: Error) => {
+ setErrorState(e.message)
+ })
+
+ setLoading(false);
+ }, []);
+
+ if (data) {
+ return (
+
+
+ {
+ (loading) ? (
+
Loading..
+ ) : (!errorState && data) ? (
+
+
)
v.size === "large")[0]['#text']}
+ width="100"
+ />
+
+
{data[0].name}
+
+ {data[0].artist['#text']}
+
+
+ ) : (
+ <>
+
Failed to fetch :(
+
Check out last.fm/lulawex if this isn't working.
+
{errorState}
+ >
+ )
+ }
+
+
+ )
+ } else {
+ <>
+ No data :(
+ Check out last.fm/lulawex if this isn't working.
+ {errorState}
+ >
+ }
+}
\ No newline at end of file
diff --git a/src/components/RecentPhoto.tsx b/src/components/ProjectComponents/RecentPhoto.tsx
similarity index 96%
rename from src/components/RecentPhoto.tsx
rename to src/components/ProjectComponents/RecentPhoto.tsx
index f7f6ae3..bc8632c 100644
--- a/src/components/RecentPhoto.tsx
+++ b/src/components/ProjectComponents/RecentPhoto.tsx
@@ -19,10 +19,6 @@ export default function RecentPhoto() {
const [ loading, setLoading ] = useState(true);
const [ errorState, setErrorState ] = useState(null);
- useEffect(() => {
- console.log(data)
- }, [data])
-
useEffect(() => {
fetch("https://photos-cors.alexav.gg", {
method: 'get',
@@ -33,7 +29,6 @@ export default function RecentPhoto() {
.then(async (res) => {
if (res.ok) {
console.log("ok!")
- console.log(errorState)
const json = await res.json() as PhotoDataResponse[];
setData(json[0].result.data.json);
setLoading(false)
diff --git a/src/components/RecentWatch.tsx b/src/components/ProjectComponents/RecentWatch.tsx
similarity index 100%
rename from src/components/RecentWatch.tsx
rename to src/components/ProjectComponents/RecentWatch.tsx
diff --git a/src/index.tsx b/src/index.tsx
index 1747cea..8a8b07c 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -3,8 +3,11 @@ import Header from "./components/Header";
import ListBox from "./components/ListBox";
import Project from "./components/Project";
import ContactForm from "./components/ContactForm";
-import RecentWatch from "./components/RecentWatch";
-import RecentPhoto from "./components/RecentPhoto";
+
+// project components
+import RecentWatch from "./components/ProjectComponents/RecentWatch";
+import RecentPhoto from "./components/ProjectComponents/RecentPhoto";
+import RecentListens from "./components/ProjectComponents/RecentListens";
export default function Home() {
return (
@@ -12,7 +15,7 @@ export default function Home() {
-
+
Projects
@@ -65,7 +68,20 @@ export default function Home() {
-
+
+
+
+
+
What am I listening to?
+
I listen to some good stuff I swear
+
+
+
+
+
+
+
+