dvorakmortonxd.dev/src/app/page.tsx
2026-05-15 23:50:16 +02:00

532 lines
24 KiB
TypeScript

import Image from "next/image";
import "./page.css";
import { Metadata } from 'next';
import JokerLogo from "./components/JokerLogo";
import ServiceButton from "./components/ServiceButton";
import SlBackground from "./components/SlBackground";
import ContributionHeatmap from "./components/ContributionHeatmap";
export const metadata: Metadata = {
title: 'dvorakmortonxd.dev',
description:
'Welcome to my personal website, my social media links and projects lurk below... I use gentoo btw :)',
openGraph: {
title: 'dvorakmortonxd.dev',
description: 'Welcome to my personal website, my social media links and projects lurk below... I use gentoo btw :)',
url: 'https://dvorakmortonxd.dev',
siteName: 'dvorakmortonxd.dev',
},
};
// Example projects array (you can edit this)
const codingProjects = [
{
title: "Hospital Execution",
desc: "the first ever real game I made, in pygame.",
img: "/coding-1.webp",
url: "https://martin-dv.itch.io/hospital-execution-demo",
},
{
title: "Underbaranoia",
desc: "basically a undertale like infinite fight simulator that gets progressively harder, made in pygame.",
img: "/coding-2.webp",
url: "https://martin-dv.itch.io/underbaranoia",
},
{
title: "Offline memer",
desc: "parody of the discord bot \"Dank Memer\" made in batch. (this was technically my first ever game I published).",
img: "/coding-3.webp",
url: "https://martin-dv.itch.io/offline-memer",
},
{
title: "4y",
desc: "just a renamed fork of the ly login manager (based login manager btw I love it), no extra features, just a rename, its actually outdated so dont use it.",
img: "/coding-4.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/4y",
},
{
title: "4rch linux",
desc: "same as above, basically just a renamed fork of arch linux with calamares installer, also outdated and not maintained at all so no use please.",
img: "/coding-5.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/4rch-linux",
},
{
title: "You_Are_An_Idiot_Virus.py",
desc: "this is just a python script that just spams blinking \"you are an idiot\" windows, made it as a prank I think, not really sure rn.",
img: "/coding-6.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/uranidiot",
},
{
title: "Venturesome",
desc: "a browser I wrote in python using PyQtWebEngine with PyQt5, actually pretty cool and modular but I couldnt get past the stage of adding a tab system, basically surpassed by my other project: RustyWolf.",
img: "/coding-7.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/Venturesome",
},
{
title: "Mandelbrot set in Pygame",
desc: "a python pygame script that renders the mandelbrot set, made it when I was fascinated by how it looks and ngl it still looks cool af.",
img: "/coding-8.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/mandelbrot",
},
{
title: "Underpygametale",
desc: "a remake of undertale written in pygame, got it to about the flowey part (at the beginning) and didnt touch it in a long time.",
img: "/coding-9.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/underpygametale",
},
{
title: "Many discord bots...",
desc: "so many of them, once I (allegedly, pls discord dont ban me) even wrote a \"self-bot\" which auto-advertised a minecraft server on minecraft discord server in lfg-hosting every two hours, around 800 people joined in total.",
img: "/coding-10.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/PYGETEX",
},
{
title: "MMO minecraft plugin",
desc: "a minceraft plugin with custom bosses, items, and functions. pretty barebones and basic but I did it all manually before vibecoding was even a thing so what.",
img: "/coding-11.webp",
url: "https://www.youtube.com/watch?v=cSAX5Ds61ac",
},
{
title: "Many many failed minecraft servers..",
desc: "creative games, softcraft, frostville, eusmp, eurthsmp, softsmp and many other SMPs that died later on. I cant even count how many mc servers I had in total.",
img: "/coding-12.webp",
url: "https://discord.gg/KtHRm9kRmy",
},
{
title: "Swords and Sandals 2 pygame remake",
desc: "an unfinished remake of swords and sandals 2 in pygame, I got bored of it and never finished it but ill finish it one day for sure lol.",
img: "/coding-13.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/sas2py",
},
{
title: "Ollama server",
desc: "my ollama vm running on my proxmox with a gpu passthroughed RTX 3070, dm me if u wanna test it lol.",
img: "/coding-14.webp",
url: "https://ai.dvorakmortonxd.dev/",
},
{
title: "Batch MSDOS Simulator",
desc: "a freshman school project on making games in batch, it was like an OS simulator with a web browser, games, photos, even a video suprise (youll have to try it to figure that one out lol).",
img: "/coding-15.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/DvorakMSDOS",
},
{
title: "RustyWolf",
desc: "a browser I made in rust with webkitgtk, I made it to be lightweight and to be able to be ran on macbook unibody 2010 before I realised I got scammed.. It's the successor to my previous project Venturesome :)",
img: "/coding-16.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/RustyWolf",
},
{
title: "dxdwm",
desc: "a small x11 window manager written in rust.",
img: "/coding-17.webp",
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/dxdwm",
},
{
title: "proxmox setup",
desc: "my proxmox setup with more than 8 vms for my services, this is running literally everything at my house.",
img: "/proxmox.webp",
url: "https://proxmox.dvorakmortonxd.dev/",
},
];
export default function Home() {
const socials = [
{ name: "Main Instagram", icon: "/instagram.svg", url: "https://www.instagram.com/dvorakmortonxd/" },
{ name: "Gym Instagram", icon: "/instagram.svg", url: "https://www.instagram.com/dvorakmortonxd2/" },
{ name: "SoundCloud", icon: "/soundcloud.svg", url: "https://soundcloud.com/martin-dvorak-185636305" },
{ name: "TikTok", icon: "/tiktok.svg", url: "https://www.tiktok.com/@dvorakmortonxd" },
{ name: "Snapchat", icon: "/snapchat.svg", url: "https://www.snapchat.com/add/dvorakmortonxd" },
{ name: "GitDXD", icon: "/github.svg", url: "https://git.dvorakmortonxd.dev/dvorakmortonxd" },
{ name: "LinkedIn", icon: "/linkedin.svg", url: "https://www.linkedin.com/in/martin-dvorak-32012a394/" },
{ name: "Itch.io", icon: "/itchio.svg", url: "https://martin-dv.itch.io" },
{ name: "Discord", icon: "/discord.svg", url: "https://discord.com/users/555745543763001364" },
{ name: "Reddit", icon: "/reddit.svg", url: "https://www.reddit.com/user/M4RT1NYT/" },
{ name: "Twitter", icon: "/twitter.svg", url: "https://x.com/pepicskopcecek" },
{ name: "Quipee", icon: "/quip.svg", url: "https://quipee.me/dvorakmortonxd" },
];
const techProjects = [
{
title: "Gentoo Setup",
desc: "my main computer with gentoo. specs: Ryzen 5 3600 (6c/12t), GTX 1050 Ti (yes im aware I could use the rtx 3070 from the proxmox server but I dont need it and its much better off being in there cuz of local ai), 16gb of ram and a 240gb ssd.",
image: "/gentoo-setup.webp",
},
{
title: "Proxmox Server",
desc: "my personal proxmox server (dm me on ig if u need a VPS/hosting), specs: Xeon E5 2680 v4 (14c/28t), RTX 3070 (for local ai), 68gb ddr4 rdimm ram (2*16gb, 1*32gb, 1*4gb), 256gb of sata m2 space + 1tb hdd + 750gb hdd.",
image: "/proxmox-server.webp",
},
{
title: "Xbox 360 S with badupdate",
desc: "xbox 360 slim (trinity) with badupdate exploit, allowing to boot custom software. (not my photo), the specs are XCGPU (3c/6t), 0.5GB of gddr3 ram and a 500gb hdd.",
image: "/xbox360.webp",
},
{
title: "Macbook Air M4 13\"",
desc: "my main device for basically everything except gaming. specs are Apple M4 (cpu:10c,gpu:8c), 16gb of unified ram (lpddr5x), 256gb Storage.",
image: "/macbook-air.webp",
},
{
title: "Macbook Air 2013 11\"",
desc: "bought this for tinkering lol, specs are intel core i5 (2c/4t), 8gb of ddr3 ram and 250gb ssd, installed arch linux on it with i3-gaps (this is my laptop not josef's I gave it to him lol).",
image: "/macbook-air-11.webp",
},
{
title: "iPhone 7 128gb",
desc: "somehow found a listing for 4 bucks (refurbed.cz) for it so I got it lol, it has a little dent I marked it on the photo (which isnt mine btw), except cosmetic damage its pretty much fully functional, specs are Apple A10 (4c/4t), 2gb of ram and 128gb of storage",
image: "/iphone-7.webp",
},
{
title: "Macbook Unibody 2010",
desc: "found random listing on bazos for 15 bucks but after I bought a power adapter it turned out to be non functioning so I got scammed :(",
image: "/macbook2010.webp",
},
{
title: "ThinkPad T400s 14\"",
desc: "got it from a random guy for 20 bucks, its an old laptop from 2009 and I disabled intel AMT and slapped void linux on it and i3wm on it, specs are intel core 2 duo (2c/2t), 8gb ddr3 ram and 800gb hdd.",
image: "/thinkpadt400s.webp",
},
{
title: "Asus N56JR 15.6\"",
desc: "one of my first laptops my dad got for me when I was like 12, still works but the battery is KO, specs are intel core i7 4700HQ (4c/8t), 8gb ddr3 ram and 240gb ssd, it currently runs ubuntu linux 24.04LTS and my mom uses it for movies and shows.",
image: "/asuslaptop.webp",
},
{
title: "iPhone 11 128gb",
desc: "my first iphone I got from my parents at 13, rn my dad has it because I switched over to the iphone 16 pro in 2025, specs are Apple A13 (6c/6t), 4gb of ram and 128gb of storage. (NOT MY IMAGE)",
image: "/iphone11.webp",
},
{
title: "iPhone 16 Pro 128gb",
desc: "originally wanted iphone 13 mini (because of the size) but I somehow decided to get 16 pro, which is a bit smaller than my older iphone 11, specs are Apple A18 pro (6c/6t), (btw this chip is the same chip used in the macbook neo so thats cool) and 8gb of ram and 128gb of storage, my main phone.",
image: "/iphone16pro.webp",
},
{
title: "Xbox one S 2TB",
desc: "my dad bought it for me also in like 2018 or 2019 and I sometimes play the console edition of minecraft because I like to play the gliding minigame on it when someone comes over.",
image: "/xboxones.webp",
},
];
const friends = [
{
name: "Josef Skopec",
url: "/skopec.html",
realUrl: "https://skopec.dev/",
img: "/skopec.svg",
desc: "skopec.dev",
iframe: true
},
{
name: "Filip Bukovina",
url: "https://bukovinafilip.com/",
realUrl: "https://bukovinafilip.com/",
img: "/bukovina.svg",
desc: "bukovinafilip.com",
iframe: true
},
{
name: "Tomáš Vlk",
url: "https://vlcak.me",
realUrl: "https://vlcak.me",
img: "/vlcak.svg",
desc: "vlcak.me",
iframe: true
}
];
return <>
<SlBackground />
<div className="container">
{/* Header - TUI top bar */}
<header className="header">
<div className="header-center">
<JokerLogo />
<h1 className="site-name">dvorakmortonxd.dev</h1>
</div>
</header>
{/* Hero - TUI welcome panel */}
<main className="hero">
<div className="hero-panel">
<span className="hero-panel-label">~ README.MD</span>
<h2 className="hero-title">$ whoami</h2>
<p className="hero-subtitle">
Welcome to my website, visit the land down under to get to find out about me and my social media, services, hardware and projects. welcome to my goblin cave. {'>'}:)<span className="cursor-blink"></span>
</p>
</div>
{/* Search Panel */}
<div className="search-section">
<div className="tui-panel">
<span className="tui-panel-label" style={{ color: 'var(--red)' }}>├─ SEARXNG.C</span>
<form action="https://search.dvorakmortonxd.dev/search" method="GET" target="_blank" rel="noopener noreferrer" className="search-form">
<input type="text" name="q" placeholder="Search... (only works if I granted you access)" className="search-bar" />
</form>
</div>
</div>
{/* Social Links Panel */}
<div className="social-section">
<div className="tui-panel">
<span className="tui-panel-label label-blue">├─ SOCIALS.JS</span>
<div className="social-buttons">
{socials.map((s) => (
<a
key={s.name}
href={s.url}
target="_blank"
rel="noopener noreferrer"
className="social-button"
>
<Image src={s.icon} alt={s.name} width={16} height={16} className="social-icon" />
<span className="social-label">{s.name}</span>
</a>
))}
</div>
<div className="mail-contact">
mail if u ever wanna contact me: <a href="mailto:dvorak@dvorakmortonxd.dev">dvorak@dvorakmortonxd.dev</a>
</div>
</div>
</div>
{/* Gym SBD Panel */}
<div className="gym-section">
<div className="tui-panel">
<span className="tui-panel-label" style={{ color: 'var(--accent2)' }}>├─ GYM_SBD.DB</span>
<div className="gym-grid">
<div className="gym-item">
<Image src="/squat.svg" alt="Squat" width={48} height={48} className="gym-icon" />
<div className="gym-label">SQUAT</div>
<div className="gym-weight">125kg</div>
<div className="gym-date" style={{ fontSize: '0.65rem', color: 'var(--gray)' }}>5.1.2025</div>
</div>
<div className="gym-item">
<Image src="/bench.svg" alt="Bench" width={48} height={48} className="gym-icon" />
<div className="gym-label">BENCH</div>
<div className="gym-weight">108kg</div>
<div className="gym-date" style={{ fontSize: '0.65rem', color: 'var(--gray)' }}>25.4.2026</div>
</div>
<div className="gym-item">
<Image src="/deadlift.svg" alt="Deadlift" width={48} height={48} className="gym-icon" />
<div className="gym-label">DEADLIFT</div>
<div className="gym-weight">165kg</div>
<div className="gym-date" style={{ fontSize: '0.65rem', color: 'var(--gray)' }}>17.12.2024</div>
</div>
</div>
</div>
</div>
{/* About Me Panel */}
<div className="about-section">
<div className="tui-panel">
<span className="tui-panel-label label-yellow">├─ about_me.txt</span>
<div className="about-content">
<p>
<span className="text-green">martin@dvorakmortonxd</span>:<span className="text-blue">~</span>$ cat about_me.txt
</p>
<div style={{ color: '#a3a3a3' }}>
<p>
Hey, I&#39;m Martin Dvořák — a 17-year-old IT student based in the Czech Republic, specializing in network management and administration at <span className="text-pink-700"><a href="https://sssvt.cz">sssvt.cz</a></span>. I&#39;m a freshman and I have wanted to go to this school since 7th grade (2022) so I&#39;m happy I got in in 2025, the school is pretty cool so if you are in middle school and interested in IT, check it.
</p>
<p>
I&#39;m a passionate homelabber and developer heavily focused on self-hosting <i>literally everything</i>, writing code, and tinkering with Linux systems and retro hardware. Whether it&#39;s configuring Proxmox, reviving an old Thinkpad with Void Linux, or compiling Gentoo on my main rig, I&#39;m always looking at bazos to get more retro hardware.
</p>
<p>
In my free time I mostly spend time with my girl {'<'}3, also constructing some of my self hosted stuff, and also when I&#39;m in my gaming mood (which is kinda rare nowadays) I play terraria (around 1300hr playtime btw) and minecraft modpacks with mekanism. I also go to the gym around 3-5 times a week, running a PPL split focused on strength/powerlifting, my SBD total is 398kg (Squat:125kg, Bench:108kg, Deadlift:165kg) with a bodyweight of 73kg.<span className="cursor-blink"></span>
</p>
</div>
</div>
</div>
</div>
{/* Commits Panel */}
<div className="commits-section" style={{ marginTop: '16px' }}>
<div className="tui-panel">
<span className="tui-panel-label" style={{ color: 'var(--green)' }}>├─ CONTRIBUTIONS_LOCAL_FORGEJO.GIT</span>
<div className="commits-content" style={{ padding: '24px 16px 16px' }}>
<ContributionHeatmap />
</div>
</div>
</div>
{/* Services Panel */}
<div className="services-section">
<div className="tui-panel">
<span className="tui-panel-label label-green">├─ SERVICES.HTML</span>
<div className="services-buttons">
<ServiceButton
url="https://proxmox.dvorakmortonxd.dev/"
className="proxmox"
icon="🖥️"
name="Proxmox"
desc="Server Management"
/>
<ServiceButton
url="https://ai.dvorakmortonxd.dev/"
className="ai"
icon="🦾"
name="Ollama"
desc="Local AI Server"
/>
<ServiceButton
url="https://jelly.dvorakmortonxd.dev/"
className="jellyfin"
icon="🎬"
name="Jellyfin"
desc="Local Media Server"
/>
<ServiceButton
url="https://fake-pterodactyl.dvorakmortonxd.dev/"
className="pterodactyl"
icon="📦"
name="MCSManager"
desc="Game Server Panel"
/>
<ServiceButton
url="https://navidrome.dvorakmortonxd.dev/"
className="funkwhale"
icon="🎸"
name="Navidrome"
desc="Music Streaming"
/>
<ServiceButton
url="https://mailcow.dvorakmortonxd.dev/"
className="mailcow"
icon="💌"
name="Mailcow"
desc="Email Server"
/>
<ServiceButton
url="https://search.dvorakmortonxd.dev/"
className="searxng"
icon="🔦"
name="SearxNG"
desc="Private Search"
/>
<ServiceButton
url="https://convert.dvorakmortonxd.dev/"
className="convertx"
icon="📽️"
name="ConvertX"
desc="File Converter"
/>
<ServiceButton
url="https://git.dvorakmortonxd.dev"
className="gitdxd"
icon="🐙"
name="GitDXD"
desc="Better Github"
/>
</div>
</div>
</div>
{/* Softcraft Panel */}
<div className="services-section" style={{ marginTop: '20px' }}>
<div className="tui-panel">
<span className="tui-panel-label" style={{ color: '#d946ef' }}>├─ SOFTCRAFT.JAR</span>
<div className="services-buttons" style={{ gap: '1rem' }}>
<ServiceButton
url="https://dvorakmortonxd.dev/softcraft"
checkUrl="minecraft://46.30.237.43:6767"
className="softcraft"
icon="⛏️"
name="Softcraft"
desc="Play on my Minecraft Server!"
/>
<ServiceButton
url="https://bluemap.dvorakmortonxd.dev"
className="bluemap"
icon="🗺️"
name="BlueMap"
desc="Live SoftCraft Map"
/>
<ServiceButton
url="https://discord-sc.dvorakmortonxd.dev"
className="discord-sc"
icon={<Image src="/discord.svg" alt="Discord" width={28} height={28} />}
name="Discord"
desc="Join our community"
/>
</div>
</div>
</div>
</main>
{/* Projects */}
<section className="projects">
{/* Tech Section */}
<div className="subsection-wrapper">
<div className="subsection-panel">
<span className="subsection-panel-label">├─ TECH_LIST.JSON</span>
<div className="project-grid">
{techProjects.map((project) => (
<div key={project.title} className="project-card">
<div
className="project-image"
style={{ backgroundImage: `url(${project.image})` }}
/>
<h4 className="project-title">{project.title}</h4>
<p className="project-desc">{project.desc}</p>
</div>
))}
</div>
</div>
</div>
{/* Coding Section */}
<div className="subsection-wrapper">
<div className="subsection-panel coding-panel">
<span className="subsection-panel-label">├─ PROJECTS.DOCX</span>
<div className="project-grid">
{codingProjects.map((project, idx) => (
<a
key={idx}
href={project.url}
target="_blank"
rel="noopener noreferrer"
className="project-card"
>
<div
className="project-image"
style={{ backgroundImage: `url(${project.img})` }}
/>
<h4 className="project-title">{project.title}</h4>
<p className="project-desc">{project.desc}</p>
</a>
))}
</div>
</div>
</div>
{/* Friends Section */}
<div className="subsection-wrapper">
<div className="subsection-panel friends-panel">
<span className="subsection-panel-label">└─ FRIENDS.TSX</span>
<div className="services-buttons" style={{ gap: '1rem' }}>
{friends.map((friend, idx) => (
<ServiceButton
key={idx}
url={friend.realUrl || friend.url}
className="friend"
icon={<Image src={friend.img} alt={friend.name} width={68} height={68} className="friend-icon" style={{ borderRadius: '50%' }} />}
name={friend.name}
desc={friend.desc}
/>
))}
</div>
</div>
</div>
</section>
<footer className="footer">
<span className="footer-label">v1.6.7</span>
© 2025-2026 Martin Dvořák. All rights reserved (not really I dont care)
</footer>
</div>
</>
}