const services = [ { name: "Ollama", description: "Local LLM server powering my AI experiments", url: "https://ollama.juntekim.com", icon: "๐Ÿง ", }, { name: "Uptime Kuma", description: "Service monitoring for my homelab and projects", url: "https://uptime.kuma.juntekim.com", icon: "๐ŸŸข", }, { name: "n8n", description: "Automation workflows I run for small tasks and integrations", url: "https://n8n.juntekim.com", icon: "โš™๏ธ", }, { name: "Home Assistant", description: "Home automation hub for devices and sensors", url: "https://ha.juntekim.com", icon: "๐Ÿ ", }, { name: "pgAdmin", description: "Web interface I use to manage PostgreSQL databases", url: "https://pgadmin.juntekim.com", icon: "๐Ÿ—„๏ธ", }, { name: "DBeaver", description: "Another Web interface I use to manage PostgreSQL databases. - Deciding which one I prefer", url: "https://dbeaver.juntekim.com", icon: "๐Ÿฟ๏ธ", }, { name: "Monica", description: "Personal CRM to keep track of relationships", url: "https://crm.juntekim.com", icon: "๐Ÿ“‡", }, { name: "Tandoor Recipes", description: "Recipe manager I use for cooking", url: "https://mealcraft.com", icon: "๐Ÿณ", }, { name: "JS Paint", description: "A nostalgic browser-based MS Paint clone", url: "https://jspaint.juntekim.com", icon: "๐ŸŽจ", }, { name: "Exercise Tracker", description: "Workout tracking powered by wger", url: "https://exercise.juntekim.com", icon: "๐Ÿ’ช", }, { "name": "Code Server", "description": "VS Code running on my server so I can code from anywhere", "icon": "๐Ÿ’ป" }, { "name": "Whoami", "description": "Tiny test service I use to debug Traefik routing", "url": "https://whoami.mealcraft.com/", "icon": "๐Ÿงช" }, { "name": "PDF Tools", "description": "Simple tools I host for generating and working with PDFs", "url": "https://pdf.juntekim.com", "icon": "๐Ÿ“„" }, { "name": "Stripe โ†’ Invoice", "description": "A tool I built to automatically create Xero invoices from Stripe payments", "url": "https://stripetoinvoice.com", "icon": "๐Ÿ’ณ" }, { name: "My Website", description: "Main personal website showcasing projects and experiments", url: "https://juntekim.com", icon: "๐ŸŒ" }, { name: "Databasus", description: "Automated sql-db backups to AWS S3", url: "https://databasus.juntekim.com/", icon: "๐Ÿ—ƒ๏ธ" }, { name: "Traefik Dashboard", description: "Dashboard for monitoring and managing Traefik reverse proxy", url: "https://traefik.mealcraft.com/dashboard/", icon: "๐Ÿ“Š" }, { name: "Kokoro TTS", description: "Open-source text-to-speech API running locally with an OpenAI-compatible interface", url: "https://kokoro.juntekim.com", icon: "๐Ÿ”Š" }, ]; export default function HomelabPage() { return (

๐Ÿ–ฅ๏ธ My Self-Hosted Stack

These are tools I run in my personal homelab โ€” a small server I manage myself to experiment with technology and host useful services.

{services.map((service) => (
{service.icon}

{service.name}

{service.description}

Open โ†’
))}
); }