clean: rf to find things easier

This commit is contained in:
Aidan 2025-03-28 00:03:47 -04:00
parent 3cf2b0f4cd
commit 2710b278a3
11 changed files with 326 additions and 361 deletions

View File

@ -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 (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-12">
<AboutPg />
<div className="max-w-2xl mx-auto text-center">
<div className='mb-6 flex justify-center'>
<User size={60} />
</div>
<h1 className="text-4xl font-bold my-2 text-center text-gray-200" style={{ textShadow: '0 0 10px rgba(255, 255, 255, 0.5)' }}>
About Me
</h1>
<div className="px-6 pt-6">
<p className="text-gray-300 mb-4">
Hey there! I&apos;m Aidan, a web developer and student, and this is my website. I&apos;m passionate about web development (although I&apos;m not great with design), especially with Next.js and APIs! I enjoy working with both backend and frontend.
</p>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">Projects</h2>
<p className="text-gray-300 mb-4">
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.
</p>
<p className="text-gray-300 mb-4">
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 <Link href="https://librecloud.cc">LibreCloud</Link>, a free service provider for individuals.
</p>
<p className="text-gray-300 mb-4">
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.
</p>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">Hobbies</h2>
<p className="text-gray-300 mb-4">
When I&apos;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.
</p>
<p className="text-gray-300 mb-4">
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&apos;s constant need for compiling updates.
</p>
<p className="text-gray-300 mb-4">
I am almost always active on <Link href="https://git.pontusmail.org/">my Gitea instance</Link> 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&apos;re currently on is free and open source. It&apos;s even under the public domain!
</p>
<p className="text-gray-300 mb-4">
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&apos;s back on a tile floor.
</p>
</div>
<div className="mt-12">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">Devices</h2>
<p className="text-gray-300 mb-4">You can learn more about the devices I use daily with the pages below:</p>
<Button
href="/phone"
label="My Phone"
icon={Smartphone}
/>
</div>
<div className="mt-12">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">My Gitea/GitHub Contributions</h2>
<p className="text-gray-300 mb-4">Most of my repositories have migrated to <Link href="https://git.pontusmail.org/">LibreCloud Git</Link>. My username is <Link href="https://git.pontusmail.org/aidan/">aidan</Link>.</p>
<p className="text-gray-300 mb-4">You can find me on GitHub as <Link href="https://github.com/ihatenodejs/">ihatenodejs</Link>.</p>
{!imageError && (
<div className="flex flex-col md:flex-row justify-center gap-4">
<Image
src="https://github-readme-stats.vercel.app/api?username=ihatenodejs&theme=dark&show_icons=true&hide_border=true&count_private=true"
alt="ihatenodejs's Stats"
width={500}
height={200}
className="w-full md:w-1/2"
onError={() => setImageError(true)}
loading="eager"
priority
unoptimized
/>
<Image
src="https://github-readme-stats.vercel.app/api/top-langs/?username=ihatenodejs&theme=dark&show_icons=true&hide_border=true&layout=compact"
alt="ihatenodejs's Top Languages"
width={500}
height={200}
className="w-full md:w-1/3"
onError={() => setImageError(true)}
loading="eager"
priority
unoptimized
/>
</div>
)}
</div>
<div className="mt-12">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">Featured Projects</h2>
<p className="text-gray-300 mb-6">Here&apos;s just four of my top projects. Star and fork counts are manually updated and count both Gitea and GitHub.</p>
<FeaturedRepos />
</div>
</div>
</main>
<Footer />
</div>

View File

@ -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 (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-12">
<ContactPg />
<div className="max-w-2xl mx-auto text-center">
<div className='mb-6 flex justify-center'>
<Phone size={60} />
</div>
<h1 className="text-4xl font-bold my-2 text-center text-gray-200" style={{ textShadow: '0 0 10px rgba(255, 255, 255, 0.5)' }}>
{t('contact.title')}
</h1>
<div className="p-6 space-y-4">
{contactButtonLabels.map((label, index) => (
<ContactButton
key={index}
label={label}
href={contactButtonHrefs[index]}
icon={contactButtonIcons[index]}
className='mr-3'
/>
))}
</div>
{sections.map((section, sectionIndex) => (
<div key={sectionIndex}>
<h2 className="text-2xl font-semibold mb-4 text-gray-200 mt-10">{section.title}</h2>
{section.texts.map((text, index) => (
<p key={index} className="text-gray-300 mb-4">{text}</p>
))}
</div>
))}
</div>
</main>
<Footer />
</div>

View File

@ -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 (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-12">
<DomainsPg />
<div className="max-w-2xl mx-auto flex flex-col items-center text-center">
<div className="mb-6 flex justify-center">
<Link size={60} />
</div>
<h1
className="text-4xl font-bold my-2 text-gray-200"
style={{ textShadow: "0 0 10px rgba(255, 255, 255, 0.5)" }}
>
My Domains
</h1>
<div className="mb-4 p-4 pt-8 flex flex-col items-center space-y-2">
<FontAwesomeIcon icon={faBan} className="text-red-500 text-xl" />
<span className="text-red-500 font-medium text-center mt-1 mb-0">
These domains are not for sale.
</span>
<span className="text-red-500 font-medium text-center">
All requests to buy them will be declined.
</span>
</div>
<div className="p-6 pt-0 w-full">
{domains.map(domain => (
<div key={domain.id} className="mb-4">
<h2 className="text-2xl font-semibold text-gray-200">
{domain.domain}
</h2>
<p className="text-gray-300">{domain.usage}</p>
</div>
))}
</div>
</div>
</main>
<Footer />
</div>

View File

@ -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 (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-12">
<ManifestoPg />
<div className="max-w-2xl mx-auto text-center">
<div className='mb-6 flex justify-center'>
<BookOpen size={60} />
</div>
<h1 className="text-4xl font-bold my-2 text-center text-gray-200" style={{ textShadow: '0 0 10px rgba(255, 255, 255, 0.5)' }}>
Internet Manifesto
</h1>
<div className="px-6 pt-6">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">
1. Empathy and Understanding
</h2>
<p className="text-gray-300 mb-4">
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&apos;s lives. I pledge to:
</p>
<ul className="list-disc list-outside marker:text-gray-500 pl-6 space-y-2 text-left text-gray-300 mt-8 mb-4">
<li>Listen deeply and genuinely</li>
<li>Suspend judgment and seek to understand</li>
<li>Recognize the humanity in every digital interaction</li>
</ul>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">
2. Unconditional Sharing!
</h2>
<p className="text-gray-300 mb-4">
Information should be free and accessible to all. I will:
</p>
<ul className="list-disc list-outside marker:text-gray-500 pl-6 space-y-2 text-left text-gray-300 mt-8 mb-4">
<li>Make all of my work free and accessible to all</li>
<li>Create and share content for others&apos; benefit</li>
<li>Support open-source principles</li>
<li>Create extensive documentation on all of my projects</li>
</ul>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">
3. Genuine Human Connection
</h2>
<p className="text-gray-300 mb-4">
I aim to create a genuine human connection with all people I meet, regardless of who or where they are from.
</p>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">
4. Privacy & Self-Hosted Services
</h2>
<p className="text-gray-300 mb-4">
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:
</p>
<ul className="list-disc list-outside marker:text-gray-500 pl-6 space-y-2 text-left text-gray-300 mt-8 mb-4">
<li>Respect user data as a fundamental human right</li>
<li>Not implement tracking and/or monetization in my services</li>
<ul className="list-disc list-outside marker:text-gray-400 pl-6 mt-2 text-gray-300">
<li>I pledge to not implement tracking or systems in which a user can be individualized or categorized</li>
</ul>
<li>Ensure user data is never used for profit</li>
<li>Focus my services on being free and open</li>
<li>Suggest and support privacy-focused software</li>
</ul>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">
I Commit
</h2>
<p className="text-gray-300 mb-4">
I am not perfect, that&apos;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.
</p>
</div>
</div>
</main>
<Footer />
</div>

View File

@ -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 (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-12">
<HomePg />
<div className="max-w-2xl mx-auto">
<div className="mb-12 text-center">
<Image
src="/ihatenodejs.jpg"
alt="My Profile Picture"
width={150}
height={150}
className="rounded-full mx-auto mb-6 border-4 border-gray-700"
/>
<h1 className="text-4xl font-bold mb-2 text-gray-100 glow">{t('home.profile.name')}</h1>
<p className="text-gray-400 text-xl">{t('home.profile.description')}</p>
</div>
<LastPlayed />
{mainSections.map((section, secIndex) => (
<section key={secIndex} id="about" className="mb-12">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">{section}</h2>
{mainStrings[secIndex].map((text: string, index: number) => (
<p key={index} className="text-gray-300 leading-relaxed mt-2">
{text}
{secIndex === 2 && index === 1 && (
<>
<Link href="https://nvd.nist.gov/vuln/detail/CVE-2025-29927">
CVE-2025-29927
</Link>
.
</>
)}
</p>
))}
</section>
))}
<section id="contact">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">{t('home.contact.title')}</h2>
<p className="text-gray-300 mb-6">{t('home.contact.description')}</p>
<Button
href={'/contact'}
label={t('home.contact.button')}
icon={Mail}
/>
</section>
</div>
</main>
<Footer />
</div>

View File

@ -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<MusicInfoButtonProps> = ({ href, label, icon }) => {
const Button: React.FC<ButtonProps> = ({ href, label, icon }) => {
return (
<Link
href={href}
@ -19,4 +19,4 @@ const MusicInfoButton: React.FC<MusicInfoButtonProps> = ({ href, label, icon })
);
};
export default MusicInfoButton;
export default Button

View File

@ -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 (
<div className="max-w-2xl mx-auto text-center">
<div className='mb-6 flex justify-center'>
<User size={60} />
</div>
<h1 className="text-4xl font-bold my-2 text-center text-gray-200" style={{ textShadow: '0 0 10px rgba(255, 255, 255, 0.5)' }}>
About Me
</h1>
<div className="px-6 pt-6">
<p className="text-gray-300 mb-4">
Hey there! I&apos;m Aidan, a web developer and student, and this is my website. I&apos;m passionate about web development (although I&apos;m not great with design), especially with Next.js and APIs! I enjoy working with both backend and frontend.
</p>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">Projects</h2>
<p className="text-gray-300 mb-4">
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.
</p>
<p className="text-gray-300 mb-4">
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 <Link href="https://librecloud.cc">LibreCloud</Link>, a free service provider for individuals.
</p>
<p className="text-gray-300 mb-4">
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.
</p>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">Hobbies</h2>
<p className="text-gray-300 mb-4">
When I&apos;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.
</p>
<p className="text-gray-300 mb-4">
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&apos;s constant need for compiling updates.
</p>
<p className="text-gray-300 mb-4">
I am almost always active on <Link href="https://git.pontusmail.org/">my Gitea instance</Link> 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&apos;re currently on is free and open source. It&apos;s even under the public domain!
</p>
<p className="text-gray-300 mb-4">
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&apos;s back on a tile floor.
</p>
</div>
<div className="mt-12">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">Devices</h2>
<p className="text-gray-300 mb-4">You can learn more about the devices I use daily with the pages below:</p>
<Button
href="/phone"
label="My Phone"
icon={Smartphone}
/>
</div>
<div className="mt-12">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">My Gitea/GitHub Contributions</h2>
<p className="text-gray-300 mb-4">Most of my repositories have migrated to <Link href="https://git.pontusmail.org/">LibreCloud Git</Link>. My username is <Link href="https://git.pontusmail.org/aidan/">aidan</Link>.</p>
<p className="text-gray-300 mb-4">You can find me on GitHub as <Link href="https://github.com/ihatenodejs/">ihatenodejs</Link>.</p>
{!imageError && (
<div className="flex flex-col md:flex-row justify-center gap-4">
<Image
src="https://github-readme-stats.vercel.app/api?username=ihatenodejs&theme=dark&show_icons=true&hide_border=true&count_private=true"
alt="ihatenodejs's Stats"
width={500}
height={200}
className="w-full md:w-1/2"
onError={() => setImageError(true)}
loading="eager"
priority
unoptimized
/>
<Image
src="https://github-readme-stats.vercel.app/api/top-langs/?username=ihatenodejs&theme=dark&show_icons=true&hide_border=true&layout=compact"
alt="ihatenodejs's Top Languages"
width={500}
height={200}
className="w-full md:w-1/3"
onError={() => setImageError(true)}
loading="eager"
priority
unoptimized
/>
</div>
)}
</div>
<div className="mt-12">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">Featured Projects</h2>
<p className="text-gray-300 mb-6">Here&apos;s just four of my top projects. Star and fork counts are manually updated and count both Gitea and GitHub.</p>
<FeaturedRepos />
</div>
</div>
)
}

View File

@ -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 (
<div className="max-w-2xl mx-auto text-center">
<div className='mb-6 flex justify-center'>
<Phone size={60} />
</div>
<h1 className="text-4xl font-bold my-2 text-center text-gray-200" style={{ textShadow: '0 0 10px rgba(255, 255, 255, 0.5)' }}>
{t('contact.title')}
</h1>
<div className="p-6 space-y-4">
{contactButtonLabels.map((label, index) => (
<ContactButton
key={index}
label={label}
href={contactButtonHrefs[index]}
icon={contactButtonIcons[index]}
className='mr-3'
/>
))}
</div>
{sections.map((section, sectionIndex) => (
<div key={sectionIndex}>
<h2 className="text-2xl font-semibold mb-4 text-gray-200 mt-10">{section.title}</h2>
{section.texts.map((text, index) => (
<p key={index} className="text-gray-300 mb-4">{text}</p>
))}
</div>
))}
</div>
)
}

View File

@ -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 (
<div className="max-w-2xl mx-auto flex flex-col items-center text-center">
<div className="mb-6 flex justify-center">
<Link size={60} />
</div>
<h1
className="text-4xl font-bold my-2 text-gray-200"
style={{ textShadow: "0 0 10px rgba(255, 255, 255, 0.5)" }}
>
My Domains
</h1>
<div className="mb-4 p-4 pt-8 flex flex-col items-center space-y-2">
<FontAwesomeIcon icon={faBan} className="text-red-500 text-xl" />
<span className="text-red-500 font-medium text-center mt-1 mb-0">
These domains are not for sale.
</span>
<span className="text-red-500 font-medium text-center">
All requests to buy them will be declined.
</span>
</div>
<div className="p-6 pt-0 w-full">
{domains.map(domain => (
<div key={domain.id} className="mb-4">
<h2 className="text-2xl font-semibold text-gray-200">
{domain.domain}
</h2>
<p className="text-gray-300">{domain.usage}</p>
</div>
))}
</div>
</div>
)
}

View File

@ -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 (
<div className="max-w-2xl mx-auto">
<div className="mb-12 text-center">
<Image
src="/ihatenodejs.jpg"
alt="My Profile Picture"
width={150}
height={150}
className="rounded-full mx-auto mb-6 border-4 border-gray-700"
/>
<h1 className="text-4xl font-bold mb-2 text-gray-100 glow">{t('home.profile.name')}</h1>
<p className="text-gray-400 text-xl">{t('home.profile.description')}</p>
</div>
<LastPlayed />
{mainSections.map((section, secIndex) => (
<section key={secIndex} id="about" className="mb-12">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">{section}</h2>
{mainStrings[secIndex].map((text: string, index: number) => (
<p key={index} className="text-gray-300 leading-relaxed mt-2">
{text}
{secIndex === 2 && index === 1 && (
<>
<Link href="https://nvd.nist.gov/vuln/detail/CVE-2025-29927">
CVE-2025-29927
</Link>
.
</>
)}
</p>
))}
</section>
))}
<section id="contact">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">{t('home.contact.title')}</h2>
<p className="text-gray-300 mb-6">{t('home.contact.description')}</p>
<Button
href={'/contact'}
label={t('home.contact.button')}
icon={Mail}
/>
</section>
</div>
)
}

View File

@ -1,67 +0,0 @@
import { BookOpen } from 'lucide-react'
export default function About() {
return (
<div className="max-w-2xl mx-auto text-center">
<div className='mb-6 flex justify-center'>
<BookOpen size={60} />
</div>
<h1 className="text-4xl font-bold my-2 text-center text-gray-200" style={{ textShadow: '0 0 10px rgba(255, 255, 255, 0.5)' }}>
Internet Manifesto
</h1>
<div className="px-6 pt-6">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">
1. Empathy and Understanding
</h2>
<p className="text-gray-300 mb-4">
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&apos;s lives. I pledge to:
</p>
<ul className="list-disc list-outside marker:text-gray-500 pl-6 space-y-2 text-left text-gray-300 mt-8 mb-4">
<li>Listen deeply and genuinely</li>
<li>Suspend judgment and seek to understand</li>
<li>Recognize the humanity in every digital interaction</li>
</ul>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">
2. Unconditional Sharing!
</h2>
<p className="text-gray-300 mb-4">
Information should be free and accessible to all. I will:
</p>
<ul className="list-disc list-outside marker:text-gray-500 pl-6 space-y-2 text-left text-gray-300 mt-8 mb-4">
<li>Make all of my work free and accessible to all</li>
<li>Create and share content for others&apos; benefit</li>
<li>Support open-source principles</li>
<li>Create extensive documentation on all of my projects</li>
</ul>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">
3. Genuine Human Connection
</h2>
<p className="text-gray-300 mb-4">
I aim to create a genuine human connection with all people I meet, regardless of who or where they are from.
</p>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">
4. Privacy & Self-Hosted Services
</h2>
<p className="text-gray-300 mb-4">
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:
</p>
<ul className="list-disc list-outside marker:text-gray-500 pl-6 space-y-2 text-left text-gray-300 mt-8 mb-4">
<li>Respect user data as a fundamental human right</li>
<li>Not implement tracking and/or monetization in my services</li>
<ul className="list-disc list-outside marker:text-gray-400 pl-6 mt-2 text-gray-300">
<li>I pledge to not implement tracking or systems in which a user can be individualized or categorized</li>
</ul>
<li>Ensure user data is never used for profit</li>
<li>Focus my services on being free and open</li>
<li>Suggest and support privacy-focused software</li>
</ul>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">
I Commit
</h2>
<p className="text-gray-300 mb-4">
I am not perfect, that&apos;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.
</p>
</div>
</div>
)
}