This commit is contained in:
2025-02-09 14:28:51 -05:00
parent d171572400
commit 1a51cd28c7
66 changed files with 4122 additions and 4298 deletions
-14
View File
@@ -1,14 +0,0 @@
import Layout from "../components/Layout";
export default function NotFound() {
return (
<Layout>
<div className="min-h-screen flex justify-center items-center">
<div className="text-center pb-28">
<h1 className="text-2xl font-bold">well that sucks</h1>
<p>that page doesn't exist. skill issue</p>
<a href="#" className="underline" onClick={() => history.back()}>go back?</a>
</div>
</div>
</Layout>
)
}
-107
View File
@@ -1,107 +0,0 @@
import Project from "../components/ProjectCard";
import ContactForm from "../components/ContactForm";
import Layout from "../components/Layout";
import { GitHub, Bluesky, Twitter, Medal, LinkedIn } from '../components/Icons';
// project components
import RecentWatch from "../components/ProjectComponents/RecentWatch";
import RecentPhoto from "../components/ProjectComponents/RecentPhoto";
import RecentListens from "../components/ProjectComponents/RecentListens";
import RecentClip from '../components/ProjectComponents/RecentClip';
import RecentGame from "../components/ProjectComponents/RecentGame";
import RecentBook from "../components/ProjectComponents/RecentBook";
export default function Home() {
return (
<Layout>
<section id="about">
<div className="w-full mx-auto text-center p-10">
<div className="my-1">
<h1 className="text-3xl font-bold">Hi, I'm Alex</h1>
<p>I'm a junior developer primarily working as QA, but sometimes writing questionable code at <a className="hover:underline text-yellow-400" href="https://medal.tv" target="_blank">Medal.tv</a></p>
</div>
<div className="block space-x-2">
{/* socials */}
<a href="https://twitter.com/carlgrimesdupe" target="_blank">
<Twitter />
</a>
<a href="https://bsky.app/profile/alexav.gg" target="_blank">
<Bluesky />
</a>
<a href="https://medal.tv/users/215577" target="_blank">
<Medal />
</a>
<a href="https://github.com/azpha/website" target="_blank">
<GitHub />
</a>
<a href="https://linkedin.com/in/thatalex" target="_blank">
<LinkedIn />
</a>
</div>
<a href="/links" className="opacity-40 text-sm">
<p className="underline">and more..</p>
</a>
</div>
</section>
<section id="projects">
<div className="bg-zinc-900 py-8">
<h1 className="pb-8 text-3xl text-center font-bold">My Projects</h1>
<div className="p-4">
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 w-full md:w-[70%] lg:w-[50%] mx-auto">
<Project
name="medaltv-wrapper"
description="A JavaScript wrapper for the Medal.tv developer API"
urlTo="https://github.com/azpha/medaltv-wrapper"
tags={["JavaScript"]}
/>
<Project
name="splitstat"
description="A Discord bot for SplitStat: Arena Warfare statistics"
urlTo="https://github.com/azpha/splitstat"
tags={["JavaScript", "DiscordJS"]}
/>
<Project
name="steam-deck-file-sync"
description="Sync clips from Steam Deck"
urlTo="https://github.com/azpha/steam-deck-file-sync"
tags={["Python", "Flask"]}
/>
<Project
name="subscription-tracker"
description="Track upcoming subscriptions"
urlTo="https://github.com/azpha/subscription-tracker"
tags={["JavaScript", "ReactJS", "Vite"]}
/>
</div>
</div>
</div>
</section>
<section id="data">
<div className="py-8">
<h1 className="pb-8 text-3xl text-center font-bold">My Data</h1>
<div className="p-4">
<div className="grid grid-cols-1 md:grid-cols-2 gap-4 w-full md:w-[70%] lg:w-[50%] mx-auto">
<RecentListens />
<RecentPhoto />
<RecentWatch />
<RecentBook />
<RecentClip />
<RecentGame />
</div>
</div>
</div>
</section>
<section id="contact">
<div className="bg-zinc-900 py-8">
<ContactForm />
</div>
</section>
</Layout>
)
}
-26
View File
@@ -1,26 +0,0 @@
import CustomButton from "../components/CustomButton";
import { Bluesky, GitHub, LastFM, LinkedIn, Medal, Twitter } from "../components/Icons";
export default function Links() {
return (
<div className="min-h-screen bg-black flex justify-center items-center">
<div className="bg-white rounded-lg p-4 text-center">
<a href="/">
<h1 className="hover:underline font-bold text-2xl text-center">Alex Frantz</h1>
</a>
<p>QA @ <a href="https://medal.tv" className="hover:underline" target="_blank">Medal.tv</a></p>
<hr className="my-2 mx-auto border-black" />
<div className="space-y-2">
<CustomButton icon={<Medal />} to="https://medal.tv/users/215577">Medal</CustomButton>
<CustomButton icon={<Twitter />} to="https://twitter.com/carlgrimesdupe">Twitter</CustomButton>
<CustomButton icon={<Bluesky />} to="https://bsky.app/profile/alexav.gg">Bluesky</CustomButton>
<CustomButton icon={<GitHub />} to="https://github.com/azpha">GitHub</CustomButton>
<CustomButton icon={<LastFM />} to="https://last.fm/user/lulawex">Last.fm</CustomButton>
<CustomButton icon={<LinkedIn />} to="https://linkedin.com/in/thatalex">LinkedIn</CustomButton>
</div>
</div>
</div>
)
}
-47
View File
@@ -1,47 +0,0 @@
import { useEffect, useState } from 'react';
import type { MusicData } from '../utils/types';
export default function MusicWidget() {
const [ data, setData ] = useState<MusicData | null>(null);
const fetchMusicData = () => {
fetch("https://api.alexav.gg/v4/social/music", {
method: 'get'
})
.then(async (res) => {
if (res.ok) {
const data = await res.json()
setData(data.data.tracks[0]);
} else {
console.error("Failed to get music data!", res.status);
}
})
}
useEffect(() => {
fetchMusicData()
setInterval(() => {
fetchMusicData();
}, 60000)
}, [])
if (data) {
return (
<div className="bg-black p-2 text-white min-h-screen w-full justify-center flex items-center">
<div className="mx-auto text-center">
<img className="mx-auto mb-2" width="100" src={data.image.filter((v) => v.size === "large")[0]['#text']} />
<div className="text-2xl">
<h1>{data.name}</h1>
<p>{data.artist['#text']}</p>
</div>
</div>
</div>
)
} else {
return (
<div>
<p>Loading..</p>
</div>
)
}
}
-30
View File
@@ -1,30 +0,0 @@
import Layout from "../components/Layout";
export default function PrivacyPage() {
return (
<Layout>
<div className="my-6 text-left w-full lg:w-1/4 mx-auto">
<h1 className="text-2xl font-bold">Privacy</h1>
<h1>This site doesn't collect anything on you. No cookies (although tasty), no ominous advertisements, nothing.</h1>
<h1 className="my-2 font-bold text-2xl">Plausible</h1>
<h1>I use <a className="underline" href="https://plausible.io" target="_blank">Plausible analytics</a> to track traffic anonymously. Plausible;</h1>
<ul className="list-disc list-inside">
<li>does not collect personal identifying information</li>
<li className="underline"><a href="https://plausible.io/privacy-focused-web-analytics" target="_blank">is dedicated to privacy</a></li>
<li>compliant with the GDPR, CCPA and PECR data protection laws</li>
</ul>
<h1>I use a self-hosted instance in the US that doesn't use cookies.</h1>
<h1 className="my-2 font-bold text-2xl">Cloudflare</h1>
<h1>I use <a className="underline" href="https://pages.cloudflare.com" target="_blank">Cloudflare Pages</a> for this site. Most of my sites
are proxied through Cloudflare as well. You can view their privacy policy <a className="underline" href="https://cloudflare.com/privacy" target="_blank">here</a>.</h1>
<h1 className="my-2 font-bold text-2xl">Email</h1>
<h1>When you submit a contact request on my page, it is sent to Discord via a webhook & my own API.</h1>
<h1>This will be shown to me in an embed. I will never receive or process anything but what you provide.</h1>
<h1>You can learn more about Discord's dedication to privacy <a className='underline' href="https://discord.com/privacy" target="_blank">here</a>.</h1>
</div>
</Layout>
)
}