small changes regarding my proxmox maintenance checks
This commit is contained in:
parent
953fa603ea
commit
cadbe8caa9
15 changed files with 149 additions and 483 deletions
178
.gitignore
vendored
178
.gitignore
vendored
|
|
@ -1,14 +1,18 @@
|
||||||
<<<<<<< HEAD
|
# ---> Next.js
|
||||||
# ---> Nextjs
|
|
||||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
/node_modules
|
/node_modules
|
||||||
/.pnp
|
/.pnp
|
||||||
.pnp.js
|
.pnp.js
|
||||||
|
jspm_packages/
|
||||||
|
web_modules/
|
||||||
|
.pnpm-store
|
||||||
|
|
||||||
# testing
|
# testing
|
||||||
/coverage
|
/coverage
|
||||||
|
*.lcov
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
# private gf site
|
# private gf site
|
||||||
/src/app/darecek/
|
/src/app/darecek/
|
||||||
|
|
@ -16,180 +20,56 @@
|
||||||
|
|
||||||
# next.js
|
# next.js
|
||||||
/.next/
|
/.next/
|
||||||
|
/.next
|
||||||
/out/
|
/out/
|
||||||
|
out
|
||||||
|
|
||||||
# production
|
# production
|
||||||
/build
|
/build
|
||||||
|
build/Release
|
||||||
|
dist
|
||||||
|
.output
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
.DS_Store
|
.DS_Store
|
||||||
/public/DS_Store
|
/public/DS_Store
|
||||||
*.pem
|
*.pem
|
||||||
|
.idea/
|
||||||
|
.vercel
|
||||||
|
.svelte-kit/
|
||||||
|
.vite/
|
||||||
|
|
||||||
# debug
|
# debug
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
|
lerna-debug.log*
|
||||||
# local env files
|
|
||||||
.env*.local
|
|
||||||
.env
|
|
||||||
|
|
||||||
# vercel
|
|
||||||
.vercel
|
|
||||||
|
|
||||||
# typescript
|
|
||||||
*.tsbuildinfo
|
|
||||||
next-env.d.ts
|
|
||||||
|
|
||||||
# ---> Node
|
|
||||||
# Logs
|
|
||||||
logs
|
logs
|
||||||
*.log
|
*.log
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
lerna-debug.log*
|
|
||||||
|
|
||||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
# runtime data
|
||||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
|
||||||
|
|
||||||
# Runtime data
|
|
||||||
pids
|
pids
|
||||||
*.pid
|
*.pid
|
||||||
*.seed
|
*.seed
|
||||||
*.pid.lock
|
*.pid.lock
|
||||||
|
|
||||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
# local env files
|
||||||
lib-cov
|
|
||||||
|
|
||||||
# Coverage directory used by tools like istanbul
|
|
||||||
coverage
|
|
||||||
*.lcov
|
|
||||||
|
|
||||||
# nyc test coverage
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
|
||||||
.grunt
|
|
||||||
|
|
||||||
# Bower dependency directory (https://bower.io/)
|
|
||||||
bower_components
|
|
||||||
|
|
||||||
# node-waf configuration
|
|
||||||
.lock-wscript
|
|
||||||
|
|
||||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
|
||||||
build/Release
|
|
||||||
|
|
||||||
# Dependency directories
|
|
||||||
node_modules/
|
|
||||||
jspm_packages/
|
|
||||||
|
|
||||||
# Snowpack dependency directory (https://snowpack.dev/)
|
|
||||||
web_modules/
|
|
||||||
|
|
||||||
# TypeScript cache
|
|
||||||
*.tsbuildinfo
|
|
||||||
|
|
||||||
# Optional npm cache directory
|
|
||||||
.npm
|
|
||||||
|
|
||||||
# Optional eslint cache
|
|
||||||
.eslintcache
|
|
||||||
|
|
||||||
# Optional stylelint cache
|
|
||||||
.stylelintcache
|
|
||||||
|
|
||||||
# Optional REPL history
|
|
||||||
.node_repl_history
|
|
||||||
|
|
||||||
# Output of 'npm pack'
|
|
||||||
*.tgz
|
|
||||||
|
|
||||||
# Yarn Integrity file
|
|
||||||
.yarn-integrity
|
|
||||||
|
|
||||||
# dotenv environment variable files
|
|
||||||
.env
|
.env
|
||||||
.env.*
|
.env.*
|
||||||
!.env.example
|
!.env.example
|
||||||
|
|
||||||
# parcel-bundler cache (https://parceljs.org/)
|
# caches
|
||||||
|
.npm
|
||||||
|
.eslintcache
|
||||||
|
.stylelintcache
|
||||||
|
.node_repl_history
|
||||||
|
.grunt
|
||||||
.cache
|
.cache
|
||||||
.parcel-cache
|
.parcel-cache
|
||||||
|
|
||||||
# Next.js build output
|
# typescript
|
||||||
.next
|
*.tsbuildinfo
|
||||||
out
|
next-env.d.ts
|
||||||
|
|
||||||
# Nuxt.js build / generate output
|
# build artifacts
|
||||||
.nuxt
|
*.tgz
|
||||||
dist
|
|
||||||
.output
|
|
||||||
|
|
||||||
# Gatsby files
|
|
||||||
.cache/
|
|
||||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
|
||||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
|
||||||
# public
|
|
||||||
|
|
||||||
# vuepress build output
|
|
||||||
.vuepress/dist
|
|
||||||
|
|
||||||
# vuepress v2.x temp and cache directory
|
|
||||||
.temp
|
|
||||||
.cache
|
|
||||||
|
|
||||||
# Sveltekit cache directory
|
|
||||||
.svelte-kit/
|
|
||||||
|
|
||||||
# vitepress build output
|
|
||||||
**/.vitepress/dist
|
|
||||||
|
|
||||||
# vitepress cache directory
|
|
||||||
**/.vitepress/cache
|
|
||||||
|
|
||||||
# Docusaurus cache and generated files
|
|
||||||
.docusaurus
|
|
||||||
|
|
||||||
# Serverless directories
|
|
||||||
.serverless/
|
|
||||||
|
|
||||||
# FuseBox cache
|
|
||||||
.fusebox/
|
|
||||||
|
|
||||||
# DynamoDB Local files
|
|
||||||
.dynamodb/
|
|
||||||
|
|
||||||
# Firebase cache directory
|
|
||||||
.firebase/
|
|
||||||
|
|
||||||
# TernJS port file
|
|
||||||
.tern-port
|
|
||||||
|
|
||||||
# Stores VSCode versions used for testing VSCode extensions
|
|
||||||
.vscode-test
|
|
||||||
|
|
||||||
# pnpm
|
|
||||||
.pnpm-store
|
|
||||||
|
|
||||||
# yarn v3
|
|
||||||
.pnp.*
|
|
||||||
.yarn/*
|
|
||||||
!.yarn/patches
|
|
||||||
!.yarn/plugins
|
|
||||||
!.yarn/releases
|
|
||||||
!.yarn/sdks
|
|
||||||
!.yarn/versions
|
|
||||||
|
|
||||||
# Vite files
|
|
||||||
vite.config.js.timestamp-*
|
|
||||||
vite.config.ts.timestamp-*
|
|
||||||
.vite/
|
|
||||||
|
|
||||||
=======
|
|
||||||
node_modules/
|
|
||||||
.next/
|
|
||||||
.idea/
|
|
||||||
>>>>>>> 2b92431 (first commit/push)
|
|
||||||
|
|
|
||||||
|
|
@ -34,4 +34,4 @@ Detailed step-by-step production instructions for **PM2 + npm on Debian and Alpi
|
||||||
[`DEPLOYMENT.md`](./DEPLOYMENT.md).
|
[`DEPLOYMENT.md`](./DEPLOYMENT.md).
|
||||||
|
|
||||||
## 📬 Contact
|
## 📬 Contact
|
||||||
To see my projects or get in touch, visit the live site or email me at [dvorak@dvorakmortonxd.dev](mailto:martin@dvorakmortonxd.dev).
|
To see my projects or get in touch, visit the live site or email me at [dvorak@dvorakmortonxd.dev](mailto:dvorak@dvorakmortonxd.dev).
|
||||||
|
|
|
||||||
4
package-lock.json
generated
4
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "dvorakmortonxd",
|
"name": "dvorakmortonxd",
|
||||||
"version": "1.2.0",
|
"version": "1.2.1",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "dvorakmortonxd",
|
"name": "dvorakmortonxd",
|
||||||
"version": "1.2.0",
|
"version": "1.2.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"next": "^16.3.5",
|
"next": "^16.3.5",
|
||||||
"react": "^19.3.0",
|
"react": "^19.3.0",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "dvorakmortonxd",
|
"name": "dvorakmortonxd",
|
||||||
"version": "1.2.0",
|
"version": "1.2.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev --turbopack",
|
"dev": "next dev --turbopack",
|
||||||
|
|
|
||||||
BIN
public/dirt.webp
BIN
public/dirt.webp
Binary file not shown.
|
Before Width: | Height: | Size: 1.5 KiB |
|
|
@ -9,7 +9,7 @@
|
||||||
- Role: Developer, homelab enthusiast, self-hoster, IT Student at sssvt.cz
|
- Role: Developer, homelab enthusiast, self-hoster, IT Student at sssvt.cz
|
||||||
- Location: Czech Republic
|
- Location: Czech Republic
|
||||||
- Contact: dvorak@dvorakmortonxd.dev, or see social links below
|
- Contact: dvorak@dvorakmortonxd.dev, or see social links below
|
||||||
- Free time: Spending time with girlfriend, playing Terraria and Minecraft modpacks with Mekanism
|
- Free time: Spending time with girlfriend, playing Terraria and Minecraft modpacks with Mekanism, going to the gym (PPL / powerlifting SBD)
|
||||||
|
|
||||||
## Socials
|
## Socials
|
||||||
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
- SoundCloud: https://soundcloud.com/martin-dvorak-185636305
|
- SoundCloud: https://soundcloud.com/martin-dvorak-185636305
|
||||||
- TikTok: https://www.tiktok.com/@dvorakmortonxd
|
- TikTok: https://www.tiktok.com/@dvorakmortonxd
|
||||||
- Snapchat: https://www.snapchat.com/add/dvorakmortonxd
|
- Snapchat: https://www.snapchat.com/add/dvorakmortonxd
|
||||||
- GitHub: https://github.com/dvorakmortonxd
|
- GitDXD (self-hosted Git forge): https://git.dvorakmortonxd.dev/dvorakmortonxd
|
||||||
- LinkedIn: https://www.linkedin.com/in/martin-dvorak-32012a394/
|
- LinkedIn: https://www.linkedin.com/in/martin-dvorak-32012a394/
|
||||||
- Itch.io: https://martin-dv.itch.io
|
- Itch.io: https://martin-dv.itch.io
|
||||||
- Discord: https://discord.com/users/555745543763001364
|
- Discord: https://discord.com/users/555745543763001364
|
||||||
|
|
@ -30,78 +30,89 @@
|
||||||
|
|
||||||
Martin runs a personal Proxmox homelab server and self-hosts the following services:
|
Martin runs a personal Proxmox homelab server and self-hosts the following services:
|
||||||
|
|
||||||
- Proxmox (server management): https://proxmox.dvorakmortonxd.dev/
|
- Proxmox (server management, private): https://proxmox.dvorakmortonxd.dev/
|
||||||
- Ollama (local AI inference with RTX 3070 GPU passthrough): https://ai.dvorakmortonxd.dev/
|
- Llama.cpp (local AI inference with RTX 3070 GPU passthrough, on request): https://ai.dvorakmortonxd.dev/
|
||||||
- Jellyfin (local media server): https://jelly.dvorakmortonxd.dev/
|
- Jellyfin (local media server, on request): https://jelly.dvorakmortonxd.dev/
|
||||||
- MCSManager (game server panel): https://fake-pterodactyl.dvorakmortonxd.dev/
|
- SMP (survival Minecraft server, on request): mc.dvorakmortonxd.dev:25565
|
||||||
- Navidrome (music streaming): https://navidrome.dvorakmortonxd.dev/
|
- Navidrome (music streaming, private): https://navidrome.dvorakmortonxd.dev/
|
||||||
- Mailcow (email server): https://mailcow.dvorakmortonxd.dev/
|
- SearXNG (private search, private): https://search.dvorakmortonxd.dev/
|
||||||
- SearxNG (private search): https://search.dvorakmortonxd.dev/
|
- ConvertX (file converter, on request): https://convert.dvorakmortonxd.dev/
|
||||||
- ConvertX (file converter): https://convert.dvorakmortonxd.dev/
|
- GitDXD (self-hosted Forgejo Git instance, public): https://git.dvorakmortonxd.dev
|
||||||
|
|
||||||
## Hardware
|
## Hardware
|
||||||
|
|
||||||
### Main Desktop — Gentoo Linux
|
### Main Desktop — Gentoo Linux
|
||||||
- CPU: AMD Ryzen 5 3600 (6c/12t)
|
- CPU: AMD Ryzen 5 3600 (6c/12t)
|
||||||
- GPU: NVIDIA GTX 1050 Ti
|
- GPU: AMD RX 580 8GB (ASUS ROG)
|
||||||
- RAM: 16GB
|
- RAM: 16GB
|
||||||
- Storage: 240GB SSD
|
- Storage: 240GB SATA SSD
|
||||||
- OS: Gentoo Linux
|
- OS: Gentoo Linux with SwayFX
|
||||||
|
|
||||||
### Proxmox Homelab Server
|
### Proxmox Homelab Server
|
||||||
- CPU: Intel Xeon E5 2680 v4 (14c/28t)
|
- CPU: Intel Xeon E5 2680 v4 (14c/28t)
|
||||||
- GPU: NVIDIA RTX 3070 (used for local AI via Ollama)
|
- GPU: NVIDIA RTX 3070 (used for local AI via Llama.cpp)
|
||||||
- RAM: 68GB DDR4 RDIMM (2×16GB + 1×32GB + 1×4GB)
|
- RAM: 68GB DDR4 RDIMM (2×16GB + 1×32GB + 1×4GB)
|
||||||
- Storage: 256GB SATA M.2 + 1TB HDD + 750GB HDD
|
- Storage: 256GB SATA M.2 + 1TB HDD + 750GB HDD
|
||||||
- Note: Available for VPS/hosting (DM on Instagram)
|
- Note: Available for VPS/hosting (DM on Instagram)
|
||||||
|
|
||||||
|
### Handhelds & Consoles
|
||||||
|
- Lenovo Legion Go S — 32GB LPDDR5X unified RAM, 1TB NVMe. Dual-boots Artix Linux (OpenRC, SwayFX) and stock SteamOS.
|
||||||
|
- Xbox 360 S — Trinity motherboard, modified with the badupdate exploit for custom software. XCGPU (3c/6t), 0.5GB GDDR3, 500GB HDD.
|
||||||
|
- Xbox One S 2TB — Owned since ~2018 or 2019, used sometimes for the Minecraft console edition gliding minigame.
|
||||||
|
|
||||||
### Laptops
|
### Laptops
|
||||||
- MacBook Air M4 13" — Apple M4 (10c CPU / 8c GPU), 16GB unified RAM (LPDDR5X), 256GB storage. Main daily driver for everything except gaming.
|
- MacBook Air M4 13" — Apple M4 (10c CPU / 8c GPU), 16GB unified RAM (LPDDR5X), 256GB storage. Main daily driver for everything except gaming.
|
||||||
- MacBook Air 2013 11" — Intel Core i5 (2c/4t), 8GB DDR3, 250GB SSD. Runs Arch Linux with i3-gaps (given to Josef).
|
- MacBook Air 2013 11" — Intel Core i5 (2c/4t), 8GB DDR3, 250GB SSD. Runs Arch Linux with i3wm.
|
||||||
- MacBook Unibody 2010 — Non-functional (purchased faulty for €15 on bazos).
|
- MacBook Unibody 2010 — Non-functional (purchased faulty for €15 on bazos).
|
||||||
- ThinkPad T400s 14" (2009) — Intel Core 2 Duo (2c/2t), 8GB DDR3, 800GB HDD. Runs Void Linux + i3wm. Intel AMT disabled.
|
- ThinkPad T400s 14" (2009) — Intel Core 2 Duo (2c/2t), 8GB DDR3, 800GB HDD. Runs Void Linux + i3wm.
|
||||||
- Asus N56JR 15.6" — Intel Core i7 4700HQ (4c/8t), 8GB DDR3, 240GB SSD. Runs Ubuntu 24.04 LTS (mom uses it for movies).
|
- Asus N56JR 15.6" — Intel Core i7 4700HQ (4c/8t), 8GB DDR3, 240GB SSD. Runs Ubuntu 24.04 LTS (mom uses it for movies).
|
||||||
|
- Dell Latitude E6320 (2011) — Rescued from e-waste, now running Linux Mint. Battery is dead.
|
||||||
|
- Small Unknown XP-era Acer Laptop — Rescued from e-waste, Intel Atom-class, ~2GB RAM.
|
||||||
|
|
||||||
### Phones
|
### Phones
|
||||||
- iPhone 16 Pro 128GB — Apple A18 Pro (6c/6t), 8GB RAM. Current main phone.
|
- iPhone 16 Pro 128GB — Apple A18 Pro (6c/6t), 8GB RAM. Current main phone.
|
||||||
- iPhone 11 128GB — Apple A13 (6c/6t), 4GB RAM. Now used by father.
|
- iPhone 11 128GB — Apple A13 (6c/6t), 4GB RAM. Now used by father.
|
||||||
- iPhone 7 128GB — Apple A10 (4c/4t), 2GB RAM. Purchased for ~€4 on refurbed.cz.
|
- iPhone 7 128GB — Apple A10 (4c/4t), 2GB RAM. Purchased for ~€4 on refurbed.cz.
|
||||||
|
|
||||||
### Gaming
|
|
||||||
- Xbox 360 S — Trinity motherboard, modified with badupdate exploit for custom software. XCGPU (3c/6t), 0.5GB GDDR3, 500GB HDD.
|
|
||||||
- Xbox One S 2TB — Owned since ~2018 or 2019, used sometimes for Minecraft console edition gliding minigame.
|
|
||||||
|
|
||||||
## Coding Projects
|
## Coding Projects
|
||||||
|
|
||||||
### Games
|
### Games
|
||||||
- Hospital Execution — First real game, made in Pygame. https://martin-dv.itch.io/hospital-execution-demo
|
- Hospital Execution — First real game, made in Pygame. Unfinished. https://martin-dv.itch.io/hospital-execution-demo
|
||||||
- Underbaranoia — Undertale-like infinite fight simulator, made in Pygame. https://martin-dv.itch.io/underbaranoia
|
- Underbaranoia — Undertale-like infinite fight simulator, made in Pygame. https://martin-dv.itch.io/underbaranoia
|
||||||
- Swords and Sandals 2 Pygame Remake — Unfinished remake of the classic flash game (will finish it one day). https://github.com/dvorakmortonxd/sas2py
|
- Underpygametale — Remake of Undertale written in Pygame. Unfinished. https://git.dvorakmortonxd.dev/dvorakmortonxd/underpygametale
|
||||||
- Underpygametale — Remake of Undertale written in Pygame. https://github.com/dvorakmortonxd/underpygametale
|
- Swords and Sandals 2 Pygame Remake — Unfinished remake of the classic flash game (will finish it one day). https://git.dvorakmortonxd.dev/dvorakmortonxd/sas2py
|
||||||
|
- Revival Inc. — Pygame game packaged with Pygbag for Mini Jame Gam #55 (theme: Necromancy, special item: Milk). Playable on the site at https://dvorakmortonxd.dev/revival-inc or https://martin-dv.itch.io/revival-inc
|
||||||
|
- Mandelbrot Set in Pygame — Python script rendering the Mandelbrot set. https://git.dvorakmortonxd.dev/dvorakmortonxd/mandelbrot
|
||||||
|
|
||||||
### Tools & Utilities
|
### Tools & Utilities
|
||||||
- Offline Memer — Parody of the Discord bot "Dank Memer", made in Batch (first published game). https://martin-dv.itch.io/offline-memer
|
- Offline Memer — Parody of the Discord bot "Dank Memer", made in Batch (first published game). https://martin-dv.itch.io/offline-memer
|
||||||
- 4y — Rebranded fork of Ly (Linux login manager), no extra features. Outdated. https://github.com/dvorakmortonxd/4y
|
- 4y — Rebranded fork of Ly (Linux login manager), no extra features. Outdated. https://git.dvorakmortonxd.dev/dvorakmortonxd/4y
|
||||||
- 4rch Linux — Rebranded fork of Arch Linux with the Calamares installer. Outdated. https://github.com/dvorakmortonxd/4rch-linux
|
- 4rch Linux — Rebranded fork of Arch Linux with the Calamares installer. Outdated. https://git.dvorakmortonxd.dev/dvorakmortonxd/4rch-linux
|
||||||
- You_Are_An_Idiot_Virus.py — Python script spamming blinking windows as a prank. https://github.com/dvorakmortonxd/You_Are_An_Idiot_Virus
|
- You_Are_An_Idiot_Virus.py — Python script spamming blinking windows as a prank. https://git.dvorakmortonxd.dev/dvorakmortonxd/uranidiot
|
||||||
- Batch MSDOS Simulator — School project, OS simulator with browser, games, and photos in Batch. https://github.com/dvorakmortonxd/DvorakMSDOS
|
- Batch MSDOS Simulator — School project, OS simulator with browser, games, and photos in Batch. https://git.dvorakmortonxd.dev/dvorakmortonxd/DvorakMSDOS
|
||||||
|
|
||||||
### Browsers
|
### Browsers
|
||||||
- Venturesome — Browser built in Python using PyQtWebEngine with PyQt5. Superseded by RustyWolf. https://github.com/dvorakmortonxd/Venturesome
|
- Venturesome — Browser built in Python using PyQtWebEngine with PyQt5. Superseded by RustyWolf. https://git.dvorakmortonxd.dev/dvorakmortonxd/Venturesome
|
||||||
- RustyWolf — Lightweight browser built in Rust with WebKitGTK. Successor to Venturesome. https://github.com/dvorakmortonxd/RustyWolf
|
- RustyWolf — Lightweight browser built in Rust with WebKitGTK. Successor to Venturesome. https://git.dvorakmortonxd.dev/dvorakmortonxd/RustyWolf
|
||||||
|
|
||||||
### Window Manager
|
### Window Manager
|
||||||
- dxdwm — Minimal X11 window manager written in Rust. https://github.com/dvorakmortonxd/DvorakMSDOS
|
- dxdwm — Minimal X11 window manager written in Rust. https://git.dvorakmortonxd.dev/dvorakmortonxd/dxdwm
|
||||||
|
|
||||||
### Minecraft
|
### Minecraft
|
||||||
- MMO Minecraft Plugin — Basic MMO plugin with custom bosses and items done manually. https://www.youtube.com/watch?v=cSAX5Ds61ac
|
- MMO Minecraft Plugin — Basic MMO plugin with custom bosses and items, done manually. https://www.youtube.com/watch?v=cSAX5Ds61ac
|
||||||
- Various Minecraft servers — Creative Games, Softcraft, Frostville, EuSMP, EurthSMP, SoftSMP, etc. https://discord.gg/KtHRm9kRmy
|
- Various Minecraft servers — Creative Games, Softcraft, Frostville, EuSMP, EurthSMP, SoftSMP, etc. https://discord.gg/KtHRm9kRmy
|
||||||
|
|
||||||
### Other
|
### Other
|
||||||
- PYGETEX — Discord bots collection. (Including a self-bot that auto-advertised a minecraft server). https://github.com/dvorakmortonxd/PYGETEX
|
- PYGETEX — Discord bots collection (including a self-bot that auto-advertised a Minecraft server). https://git.dvorakmortonxd.dev/dvorakmortonxd/PYGETEX
|
||||||
- Ollama Server — Local AI server VM running on Proxmox with RTX 3070 GPU passthrough. https://ai.dvorakmortonxd.dev/
|
- Llama.cpp Server — Local AI server VM running on Proxmox with RTX 3070 GPU passthrough. https://ai.dvorakmortonxd.dev/
|
||||||
- Mandelbrot Set in Pygame — Python script rendering the Mandelbrot set. https://github.com/dvorakmortonxd/mandelbrot
|
- maturita.c — Educational study app being built with Josef Skopec (Pepa). https://git.dvorakmortonxd.dev/edu/maturita.c
|
||||||
- Proxmox Setup — Proxmox setup with over 8 VMs running all local services. https://proxmox.dvorakmortonxd.dev/
|
- GitDXD — Self-hosted Forgejo Git instance, started for himself and friends but now public. https://git.dvorakmortonxd.dev
|
||||||
|
|
||||||
|
## Now
|
||||||
|
|
||||||
|
- Hosting an SMP (DM on Discord).
|
||||||
|
- Bulking through the non-summer seasons, cooking daily.
|
||||||
|
- Building maturita.c, an education app, with Josef Skopec.
|
||||||
|
|
||||||
## Friends
|
## Friends
|
||||||
|
|
||||||
|
|
@ -114,4 +125,4 @@ Martin runs a personal Proxmox homelab server and self-hosts the following servi
|
||||||
- Personal website, not a commercial entity.
|
- Personal website, not a commercial entity.
|
||||||
- Content may be referenced with attribution.
|
- Content may be referenced with attribution.
|
||||||
- Self-hosted services are personal and not intended for public use unless stated.
|
- Self-hosted services are personal and not intended for public use unless stated.
|
||||||
- The Proxmox server is available for VPS/hosting on request (contact via Instagram).
|
- The Proxmox server is available for VPS/hosting on request (contact via Instagram).
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 682 KiB |
|
|
@ -5,7 +5,6 @@
|
||||||
User-agent: *
|
User-agent: *
|
||||||
Allow: /
|
Allow: /
|
||||||
Allow: /llms.txt
|
Allow: /llms.txt
|
||||||
Allow: /llms-full.txt
|
|
||||||
Disallow: /api/
|
Disallow: /api/
|
||||||
Disallow: /_next/
|
Disallow: /_next/
|
||||||
Disallow: /admin/
|
Disallow: /admin/
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<!-- Main page -->
|
<!-- Main page -->
|
||||||
<url>
|
<url>
|
||||||
<loc>https://dvorakmortonxd.dev/</loc>
|
<loc>https://dvorakmortonxd.dev/</loc>
|
||||||
<lastmod>2026-04-14</lastmod>
|
<lastmod>2026-09-20</lastmod>
|
||||||
<changefreq>monthly</changefreq>
|
<changefreq>monthly</changefreq>
|
||||||
<priority>1.0</priority>
|
<priority>1.0</priority>
|
||||||
</url>
|
</url>
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<!-- LLM / AI files -->
|
<!-- LLM / AI files -->
|
||||||
<url>
|
<url>
|
||||||
<loc>https://dvorakmortonxd.dev/llms.txt</loc>
|
<loc>https://dvorakmortonxd.dev/llms.txt</loc>
|
||||||
<lastmod>2026-04-14</lastmod>
|
<lastmod>2026-09-20</lastmod>
|
||||||
<changefreq>monthly</changefreq>
|
<changefreq>monthly</changefreq>
|
||||||
<priority>0.5</priority>
|
<priority>0.5</priority>
|
||||||
</url>
|
</url>
|
||||||
|
|
@ -20,51 +20,45 @@
|
||||||
<!-- Self-hosted services -->
|
<!-- Self-hosted services -->
|
||||||
<url>
|
<url>
|
||||||
<loc>https://proxmox.dvorakmortonxd.dev/</loc>
|
<loc>https://proxmox.dvorakmortonxd.dev/</loc>
|
||||||
<lastmod>2026-04-14</lastmod>
|
<lastmod>2026-09-20</lastmod>
|
||||||
<changefreq>yearly</changefreq>
|
<changefreq>yearly</changefreq>
|
||||||
<priority>0.4</priority>
|
<priority>0.4</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://ai.dvorakmortonxd.dev/</loc>
|
<loc>https://ai.dvorakmortonxd.dev/</loc>
|
||||||
<lastmod>2026-04-14</lastmod>
|
<lastmod>2026-09-20</lastmod>
|
||||||
<changefreq>yearly</changefreq>
|
<changefreq>yearly</changefreq>
|
||||||
<priority>0.4</priority>
|
<priority>0.4</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://jelly.dvorakmortonxd.dev/</loc>
|
<loc>https://jelly.dvorakmortonxd.dev/</loc>
|
||||||
<lastmod>2026-04-14</lastmod>
|
<lastmod>2026-09-20</lastmod>
|
||||||
<changefreq>yearly</changefreq>
|
<changefreq>yearly</changefreq>
|
||||||
<priority>0.4</priority>
|
<priority>0.4</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
|
||||||
<loc>https://fake-pterodactyl.dvorakmortonxd.dev/</loc>
|
|
||||||
<lastmod>2026-04-14</lastmod>
|
|
||||||
<changefreq>yearly</changefreq>
|
|
||||||
<priority>0.3</priority>
|
|
||||||
</url>
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://navidrome.dvorakmortonxd.dev/</loc>
|
<loc>https://navidrome.dvorakmortonxd.dev/</loc>
|
||||||
<lastmod>2026-04-14</lastmod>
|
<lastmod>2026-09-20</lastmod>
|
||||||
<changefreq>yearly</changefreq>
|
<changefreq>yearly</changefreq>
|
||||||
<priority>0.4</priority>
|
<priority>0.4</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
|
||||||
<loc>https://mailcow.dvorakmortonxd.dev/</loc>
|
|
||||||
<lastmod>2026-04-14</lastmod>
|
|
||||||
<changefreq>yearly</changefreq>
|
|
||||||
<priority>0.3</priority>
|
|
||||||
</url>
|
|
||||||
<url>
|
<url>
|
||||||
<loc>https://search.dvorakmortonxd.dev/</loc>
|
<loc>https://search.dvorakmortonxd.dev/</loc>
|
||||||
<lastmod>2026-04-14</lastmod>
|
<lastmod>2026-09-20</lastmod>
|
||||||
<changefreq>yearly</changefreq>
|
<changefreq>yearly</changefreq>
|
||||||
<priority>0.3</priority>
|
<priority>0.3</priority>
|
||||||
</url>
|
</url>
|
||||||
<url>
|
<url>
|
||||||
<loc>https://convert.dvorakmortonxd.dev/</loc>
|
<loc>https://convert.dvorakmortonxd.dev/</loc>
|
||||||
<lastmod>2026-04-14</lastmod>
|
<lastmod>2026-09-20</lastmod>
|
||||||
<changefreq>yearly</changefreq>
|
<changefreq>yearly</changefreq>
|
||||||
<priority>0.3</priority>
|
<priority>0.3</priority>
|
||||||
</url>
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://git.dvorakmortonxd.dev/</loc>
|
||||||
|
<lastmod>2026-09-20</lastmod>
|
||||||
|
<changefreq>yearly</changefreq>
|
||||||
|
<priority>0.4</priority>
|
||||||
|
</url>
|
||||||
|
|
||||||
</urlset>
|
</urlset>
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 6.1 KiB |
|
|
@ -9,7 +9,11 @@ export async function GET(request: Request) {
|
||||||
if (url.startsWith('minecraft://')) {
|
if (url.startsWith('minecraft://')) {
|
||||||
const address = url.replace('minecraft://', '');
|
const address = url.replace('minecraft://', '');
|
||||||
try {
|
try {
|
||||||
const res = await fetch(`https://api.mcsrvstat.us/3/${address}`);
|
// mcsrvstat.us is unreliable at resolving some hostnames, so use mcstatus.io.
|
||||||
|
const res = await fetch(`https://api.mcstatus.io/v2/status/java/${address}`, {
|
||||||
|
signal: AbortSignal.timeout(5000),
|
||||||
|
cache: 'no-store',
|
||||||
|
});
|
||||||
const data = await res.json();
|
const data = await res.json();
|
||||||
return NextResponse.json({ status: data.online ? 'up' : 'down' });
|
return NextResponse.json({ status: data.online ? 'up' : 'down' });
|
||||||
} catch {
|
} catch {
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,16 @@
|
||||||
|
|
||||||
import React, { useEffect, useState, ReactNode } from 'react';
|
import React, { useEffect, useState, ReactNode } from 'react';
|
||||||
|
|
||||||
export default function ServiceButton({ url, checkUrl, className, icon, name, desc, access }: { url: string, checkUrl?: string, className: string, icon: ReactNode, name: string, desc: string, access?: 'public' | 'private' | 'on_request' }) {
|
export default function ServiceButton({ url, checkUrl, className, icon, name, desc, access, disabled }: { url: string, checkUrl?: string, className: string, icon: ReactNode, name: string, desc: string, access?: 'public' | 'private' | 'on_request', disabled?: boolean }) {
|
||||||
const [status, setStatus] = useState<'pending' | 'up' | 'down'>('pending');
|
const [status, setStatus] = useState<'pending' | 'up' | 'down'>(disabled ? 'up' : 'pending');
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
// Disabled buttons are decorative: skip the health check and stay green.
|
||||||
|
if (disabled) {
|
||||||
|
setStatus('up');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const checkStatus = async () => {
|
const checkStatus = async () => {
|
||||||
try {
|
try {
|
||||||
const targetUrl = checkUrl || url;
|
const targetUrl = checkUrl || url;
|
||||||
|
|
@ -17,22 +23,15 @@ export default function ServiceButton({ url, checkUrl, className, icon, name, de
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
checkStatus();
|
checkStatus();
|
||||||
}, [url, checkUrl]);
|
}, [url, checkUrl, disabled]);
|
||||||
|
|
||||||
const statusColor = status === 'up' ? '#4ade80' : status === 'down' ? '#ef4444' : '#9ca3af';
|
const statusColor = status === 'up' ? '#4ade80' : status === 'down' ? '#ef4444' : '#9ca3af';
|
||||||
const statusGlow = status === 'up' ? 'rgba(74, 222, 128, 0.9)' : status === 'down' ? 'rgba(239, 68, 68, 0.9)' : 'transparent';
|
const statusGlow = status === 'up' ? 'rgba(74, 222, 128, 0.9)' : status === 'down' ? 'rgba(239, 68, 68, 0.9)' : 'transparent';
|
||||||
const statusLabel = status === 'up' ? 'Active' : status === 'down' ? 'Dead' : 'Checking...';
|
const statusLabel = status === 'up' ? 'Active' : status === 'down' ? 'Dead' : 'Checking...';
|
||||||
const isFriend = className === 'friend';
|
const isFriend = className === 'friend';
|
||||||
|
|
||||||
return (
|
const content = (
|
||||||
<a
|
<>
|
||||||
href={url}
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
className={`service-button ${className}`}
|
|
||||||
style={{ position: 'relative', '--status-color': statusColor, '--status-glow': statusGlow } as React.CSSProperties}
|
|
||||||
title={statusLabel}
|
|
||||||
>
|
|
||||||
<span className="service-icon-wrap">
|
<span className="service-icon-wrap">
|
||||||
{isFriend && <span className="service-status-dot" />}
|
{isFriend && <span className="service-status-dot" />}
|
||||||
<span className="service-icon">{icon}</span>
|
<span className="service-icon">{icon}</span>
|
||||||
|
|
@ -46,6 +45,39 @@ export default function ServiceButton({ url, checkUrl, className, icon, name, de
|
||||||
</span>
|
</span>
|
||||||
<span className="service-desc">{desc}</span>
|
<span className="service-desc">{desc}</span>
|
||||||
</span>
|
</span>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
const sharedStyle = {
|
||||||
|
position: 'relative',
|
||||||
|
'--status-color': statusColor,
|
||||||
|
'--status-glow': statusGlow,
|
||||||
|
...(disabled ? { cursor: 'default' } : {}),
|
||||||
|
} as React.CSSProperties;
|
||||||
|
|
||||||
|
if (disabled) {
|
||||||
|
return (
|
||||||
|
<span
|
||||||
|
className={`service-button ${className} disabled`}
|
||||||
|
style={sharedStyle}
|
||||||
|
title={statusLabel}
|
||||||
|
aria-disabled="true"
|
||||||
|
>
|
||||||
|
{content}
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<a
|
||||||
|
href={url}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
className={`service-button ${className}`}
|
||||||
|
style={sharedStyle}
|
||||||
|
title={statusLabel}
|
||||||
|
>
|
||||||
|
{content}
|
||||||
</a>
|
</a>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -343,7 +343,7 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
.services-buttons.services-main {
|
.services-buttons.services-main {
|
||||||
grid-template-columns: repeat(4, 1fr);
|
grid-template-columns: repeat(3, 1fr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -480,8 +480,6 @@ body {
|
||||||
.service-button.jellyfin:hover .service-name { color: var(--purple); }
|
.service-button.jellyfin:hover .service-name { color: var(--purple); }
|
||||||
.service-button.pterodactyl:hover .service-name { color: var(--red); }
|
.service-button.pterodactyl:hover .service-name { color: var(--red); }
|
||||||
.service-button.funkwhale:hover .service-name { color: var(--darkpink); }
|
.service-button.funkwhale:hover .service-name { color: var(--darkpink); }
|
||||||
.service-button.searxng:hover .service-name { color: var(--aqua); }
|
|
||||||
.service-button.convertx:hover .service-name { color: var(--gray); }
|
|
||||||
.service-button.gitdxd:hover .service-name { color: var(--purple); }
|
.service-button.gitdxd:hover .service-name { color: var(--purple); }
|
||||||
|
|
||||||
.service-button.proxmox { border-color: rgba(168, 153, 132, 0.1); }
|
.service-button.proxmox { border-color: rgba(168, 153, 132, 0.1); }
|
||||||
|
|
@ -489,8 +487,6 @@ body {
|
||||||
.service-button.jellyfin { border-color: rgba(168, 153, 132, 0.1); }
|
.service-button.jellyfin { border-color: rgba(168, 153, 132, 0.1); }
|
||||||
.service-button.pterodactyl { border-color: rgba(168, 153, 132, 0.1); }
|
.service-button.pterodactyl { border-color: rgba(168, 153, 132, 0.1); }
|
||||||
.service-button.funkwhale { border-color: rgba(255, 0, 67, 0.1); }
|
.service-button.funkwhale { border-color: rgba(255, 0, 67, 0.1); }
|
||||||
.service-button.searxng { border-color: rgba(168, 153, 132, 0.1); }
|
|
||||||
.service-button.convertx { border-color: rgba(168, 153, 132, 0.1); }
|
|
||||||
.service-button.gitdxd { border-color: rgba(255, 0, 67, 0.1); }
|
.service-button.gitdxd { border-color: rgba(255, 0, 67, 0.1); }
|
||||||
|
|
||||||
.service-desc {
|
.service-desc {
|
||||||
|
|
|
||||||
|
|
@ -107,8 +107,8 @@ const codingProjects = [
|
||||||
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/sas2py",
|
url: "https://git.dvorakmortonxd.dev/dvorakmortonxd/sas2py",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Ollama server",
|
title: "Llama.cpp server",
|
||||||
desc: "my ollama vm running on my proxmox with a gpu passthroughed RTX 3070, dm me if u wanna test it lol.",
|
desc: "my llama.cpp vm running on my proxmox with a gpu passthroughed RTX 3070, dm me if u wanna test it lol.",
|
||||||
img: "/coding-14.webp",
|
img: "/coding-14.webp",
|
||||||
url: "https://ai.dvorakmortonxd.dev/",
|
url: "https://ai.dvorakmortonxd.dev/",
|
||||||
},
|
},
|
||||||
|
|
@ -162,7 +162,7 @@ export default function Home() {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Proxmox Server",
|
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 (ollama), 68gb ddr4 rdimm ram (2*16gb, 1*32gb, 1*4gb), 256gb of sata m2 space + 1tb hdd + 750gb hdd.",
|
desc: "my personal proxmox server (dm me on ig if u need a VPS/hosting), specs: Xeon E5 2680 v4 (14c/28t), RTX 3070 (llama.cpp), 68gb ddr4 rdimm ram (2*16gb, 1*32gb, 1*4gb), 256gb of sata m2 space + 1tb hdd + 750gb hdd.",
|
||||||
image: "/proxmox-server.webp",
|
image: "/proxmox-server.webp",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -388,12 +388,13 @@ export default function Home() {
|
||||||
name="Proxmox"
|
name="Proxmox"
|
||||||
desc="Server Management"
|
desc="Server Management"
|
||||||
access="private"
|
access="private"
|
||||||
|
disabled
|
||||||
/>
|
/>
|
||||||
<ServiceButton
|
<ServiceButton
|
||||||
url="https://ai.dvorakmortonxd.dev/"
|
url="https://ai.dvorakmortonxd.dev/"
|
||||||
className="ai"
|
className="ai"
|
||||||
icon="🦾"
|
icon="🦾"
|
||||||
name="Ollama"
|
name="Llama.cpp"
|
||||||
desc="Local AI Server"
|
desc="Local AI Server"
|
||||||
access="on_request"
|
access="on_request"
|
||||||
/>
|
/>
|
||||||
|
|
@ -422,22 +423,6 @@ export default function Home() {
|
||||||
desc="Music Streaming"
|
desc="Music Streaming"
|
||||||
access="private"
|
access="private"
|
||||||
/>
|
/>
|
||||||
<ServiceButton
|
|
||||||
url="https://search.dvorakmortonxd.dev/"
|
|
||||||
className="searxng"
|
|
||||||
icon="🔦"
|
|
||||||
name="SearXNG"
|
|
||||||
desc="Private Search"
|
|
||||||
access="private"
|
|
||||||
/>
|
|
||||||
<ServiceButton
|
|
||||||
url="https://convert.dvorakmortonxd.dev/"
|
|
||||||
className="convertx"
|
|
||||||
icon="📽️"
|
|
||||||
name="ConvertX"
|
|
||||||
desc="File Converter"
|
|
||||||
access="on_request"
|
|
||||||
/>
|
|
||||||
<ServiceButton
|
<ServiceButton
|
||||||
url="https://git.dvorakmortonxd.dev"
|
url="https://git.dvorakmortonxd.dev"
|
||||||
className="gitdxd"
|
className="gitdxd"
|
||||||
|
|
@ -612,7 +597,7 @@ export default function Home() {
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<footer className="footer">
|
<footer className="footer">
|
||||||
<span className="footer-label">v1.2.0</span>
|
<span className="footer-label">v1.2.1</span>
|
||||||
© 2025-2026 Martin Dvořák. All rights reserved (not really I dont care, just follow the GPL3.0 License)
|
© 2025-2026 Martin Dvořák. All rights reserved (not really I dont care, just follow the GPL3.0 License)
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,235 +0,0 @@
|
||||||
import Image from "next/image";
|
|
||||||
import "../page.css";
|
|
||||||
import { Metadata } from 'next';
|
|
||||||
import type { CSSProperties } from 'react';
|
|
||||||
import JokerLogo from "../components/JokerLogo";
|
|
||||||
import ServiceButton from "../components/ServiceButton";
|
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
|
||||||
title: 'dvorakmortonxd.dev/softcraft',
|
|
||||||
description: 'Welcome to the Softcraft Minecraft Server info page!',
|
|
||||||
openGraph: {
|
|
||||||
title: 'dvorakmortonxd.dev/softcraft',
|
|
||||||
description: 'Welcome to the Softcraft Minecraft Server info page!',
|
|
||||||
url: 'https://dvorakmortonxd.dev/softcraft',
|
|
||||||
siteName: 'dvorakmortonxd.dev',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
type PanelStyle = CSSProperties & { '--panel-color'?: string };
|
|
||||||
|
|
||||||
const panelStyle = (color: string, style: CSSProperties = {}): PanelStyle => ({
|
|
||||||
...style,
|
|
||||||
'--panel-color': color,
|
|
||||||
});
|
|
||||||
|
|
||||||
export default function Softcraft() {
|
|
||||||
return <>
|
|
||||||
<style>{`
|
|
||||||
@keyframes mc-panorama-pan {
|
|
||||||
0% { background-position: 0% center; }
|
|
||||||
100% { background-position: 100% center; }
|
|
||||||
}
|
|
||||||
|
|
||||||
.header, .hero-panel, .tui-panel, .footer, .service-button, .social-button, .video-container, .hero-panel-label, .tui-panel-label, .footer-label {
|
|
||||||
background-image: linear-gradient(rgba(10, 10, 10, 0.85), rgba(10, 10, 10, 0.85)), url(/dirt.webp) !important;
|
|
||||||
background-repeat: repeat !important;
|
|
||||||
background-size: 64px !important;
|
|
||||||
image-rendering: pixelated !important;
|
|
||||||
background-color: transparent !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.terminal-box {
|
|
||||||
background-image: linear-gradient(rgba(0, 0, 0, 0.95), rgba(0, 0, 0, 0.95)), url(/dirt.webp) !important;
|
|
||||||
background-repeat: repeat !important;
|
|
||||||
background-size: 64px !important;
|
|
||||||
image-rendering: pixelated !important;
|
|
||||||
}
|
|
||||||
`}</style>
|
|
||||||
<div style={{
|
|
||||||
position: 'fixed',
|
|
||||||
top: 0,
|
|
||||||
left: 0,
|
|
||||||
width: '100vw',
|
|
||||||
height: '100vh',
|
|
||||||
zIndex: -1,
|
|
||||||
backgroundImage: 'url(/minecrafttest2.webp)',
|
|
||||||
backgroundSize: 'cover',
|
|
||||||
animation: 'mc-panorama-pan 120s linear infinite alternate',
|
|
||||||
filter: 'brightness(0.6)'
|
|
||||||
}} />
|
|
||||||
<div className="container">
|
|
||||||
|
|
||||||
{/* Header - TUI top bar */}
|
|
||||||
<header className="header">
|
|
||||||
<div className="header-center">
|
|
||||||
<JokerLogo />
|
|
||||||
<h1 className="site-name">dvorakmortonxd.dev/softcraft</h1>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
{/* Hero - TUI welcome panel */}
|
|
||||||
<main className="hero">
|
|
||||||
<div className="hero-panel" style={panelStyle('var(--accent)')}>
|
|
||||||
<span className="hero-panel-label">~ ABOUT_SOFTCRAFT.MD</span>
|
|
||||||
<h2 className="hero-title">$ ./start_softcraft.sh</h2>
|
|
||||||
<p className="hero-subtitle">
|
|
||||||
Welcome to the Softcraft info page! {'>'}:)<span className="cursor-blink"></span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Server Info Panel */}
|
|
||||||
<div className="about-section">
|
|
||||||
<div className="tui-panel" style={panelStyle('var(--accent)')}>
|
|
||||||
<span className="tui-panel-label label-yellow">├─ neofetch</span>
|
|
||||||
<div className="about-content">
|
|
||||||
<p>
|
|
||||||
<span className="text-green">martin@dvorakmortonxd</span>:<span className="text-blue">~/softcraft</span>$ neofetch
|
|
||||||
</p>
|
|
||||||
<div style={{ display: 'flex', gap: '2rem', marginTop: '1.5rem', alignItems: 'center', flexWrap: 'wrap', color: '#a3a3a3' }}>
|
|
||||||
|
|
||||||
<div style={{ flexShrink: 0 }}>
|
|
||||||
<Image
|
|
||||||
src="/softcraft.webp"
|
|
||||||
alt="Softcraft Logo"
|
|
||||||
width={128}
|
|
||||||
height={128}
|
|
||||||
style={{ imageRendering: 'pixelated', borderRadius: '8px' }}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style={{ flex: 1, minWidth: '250px', lineHeight: '1.6' }}>
|
|
||||||
<div className="terminal-box" style={{ padding: '15px', borderRadius: '8px', border: '1px dashed #444', marginTop: '-10px' }}>
|
|
||||||
<p style={{ margin: '0 0 5px 0', color: '#22c55e', fontWeight: 'bold' }}>martin<span style={{ color: '#fff' }}>@</span>softcraft</p>
|
|
||||||
<p style={{ margin: '0 0 10px 0' }}>----------------</p>
|
|
||||||
<p style={{ margin: '0' }}><strong>OS</strong>: Purpur 1.21.11 or newer on Debian 13 Trixie</p>
|
|
||||||
<p style={{ margin: '0' }}><strong>Host/IP Adress</strong>: <span style={{ color: '#fff' }}>mc.dvorakmortonxd.dev</span></p>
|
|
||||||
<p style={{ margin: '0' }}><strong>Uptime</strong>: 24/7</p>
|
|
||||||
<p style={{ margin: '0' }}><strong>Rules</strong>: Little to no chat control, just enjoy the game bro</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style={{ display: 'flex', gap: '0.5rem', marginTop: '15px' }}>
|
|
||||||
<span style={{ width: '16px', height: '16px', backgroundColor: '#000000', display: 'inline-block' }}></span>
|
|
||||||
<span style={{ width: '16px', height: '16px', backgroundColor: '#ef4444', display: 'inline-block' }}></span>
|
|
||||||
<span style={{ width: '16px', height: '16px', backgroundColor: '#22c55e', display: 'inline-block' }}></span>
|
|
||||||
<span style={{ width: '16px', height: '16px', backgroundColor: '#eab308', display: 'inline-block' }}></span>
|
|
||||||
<span style={{ width: '16px', height: '16px', backgroundColor: '#3b82f6', display: 'inline-block' }}></span>
|
|
||||||
<span style={{ width: '16px', height: '16px', backgroundColor: '#d946ef', display: 'inline-block' }}></span>
|
|
||||||
<span style={{ width: '16px', height: '16px', backgroundColor: '#06b6d4', display: 'inline-block' }}></span>
|
|
||||||
<span style={{ width: '16px', height: '16px', backgroundColor: '#ffffff', display: 'inline-block' }}></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Links Panel */}
|
|
||||||
<div className="services-section" style={{ marginTop: '20px' }}>
|
|
||||||
<div className="tui-panel" style={panelStyle('var(--blue)')}>
|
|
||||||
<span className="tui-panel-label label-blue">├─ LINKS.SH</span>
|
|
||||||
<div className="services-buttons" style={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '1rem' }}>
|
|
||||||
<ServiceButton
|
|
||||||
url="https://bluemap.dvorakmortonxd.dev"
|
|
||||||
className="bluemap"
|
|
||||||
icon="🗺️"
|
|
||||||
name="Live Server Map"
|
|
||||||
desc="View the world in 3D"
|
|
||||||
/>
|
|
||||||
<ServiceButton
|
|
||||||
url="https://discord-sc.dvorakmortonxd.dev"
|
|
||||||
className="discord-sc"
|
|
||||||
icon={<Image src="/discord.svg" alt="Discord" width={28} height={28} />}
|
|
||||||
name="Community Discord"
|
|
||||||
desc="Chat with other players"
|
|
||||||
/>
|
|
||||||
<ServiceButton
|
|
||||||
url="https://dvorakmortonxd.dev"
|
|
||||||
className="back-home"
|
|
||||||
icon="🏠"
|
|
||||||
name="Main Site"
|
|
||||||
desc="cd .."
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Vote Panel */}
|
|
||||||
<div className="services-section" style={{ marginTop: '20px' }}>
|
|
||||||
<div className="tui-panel" style={panelStyle('var(--accent)')}>
|
|
||||||
<span className="tui-panel-label label-yellow">├─ VOTE_HERE.JS</span>
|
|
||||||
<div className="services-buttons" style={{ display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', gap: '1rem' }}>
|
|
||||||
<ServiceButton
|
|
||||||
url="https://czech-craft.eu/server/softcraft-refreshed/"
|
|
||||||
className="vote"
|
|
||||||
icon="⭐"
|
|
||||||
name="Czech-Craft"
|
|
||||||
desc="Vote for us!"
|
|
||||||
/>
|
|
||||||
<ServiceButton
|
|
||||||
url="https://www.minecraft-list.cz/server/softcraft-refreshed"
|
|
||||||
className="vote"
|
|
||||||
icon="⭐"
|
|
||||||
name="Minecraft-List.cz"
|
|
||||||
desc="Vote for us!"
|
|
||||||
/>
|
|
||||||
<ServiceButton
|
|
||||||
url="https://minecraftservery.eu/server/softcraft-refreshed"
|
|
||||||
className="vote"
|
|
||||||
icon="⭐"
|
|
||||||
name="MinecraftServery.eu"
|
|
||||||
desc="Vote for us!"
|
|
||||||
/>
|
|
||||||
<ServiceButton
|
|
||||||
url="https://craftlist.org/softcraft"
|
|
||||||
className="vote"
|
|
||||||
icon="⭐"
|
|
||||||
name="CraftList.org"
|
|
||||||
desc="Vote for us!"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* Video Panel */}
|
|
||||||
<div className="video-section" style={{ marginTop: '20px' }}>
|
|
||||||
<div className="tui-panel" style={panelStyle('#ec4899')}>
|
|
||||||
<span className="tui-panel-label" style={{ color: '#ec4899', borderColor: '#ec4899' }}>└─ BASH 'LS ./VIDEOS/'</span>
|
|
||||||
<div className="video-grid" style={{ marginTop: '10px' }}>
|
|
||||||
{[
|
|
||||||
"ifBnNS8X3O8",
|
|
||||||
"fQ3T374cpZk",
|
|
||||||
"yYrzQkhp8CQ",
|
|
||||||
"gIl01RaQjcI",
|
|
||||||
"e3gjtyPNZjg",
|
|
||||||
"P97CC3BWvg4",
|
|
||||||
"uPNN6LppOsg",
|
|
||||||
"NCy-h29lfzM"
|
|
||||||
].map(id => (
|
|
||||||
<div key={id} className="video-container" style={{ width: '100%', aspectRatio: '16/9', borderRadius: '8px', overflow: 'hidden', transform: 'translateZ(0)' }}>
|
|
||||||
<iframe
|
|
||||||
width="100%"
|
|
||||||
height="100%"
|
|
||||||
src={`https://www.youtube.com/embed/${id}`}
|
|
||||||
title="YouTube video player"
|
|
||||||
frameBorder="0"
|
|
||||||
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
||||||
allowFullScreen
|
|
||||||
loading="lazy"
|
|
||||||
style={{ border: 'none' }}
|
|
||||||
></iframe>
|
|
||||||
</div>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<footer className="footer">
|
|
||||||
<span className="footer-label">v1.6.7</span>
|
|
||||||
© 2025-2026 Martin Dvořák. All rights reserved
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
</>
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue