From 2710b278a3fb9a1f591b7d9bac00984128f7eb56 Mon Sep 17 00:00:00 2001 From: Aidan Date: Fri, 28 Mar 2025 00:03:47 -0400 Subject: [PATCH] clean: rf to find things easier --- app/about/page.tsx | 93 +++++++++++++++++++++++++++++++- app/contact/page.tsx | 68 +++++++++++++++++++++++- app/domains/page.tsx | 36 ++++++++++++- app/manifesto/page.tsx | 64 ++++++++++++++++++++++- app/page.tsx | 72 +++++++++++++++++++++++-- components/objects/Button.tsx | 10 ++-- components/pages/About.tsx | 96 ---------------------------------- components/pages/Contact.tsx | 71 ------------------------- components/pages/Domains.tsx | 39 -------------- components/pages/Home.tsx | 71 ------------------------- components/pages/Manifesto.tsx | 67 ------------------------ 11 files changed, 326 insertions(+), 361 deletions(-) delete mode 100644 components/pages/About.tsx delete mode 100644 components/pages/Contact.tsx delete mode 100644 components/pages/Domains.tsx delete mode 100644 components/pages/Home.tsx delete mode 100644 components/pages/Manifesto.tsx diff --git a/app/about/page.tsx b/app/about/page.tsx index 56150d8..b8e7c76 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -1,13 +1,102 @@ +"use client" + import Header from '@/components/Header' -import AboutPg from '@/components/pages/About' import Footer from '@/components/Footer' +import Link from '@/components/objects/Link' +import Button from '@/components/objects/Button' +import FeaturedRepos from '@/components/widgets/FeaturedRepos' +import Image from 'next/image' +import { useState } from 'react' +import { User, Smartphone } from 'lucide-react' export default function About() { + const [imageError, setImageError] = useState(false) + 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.

+ +
+
diff --git a/app/contact/page.tsx b/app/contact/page.tsx index cd587c4..da17850 100644 --- a/app/contact/page.tsx +++ b/app/contact/page.tsx @@ -1,13 +1,77 @@ +"use client" + import Header from '@/components/Header' -import ContactPg from '@/components/pages/Contact' import Footer from '@/components/Footer' +import ContactButton from '@/components/objects/ContactButton' +import { Phone } from 'lucide-react' +import { useTranslation } from 'react-i18next' +import { faPhone, faEnvelope } from '@fortawesome/free-solid-svg-icons' +import { faGithub, faTelegram, faBluesky } from '@fortawesome/free-brands-svg-icons' export default function Contact() { + const { t } = useTranslation(); + + const sections = [ + { + title: t('contact.sections.busyPerson.title'), + texts: t('contact.sections.busyPerson.texts', { returnObjects: true }) as string[] + }, + { + title: t('contact.sections.callingNote.title'), + texts: t('contact.sections.callingNote.texts', { returnObjects: true }) as string[] + } + ]; + + const contactButtonLabels = [ + t('contact.buttons.github'), + t('contact.buttons.telegram'), + t('contact.buttons.bluesky'), + t('contact.buttons.phone'), + t('contact.buttons.email') + ]; + + const contactButtonHrefs = [ + "https://github.com/ihatenodejs", + "https://t.me/p0ntu5", + "https://bsky.app/profile/aidxn.cc", + "tel:+18024169516", + "mailto:aidan@p0ntus.com" + ]; + + const contactButtonIcons = [faGithub, faTelegram, faBluesky, faPhone, faEnvelope]; + return (
- +
+
+ +
+

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

+
+ {contactButtonLabels.map((label, index) => ( + + ))} +
+ + {sections.map((section, sectionIndex) => ( +
+

{section.title}

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

{text}

+ ))} +
+ ))} +
diff --git a/app/domains/page.tsx b/app/domains/page.tsx index 970deaa..63bb165 100644 --- a/app/domains/page.tsx +++ b/app/domains/page.tsx @@ -1,13 +1,45 @@ import Header from '@/components/Header' -import DomainsPg from '@/components/pages/Domains' import Footer from '@/components/Footer' +import { Link } from "lucide-react" +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" +import { faBan } from "@fortawesome/free-solid-svg-icons" +import domains from "@/public/data/domains.json" export default function Domains() { return (
- +
+
+ +
+

+ My Domains +

+
+ + + These domains are not for sale. + + + All requests to buy them will be declined. + +
+
+ {domains.map(domain => ( +
+

+ {domain.domain} +

+

{domain.usage}

+
+ ))} +
+
diff --git a/app/manifesto/page.tsx b/app/manifesto/page.tsx index 117ef7a..ab93ff3 100644 --- a/app/manifesto/page.tsx +++ b/app/manifesto/page.tsx @@ -1,13 +1,73 @@ import Header from '@/components/Header' -import ManifestoPg from '@/components/pages/Manifesto' import Footer from '@/components/Footer' +import { BookOpen } from 'lucide-react' export default function Manifesto() { return (
- +
+
+ +
+

+ Internet Manifesto +

+
+

+ 1. Empathy and Understanding +

+

+ We live in a distant world. People I meet are from all over, which can be hard to understand for others. I aim to utilize my ability to connect by understanding and getting interested in people's lives. I pledge to: +

+
    +
  • Listen deeply and genuinely
  • +
  • Suspend judgment and seek to understand
  • +
  • Recognize the humanity in every digital interaction
  • +
+

+ 2. Unconditional Sharing! +

+

+ Information should be free and accessible to all. I will: +

+
    +
  • Make all of my work free and accessible to all
  • +
  • Create and share content for others' benefit
  • +
  • Support open-source principles
  • +
  • Create extensive documentation on all of my projects
  • +
+

+ 3. Genuine Human Connection +

+

+ I aim to create a genuine human connection with all people I meet, regardless of who or where they are from. +

+

+ 4. Privacy & Self-Hosted Services +

+

+ In terms of my personal (some public) services, I commit to never selling, viewing or sharing personal information with third parties or myself. I will: +

+
    +
  • Respect user data as a fundamental human right
  • +
  • Not implement tracking and/or monetization in my services
  • +
      +
    • I pledge to not implement tracking or systems in which a user can be individualized or categorized
    • +
    +
  • Ensure user data is never used for profit
  • +
  • Focus my services on being free and open
  • +
  • Suggest and support privacy-focused software
  • +
+

+ I Commit +

+

+ I am not perfect, that's for sure, but I am committed. I promise to continuously learn, grow, and adapt to my environment, goals, purpose, and the people around me. +

+
+
diff --git a/app/page.tsx b/app/page.tsx index 737c0b7..846fcb5 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,13 +1,77 @@ -import Header from '@/components/Header'; -import HomePg from '@/components/pages/Home'; -import Footer from '@/components/Footer'; +"use client" + +import Header from '@/components/Header' +import Footer from '@/components/Footer' +import Button from '@/components/objects/Button' +import Link from '@/components/objects/Link' +import LastPlayed from '@/components/widgets/LastPlayed' +import Image from 'next/image' +import { Mail } from 'lucide-react' +import { useTranslation } from 'react-i18next' export default function Home() { + const { t } = useTranslation() + + const mainStrings: string[][] = [ + t('home.whoAmI', { returnObjects: true }) as string[], + t('home.whatIDo', { returnObjects: true }) as string[], + t('home.whereYouAre', { returnObjects: true }) as string[] + ] + + const mainSections = [ + t('home.sections.whoIAm'), + t('home.sections.whatIDo'), + t('home.sections.whereYouAre') + ] + return (
- +
+
+ My Profile Picture +

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

+

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

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

{section}

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

+ {text} + {secIndex === 2 && index === 1 && ( + <> + + CVE-2025-29927 + + . + + )} +

+ ))} +
+ ))} + +
+

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

+

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

+
+
diff --git a/components/objects/Button.tsx b/components/objects/Button.tsx index e6dedbf..b721325 100644 --- a/components/objects/Button.tsx +++ b/components/objects/Button.tsx @@ -1,13 +1,13 @@ -import React from 'react'; -import Link from 'next/link'; +import React from 'react' +import Link from 'next/link' -interface MusicInfoButtonProps { +interface ButtonProps { href: string; label: string; icon?: React.ElementType; } -const MusicInfoButton: React.FC = ({ href, label, icon }) => { +const Button: React.FC = ({ href, label, icon }) => { return ( = ({ href, label, icon }) ); }; -export default MusicInfoButton; \ No newline at end of file +export default Button \ No newline at end of file diff --git a/components/pages/About.tsx b/components/pages/About.tsx deleted file mode 100644 index 52ccda0..0000000 --- a/components/pages/About.tsx +++ /dev/null @@ -1,96 +0,0 @@ -"use client" - -import { User, Smartphone } from 'lucide-react' -import FeaturedRepos from '../widgets/FeaturedRepos' -import Image from 'next/image' -import { useState } from 'react' -import Link from '@/components/objects/Link' -import Button from '../objects/Button' - -export default function About() { - const [imageError, setImageError] = useState(false); - - 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.

- -
-
- ) -} \ No newline at end of file diff --git a/components/pages/Contact.tsx b/components/pages/Contact.tsx deleted file mode 100644 index dc90868..0000000 --- a/components/pages/Contact.tsx +++ /dev/null @@ -1,71 +0,0 @@ -"use client" - -import { faPhone, faEnvelope } from '@fortawesome/free-solid-svg-icons' -import { faGithub, faTelegram, faBluesky } from '@fortawesome/free-brands-svg-icons' -import { Phone } from 'lucide-react' -import ContactButton from '../objects/ContactButton' -import { useTranslation } from 'react-i18next' - -export default function Contact() { - const { t } = useTranslation(); - - const sections = [ - { - title: t('contact.sections.busyPerson.title'), - texts: t('contact.sections.busyPerson.texts', { returnObjects: true }) as string[] - }, - { - title: t('contact.sections.callingNote.title'), - texts: t('contact.sections.callingNote.texts', { returnObjects: true }) as string[] - } - ]; - - const contactButtonLabels = [ - t('contact.buttons.github'), - t('contact.buttons.telegram'), - t('contact.buttons.bluesky'), - t('contact.buttons.phone'), - t('contact.buttons.email') - ]; - - const contactButtonHrefs = [ - "https://github.com/ihatenodejs", - "https://t.me/p0ntu5", - "https://bsky.app/profile/aidxn.cc", - "tel:+18024169516", - "mailto:aidan@p0ntus.com" - ]; - - const contactButtonIcons = [faGithub, faTelegram, faBluesky, faPhone, faEnvelope]; - - return ( -
-
- -
-

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

-
- {contactButtonLabels.map((label, index) => ( - - ))} -
- - {sections.map((section, sectionIndex) => ( -
-

{section.title}

- {section.texts.map((text, index) => ( -

{text}

- ))} -
- ))} -
- ) -} diff --git a/components/pages/Domains.tsx b/components/pages/Domains.tsx deleted file mode 100644 index 66d5e1f..0000000 --- a/components/pages/Domains.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { Link } from "lucide-react" -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" -import { faBan } from "@fortawesome/free-solid-svg-icons" -import domains from "@/public/data/domains.json" - -export default function About() { - return ( -
-
- -
-

- My Domains -

-
- - - These domains are not for sale. - - - All requests to buy them will be declined. - -
-
- {domains.map(domain => ( -
-

- {domain.domain} -

-

{domain.usage}

-
- ))} -
-
- ) -} \ No newline at end of file diff --git a/components/pages/Home.tsx b/components/pages/Home.tsx deleted file mode 100644 index 19b8ca0..0000000 --- a/components/pages/Home.tsx +++ /dev/null @@ -1,71 +0,0 @@ -"use client" - -import Image from 'next/image' -import Button from '../objects/Button' -import LastPlayed from '@/components/widgets/LastPlayed' -import { useTranslation } from 'react-i18next' -import Link from '@/components/objects/Link' -import { Mail } from 'lucide-react' - -export default function Home() { - const { t } = useTranslation(); - - const mainStrings: string[][] = [ - t('home.whoAmI', { returnObjects: true }) as string[], - t('home.whatIDo', { returnObjects: true }) as string[], - t('home.whereYouAre', { returnObjects: true }) as string[] - ]; - - const mainSections = [ - t('home.sections.whoIAm'), - t('home.sections.whatIDo'), - t('home.sections.whereYouAre') - ]; - - return ( -
-
- My Profile Picture -

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

-

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

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

{section}

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

- {text} - {secIndex === 2 && index === 1 && ( - <> - - CVE-2025-29927 - - . - - )} -

- ))} -
- ))} - -
-

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

-

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

-
-
- ) -} diff --git a/components/pages/Manifesto.tsx b/components/pages/Manifesto.tsx deleted file mode 100644 index 9681089..0000000 --- a/components/pages/Manifesto.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { BookOpen } from 'lucide-react' - -export default function About() { - return ( -
-
- -
-

- Internet Manifesto -

-
-

- 1. Empathy and Understanding -

-

- We live in a distant world. People I meet are from all over, which can be hard to understand for others. I aim to utilize my ability to connect by understanding and getting interested in people's lives. I pledge to: -

-
    -
  • Listen deeply and genuinely
  • -
  • Suspend judgment and seek to understand
  • -
  • Recognize the humanity in every digital interaction
  • -
-

- 2. Unconditional Sharing! -

-

- Information should be free and accessible to all. I will: -

-
    -
  • Make all of my work free and accessible to all
  • -
  • Create and share content for others' benefit
  • -
  • Support open-source principles
  • -
  • Create extensive documentation on all of my projects
  • -
-

- 3. Genuine Human Connection -

-

- I aim to create a genuine human connection with all people I meet, regardless of who or where they are from. -

-

- 4. Privacy & Self-Hosted Services -

-

- In terms of my personal (some public) services, I commit to never selling, viewing or sharing personal information with third parties or myself. I will: -

-
    -
  • Respect user data as a fundamental human right
  • -
  • Not implement tracking and/or monetization in my services
  • -
      -
    • I pledge to not implement tracking or systems in which a user can be individualized or categorized
    • -
    -
  • Ensure user data is never used for profit
  • -
  • Focus my services on being free and open
  • -
  • Suggest and support privacy-focused software
  • -
-

- I Commit -

-

- I am not perfect, that's for sure, but I am committed. I promise to continuously learn, grow, and adapt to my environment, goals, purpose, and the people around me. -

-
-
- ) -} \ No newline at end of file