A clean, customizable homelab dashboard inspired by CasaOS. Features: - Empty-first dashboard (no demo data) - 3 themes: Light, Dark, CasaOS glassmorphism - Widgets: Clock (multi-timezone), Pi-hole, Memos, Immich, Image - Drag & drop app organization - Grid + list view for apps - Groups with collapse/expand - Proper widget refresh handling - Visual timezone picker - Square app cards with hover effects Stack: Go + Gin + PostgreSQL + Next.js 15 + React 19 + Tailwind CSS + shadcn/ui
🏠 Dash
Your services, organized beautifully.
Hey there! 👋 This is my personal homelab dashboard - built because I wanted something cleaner than my messy bookmarks folder. It's heavily inspired by CasaOS but with my own twist on things.
Why I Built This
I got tired of:
- Forgetting which port my Jellyfin was on
- Bookmark folders that grew out of control
- Not knowing if my services were actually running
- Dashboards that felt cluttered from day one
So I made something that starts completely empty and lets you build your perfect setup, piece by piece.
What Makes It Different
🎨 Three Moods, Not Just Themes
| Light | Dark | CasaOS |
|---|---|---|
| Clean & crisp for daytime | Easy on the eyes at night | Glass panels with ambient gradients |
Switch anytime from the header dropdown.
🚀 Drag, Drop, Done
Organize apps however you want:
- Drag between groups
- Reorder within groups
- Collapse groups you don't need right now
- Grid view for quick access, list view for details
📊 Widgets That Actually Matter
Not bloat - just the stuff I check daily:
- Clock - Multiple timezones (great for checking server times vs local)
- Pi-hole - "Are ads being blocked?" at a glance
- Memos - Recent notes so I don't forget what I was doing
- Immich - Photo stats (because why not)
� The Empty Canvas Philosophy
Most dashboards assault you with demo data. This one doesn't.
First launch? Clean slate. Add what you need, when you need it. Your dashboard should reflect your homelab, not someone else's idea of what it should look like.
Tech Stack
Backend: Go + Gin + PostgreSQL + sqlc
Frontend: Next.js 15 + React 19 + Tailwind + shadcn/ui
Why: Fast, type-safe, and I actually enjoy working with it
Getting Started
The Easy Way (Docker)
git clone https://github.com/tdvorak/Dash.git
cd Dash
cp .env.example .env
docker compose up --build
Then open http://localhost:3000
The Developer Way
Backend:
cd backend
make db-migrate-up # needs Postgres running
make backend-dev # hot reload on :8080
Frontend:
cd frontend
npm install
npm run dev # Next.js on :3000
Setting Up Widgets
Pi-hole
{
"baseUrl": "http://your-pihole-ip",
"apiToken": "your-token-here"
}
Works with both v6 (session auth) and legacy API.
Memos
{
"baseUrl": "https://memos.yourdomain.com",
"apiToken": "your-token",
"pageSize": 5
}
Immich
{
"baseUrl": "https://immich.yourdomain.com",
"apiToken": "your-api-key"
}
Project Structure
Dash/
├── backend/ # Go REST API
│ ├── cmd/server/
│ ├── internal/
│ │ ├── httpapi/ # HTTP handlers
│ │ ├── store/ # Database layer (sqlc)
│ │ └── config/
│ └── go.mod
├── frontend/ # Next.js app
│ ├── app/
│ ├── components/
│ │ ├── dashboard/
│ │ ├── widgets/ # Clock, Pi-hole, etc.
│ │ ├── services/ # App cards
│ │ └── groups/ # Group sections
│ └── lib/
├── db/migrations/ # Goose migrations
└── openapi/ # API spec
Security Reality Check
v1 is built for trusted LANs. No auth, no sessions, no complexity.
For production:
- Put it behind Authelia/Authentik
- Or use a VPN
- Or accept that your homelab is probably fine without auth anyway ¯_(ツ)_/¯
License
MIT - use it, fork it, make it yours. Would love to see what you build!