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 💪.


🛠️ 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

⚡ 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.comandutubemp3.net - Parsed in PHP and displayed live via a custom “Visitors” panel
- Pulls from AWStats logs for both
🧠 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,
