add homelab info
Build and Deploy Docker / build (push) Successful in 1m21s
Build and Deploy Docker / deploy (push) Successful in 44s

This commit is contained in:
2026-07-15 00:12:26 +02:00
parent 0611fc06a9
commit 277daf1f7d
4 changed files with 128 additions and 0 deletions
+49
View File
@@ -317,6 +317,55 @@ a { color: inherit; text-decoration: none; }
.action-live:hover { background: rgba(255, 138, 91, 0.24); }
.action svg { width: 15px; height: 15px; }
/* --- homelab ------------------------------------------------------------ */
.lab-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 18px;
}
.lab-card {
background: var(--surface);
border: 1px solid var(--line);
border-radius: var(--radius);
padding: 22px 22px 24px;
display: flex;
flex-direction: column;
transition: border-color 0.18s, transform 0.18s;
}
.lab-card:hover { border-color: var(--line-strong); transform: translateY(-3px); }
.lab-card--featured {
border-color: rgba(255, 138, 91, 0.4);
background: linear-gradient(160deg, var(--coral-soft), transparent 60%), var(--surface);
grid-column: 1 / -1;
}
.lab-head {
display: flex;
align-items: baseline;
gap: 12px;
margin-bottom: 12px;
flex-wrap: wrap;
}
.lab-name {
font-family: var(--display);
font-size: 1.12rem;
font-weight: 600;
color: var(--text);
}
.lab-tag {
font-family: var(--mono);
font-size: 0.72rem;
color: var(--coral);
background: var(--coral-soft);
border-radius: 6px;
padding: 3px 8px;
}
.lab-desc { color: var(--muted); font-size: 0.95rem; margin: 0; line-height: 1.55; }
@media (min-width: 720px) {
.lab-card--featured .lab-desc { max-width: 68ch; }
}
/* --- webview modal (signature) ------------------------------------------ */
.webview {
@@ -16,6 +16,7 @@ class HomeController extends AbstractController
'profile' => $content->profile(),
'technologies' => $content->technologies(),
'projects' => $content->projects(),
'homelab' => $content->homelab(),
]);
}
}
@@ -48,6 +48,61 @@ final class PortfolioContent
];
}
/**
* Homelab — własna infrastruktura self-hosted.
*
* @return array{lead: string, services: list<array{name: string, role: string, description: string, featured?: bool}>}
*/
public function homelab(): array
{
return [
'lead' => 'Cała powyższa infrastruktura działa na moim własnym serwerze fizycznym — od hypervisora, przez sieć i reverse proxy, aż po usługi, z których korzystam na co dzień. Wszystko postawione, skonfigurowane i utrzymywane samodzielnie.',
'services' => [
[
'name' => 'Proxmox VE',
'role' => 'Hypervisor',
'description' => 'Serwer fizyczny postawiony i skonfigurowany od zera. Zarządza maszynami wirtualnymi i kontenerami LXC — stanowi fundament całego homelaba.',
'featured' => true,
],
[
'name' => 'Traefik',
'role' => 'Reverse proxy',
'description' => 'Routing ruchu do poszczególnych usług oraz automatyczne zarządzanie certyfikatami TLS. Każdy serwis dostępny pod własną subdomeną po HTTPS.',
],
[
'name' => 'VM z Dockerem',
'role' => 'Konteneryzacja',
'description' => 'Dedykowana maszyna wirtualna hostująca aplikacje w kontenerach Docker — spójne, powtarzalne środowisko uruchomieniowe dla self-hosted usług.',
],
[
'name' => 'Home Assistant',
'role' => 'Smart home',
'description' => 'Centrum automatyki domowej — integracja urządzeń, scenariusze i sterowanie inteligentnym domem w jednym miejscu.',
],
[
'name' => 'Gitea',
'role' => 'Git hosting',
'description' => 'Własny, lekki hosting repozytoriów Git. Prywatne repozytoria i pełna kontrola nad kodem bez zależności od zewnętrznych usług.',
],
[
'name' => 'Immich',
'role' => 'Zdjęcia',
'description' => 'Prywatna galeria i backup zdjęć oraz filmów — self-hosted alternatywa dla chmury, z automatycznym uploadem z telefonu.',
],
[
'name' => 'Nextcloud',
'role' => 'Chmura plików',
'description' => 'Osobista chmura na pliki, kalendarz i kontakty. Synchronizacja i współdzielenie danych na własnych warunkach.',
],
[
'name' => 'Vaultwarden',
'role' => 'Menedżer haseł',
'description' => 'Self-hosted menedżer haseł kompatybilny z Bitwarden. Wszystkie sekrety trzymane lokalnie, pod pełną kontrolą.',
],
],
];
}
/**
* Lista projektów.
*
+23
View File
@@ -10,6 +10,7 @@
<a href="#o-mnie">o&nbsp;mnie</a>
<a href="#stack">stack</a>
<a href="#projekty">projekty <span class="nav-count">[{{ projects|length }}]</span></a>
<a href="#homelab">homelab</a>
<a href="#kontakt">kontakt</a>
</nav>
</div>
@@ -165,6 +166,28 @@
</div>
</dialog>
</section>
{# ---- HOMELAB ---- #}
<section class="section reveal" id="homelab">
<div class="wrap">
<div class="section-head">
<p class="eyebrow">homelab</p>
<h2 class="section-title">Własna infrastruktura, self-hosted</h2>
<p class="section-lead">{{ homelab.lead }}</p>
</div>
<div class="lab-grid">
{% for service in homelab.services %}
<div class="lab-card{{ service.featured is defined and service.featured ? ' lab-card--featured' : '' }}">
<div class="lab-head">
<span class="lab-name">{{ service.name }}</span>
<span class="lab-tag">{{ service.role }}</span>
</div>
<p class="lab-desc">{{ service.description }}</p>
</div>
{% endfor %}
</div>
</div>
</section>
</main>
<footer class="site-footer" id="kontakt">