Update website with actual homelab specs and services - ImpulsiveFPS

This commit is contained in:
Roberth Rajala 2026-02-01 16:40:31 +01:00
parent 6683b5963e
commit 0771b37ee2
2 changed files with 382 additions and 134 deletions

260
PORTAINER_DEPLOY.md Normal file
View File

@ -0,0 +1,260 @@
# 🐳 Portainer Deployment Guide
Deploy LemonLink to your Portainer Docker VM in minutes!
---
## 📋 Prerequisites
- Portainer accessible at `http://your-vm-ip:9000`
- SSH access to your Docker VM
- Files uploaded to Gitea (✓ Done!)
---
## 🎯 Method 1: Git Clone in VM (Recommended)
### Step 1: SSH into Your Docker VM
```bash
ssh root@your-docker-vm-ip
```
### Step 2: Clone from Gitea
```bash
# Create directory
mkdir -p /opt
# Clone your repository
cd /opt
git clone https://git.lemonlink.eu/impulsivefps/lemonlink.git
# Enter directory
cd lemonlink
```
**If Gitea requires authentication:**
```bash
# Use token in URL (replace YOUR_TOKEN)
git clone https://impulsivefps:YOUR_TOKEN@git.lemonlink.eu/impulsivefps/lemonlink.git
```
### Step 3: Verify Files
```bash
ls -la
# Should show: index.html, styles.css, script.js, docker-compose.yml, etc.
```
---
## 🎯 Method 2: Direct File Upload (No Git)
If you prefer not to use Git on the VM:
### From Your Windows Machine:
```powershell
# Using SCP (from PowerShell)
scp index.html styles.css script.js nginx.conf docker-compose.yml root@your-docker-vm-ip:/opt/lemonlink/
# Create directory first if needed:
ssh root@your-docker-vm-ip "mkdir -p /opt/lemonlink"
```
Or use **WinSCP** GUI to drag and drop files to `/opt/lemonlink/`.
---
## 🚀 Deploy in Portainer
### Step 1: Open Portainer
1. Go to: `http://your-docker-vm-ip:9000`
2. Log in to Portainer
### Step 2: Create the Stack
1. Click **Stacks** in the left sidebar
2. Click **+ Add Stack** (or "Add stack" button)
3. Configure:
- **Name**: `lemonlink`
- **Build method**: Select **Web editor**
4. Paste this into the editor:
```yaml
version: '3.8'
services:
lemonlink:
image: nginx:alpine
container_name: lemonlink-landing
restart: unless-stopped
volumes:
- /opt/lemonlink/index.html:/usr/share/nginx/html/index.html:ro
- /opt/lemonlink/styles.css:/usr/share/nginx/html/styles.css:ro
- /opt/lemonlink/script.js:/usr/share/nginx/html/script.js:ro
- /opt/lemonlink/nginx.conf:/etc/nginx/conf.d/default.conf:ro
networks:
- lemonlink-network
ports:
- "8080:80"
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
labels:
- "com.lemonlink.description=LemonLink Landing Page"
networks:
lemonlink-network:
driver: bridge
name: lemonlink-network
```
5. Click **Deploy the stack**
6. Wait for green "up" indicator (takes ~10-20 seconds)
---
## ✅ Verify Deployment
### Check in Portainer:
1. Go to **Containers**
2. Look for `lemonlink-landing`
3. Status should show **running** (green)
### Test the Website:
```bash
# From your local machine
curl http://your-docker-vm-ip:8080
```
Or open browser: `http://your-docker-vm-ip:8080`
You should see your stunning LemonLink page! 🍋
---
## 🔄 Updating After Changes
When you make changes and push to Gitea:
### Option 1: Pull in VM (Recommended)
```bash
ssh root@your-docker-vm-ip
cd /opt/lemonlink
git pull origin master
# Changes reflect instantly - no restart needed!
```
### Option 2: Webhook Auto-Deploy (Advanced)
Set up a webhook in Gitea to auto-deploy on push.
---
## 🔒 Adding HTTPS (Optional)
If you have Traefik or Nginx Proxy Manager:
### With Traefik:
Replace the stack with:
```yaml
version: '3.8'
services:
lemonlink:
image: nginx:alpine
container_name: lemonlink-landing
restart: unless-stopped
volumes:
- /opt/lemonlink/index.html:/usr/share/nginx/html/index.html:ro
- /opt/lemonlink/styles.css:/usr/share/nginx/html/styles.css:ro
- /opt/lemonlink/script.js:/usr/share/nginx/html/script.js:ro
- /opt/lemonlink/nginx.conf:/etc/nginx/conf.d/default.conf:ro
networks:
- traefik-public # Your Traefik network name
# NO PORTS - Traefik handles this
labels:
- "traefik.enable=true"
- "traefik.http.routers.lemonlink.rule=Host(`lemonlink.eu`)"
- "traefik.http.routers.lemonlink.entrypoints=websecure"
- "traefik.http.routers.lemonlink.tls.certresolver=letsencrypt"
- "traefik.http.services.lemonlink.loadbalancer.server.port=80"
networks:
traefik-public:
external: true
```
Then point DNS `lemonlink.eu` → your VM's public IP.
---
## 🛠️ Troubleshooting
### Container won't start
```bash
# Check logs in Portainer:
# Containers → lemonlink-landing → Logs
# Or via SSH:
docker logs lemonlink-landing
```
### "404 Not Found"
Check files exist:
```bash
ls -la /opt/lemonlink/
# Should show index.html, styles.css, script.js
```
### Port already in use
Change port in the stack:
```yaml
ports:
- "8081:80" # Use 8081 instead of 8080
```
### Permission denied
```bash
# Fix permissions
chmod -R 755 /opt/lemonlink/
```
---
## 📊 Useful Portainer Commands
| Action | Location |
|--------|----------|
| View logs | Containers → lemonlink-landing → Logs |
| Restart | Containers → lemonlink-landing → Restart |
| Edit stack | Stacks → lemonlink → Editor |
| Delete | Stacks → lemonlink → Delete |
---
## 🎉 Success!
Your stunning LemonLink landing page is now live at:
**http://your-docker-vm-ip:8080**
---
**Questions?** Check the container logs in Portainer! 🚀

View File

@ -53,9 +53,9 @@
<span class="title-line title-gradient">LemonLink</span>
</h1>
<p class="hero-subtitle">
A cutting-edge homelab ecosystem hosting innovative services,
powerful applications, and experimental projects.
Built with passion, powered by curiosity.
A powerful homelab ecosystem running on enterprise-grade hardware.
Hosting 50+ services across dual Xeon servers and Raspberry Pi 5.
Built by ImpulsiveFPS with passion for self-hosting.
</p>
<div class="hero-stats">
<div class="stat-item">
@ -71,7 +71,7 @@
<div class="stat-item">
<span class="stat-number" data-target="50">0</span>
<span class="stat-suffix">+</span>
<span class="stat-label">Services</span>
<span class="stat-label">Containers</span>
</div>
</div>
<div class="hero-cta">
@ -169,12 +169,12 @@
</div>
</div>
<div class="infra-content">
<h3>Proxmox Cluster</h3>
<p>3-node high-availability virtualization cluster with Ceph storage</p>
<h3>Proxmox Server</h3>
<p>Dell PowerEdge with dual Xeon processors running Proxmox VE with 50+ containers and VMs</p>
<div class="infra-specs">
<span class="spec">96 Cores</span>
<span class="spec">384 GB RAM</span>
<span class="spec">20 TB SSD</span>
<span class="spec">24 Cores</span>
<span class="spec">96 GB RAM</span>
<span class="spec">2x Xeon E5645</span>
</div>
</div>
</div>
@ -183,11 +183,11 @@
<div class="infra-icon">🖧</div>
<div class="infra-content">
<h3>Network Stack</h3>
<p>UniFi ecosystem with 10G backbone and advanced VLAN segmentation</p>
<p>1 Gbps fiber internet with managed switching and Tailscale mesh VPN</p>
<div class="infra-specs">
<span class="spec">10 Gbps</span>
<span class="spec">UniFi</span>
<span class="spec">VLAN</span>
<span class="spec">1 Gbps</span>
<span class="spec">Tailscale</span>
<span class="spec">NPM</span>
</div>
</div>
</div>
@ -196,24 +196,24 @@
<div class="infra-icon">💾</div>
<div class="infra-content">
<h3>Storage Array</h3>
<p>TrueNAS SCALE with ZFS pools for reliable data storage</p>
<p>TrueNAS SCALE with 12TB raw storage for media, backups, and datasets</p>
<div class="infra-specs">
<span class="spec">48 TB</span>
<span class="spec">ZFS</span>
<span class="spec">RAID-Z2</span>
<span class="spec">12 TB Raw</span>
<span class="spec">9 TB Usable</span>
<span class="spec">SCALE</span>
</div>
</div>
</div>
<div class="infra-card">
<div class="infra-icon">🤖</div>
<div class="infra-icon">🍓</div>
<div class="infra-content">
<h3>Automation</h3>
<p>Terraform, Ansible & GitOps for infrastructure as code</p>
<h3>RPi 5 Node</h3>
<p>Raspberry Pi 5 running Docker containers and Portainer for edge workloads</p>
<div class="infra-specs">
<span class="spec">IaC</span>
<span class="spec">GitOps</span>
<span class="spec">CI/CD</span>
<span class="spec">ARM64</span>
<span class="spec">Docker</span>
<span class="spec">Portainer</span>
</div>
</div>
</div>
@ -265,43 +265,7 @@
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></svg>
</div>
<h3 class="service-name">Nextcloud</h3>
<p class="service-desc">Private cloud storage and collaboration platform</p>
<div class="service-status online">
<span class="status-dot"></span>
<span>Online</span>
</div>
<div class="service-arrow">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M7 17L17 7M17 7H7M17 7V17"/>
</svg>
</div>
</a>
<a href="https://media.lemonlink.eu" class="service-card" target="_blank" rel="noopener">
<div class="service-glow"></div>
<div class="service-icon" style="--icon-color: #00a4dc;">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 14.5v-9l6 4.5-6 4.5z"/></svg>
</div>
<h3 class="service-name">Jellyfin</h3>
<p class="service-desc">Open source media server for movies and TV shows</p>
<div class="service-status online">
<span class="status-dot"></span>
<span>Online</span>
</div>
<div class="service-arrow">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M7 17L17 7M17 7H7M17 7V17"/>
</svg>
</div>
</a>
<a href="https://docs.lemonlink.eu" class="service-card" target="_blank" rel="noopener">
<div class="service-glow"></div>
<div class="service-icon" style="--icon-color: #f1c40f;">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z"/></svg>
</div>
<h3 class="service-name">Wiki</h3>
<p class="service-desc">Documentation and knowledge base</p>
<p class="service-desc">Private cloud storage, files, and collaboration</p>
<div class="service-status online">
<span class="status-dot"></span>
<span>Online</span>
@ -315,11 +279,11 @@
<a href="https://git.lemonlink.eu" class="service-card" target="_blank" rel="noopener">
<div class="service-glow"></div>
<div class="service-icon" style="--icon-color: #fc6d26;">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2L2 12l10 10L22 12 12 2zm0 3.5L18.5 12 12 18.5 5.5 12 12 5.5z"/></svg>
<div class="service-icon" style="--icon-color: #609926;">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.477 2 2 6.477 2 12c0 4.42 2.865 8.166 6.839 9.489.5.092.682-.217.682-.482 0-.237-.008-.866-.013-1.7-2.782.603-3.369-1.341-3.369-1.341-.454-1.155-1.11-1.463-1.11-1.463-.908-.62.069-.608.069-.608 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.087 2.91.831.092-.646.35-1.086.636-1.336-2.22-.253-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.029-2.683-.103-.253-.446-1.27.098-2.647 0 0 .84-.269 2.75 1.025A9.578 9.578 0 0112 6.836c.85.004 1.705.114 2.504.336 1.909-1.294 2.747-1.025 2.747-1.025.546 1.377.203 2.394.1 2.647.64.699 1.028 1.592 1.028 2.683 0 3.842-2.339 4.687-4.566 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.578.688.48C19.138 20.163 22 16.418 22 12c0-5.523-4.477-10-10-10z"/></svg>
</div>
<h3 class="service-name">GitLab</h3>
<p class="service-desc">Self-hosted Git repository and CI/CD platform</p>
<h3 class="service-name">Gitea</h3>
<p class="service-desc">Self-hosted Git service for code repositories</p>
<div class="service-status online">
<span class="status-dot"></span>
<span>Online</span>
@ -331,13 +295,49 @@
</div>
</a>
<a href="https://monitor.lemonlink.eu" class="service-card" target="_blank" rel="noopener">
<a href="https://stats.lemonlink.eu" class="service-card" target="_blank" rel="noopener">
<div class="service-glow"></div>
<div class="service-icon" style="--icon-color: #e6522c;">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/></svg>
<div class="service-icon" style="--icon-color: #00ab44;">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M3 3v18h18v-2H5V3H3zm11 12.5l-4-4-5 5L4 16l5-5 4 4 6.5-6.5 1.5 1.5-8 8z"/></svg>
</div>
<h3 class="service-name">Monitoring</h3>
<p class="service-desc">Grafana dashboards and Prometheus metrics</p>
<h3 class="service-name">Netdata</h3>
<p class="service-desc">Real-time system monitoring and metrics</p>
<div class="service-status online">
<span class="status-dot"></span>
<span>Online</span>
</div>
<div class="service-arrow">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M7 17L17 7M17 7H7M17 7V17"/>
</svg>
</div>
</a>
<a href="https://photos.lemonlink.eu" class="service-card" target="_blank" rel="noopener">
<div class="service-glow"></div>
<div class="service-icon" style="--icon-color: #ad5c5c;">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z"/></svg>
</div>
<h3 class="service-name">Immich</h3>
<p class="service-desc">Self-hosted photo and video backup solution</p>
<div class="service-status online">
<span class="status-dot"></span>
<span>Online</span>
</div>
<div class="service-arrow">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M7 17L17 7M17 7H7M17 7V17"/>
</svg>
</div>
</a>
<a href="https://dash.lemonlink.eu" class="service-card" target="_blank" rel="noopener">
<div class="service-glow"></div>
<div class="service-icon" style="--icon-color: #ff5c5c;">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M3 13h8V3H3v10zm0 8h8v-6H3v6zm10 0h8V11h-8v10zm0-18v6h8V3h-8z"/></svg>
</div>
<h3 class="service-name">Homarr</h3>
<p class="service-desc">Customizable dashboard for all your services</p>
<div class="service-status online">
<span class="status-dot"></span>
<span>Online</span>
@ -354,8 +354,8 @@
<div class="service-icon" style="--icon-color: #7b68ee;">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z"/></svg>
</div>
<h3 class="service-name">VPN</h3>
<p class="service-desc">Secure WireGuard VPN access</p>
<h3 class="service-name">Tailscale</h3>
<p class="service-desc">Zero-config VPN for secure remote access</p>
<div class="service-status online">
<span class="status-dot"></span>
<span>Online</span>
@ -405,18 +405,18 @@
<span class="tag">TypeScript</span>
<span class="tag">Node.js</span>
</div>
<h3 class="project-name">Featured Project</h3>
<p class="project-desc">Your flagship project description goes here. This could be your most impressive work, a popular open-source contribution, or a commercial application you've built.</p>
<h3 class="project-name">LemonLink Infrastructure</h3>
<p class="project-desc">A comprehensive homelab setup running 50+ Docker containers across dual Xeon servers and Raspberry Pi 5. Features automated deployments, monitoring, and a complete self-hosted ecosystem.</p>
<div class="project-links">
<a href="#" class="project-link">
<a href="https://git.lemonlink.eu/impulsivefps" class="project-link" target="_blank">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
<span>View Code</span>
<span>View on Gitea</span>
</a>
<a href="#" class="project-link">
<a href="https://dash.lemonlink.eu" class="project-link" target="_blank">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6M15 3h6v6M10 14L21 3"/>
</svg>
<span>Live Demo</span>
<span>Dashboard</span>
</a>
</div>
</div>
@ -425,36 +425,36 @@
<div class="projects-small">
<div class="project-card small">
<div class="project-tags">
<span class="tag">Python</span>
<span class="tag">Automation</span>
<span class="tag">Docker</span>
<span class="tag">Proxmox</span>
</div>
<h3 class="project-name">Home Automation</h3>
<p class="project-desc">Smart home integration with Home Assistant and custom sensors</p>
<a href="#" class="project-link">
<h3 class="project-name">Container Platform</h3>
<p class="project-desc">50+ containers managed via Portainer on Proxmox and RPi5</p>
<a href="https://git.lemonlink.eu/impulsivefps" class="project-link" target="_blank">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
</a>
</div>
<div class="project-card small">
<div class="project-tags">
<span class="tag">Go</span>
<span class="tag">CLI</span>
<span class="tag">NAS</span>
<span class="tag">ZFS</span>
</div>
<h3 class="project-name">Dev Tool</h3>
<p class="project-desc">Command-line utility for developers to boost productivity</p>
<a href="#" class="project-link">
<h3 class="project-name">TrueNAS SCALE</h3>
<p class="project-desc">12TB storage array with 9TB usable for media and backups</p>
<a href="https://git.lemonlink.eu/impulsivefps" class="project-link" target="_blank">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
</a>
</div>
<div class="project-card small">
<div class="project-tags">
<span class="tag">Rust</span>
<span class="tag">Systems</span>
<span class="tag">VPN</span>
<span class="tag">Mesh</span>
</div>
<h3 class="project-name">System Monitor</h3>
<p class="project-desc">High-performance system resource monitoring daemon</p>
<a href="#" class="project-link">
<h3 class="project-name">Tailscale Network</h3>
<p class="project-desc">Zero-config mesh VPN connecting all nodes securely</p>
<a href="https://git.lemonlink.eu/impulsivefps" class="project-link" target="_blank">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
</a>
</div>
@ -495,42 +495,42 @@
<a href="https://cloud.lemonlink.eu" class="domain-node" target="_blank">
<div class="node-pulse"></div>
<span class="node-name">cloud</span>
<span class="node-desc">Storage & Files</span>
</a>
<a href="https://media.lemonlink.eu" class="domain-node" target="_blank">
<div class="node-pulse"></div>
<span class="node-name">media</span>
<span class="node-desc">Movies & TV</span>
<span class="node-desc">Nextcloud Storage</span>
</a>
<a href="https://git.lemonlink.eu" class="domain-node" target="_blank">
<div class="node-pulse"></div>
<span class="node-name">git</span>
<span class="node-desc">Repositories</span>
<span class="node-desc">Gitea Repositories</span>
</a>
<a href="https://docs.lemonlink.eu" class="domain-node" target="_blank">
<a href="https://stats.lemonlink.eu" class="domain-node" target="_blank">
<div class="node-pulse"></div>
<span class="node-name">docs</span>
<span class="node-desc">Documentation</span>
<span class="node-name">stats</span>
<span class="node-desc">Netdata Monitoring</span>
</a>
<a href="https://monitor.lemonlink.eu" class="domain-node" target="_blank">
<a href="https://photos.lemonlink.eu" class="domain-node" target="_blank">
<div class="node-pulse"></div>
<span class="node-name">monitor</span>
<span class="node-desc">Metrics</span>
<span class="node-name">photos</span>
<span class="node-desc">Immich Gallery</span>
</a>
<a href="https://dash.lemonlink.eu" class="domain-node" target="_blank">
<div class="node-pulse"></div>
<span class="node-name">dash</span>
<span class="node-desc">Homarr Dashboard</span>
</a>
<a href="https://vpn.lemonlink.eu" class="domain-node" target="_blank">
<div class="node-pulse"></div>
<span class="node-name">vpn</span>
<span class="node-desc">Secure Access</span>
<span class="node-desc">Tailscale Access</span>
</a>
<a href="https://status.lemonlink.eu" class="domain-node" target="_blank">
<a href="https://lemonlink.eu" class="domain-node" target="_blank">
<div class="node-pulse"></div>
<span class="node-name">status</span>
<span class="node-desc">System Health</span>
<span class="node-name">www</span>
<span class="node-desc">This Website</span>
</a>
<a href="https://blog.lemonlink.eu" class="domain-node" target="_blank">
<a href="https://git.lemonlink.eu/impulsivefps" class="domain-node" target="_blank">
<div class="node-pulse"></div>
<span class="node-name">blog</span>
<span class="node-desc">Thoughts & Ideas</span>
<span class="node-name">projects</span>
<span class="node-desc">My Code</span>
</a>
</div>
</div>
@ -543,30 +543,19 @@
<div class="contact-card">
<div class="contact-content">
<span class="section-badge">👋 Let's Connect</span>
<h2 class="contact-title">Have a project in mind?</h2>
<p class="contact-desc">Whether you want to collaborate, need infrastructure advice, or just want to chat about homelabs — I'm always open to interesting conversations.</p>
<h2 class="contact-title">ImpulsiveFPS</h2>
<p class="contact-desc">Homelab enthusiast running 50+ services on dual Xeon hardware. Passionate about self-hosting, networking, and building reliable infrastructure. This site showcases my journey into the world of self-hosted solutions.</p>
<div class="contact-actions">
<a href="mailto:hello@lemonlink.eu" class="btn btn-primary btn-large">
<a href="https://git.lemonlink.eu/impulsivefps" class="btn btn-primary btn-large" target="_blank">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"/>
<polyline points="22,6 12,13 2,6"/>
</svg>
<span>hello@lemonlink.eu</span>
<span>View My Gitea</span>
</a>
</div>
<div class="social-links">
<a href="#" class="social-link" aria-label="GitHub">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
</a>
<a href="#" class="social-link" aria-label="Twitter">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
</a>
<a href="#" class="social-link" aria-label="LinkedIn">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
</a>
<a href="#" class="social-link" aria-label="Discord">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189Z"/></svg>
</a>
<div class="social-links" style="display: none;">
<!-- Social links hidden until set up -->
</div>
</div>
<div class="contact-visual">
@ -609,7 +598,7 @@
<span class="logo-icon">🍋</span>
<span class="logo-text">Lemon<span class="logo-highlight">Link</span></span>
</a>
<p class="footer-tagline">Built with 💛 and lots of ☕</p>
<p class="footer-tagline">Built by ImpulsiveFPS with 💛 and lots of ☕</p>
</div>
<div class="footer-links">
<div class="footer-col">
@ -628,15 +617,14 @@
</div>
<div class="footer-col">
<h4>Connect</h4>
<a href="#">GitHub</a>
<a href="#">Twitter</a>
<a href="mailto:hello@lemonlink.eu">Email</a>
<a href="https://git.lemonlink.eu/impulsivefps">Gitea</a>
<a href="https://dash.lemonlink.eu">Dashboard</a>
</div>
</div>
</div>
<div class="footer-bottom">
<p>&copy; 2024 LemonLink. All rights reserved.</p>
<p class="footer-made">Made with passion in the homelab</p>
<p class="footer-made">Powered by 2x Xeon E5645 | 96GB RAM | TrueNAS SCALE</p>
</div>
</footer>