LabPortal: My Self-Hosted Modular Homelab Dashboard

Lab Portal

Hey everyone! πŸ‘‹

Over the past few weeks, I’ve been cooking up something in my homelab that started as a “cool idea” and is now a full-blown system I use daily:
Introducing 🧱 LabPortal β€” my modular, real-time, self-hosted portal that ties everything together.

What started as a simple dashboard has evolved into a multi-feature control hub with weather, uptime, server stats, project management, sticky notes, calendar, content creation tools, and live visitor analytics. Oh β€” and it’s all running from my AlmaLinux-powered homelab πŸ’ͺ.

Lab Portal
Lab Portal
Lab Portal
Lab Portal

πŸ› οΈ Tech Stack Used

Here’s a full breakdown of the tools, languages, and stacks powering LabPortal:

βš™οΈ Backend

  • Python + Flask – Lightweight REST APIs (system info, calendar, uptime)
  • PHP – Used for AWStats log parsing and serving live visitor counts
  • Shell scripts – Basic system operations & monitoring tasks
  • Systemd – For running persistent background services

🌐 Frontend

  • TailwindCSS – Clean, responsive styling
  • Vanilla JavaScript – Dynamic features like weather, calendar, system data
  • Google Fonts (Emoji support) – To make it fun and friendly
  • Pure HTML5 + CSS3 – No bloat, just speed

πŸ“‘ APIs + Services

  • OpenWeather API – For the weather widget
  • AWStats – Parses unique visitors from raw logs
  • Flask CORS – To enable cross-origin access for frontend/backend sync

πŸ’Ύ Storage & Infrastructure

  • Mounted network share – All content and media stored under /mnt/media/content
  • Cockpit – Server management
  • FirewallD – For securing APIs
  • Fail2Ban – Brute-force protection
  • Nginx/Apache – Hosting public and internal services

πŸ“ Hosting

  • AlmaLinux 9 (bare metal)
  • Hosted on my own servers in my homelab rack
ProxMox Cluster
ProxMox Cluster

⚑ Features So Far

Here’s what LabPortal does (so far):

  • βœ… Live System Stats: Uptime, load average, and datetime (auto-refreshing)
  • βœ… Weather Widget: Live weather, displayed in the top-right
  • βœ… Sticky Notes: Leave yourself reminders or in-progress notes
  • βœ… Project Dashboard: View active project titles with a clean UI
  • βœ… Dynamic Calendar:
    • Highlights the current day in green
    • Days you edit are marked in red
  • βœ… Live Visitor Stats:
    • Pulls from AWStats logs for both declinedstudios.com and utubemp3.net
    • Parsed in PHP and displayed live via a custom “Visitors” panel

🧠 Current Development: Content Creation System

The current big feature I’m working on is the Content Creation System. Here’s the vision:

  • πŸ“ Rich-text editor (WYSIWYG)
  • πŸ“ Upload media to /mnt/media/content
  • πŸ—“οΈ Schedule posts (future support for multi-platform APIs)
  • 🏷️ Tag and organize posts
  • πŸ”Œ API-ready backend for future Facebook, X/Twitter, YouTube Shorts, and Instagram integrations

Everything is being built in modular panels, so I can move, collapse, or re-order components as needed in future versions. My long-term plan is to have full drag-and-drop module support with persistent layout states.

πŸ§ͺ What’s Next?

  • 🧱 Drag-and-drop layout system for UI modules
  • πŸ“Š Basic analytics dashboard (engagement, post stats)
  • πŸ€– AI-generated hashtags and captions (later, with OpenAI API)
  • 🧭 Global search across notes, projects, and media
  • ☁️ Optional cloud backup for important configs

πŸ’¬ Final Thoughts

This isn’t just a dashboard anymore β€” it’s the heart of my homelab. It’s fun to use, easy to build onto, and 100% mine. I can tweak it, break it, fix it, and learn something new every time.
That’s the beauty of building your own tools.

If you’re into homelabs, dev, or web tech β€” this is one of those projects worth investing time into. And stay tuned… I might open-source the core framework soon.

Cheers,