full on update with new npm and instructions and maintenance update

This commit is contained in:
dvorakmortonxd 2026-09-13 22:11:06 +02:00
commit b0bd9cc7b3
10 changed files with 2392 additions and 1281 deletions

View file

@ -19,20 +19,24 @@ export default function ServiceButton({ url, checkUrl, className, icon, name, de
checkStatus();
}, [url, checkUrl]);
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 statusLabel = status === 'up' ? 'Active' : status === 'down' ? 'Dead' : 'Checking...';
const isFriend = className === 'friend';
return (
<a href={url} target="_blank" rel="noopener noreferrer" className={`service-button ${className}`} style={{ position: 'relative' }}>
<div style={{
position: 'absolute',
top: '8px',
right: '8px',
width: '10px',
height: '10px',
borderRadius: '50%',
backgroundColor: status === 'up' ? '#4ade80' : status === 'down' ? '#ef4444' : '#9ca3af',
boxShadow: status === 'up' ? '0 0 5px #4ade80' : status === 'down' ? '0 0 5px #ef4444' : 'none',
transition: 'all 0.3s ease'
}} title={status === 'up' ? 'Active' : status === 'down' ? 'Dead' : 'Checking...'} />
<span className="service-icon">{icon}</span>
<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">
{isFriend && <span className="service-status-dot" />}
<span className="service-icon">{icon}</span>
</span>
<span className="service-text">
<span className="service-name">
{name}

View file

@ -342,6 +342,10 @@ body {
padding: 12px 0;
}
.services-buttons.services-main {
grid-template-columns: repeat(4, 1fr);
}
.service-button {
display: flex;
@ -387,12 +391,51 @@ body {
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
.service-icon-wrap {
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.service-status-dot {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 36px;
height: 36px;
border-radius: 50%;
z-index: 0;
pointer-events: none;
transition: all 0.3s ease;
}
.service-icon {
position: relative;
z-index: 1;
font-size: 1.25rem;
transition: transform 0.15s ease;
transition: transform 0.15s ease, filter 0.3s ease;
width: 28px;
text-align: center;
filter: none;
height: 28px;
display: inline-flex;
align-items: center;
justify-content: center;
filter: drop-shadow(0 0 4px var(--status-glow)) drop-shadow(0 0 10px var(--status-glow));
}
.service-button.friend .service-status-dot {
z-index: 2;
top: auto;
left: auto;
bottom: 8px;
right: 8px;
width: 12px;
height: 12px;
transform: none;
background: var(--status-color);
box-shadow: 0 0 5px var(--status-color);
}
.service-button:hover .service-icon {
@ -407,6 +450,7 @@ body {
border-radius: 50%;
overflow: hidden;
flex-shrink: 0;
filter: none;
}
.friend-icon {
@ -436,7 +480,6 @@ body {
.service-button.jellyfin:hover .service-name { color: var(--purple); }
.service-button.pterodactyl:hover .service-name { color: var(--red); }
.service-button.funkwhale:hover .service-name { color: var(--darkpink); }
.service-button.mailcow:hover .service-name { color: var(--accent); }
.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); }
@ -446,7 +489,6 @@ body {
.service-button.jellyfin { 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.mailcow { border-color: rgba(168, 153, 132, 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); }
@ -792,6 +834,10 @@ body {
grid-template-columns: 1fr;
}
.services-buttons.services-main {
grid-template-columns: 1fr;
}
.friends-buttons {
grid-template-columns: 1fr;
}

View file

@ -352,7 +352,7 @@ export default function Home() {
</p>
<div style={{ color: '#a3a3a3' }}>
<p>
I&#39;m currently hosting an SMP (dm me on discord). Also I&#39;m pretty much cooking daily, because im bulking through out the non-summer seasons. And me and my pal <span className="text-purple-500"><a href="https://skopec.dev">Pepa</a></span> are working on an education app so we can study more efficiently, It's called <span className="text-purple-500"><a href="https://git.dvorakmortonxd.dev/edu/maturita.c">maturita.c</a></span>!
I&#39;m currently hosting an SMP (dm me on discord). Also I&#39;m pretty much cooking daily, because im bulking through out the non-summer seasons. And me and my pal <span className="text-purple-500"><a href="https://skopec.dev">Pepa</a></span> are working on an education app so we can study more efficiently, It&#39;s called <span className="text-purple-500"><a href="https://git.dvorakmortonxd.dev/edu/maturita.c">maturita.c</a></span>!
</p>
</div>
</div>
@ -380,7 +380,7 @@ export default function Home() {
<div className="services-section">
<div className="tui-panel" style={panelStyle('var(--accent)')}>
<span className="tui-panel-label" style={{ color: 'var(--accent)', borderColor: 'var(--accent)' }}>SERVICES.HTML</span>
<div className="services-buttons">
<div className="services-buttons services-main">
<ServiceButton
url="https://proxmox.dvorakmortonxd.dev/"
className="proxmox"
@ -421,14 +421,6 @@ export default function Home() {
desc="Music Streaming"
access="private"
/>
<ServiceButton
url="https://mailcow.dvorakmortonxd.dev/"
className="mailcow"
icon="💌"
name="Mailcow"
desc="Email Server"
access="private"
/>
<ServiceButton
url="https://search.dvorakmortonxd.dev/"
className="searxng"