bug fixes, cleanup unmaintained pages, content changes, design improvements
Some checks failed
Run ESLint / Run ESLint (push) Has been cancelled
Push to Docker Hub / Push Docker image to Docker Hub (push) Has been cancelled

This commit is contained in:
Aidan 2025-07-08 02:21:27 -04:00
parent 1e44e329ba
commit db86ce3277
21 changed files with 614 additions and 714 deletions

View file

@ -33,12 +33,12 @@ export default function About() {
<div className="min-h-screen flex flex-col">
<Header />
<main className="text-center py-12">
<div className='mb-6 flex justify-center'>
<div className='flex flex-col items-center justify-center gap-6 mb-6'>
<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)' }}>
{t('about.title')}
</h1>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 p-4">
{mainStrings.map((section, index) => {
@ -60,15 +60,15 @@ export default function About() {
<h2 className="text-2xl font-semibold mb-4 text-gray-200">{mainSections[index]}</h2>
{section.map((text, index) => (
<p key={index} className="text-gray-300 leading-relaxed mt-2">
{text.split(/(ihatenodejs|LibreCloud Git|aidan)/).map((part, i) => {
{text.split(/(ihatenodejs|p0ntus git|aidan)/).map((part, i) => {
if (part === 'ihatenodejs') {
return <Link key={i} href="https://github.com/ihatenodejs/">GitHub</Link>
return <Link key={i} href="https://github.com/ihatenodejs/">ihatenodejs</Link>
}
if (part === 'LibreCloud Git') {
return <Link key={i} href="https://git.pontusmail.org/">LibreCloud Git</Link>
if (part === 'p0ntus git') {
return <Link key={i} href="https://git.p0ntus.com/">p0ntus git</Link>
}
if (part === 'aidan') {
return <Link key={i} href="https://git.pontusmail.org/aidan/">aidan</Link>
return <Link key={i} href="https://git.p0ntus.com/aidan/">aidan</Link>
}
return part
})}
@ -106,27 +106,42 @@ export default function About() {
<h2 className="text-2xl font-semibold mb-4 text-gray-200">{mainSections[index]}</h2>
{Object.entries(section).map(([key, value], index) => (
<div key={index}>
<h3 className={cn("text-xl font-semibold mb-2 text-gray-200", key === "Laptop" && "mt-4")}>{key}</h3>
<h3 className={cn("text-xl font-semibold mb-2 text-gray-200", key === "Laptops" && "mt-4")}>{key}</h3>
{(value as unknown as string[]).map((text: string, index: number) => (
<p key={index} className="text-gray-300 leading-relaxed mt-2">
{text.split(/(KernelSU-Next|LineageOS microG)/).map((part, i) => {
{text.split(/(KernelSU-Next|LineageOS 22.2|Android 16|NixOS|Xubuntu)/).map((part, i) => {
if (part === 'KernelSU-Next') {
return <Link key={i} href="https://github.com/KernelSU-Next/KernelSU-Next">KernelSU-Next</Link>
}
if (part === 'LineageOS microG') {
return <Link key={i} href="https://lineage.microg.org/">LineageOS microG</Link>
if (part === 'LineageOS 22.2') {
return <Link key={i} href="https://wiki.lineageos.org/devices/bonito/">LineageOS 22.2</Link>
}
if (part === 'Android 16') {
return <Link key={i} href="https://developer.android.com/about/versions/16/get">Android 16</Link>
}
if (part === 'NixOS') {
return <Link key={i} href="https://nixos.org/">NixOS</Link>
}
if (part === 'Xubuntu') {
return <Link key={i} href="https://xubuntu.org/">Xubuntu</Link>
}
return part
})}
</p>
))}
{key === "Phone" && (
{key === "Mobile Devices" && (
<div className="flex flex-row justify-center gap-4 mt-4">
<Button
href="/phone"
label="My Phone"
href="/device/cheetah"
label="Pixel 7 Pro"
icon={Smartphone}
className="mt-4"
/>
<Button
href="/device/bonito"
label="Pixel 3a XL"
icon={Smartphone}
/>
</div>
)}
</div>
))}
@ -138,12 +153,18 @@ export default function About() {
<h2 className="text-2xl font-semibold mb-4 text-gray-200">{mainSections[index]}</h2>
{section.map((text, index) => (
<p key={index} className="text-gray-300 leading-relaxed mt-2">
{text.split(/(my Gitea instance|my phone)/).map((part, i) => {
if (part === 'my Gitea instance') {
return <Link key={i} href="https://git.pontusmail.org/">my Gitea instance</Link>
{text.split(/(my Forgejo server|my phone|AfC|OnlyNano)/).map((part, i) => {
if (part === 'my Forgejo server') {
return <Link key={i} href="https://git.p0ntus.com/">my Forgejo server</Link>
}
if (part === 'my phone') {
return <Link key={i} href="/phone">my phone</Link>
return <Link key={i} href="/device/cheetah">my phone</Link>
}
if (part === 'AfC') {
return <Link key={i} href="https://en.wikipedia.org/wiki/Wikipedia:WikiProject_Articles_for_creation">AfC</Link>
}
if (part === 'OnlyNano') {
return <Link key={i} href="https://en.wikipedia.org/wiki/User:OnlyNano">OnlyNano</Link>
}
return part
})}
@ -157,9 +178,21 @@ export default function About() {
<h2 className="text-2xl font-semibold mb-4 text-gray-200">{mainSections[index]}</h2>
{section.map((text, index) => (
<p key={index} className="text-gray-300 leading-relaxed mt-2">
{text.split(/(LibreCloud)/).map((part, i) => {
if (part === 'LibreCloud') {
return <Link key={i} href="https://librecloud.cc/">LibreCloud</Link>
{text.split(/(p0ntus|PontusHub|ABOCN|Kowalski|@KowalskiNodeBot)/).map((part, i) => {
if (part === 'p0ntus') {
return <Link key={i} href="https://p0ntus.com/">p0ntus</Link>
}
if (part === 'PontusHub') {
return <Link key={i} href="https://t.me/PontusHub">PontusHub</Link>
}
if (part === 'ABOCN') {
return <Link key={i} href="https://github.com/abocn">ABOCN</Link>
}
if (part === 'Kowalski') {
return <Link key={i} href="https://github.com/abocn/TelegramBot">Kowalski</Link>
}
if (part === '@KowalskiNodeBot') {
return <Link key={i} href="https://t.me/KowalskiNodeBot">@KowalskiNodeBot</Link>
}
return part
})}

200
app/device/bonito/page.tsx Normal file
View file

@ -0,0 +1,200 @@
import Header from "@/components/Header"
import Footer from "@/components/Footer"
import {
Cpu,
MemoryStick,
HardDrive,
Hash,
Hammer,
Music,
Folder,
Layers,
} from "lucide-react"
import { FaGoogle, FaYoutube } from "react-icons/fa"
import { VscTerminalLinux } from "react-icons/vsc"
import { MdOutlineAndroid } from "react-icons/md"
import { LuPackageOpen } from "react-icons/lu"
import { RiTelegram2Fill } from "react-icons/ri"
import Image from "next/image"
import Link from "@/components/objects/Link"
export default function Bonito() {
return (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow px-6 py-12 md:py-16">
<div className="max-w-7xl mx-auto">
<div className="flex flex-col lg:flex-row items-start gap-12 lg:gap-16">
<div className="w-full lg:w-1/3 flex justify-center">
<Image
src="/img/bonito.png"
alt="Google Pixel 3a XL (bonito)"
width={450}
height={450}
className="w-full max-w-md h-auto"
/>
</div>
<div className="w-full lg:w-2/3">
<div className="text-center lg:text-left mb-12">
<h1 className="text-4xl font-semibold mb-3 text-gray-200 flex items-center justify-center lg:justify-start">
<FaGoogle size={30} className="mr-2" />
Pixel 3a XL
</h1>
<h3 className="text-xl font-semibold mb-8 text-slate-500">bonito</h3>
</div>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-12 lg:gap-16">
<div className="space-y-8">
<div className="text-center lg:text-left">
<h1 className="text-3xl font-semibold mb-6 text-gray-200 flex items-center justify-center lg:justify-start">
<Cpu className="mr-2" />
Specs
</h1>
<div className="space-y-4">
<p className="flex items-center justify-center lg:justify-start">
<Cpu className="mr-3" size={20} />
<b className="mr-2">Chipset:</b> Qualcomm Snapdragon 670
</p>
<p className="flex items-center justify-center lg:justify-start">
<HardDrive className="mr-3" size={20} />
<b className="mr-2">Storage:</b> 64GB
</p>
<p className="flex items-center justify-center lg:justify-start">
<MemoryStick className="mr-3" size={20} />
<b className="mr-2">RAM:</b> 4GB
</p>
</div>
</div>
<div className="text-center lg:text-left">
<h1 className="text-3xl font-semibold mb-6 text-gray-200 flex items-center justify-center lg:justify-start">
<Hash className="mr-2" />
Modifications
</h1>
<div className="space-y-4">
<p className="flex items-center justify-center lg:justify-start">
<VscTerminalLinux className="mr-3" size={20} />
<b className="mr-2">Kernel Version:</b>
4.9.337
</p>
<p className="flex items-center justify-center lg:justify-start">
<MdOutlineAndroid className="mr-3" size={20} />
<b className="mr-2">ROM:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://wiki.lineageos.org/devices/bonito/"
>
LineageOS 22.2
</Link>
</p>
<p className="flex items-center justify-center lg:justify-start">
<Hammer className="mr-3" size={20} />
<b className="mr-2">Root:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/topjohnwu/Magisk"
>
Magisk
</Link>
</p>
</div>
</div>
</div>
<div className="space-y-8">
<div className="text-center lg:text-left">
<h1 className="text-3xl font-semibold mb-6 text-gray-200 flex items-center justify-center lg:justify-start">
<LuPackageOpen className="mr-2" />
Apps
</h1>
<div className="space-y-4">
<p className="flex items-center justify-center lg:justify-start">
<Music className="mr-3" size={20} />
<b className="mr-2">Music:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://powerampapp.com/"
>
Poweramp
</Link>
</p>
<p className="flex items-center justify-center lg:justify-start">
<Folder className="mr-3" size={20} />
<b className="mr-2">Files:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://mixplorer.com/"
>
MiXplorer Beta
</Link>
</p>
<p className="flex items-center justify-center lg:justify-start">
<RiTelegram2Fill className="mr-3" size={20} />
<b className="mr-2">Telegram Client:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://nekogram.app/"
>
Nekogram
</Link>
</p>
<p className="flex items-center justify-center lg:justify-start">
<FaYoutube className="mr-3" size={20} />
<b className="mr-2">YouTube:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/polymorphicshade/Tubular"
>
Tubular
</Link>
</p>
</div>
</div>
<div className="text-center lg:text-left">
<h1 className="text-3xl font-semibold mb-6 text-gray-200 flex items-center justify-center lg:justify-start">
<Layers className="mr-2" />
Modules
</h1>
<ul className="list-disc list-inside space-y-3">
<li>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/bindhosts/bindhosts"
>
bindhosts
</Link>
</li>
<li>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/Keinta15/Magisk-iOS-Emoji"
>
Magisk iOS Emoji
</Link>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
<Footer />
</div>
)
}

259
app/device/cheetah/page.tsx Normal file
View file

@ -0,0 +1,259 @@
import Header from "@/components/Header"
import Footer from "@/components/Footer"
import {
Cpu,
MemoryStick,
HardDrive,
Hash,
Hammer,
Music,
Folder,
Layers,
SquarePen
} from "lucide-react"
import { FaGoogle, FaYoutube } from "react-icons/fa"
import { VscTerminalLinux } from "react-icons/vsc"
import { MdOutlineAndroid } from "react-icons/md"
import { LuPackageOpen } from "react-icons/lu"
import { RiTelegram2Fill } from "react-icons/ri"
import Image from "next/image"
import Link from "@/components/objects/Link"
import { FaStarHalfStroke, FaStar } from "react-icons/fa6"
export default function Cheetah() {
return (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow px-6 py-12 md:py-16">
<div className="max-w-7xl mx-auto">
<div className="flex flex-col lg:flex-row items-start gap-12 lg:gap-16">
<div className="w-full lg:w-1/3 flex justify-center">
<Image
src="/img/cheetah.png"
alt="Google Pixel 7 Pro (cheetah)"
width={450}
height={450}
className="w-full max-w-md h-auto"
/>
</div>
<div className="w-full lg:w-2/3">
<div className="text-center lg:text-left mb-12">
<h1 className="text-4xl font-semibold mb-3 text-gray-200 flex items-center justify-center lg:justify-start">
<FaGoogle size={30} className="mr-2" />
Pixel 7 Pro
</h1>
<h3 className="text-xl font-semibold mb-8 text-slate-500">cheetah</h3>
</div>
<div className="grid grid-cols-1 lg:grid-cols-3 gap-12 lg:gap-16">
<div className="space-y-8">
<div className="text-center lg:text-left">
<h1 className="text-3xl font-semibold mb-6 text-gray-200 flex items-center justify-center lg:justify-start">
<Cpu className="mr-2" />
Specs
</h1>
<div className="space-y-4">
<p className="flex items-center justify-center lg:justify-start">
<Cpu className="mr-3" size={20} />
<b className="mr-2">CPU:</b> Google Tensor G2
</p>
<p className="flex items-center justify-center lg:justify-start">
<HardDrive className="mr-3" size={20} />
<b className="mr-2">Storage:</b> 128GB
</p>
<p className="flex items-center justify-center lg:justify-start">
<MemoryStick className="mr-3" size={20} />
<b className="mr-2">RAM:</b> 12GB
</p>
</div>
</div>
<div className="text-center lg:text-left">
<h1 className="text-3xl font-semibold mb-6 text-gray-200 flex items-center justify-center lg:justify-start">
<Hash className="mr-2" />
Modifications
</h1>
<div className="space-y-4">
<p className="flex items-center justify-center lg:justify-start">
<VscTerminalLinux className="mr-3" size={20} />
<b className="mr-2">Kernel:</b>
6.1.129-android14
</p>
<p className="flex items-center justify-center lg:justify-start">
<MdOutlineAndroid className="mr-3" size={20} />
<b className="mr-2">ROM:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://developer.android.com/about/versions/16/get-qpr"
>
Android 16 QPR1
</Link>
</p>
<p className="flex items-center justify-center lg:justify-start">
<Hammer className="mr-3" size={20} />
<b className="mr-2">Root:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/rifsxd/KernelSU-Next"
>
KernelSU-Next
</Link>
</p>
</div>
</div>
</div>
<div className="space-y-8">
<div className="text-center lg:text-left">
<h1 className="text-3xl font-semibold mb-6 text-gray-200 flex items-center justify-center lg:justify-start">
<LuPackageOpen className="mr-2" />
Apps
</h1>
<div className="space-y-4">
<p className="flex items-center justify-center lg:justify-start">
<Music className="mr-3" size={20} />
<b className="mr-2">Music:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://qobuz.com"
>
Qobuz
</Link>
</p>
<p className="flex items-center justify-center lg:justify-start">
<Folder className="mr-3" size={20} />
<b className="mr-2">Files:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://mixplorer.com/"
>
MiXplorer Beta
</Link>
</p>
<p className="flex items-center justify-center lg:justify-start">
<RiTelegram2Fill className="mr-3" size={20} />
<b className="mr-2">TG Client:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://t.me/AyuGramReleases"
>
AyuGram
</Link>
</p>
<p className="flex items-center justify-center lg:justify-start">
<FaYoutube className="mr-3" size={20} />
<b className="mr-2">YouTube:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/NoName-exe/revanced-extended"
>
ReVanced Extended
</Link>
</p>
</div>
</div>
<div className="text-center lg:text-left">
<h1 className="text-3xl font-semibold mb-6 text-gray-200 flex items-center justify-center lg:justify-start">
<Layers className="mr-2" />
Modules
</h1>
<ul className="list-disc list-inside space-y-3">
<li>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/5ec1cff/TrickyStore"
>
Tricky Store
</Link>
</li>
<li>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/dpejoh/yurikey"
>
Yurikey Manager
</Link>
</li>
<li>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/LSPosed/LSPosed.github.io/releases"
>
Shamiko
</Link>
</li>
<li>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/JingMatrix/LSPosed"
>
LSPosed JingMatrix
</Link>
</li>
<li>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/Dr-TSNG/ZygiskNext"
>
Zygisk Next
</Link>
</li>
</ul>
</div>
</div>
<div className="space-y-8">
<div className="text-center lg:text-left">
<h1 className="text-3xl font-semibold mb-6 text-gray-200 flex items-center justify-center lg:justify-start">
<SquarePen className="mr-2" />
Review
</h1>
<div className="space-y-4">
<p className="flex items-center justify-center lg:justify-start">
<b className="mr-2">Rating:</b>
<span className="flex items-center gap-1">
<FaStar size={15} /> <FaStar size={15} /> <FaStar size={15} /> <FaStar size={15} /> <FaStarHalfStroke size={15} />
</span>
</p>
<div className="space-y-4 text-sm lg:text-base">
<p>
Coming from a Galaxy A32 5G, the Pixel 7 Pro is a massive upgrade. The Tensor chip is highly performant, and with 12GB of RAM, the device is extremely snappy.
</p>
<p>
I have had some issues with battery, although this may be due to Play Integrity Fix, which is known to consume battery. However, the camera has been a massive improvement, and the photos it is capable of taking are amazing.
</p>
<p>
While the volume buttons did fall off, I do not discredit them for this, as Android makes it easy to have customizable on-screen volume buttons, something iPhones do not have.
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</main>
<Footer />
</div>
)
}

View file

@ -1,26 +0,0 @@
import Header from '@/components/Header'
import MusicWidget from '@/components/widgets/Music'
import MusicInfo from '@/components/objects/MusicInfo'
import Footer from '@/components/Footer'
import { Music as MusicNote } from "lucide-react";
export default function Music() {
return (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-12">
<div className='mb-6 flex justify-center'>
<MusicNote 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)' }}>
Music and Me
</h1>
<div className="flex justify-center max-w-2xl gap-16 mx-auto pt-8">
<MusicWidget />
<MusicInfo />
</div>
</main>
<Footer />
</div>
)
}

View file

@ -3,7 +3,6 @@
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/NowPlaying'
import Image from 'next/image'
import { CreditCard, Mail, PillBottle, Scale } from 'lucide-react'
@ -53,15 +52,6 @@ export default function Home() {
{mainStrings[secIndex].map((text: string, index: number) => (
<p key={index} className="text-gray-300 leading-relaxed mt-2">
{text}
{secIndex === 2 && index === 2 && (
<>
{' '}
<Link href="https://nvd.nist.gov/vuln/detail/CVE-2025-29927">
CVE-2025-29927
</Link>
.
</>
)}
</p>
))}
</section>
@ -80,7 +70,6 @@ export default function Home() {
<section id="donation" className="p-8 border-2 border-gray-700 rounded-lg hover:border-gray-600 transition-colors duration-300">
<h2 className="text-2xl font-semibold mb-4 text-gray-200">{t('home.donation.title')}</h2>
<p className="text-gray-300 mb-6">{t('home.donation.description')}</p>
<h4 className="text-lg font-semibold mb-2 text-gray-200">{t('home.donation.charities.title')}</h4>
<div className="grid grid-cols-1 md:grid-cols-2 md:text-sm gap-3">
<Button

View file

@ -1,257 +0,0 @@
import Header from "@/components/Header"
import Footer from "@/components/Footer"
import { Smartphone, Cpu, MemoryStick, HardDrive, Hash, Hammer, Music, Folder, Layers, SquarePen } from "lucide-react"
import { FaGoogle, FaYoutube } from "react-icons/fa"
import { VscTerminalLinux } from "react-icons/vsc"
import { MdOutlineAndroid } from "react-icons/md"
import { LuPackageOpen } from "react-icons/lu"
import { RiTelegram2Fill } from "react-icons/ri"
import Image from "next/image"
import Link from "@/components/objects/Link"
import { FaStarHalfStroke, FaStar } from "react-icons/fa6"
export default function About() {
return (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-8 md:py-12">
<div className="max-w-2xl mx-auto text-center">
<div className="mb-6 flex justify-center">
<Smartphone 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)" }}
>
My Phone
</h1>
</div>
<div className="px-6 pt-6">
<div className="flex flex-col lg:flex-row items-start gap-6 md:gap-8">
<div className="w-full max-w-sm mx-auto justify-start lg:justify-center lg:mx-0">
<Image
src="/img/cheetah.png"
alt="Google Pixel 7 Pro (cheetah)"
width={450}
height={450}
className="w-full h-auto"
/>
</div>
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6 md:gap-8">
<div className="w-full text-center lg:text-left">
<h1 className="text-4xl font-semibold mt-3 text-gray-200 flex items-center justify-center lg:justify-start">
<FaGoogle size={30} className="mr-2" />
Pixel 7 Pro
</h1>
<h3 className="text-xl font-semibold mb-4 text-slate-500">cheetah</h3>
<hr className="mb-6 lg:mb-0"/>
<h1 className="text-3xl font-semibold my-3 text-gray-200 flex items-center justify-center lg:justify-start">
<Cpu className="mr-2" />
Specifications
</h1>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<Cpu className="mr-2" size={20} />
<b className="mr-1">CPU:</b> Google Tensor G2
</p>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<HardDrive className="mr-2" size={20} />
<b className="mr-1">Storage:</b> 128GB
</p>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<MemoryStick className="mr-2" size={20} />
<b className="mr-1">RAM:</b> 12GB
</p>
<hr className="my-6 lg:mt-4 lg:mb-0" />
<h1 className="text-3xl font-semibold my-3 text-gray-200 flex items-center justify-center lg:justify-start">
<Hash className="mr-2" />
Modifications
</h1>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<VscTerminalLinux className="mr-2" size={20} />
<b className="mr-1">Kernel:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/WildPlusKernel/GKI_KernelSU_SUSFS/"
>
android13-5.10.WILD
</Link>
</p>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<MdOutlineAndroid className="mr-2" size={20} />
<b className="mr-1">ROM:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://axionaosp.github.io"
>
AxionAOSP v1.1
</Link>
</p>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<Hammer className="mr-2" size={20} />
<b className="mr-1">Root:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/rifsxd/KernelSU-Next"
>
KernelSU-Next
</Link>
</p>
</div>
<hr className="lg:hidden" />
<div className="w-full text-center lg:text-left lg:ml-8">
<h1 className="text-3xl font-semibold mb-3 text-gray-200 flex items-center justify-center lg:justify-start">
<LuPackageOpen className="mr-2" />
Apps
</h1>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<Music className="mr-2" size={20} />
<b className="mr-1">Music:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://qobuz.com"
>
Qobuz
</Link>
</p>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<Folder className="mr-2" size={20} />
<b className="mr-1">Files:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://mixplorer.com/"
>
MiXplorer Beta
</Link>
</p>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<RiTelegram2Fill className="mr-2" size={20} />
<b className="mr-1">Telegram:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/arslan4k1390/Cherrygram"
>
Cherrygram
</Link>
</p>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<FaYoutube className="mr-2" size={20} />
<b className="mr-1">YouTube:</b>
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/NoName-exe/revanced-extended"
>
ReVanced Extended
</Link>
</p>
<hr className="mt-8 mb-6 lg:my-4" />
<h1 className="text-3xl font-semibold mb-3 text-gray-200 flex items-center justify-center lg:justify-start">
<Layers className="mr-2" />
Modules
</h1>
<ul className="list-disc list-inside space-y-1">
<li className="mb-0.5">
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/chiteroman/PlayIntegrityFix"
>
Play Integrity Fix
</Link>
</li>
<li className="mb-0.5">
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/5ec1cff/TrickyStore"
>
Tricky Store
</Link>
</li>
<li className="mb-0.5">
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/LSPosed/LSPosed.github.io/releases"
>
Shamiko
</Link>
</li>
<li className="mb-0.5">
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/mywalkb/LSPosed_mod/releases"
>
LSPosed_mod
</Link>
</li>
<li className="mb-0.5">
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/Dr-TSNG/ZygiskNext"
>
Zygisk Next
</Link>
</li>
<li className="mb-0.5">
<Link
className="underline hover:glow transition-all"
target="_blank"
rel="noopener noreferrer"
href="https://github.com/sidex15/susfs4ksu-module"
>
SUSFS for KernelSU
</Link>
</li>
</ul>
</div>
<hr className="mt-2 lg:mt-0 lg:hidden" />
<div className="w-full lg:mt-0 text-center lg:text-left lg:ml-8">
<h1 className="text-3xl font-semibold mb-3 text-gray-200 flex items-center justify-center lg:justify-start">
<SquarePen className="mr-2" />
Review
</h1>
<p className="mb-1 flex items-center justify-center lg:justify-start">
<b className="mr-1">Rating:</b>
<FaStar size={15} /> <FaStar size={15} /> <FaStar size={15} /> <FaStar size={15} />{" "}
<FaStarHalfStroke size={15} />
</p>
<p className="max-w-sm mt-4 lg:text-sm">
Coming from a Galaxy A32 5G, the Pixel 7 Pro is a massive upgrade. The Tensor chip is highly performant, and with 12GB of RAM, the device is extremely snappy.
</p>
<p className="max-w-sm mt-4 lg:text-sm">
I have had some issues with battery, although this may be due to Play Integrity Fix, which is known to consume battery. However, the camera has been a massive improvement, and the photos it is capable of taking are amazing.
</p>
<p className="max-w-sm mt-4 lg:text-sm">
While the volume buttons did fall off, I do not discredit them for this, as Android makes it easy to have customizable on-screen volume buttons, something iPhones do not have.
</p>
</div>
</div>
</div>
</div>
</main>
<Footer />
</div>
)
}

View file

@ -1,15 +0,0 @@
import Header from '@/components/Header'
import WhatWasGoingOn from '@/components/pages/time-periods/early-summer-2024/WhatWasGoingOn'
import Footer from '@/components/Footer'
export default function EarlySummer2024() {
return (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-12">
<WhatWasGoingOn />
</main>
<Footer />
</div>
)
}

View file

@ -1,15 +0,0 @@
import Header from '@/components/Header'
import WhatWasGoingOn from '@/components/pages/time-periods/early-summer-2024/WhatWasGoingOn'
import Footer from '@/components/Footer'
export default function Music() {
return (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-12">
<WhatWasGoingOn />
</main>
<Footer />
</div>
)
}

View file

@ -1,15 +0,0 @@
import Header from '@/components/Header'
import WhatWasGoingOn from '@/components/pages/time-periods/late-summer-2024/WhatWasGoingOn'
import Footer from '@/components/Footer'
export default function LateSummer2024() {
return (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-12">
<WhatWasGoingOn />
</main>
<Footer />
</div>
)
}

View file

@ -1,15 +0,0 @@
import Header from '@/components/Header'
import WhatWasGoingOn from '@/components/pages/time-periods/late-summer-2024/WhatWasGoingOn'
import Footer from '@/components/Footer'
export default function Music() {
return (
<div className="min-h-screen flex flex-col">
<Header />
<main className="grow container mx-auto px-4 py-12">
<WhatWasGoingOn />
</main>
<Footer />
</div>
)
}

View file

@ -2,7 +2,18 @@
import React, { useState, useRef, useEffect } from 'react'
import Link from 'next/link'
import { House, Link as LinkIcon, User, Phone, BookOpen, Music, Rss, X, Menu, Globe, ChevronDown } from 'lucide-react'
import {
House,
Link as LinkIcon,
User,
Phone,
BookOpen,
Rss,
X,
Menu,
Globe,
ChevronDown
} from 'lucide-react'
import { useTranslation } from 'react-i18next'
interface NavItemProps {
@ -137,7 +148,6 @@ export default function Header() {
<NavItem href="/contact" icon={Phone}>Contact</NavItem>
<NavItem href="/domains" icon={LinkIcon}>Domains</NavItem>
<NavItem href="/manifesto" icon={BookOpen}>Manifesto</NavItem>
<NavItem href="/music" icon={Music}>Music</NavItem>
<NavItem href="https://disfunction.blog" icon={Rss}>Blog</NavItem>
<div className="lg:hidden">
<LanguageSelector />

View file

@ -1,31 +0,0 @@
import React from 'react';
import Button from './Button';
interface TimePeriod {
title: string;
slug: string;
}
const timePeriods: TimePeriod[] = [
{ title: 'Late Summer 2024', slug: 'late-summer-2024' },
{ title: 'Early Summer 2024', slug: 'early-summer-2024' },
];
const MusicInfo: React.FC = () => {
return (
<div>
{timePeriods.map((period) => (
<section key={period.slug} className="mb-12">
<h2 className="text-2xl font-semibold mb-4">{period.title}</h2>
<Button
href={`/time-periods/${period.slug}/what-was-going-on`}
label="WHAT WAS GOING ON"
/>
</section>
))}
</div>
);
};
export default MusicInfo;

View file

@ -1,14 +1,16 @@
"use client"
import {
SiNextdotjs,
SiLucide,
SiVercel,
SiCloudflarepages,
SiSimpleicons,
SiFontawesome,
SiShadcnui,
SiTailwindcss
} from "react-icons/si"
import Link from 'next/link'
import { useState, useEffect } from 'react'
export const footerMessages = [
[
@ -31,11 +33,6 @@ export const footerMessages = [
"https://vercel.com/font",
<SiVercel key="vercel" className="text-md mr-2" />
],
[
"Hosted by Cloudflare",
"https://workers.cloudflare.com/",
<SiCloudflarepages key="cloudflare" className="text-md mr-2" />
],
[
"Icons by Font Awesome",
"https://fontawesome.com/",
@ -54,11 +51,30 @@ export const footerMessages = [
]
export default function RandomFooterMsg() {
const randomIndex = Math.floor(Math.random() * footerMessages.length)
const [randomIndex, setRandomIndex] = useState(0)
const [isMounted, setIsMounted] = useState(false)
useEffect(() => {
setIsMounted(true)
setRandomIndex(Math.floor(Math.random() * footerMessages.length))
}, [])
if (!isMounted) {
const [message, url, icon] = footerMessages[0]
return (
<Link href={String(url)} target="_blank" rel="noopener noreferrer" className="hover:text-white transition-colors mb-2 sm:mb-0">
<div className="flex items-center justify-center">
{icon}
{message}
</div>
</Link>
)
}
const [message, url, icon] = footerMessages[randomIndex]
return (
<Link href={String(url)} target="_blank" rel="noopener noreferrer" className="hover:text-white transition-colors mb-2 sm:mb-0" suppressHydrationWarning>
<Link href={String(url)} target="_blank" rel="noopener noreferrer" className="hover:text-white transition-colors mb-2 sm:mb-0">
<div className="flex items-center justify-center">
{icon}
{message}

View file

@ -1,27 +0,0 @@
import React from 'react'
import BackButton from '@/components/objects/BackButton'
const WhatWasGoingOnLateSummer2024: React.FC = () => {
return (
<div className="max-w-2xl mx-auto text-center">
<h1 className="text-4xl font-bold my-2 text-center text-gray-200" style={{ textShadow: '0 0 10px rgba(255, 255, 255, 0.5)' }}>
What was going on during the start of summer 2024?
</h1>
<div className="px-6 pt-6">
<p className="text-gray-300 mb-4">
During Early Summer 2024, I was walking a ton in towns all across Massachusetts. During this time, I would listen to a <i>lot</i> of music. I regret not finding out about LastFM for so long... During this time, I was always happy, especially when I had music or a YouTube video playing. I would also call my friends often during this time.
</p>
<h2 className="text-2xl font-semibold mb-4 mt-12 text-gray-200">Context</h2>
<p className="text-gray-300 mb-4">
This summer was the one where I came back from my abusive treatment center. I was finally free from the place that had been holding me back for so long. So as you can imagine, I felt free as a bird.
</p>
<p className="text-gray-300 mb-4">
With this chance to explore, being in so many different towns, I really had a good time and made good memories, which I will not be writing about.
</p>
<BackButton href="/music" />
</div>
</div>
);
};
export default WhatWasGoingOnLateSummer2024;

View file

@ -1,26 +0,0 @@
import React from 'react'
import BackButton from '@/components/objects/BackButton'
const WhatWasGoingOnLateSummer2024: React.FC = () => {
return (
<div className="max-w-2xl mx-auto text-center">
<h1 className="text-4xl font-bold my-2 text-center text-gray-200" style={{ textShadow: '0 0 10px rgba(255, 255, 255, 0.5)' }}>
What was going on during the end of summer 2024?
</h1>
<div className="px-6 pt-6">
<p className="text-gray-300 mb-4">
During late summer 2024, my depression and the &quot;after effects&quot; of treatment really kicked in. I had quit going to my therapist as I didn&apos;t feel like they were doing much of anything for me. I am very happy to say that since I quit my therapist, I have been doing much better.
</p>
<p className="text-gray-300 mb-4">
At this time, the baseball season was over, so I was walking around much less. I was still listening to a lot of music and I started getting into less depressed songs. I was also starting to get into more &quot;normal&quot; music, which was an interesting phase (which I believe I&apos;m still in).
</p>
<p className="text-gray-300 mb-4">
A highlight of late summer 2024 was a vacation I took. This vacation has entire albums which remind me of it and I will always cherish those memories deeply.
</p>
<BackButton href="/music" />
</div>
</div>
);
};
export default WhatWasGoingOnLateSummer2024;

View file

@ -1,9 +1,8 @@
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
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'
import { SiGithub, SiForgejo } from "react-icons/si"
import { TbStar, TbGitBranch } from "react-icons/tb"
import featuredProjects from "@/public/data/featured.json"
import Link from "next/link"
import { cn } from "@/lib/utils"
export default function GitHubFeatured({ className }: { className?: string }) {
return (
@ -11,16 +10,16 @@ export default function GitHubFeatured({ className }: { className?: string }) {
{featuredProjects.map((project) => (
<div key={project.id} className="bg-gray-800 p-6 rounded-lg shadow-md min-h-[200px] flex flex-col">
<div className="flex-1">
<h3 className="text-xl font-bold text-gray-100 mb-3">
<FontAwesomeIcon icon={project.github ? faGithub : faGitAlt} className="mr-2" /> {project.name}
<h3 className="flex items-center justify-center text-xl font-bold text-gray-100 mb-3">
{project.github ? <SiGithub className="mr-2" /> : <SiForgejo className="mr-2" />} {project.name}
</h3>
<p className="text-gray-300 grow">{project.description}</p>
</div>
<div className="pt-4 border-t border-gray-700 flex justify-between items-center mt-auto">
<Link href={project.url} className="text-blue-400 hover:underline">View Repo</Link>
<div className="flex items-center text-gray-400">
<FontAwesomeIcon icon={faStar} className="mr-1" /> {project.stars}
<FontAwesomeIcon icon={faCodeBranch} className="ml-4 mr-1" /> {project.forks}
<TbStar className="mr-1 size-5" /> {project.stars}
<TbGitBranch className="ml-4 mr-1 size-5" /> {project.forks}
</div>
</div>
</div>

View file

@ -1,127 +0,0 @@
"use client"
import { useState, useEffect } from "react"
import Image from "next/image"
import { Play, SkipBack, SkipForward } from "lucide-react"
import LoadingSpinner from "../objects/LoadingSpinner"
import { SeekBar } from "@/components/objects/SeekBar"
interface Song {
albumArt: string
name: string
artist: string
duration: string
link?: string
}
interface Period {
timePeriod: string
songs: Song[]
}
export default function Home() {
const [timePeriod, setTimePeriod] = useState("Early Summer 2024")
const [songs, setSongs] = useState<Song[]>([])
const [currentIndex, setCurrentIndex] = useState(0)
const [isLoading, setIsLoading] = useState(true)
const [currentPosition, setCurrentPosition] = useState(0)
useEffect(() => {
setIsLoading(true)
fetch("/data/music.json")
.then((response) => response.json())
.then((data: Period[]) => {
const selectedPeriod = data.find((period) => period.timePeriod === timePeriod)
const songsList = selectedPeriod ? selectedPeriod.songs : []
setSongs(songsList)
const newIndex = Math.floor(Math.random() * songsList.length)
setCurrentIndex(newIndex)
// Set initial random position for the selected song
if (songsList.length > 0) {
const durationInSeconds = parseDuration(songsList[newIndex]?.duration || "0:00")
setCurrentPosition(Math.floor(Math.random() * durationInSeconds))
}
setIsLoading(false)
})
.catch((error) => {
console.error("Error fetching music data:", error)
setIsLoading(false)
})
}, [timePeriod])
const handleNext = () => {
setCurrentIndex((prevIndex) => {
const nextIndex = (prevIndex + 1) % songs.length
const durationInSeconds = parseDuration(songs[nextIndex].duration)
setCurrentPosition(Math.floor(Math.random() * durationInSeconds))
return nextIndex
})
}
const handlePrevious = () => {
setCurrentIndex((prevIndex) => {
const nextIndex = (prevIndex - 1 + songs.length) % songs.length
const durationInSeconds = parseDuration(songs[nextIndex].duration)
setCurrentPosition(Math.floor(Math.random() * durationInSeconds))
return nextIndex
})
}
const parseDuration = (duration: string): number => {
const [minutes, seconds] = duration.split(":").map(Number)
return minutes * 60 + seconds
}
return (
<div>
<section id="music-carousel" className="mb-12">
{isLoading && <LoadingSpinner />}
{!isLoading && songs.length > 0 && (
<div className="relative">
<Image
src={songs[currentIndex].albumArt || "/placeholder.svg"}
alt={songs[currentIndex].name}
width={300}
height={300}
className="mb-4 rounded-lg"
/>
<h3 className="text-2xl font-bold text-gray-100">{songs[currentIndex].name}</h3>
<p>{songs[currentIndex].artist}</p>
<SeekBar
key={`${currentIndex}-${currentPosition}`}
startPos={currentPosition}
duration={songs[currentIndex].duration}
/>
<div className="flex justify-center pb-2">
<button onClick={handlePrevious} className="mr-4 cursor-pointer">
<SkipBack className="w-8 h-8" />
</button>
<button className="mr-4 cursor-pointer" onClick={() => window.open(songs[currentIndex]?.link, "_blank")}>
<Play className="w-8 h-8" />
</button>
<button onClick={handleNext} className="cursor-pointer">
<SkipForward className="w-8 h-8" />
</button>
</div>
</div>
)}
<div className="flex flex-col items-center mt-4">
<label htmlFor="timePeriod" className="font-bold uppercase text-sm pb-1">
Time Period
</label>
<select
id="timePeriod"
value={timePeriod}
onChange={(e) => setTimePeriod(e.target.value)}
className="px-3 py-2 bg-gray-700 rounded-sm mb-2"
>
<option value="Early Summer 2024">Early Summer 2024</option>
</select>
</div>
</section>
</div>
)
}

View file

@ -4,35 +4,35 @@
"name": "aidxnCC",
"description": "aidxnCC is the third version of my personal website",
"github": false,
"url": "https://git.pontusmail.org/aidan/aidxnCC",
"stars": 2,
"forks": 1
"url": "https://git.p0ntus.com/aidan/aidxnCC",
"stars": 1,
"forks": 0
},
{
"id": 2,
"name": "librecloud/web",
"name": "abocn/TelegramBot",
"description": "Landing page for p0ntus mail",
"github": false,
"url": "https://git.pontusmail.org/librecloud/web",
"github": true,
"url": "https://github.com/abocn/TelegramBot",
"stars": 13,
"forks": 6
},
{
"id": 3,
"name": "mail-connect",
"description": "API bridge for docker-mailserver",
"github": true,
"url": "https://github.com/ihatenodejs/mail-connect",
"stars": 0,
"forks": 0
},
{
"id": 3,
"name": "modules",
"description": "An open-source Magisk module and FOSS app store",
"github": false,
"url": "https://git.pontusmail.org/aidan/modules",
"stars": 3,
"forks": 0
},
{
"id": 4,
"name": "AndroidIntegrity/website",
"description": "AIA website source code",
"github": true,
"url": "https://github.com/AndroidIntegrity/website",
"stars": 6,
"forks": 1
"name": "pontus/pontus-front",
"description": "The frontend and API for p0ntus, my free privacy-focused service provider",
"github": false,
"url": "https://git.p0ntus.com/pontus/pontus-front",
"stars": 1,
"forks": 0
}
]

View file

@ -1,56 +0,0 @@
[
{
"timePeriod": "Early Summer 2024",
"songs": [
{
"albumArt": "https://p0ntus.com/archives/img/noticeme.png",
"name": "Notice Me",
"artist": "tobi lou feat. MIA GLADSTONE",
"duration": "2:35",
"link": "https://www.last.fm/music/tobi+lou/Notice+Me"
},
{
"albumArt": "https://p0ntus.com/archives/img/comforttexas.webp",
"name": "comfort, texas",
"artist": "Buppy.",
"duration": "2:11",
"link": "https://www.last.fm/music/Buppy./comfort,+texas"
},
{
"albumArt": "https://p0ntus.com/archives/img/nonperishable.webp",
"name": "Jelly",
"artist": "tobi lou",
"duration": "1:50",
"link": "https://www.last.fm/music/tobi+lou/_/Jelly"
},
{
"albumArt": "https://p0ntus.com/archives/img/exes.webp",
"name": "exes",
"artist": "Tate McRae",
"duration": "2:39",
"link": "https://www.last.fm/music/Tate+McRae/exes/exes"
},
{
"albumArt": "https://p0ntus.com/archives/img/ick.webp",
"name": "Ick",
"artist": "Lay Bankz",
"duration": "1:55",
"link": "https://www.last.fm/music/Lay+Bankz/_/Ick"
},
{
"albumArt": "https://p0ntus.com/archives/img/nani.webp",
"name": "NANi",
"artist": "Saweetie",
"duration": "2:34",
"link": "https://www.last.fm/music/Saweetie/Nani"
},
{
"albumArt": "https://p0ntus.com/archives/img/killerloverboy.webp",
"name": "killer lover boy",
"artist": "SEB",
"duration": "2:14",
"link": "https://www.last.fm/music/Seb/_/killer+lover+boy"
}
]
}
]

BIN
public/img/bonito.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View file

@ -14,7 +14,7 @@
"whereYouAre": [
"I am not here to brag about my accomplishments or plug my cool SaaS product. That's why I've made every effort to make this website as personal and fun as possible.",
"I hope you find this website an interesting place to find more about me, but also learn something new, and inspire a new project or two.",
"This page is currently hosted on Cloudflare Workers, after what happened with "
"In a technical sense, this site is hosted on my NY1 dedicated server, hosted by ColoCrossing out of Buffalo, New York."
],
"sections": {
"whoIAm": "Who I am",
@ -88,28 +88,32 @@
"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."
"I have worked on countless projects over the past five years, for the most part. I started learning to code with Python when I was seven and my interest has only 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 TypeScript, which is my new favorite language as of a year ago. My biggest project currently is p0ntus, a free service provider for privacy-focused individuals.",
"Me and my developer friends operate an organization called ABOCN, where we primarily maintain a Telegram bot called Kowalski. You can find it on Telegram as @KowalskiNodeBot.",
"I have learned system administration from the past three years of learning Linux for practical use and fun. I currently operate four servers running in the cloud, ran out of Canada, Germany, and the United States.",
"I own a channel called PontusHub on Telegram, where I post updates about my projects, along with commentary and info about my projects related to the Android rooting community."
],
"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."
"When I'm not programming, I can typically be found distro hopping or flashing a new ROM to my phone. I also spend a lot of time spreading Next.js and TypeScript propaganda to JavaScript developers.",
"I consider maintaining my devices as a hobby as well, as I devote a lot of time to it. I genuinely enjoy installing Arch, Gentoo, and NixOS frequently, and flashing new ROMs to the phones I own.",
"I am frequently active on my Forgejo server and GitHub, and aim to make daily contributions. 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!",
"When I touch grass, I prefer to walk on the streets, especially in Boston, Massachusetts. I also used to swim competitively, though it has turned into to a casual hobby over time.",
"Editing Wikipedia has also been a good pastime for me, and I have been editing for a year and a half now. As of writing, I have made 6.1k edits to the English Wikipedia. I am also an AfC reviewer, new page reviewer, and rollbacker. You can find me on Wikipedia as OnlyNano."
],
"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."
"Mobile Devices": [
"I use a Google Pixel 7 Pro (cheetah) as my daily driver. It runs Android 16 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.",
"I also have a Google Pixel 3a XL (bonito) which I use as a secondary device. It runs LineageOS 22.2 and is also rooted with KernelSU-Next."
],
"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."
"Laptops": [
"I use a Lenovo Thinkpad T470s with NixOS unstable as my daily driver. I've had it for about a year now, and it's been a great experience. At the time of writing, I am using KDE Plasma as my desktop environment.",
"I also own two MacBook Airs (2015 and 2013 base model) and a HP Chromebook used as a secondary devices. The 2013 runs unsupported macOS Sequoia Beta, the 2015 runs Xubuntu, and the Chromebook runs Arch Linux."
]
},
"contributions": [
"Most of my repositories have migrated to LibreCloud Git. My username is aidan.",
"You can find me on GitHub as ihatenodejs."
"Most of my repositories have migrated to p0ntus 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."