diff --git a/app/about/page.tsx b/app/about/page.tsx index b8e7c76..f0b4fed 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -8,94 +8,178 @@ import FeaturedRepos from '@/components/widgets/FeaturedRepos' import Image from 'next/image' import { useState } from 'react' import { User, Smartphone } from 'lucide-react' +import { useTranslation } from 'react-i18next' +import { cn } from '@/lib/utils' export default function About() { + const { t } = useTranslation() const [imageError, setImageError] = useState(false) + const mainStrings: string[][] = [ + t('about.projects', { returnObjects: true }) as string[], + t('about.hobbies', { returnObjects: true }) as string[], + t('about.devices', { returnObjects: true }) as string[], + t('about.contributions', { returnObjects: true }) as string[], + t('about.featuredProjects', { returnObjects: true }) as string[] + ] + const mainSections = [ + t('about.sections.projects'), + t('about.sections.hobbies'), + t('about.sections.devices'), + t('about.sections.contributions'), + t('about.sections.featuredProjects') + ] return (
-
-
-
- -
-

- About Me -

-
-

- Hey there! I'm Aidan, a web developer and student, and this is my website. I'm passionate about web development (although I'm not great with design), especially with Next.js and APIs! I enjoy working with both backend and frontend. -

-

Projects

-

- I have worked on countless projects over the past five years, for the most part. I have been learning to program in Python since I was seven and have evolved from there. I got into web development due to my uncle, who taught my how to write my first lines of HTML. -

-

- Recently, I have been involved in developing several projects, especially with Node.js, my new favorite language as of a year ago. My biggest project is LibreCloud, a free service provider for individuals. -

-

- In terms of system administration, I have developed my skills over the past three years of learning Linux for fun. I currently operate three servers running in the cloud, which run out of Germany and the United States. -

-

Hobbies

-

- When I'm not programming, I can typically be found installing another Linux distro on my laptop or flashing a new ROM to my phone. I am also a passionate writer and I like to write creatively in my free time. -

-

- I consider maintaining my technology as a hobby as well, as I devote a lot of time to it. I currently run Gentoo Linux on my Thinkpad T470s, which does not use a single bin package. I am very proud of this laptop, despite it's constant need for compiling updates. -

-

- I am almost always active on my Gitea instance and GitHub and make daily contributions to several of my repositories. I am a big fan of open source software and public domain software (which most of my repos are licensed under). In fact, the website you're currently on is free and open source. It's even under the public domain! -

-

- My Google Pixel 7 Pro (cheetah) runs LineageOS 22.1, and has been one of my favorite additions to my life. It is proudly rooted with KernelSU-Next. It has suffered one drop to it's back on a tile floor. -

-
-
-

Devices

-

You can learn more about the devices I use daily with the pages below:

-
-
-

My Gitea/GitHub Contributions

-

Most of my repositories have migrated to LibreCloud Git. My username is aidan.

-

You can find me on GitHub as ihatenodejs.

- {!imageError && ( -
- ihatenodejs's Stats setImageError(true)} - loading="eager" - priority - unoptimized - /> - ihatenodejs's Top Languages setImageError(true)} - loading="eager" - priority - unoptimized - /> -
- )} -
-
-

Featured Projects

-

Here's just four of my top projects. Star and fork counts are manually updated and count both Gitea and GitHub.

- -
+
+
+ +
+

+ {t('about.title')} +

+ +
+ {mainStrings.map((section, index) => { + if (mainSections[index] === t('about.sections.featuredProjects')) { + return ( +
+

{mainSections[index]}

+ {section.map((text, index) => ( +

+ {text} +

+ ))} + +
+ ) + } else if (mainSections[index] === t('about.sections.contributions')) { + return ( +
+

{mainSections[index]}

+ {section.map((text, index) => ( +

+ {text.split(/(ihatenodejs|LibreCloud Git|aidan)/).map((part, i) => { + if (part === 'ihatenodejs') { + return GitHub + } + if (part === 'LibreCloud Git') { + return LibreCloud Git + } + if (part === 'aidan') { + return aidan + } + return part + })} +

+ ))} + {!imageError && ( +
+ ihatenodejs's Stats setImageError(true)} + loading="eager" + priority + unoptimized + /> + ihatenodejs's Top Languages setImageError(true)} + loading="eager" + priority + unoptimized + /> +
+ )} +
+ ) + } else if (mainSections[index] === t('about.sections.devices')) { + return ( +
+

{mainSections[index]}

+ {Object.entries(section).map(([key, value], index) => ( +
+

{key}

+ {(value as unknown as string[]).map((text: string, index: number) => ( +

+ {text.split(/(KernelSU-Next|LineageOS microG)/).map((part, i) => { + if (part === 'KernelSU-Next') { + return KernelSU-Next + } + if (part === 'LineageOS microG') { + return LineageOS microG + } + return part + })} +

+ ))} + {key === "Phone" && ( +
+ ))} +
+ ) + } else if (mainSections[index] === t('about.sections.hobbies')) { + return ( +
+

{mainSections[index]}

+ {section.map((text, index) => ( +

+ {text.split(/(my Gitea instance|my phone)/).map((part, i) => { + if (part === 'my Gitea instance') { + return my Gitea instance + } + if (part === 'my phone') { + return my phone + } + return part + })} +

+ ))} +
+ ) + } else if (mainSections[index] === t('about.sections.projects')) { + return ( +
+

{mainSections[index]}

+ {section.map((text, index) => ( +

+ {text.split(/(LibreCloud)/).map((part, i) => { + if (part === 'LibreCloud') { + return LibreCloud + } + return part + })} +

+ ))} +
+ ) + } else { + return ( +
+

{mainSections[index]}

+ {section.map((text, index) => ( +

+ {text} +

+ ))} +
+ ) + } + })}
diff --git a/app/page.tsx b/app/page.tsx index 226f3c2..daa7162 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -36,19 +36,19 @@ export default function Home() { alt="My Profile Picture" width={150} height={150} - className="rounded-full mx-auto mb-6 border-4 border-gray-700" + className="rounded-full mx-auto mb-6 border-4 border-gray-700 hover:border-gray-600 transition-colors duration-300" />

{t('home.profile.name')}

{t('home.profile.description')}

-
+
{mainSections.map((section, secIndex) => ( -
+

{section}

{mainStrings[secIndex].map((text: string, index: number) => (

@@ -67,7 +67,7 @@ export default function Home() {

))} -
+

{t('home.contact.title')}

{t('home.contact.description')}

-
+

{t('home.donation.title')}

{t('home.donation.description')}

diff --git a/components/objects/Button.tsx b/components/objects/Button.tsx index 418e1a3..db6693d 100644 --- a/components/objects/Button.tsx +++ b/components/objects/Button.tsx @@ -1,24 +1,30 @@ import React from 'react' import Link from 'next/link' +import { cn } from '@/lib/utils' interface ButtonProps { - href: string; - label: string; - icon?: React.ElementType; - target?: string; + href: string + label: string + icon?: React.ElementType + target?: string + className?: string } -const Button: React.FC = ({ href, label, icon, target }) => { +const Button: React.FC = ({ href, label, icon, target, className }) => { return ( {icon && React.createElement(icon, { size: 20, className: "mr-2" })} {label} - ); -}; + ) +} export default Button \ No newline at end of file diff --git a/components/widgets/FeaturedRepos.tsx b/components/widgets/FeaturedRepos.tsx index 18ca946..36e76ab 100644 --- a/components/widgets/FeaturedRepos.tsx +++ b/components/widgets/FeaturedRepos.tsx @@ -3,10 +3,11 @@ import { faGitAlt, faGithub } from '@fortawesome/free-brands-svg-icons' import { faStar, faCodeBranch } from '@fortawesome/free-solid-svg-icons' import featuredProjects from '@/public/data/featured.json' import Link from 'next/link' +import { cn } from '@/lib/utils' -export default function GitHubFeatured() { +export default function GitHubFeatured({ className }: { className?: string }) { return ( -
+
{featuredProjects.map((project) => (
diff --git a/public/locales/en-US.json b/public/locales/en-US.json index 3f99785..4ce5aab 100644 --- a/public/locales/en-US.json +++ b/public/locales/en-US.json @@ -76,5 +76,43 @@ "phone": "(802) 416-9516", "email": "aidan@p0ntus.com" } + }, + "about": { + "title": "About Me", + "description": "Hey there! My name is Aidan, and I'm a systems administrator, full-stack developer, and student from the United States. I primarily work with Linux, Docker, Next.js, and Node.js.", + "sections": { + "projects": "Projects", + "hobbies": "Hobbies", + "devices": "Devices", + "contributions": "Contributions", + "featuredProjects": "Featured Projects" + }, + "projects": [ + "I have worked on countless projects over the past five years, for the most part. I have been learning to program in Python since I was seven and have evolved from there. I got into web development due to my uncle, who taught my how to write my first lines of HTML.", + "Recently, I have been involved in developing several projects, especially with Node.js, my new favorite language as of a year ago. My biggest project is LibreCloud, a free service provider for individuals.", + "In terms of system administration, I have developed my skills over the past three years of learning Linux for fun. I currently operate three servers running in the cloud, which run out of Germany and the United States." + ], + "hobbies": [ + "When I'm not programming, I can typically be found installing another Linux distro on my laptop or flashing a new ROM to my phone. I am also a passionate writer and I like to write creatively in my free time.", + "I consider maintaining my technology as a hobby as well, as I devote a lot of time to it. I currently run Gentoo Linux on my Thinkpad T470s, which does not use a single bin package. I am very proud of this laptop, despite it's constant need for compiling updates.", + "I am almost always active on my Gitea instance and GitHub and make daily contributions to several of my repositories. I am a big fan of open source software and public domain software (which most of my repos are licensed under). In fact, the website you're currently on is free and open source. It's even under the public domain!", + "My Google Pixel 7 Pro (cheetah) runs LineageOS 22.1, and has been one of my favorite additions to my life. It is proudly rooted with KernelSU-Next. It has suffered one drop to it's back on a tile floor." + ], + "devices": { + "Phone": [ + "I use a Google Pixel 7 Pro (cheetah) as my daily driver. It runs LineageOS microG and is proudly rooted with KernelSU-Next.", + "It's back is shattered and missing volume buttons, but it continues to thrive and survive as my daily driver." + ], + "Laptop": [ + "I use a Lenovo Thinkpad T470s running Arch Linux. I've had it for about half a year now, and it's been a great experience. I proudly use X11 and LXDE, with some Xfce backend components to make management easier." + ] + }, + "contributions": [ + "Most of my repositories have migrated to LibreCloud Git. My username is aidan.", + "You can find me on GitHub as ihatenodejs." + ], + "featuredProjects": [ + "Here's just four of my top projects. Star and fork counts are manually updated and count both Gitea and GitHub." + ] } } \ No newline at end of file