# Homarr Dashboard Setup Guide

## Overview

This document covers the complete setup of Homarr as a homelab dashboard, including:
- Deployment on Atlantis (Synology NAS)
- API-based app and integration configuration
- NPM reverse proxy with Authentik SSO
- Dashboard layout and widget configuration

## Architecture

```
Internet → Cloudflare → NPM (Calypso:443) → Homarr (Atlantis:7575)
                              ↓
                        Authentik SSO (Calypso:9000)
```

## Access URLs

| Service | Internal URL | External URL |
|---------|--------------|--------------|
| Homarr | http://atlantis.vish.local:7575 | https://dash.vish.gg |
| NPM Admin | http://calypso.vish.local:81 | https://npm.vish.gg |
| Authentik | http://calypso.vish.local:9000 | https://sso.vish.gg |

## DNS Mapping (Split Horizon via Tailscale)

| IP Address | Local DNS |
|------------|-----------|
| 192.168.0.80/200 | atlantis.vish.local |
| 192.168.0.250 | calypso.vish.local |
| 192.168.0.210 | homelab.vish.local |
| (NUC) | concordnuc.vish.local |

## Deployment

### Homarr Container (Atlantis)

Homarr runs on Atlantis (192.168.0.200) via Docker, managed via **GitOps** through Portainer:

- **Stack ID**: 523 (homarr-stack)
- **GitOps Path**: `hosts/synology/atlantis/homarr.yaml`
- **Auto-Update**: Every 5 minutes

```yaml
Container: homarr
Image: ghcr.io/homarr-labs/homarr:latest
Ports: 7575:7575
Volumes:
  - /volume2/metadata/docker/homarr/appdata:/appdata
  - /var/run/docker.sock:/var/run/docker.sock:ro
```

### NPM Proxy Configuration

Proxy Host ID: 40

```json
{
  "domain_names": ["dash.vish.gg"],
  "forward_host": "192.168.0.200",
  "forward_port": 7575,
  "forward_scheme": "http",
  "ssl_forced": true,
  "allow_websocket_upgrade": true,
  "http2_support": true,
  "certificate_id": 1
}
```

### Authentik Forward Auth

NPM advanced config includes Authentik forward auth using:
- Provider: "vish.gg Domain Forward Auth" (ID: 5)
- Mode: forward_domain
- Cookie Domain: vish.gg (covers all *.vish.gg subdomains)

## Apps (60 Total)

### Atlantis (atlantis.vish.local)

| App | Port | URL |
|-----|------|-----|
| Plex | 32400 | http://atlantis.vish.local:32400 |
| Jellyseerr | 5055 | http://atlantis.vish.local:5055 |
| Tautulli | 8181 | http://atlantis.vish.local:8181 |
| Sonarr | 8989 | http://atlantis.vish.local:8989 |
| Radarr | 7878 | http://atlantis.vish.local:7878 |
| Lidarr | 8686 | http://atlantis.vish.local:8686 |
| Prowlarr | 9696 | http://atlantis.vish.local:9696 |
| Bazarr | 6767 | http://atlantis.vish.local:6767 |
| SABnzbd | 8080 | http://atlantis.vish.local:8080 |
| Jackett | 9117 | http://atlantis.vish.local:9117 |
| Portainer | 10000 | http://vishinator.synology.me:10000 |
| Vaultwarden | 4080 | http://atlantis.vish.local:4080 |
| Immich | 8212 | http://atlantis.vish.local:8212 |
| Joplin | 22300 | http://atlantis.vish.local:22300 |
| Paperless-NGX | 8777 | http://atlantis.vish.local:8777 |
| Calibre Web | 8083 | http://atlantis.vish.local:8083 |
| IT Tools | 5545 | http://atlantis.vish.local:5545 |
| DokuWiki | 8399 | http://atlantis.vish.local:8399 |
| Dozzle | 9999 | http://atlantis.vish.local:9999 |
| Baikal | 12852 | http://atlantis.vish.local:12852 |
| Wizarr | 5690 | http://atlantis.vish.local:5690 |
| Proxmox | 8006 | https://proxmox.vish.local:8006 |

### Homelab VM (homelab.vish.local)

| App | Port | URL |
|-----|------|-----|
| Grafana | 3300 | http://homelab.vish.local:3300 |
| Prometheus | 9090 | http://homelab.vish.local:9090 |
| Redlib | 9000 | http://homelab.vish.local:9000 |
| Karakeep | 3000 | http://homelab.vish.local:3000 |
| Binternet | 21544 | http://homelab.vish.local:21544 |
| Draw.io | 5022 | http://homelab.vish.local:5022 |

### Matrix VM (External URLs)

| App | External URL |
|-----|--------------|
| Element | https://matrix.thevish.io |
| Mattermost | https://mm.crista.love |

### Concord NUC (concordnuc.vish.local)

| App | Port | URL |
|-----|------|-----|
| Home Assistant | 8123 | http://concordnuc.vish.local:8123 |
| AdGuard Home | 3000 | http://concordnuc.vish.local:3000 |
| Your Spotify | 4000 | http://concordnuc.vish.local:4000 |
| Invidious | 3001 | http://concordnuc.vish.local:3001 |

### Calypso (calypso.vish.local)

| App | Port | URL |
|-----|------|-----|
| Gitea | 3052 | https://git.vish.gg |
| AdGuard Home | 3000 | http://calypso.vish.local:3000 |
| Actual Budget | 8304 | http://calypso.vish.local:8304 |
| Seafile | 8611 | http://calypso.vish.local:8611 |

## Integrations (8 with Live Data)

| Integration | Kind | Features |
|-------------|------|----------|
| Sonarr | sonarr | Queue, Calendar |
| Radarr | radarr | Queue, Calendar |
| Lidarr | lidarr | Queue, Calendar |
| Prowlarr | prowlarr | Indexer Status |
| SABnzbd | sabNzbd | Download Speed, Queue |
| Plex | plex | Now Playing |
| Jellyseerr | jellyseerr | Pending Requests |
| Home Assistant | homeAssistant | Entities, Sensors |

## Widgets

The dashboard includes these live widgets:

| Widget | Integration | Shows |
|--------|-------------|-------|
| 📅 Release Calendar | Sonarr, Radarr, Lidarr | Upcoming TV/Movie/Music releases |
| 📥 Downloads | SABnzbd | Current download speed & queue |
| 🎬 Now Playing | Plex | Currently streaming media |
| 📺 Media Requests | Jellyseerr | Pending media requests |
| 🏠 Smart Home | Home Assistant | Entity states |
| 🕐 Clock | - | Current time & date |

## Dashboard Layout Guide

### Recommended Structure

```
┌─────────────────────────────────────────────────────────────┐
│                    📅 CALENDAR WIDGET                        │
│            (Shows upcoming releases from Sonarr/Radarr)      │
├───────────────────┬─────────────────────┬───────────────────┤
│   📺 MEDIA        │   📥 DOWNLOADS      │   🏠 SMART HOME   │
│ • Plex            │ • Sonarr            │ • Home Assistant  │
│ • Jellyseerr      │ • Radarr            │ • AdGuard         │
│ • Tautulli        │ • SABnzbd           │                   │
├───────────────────┼─────────────────────┼───────────────────┤
│  🖥️ INFRA         │  📊 MONITORING      │  🔧 TOOLS         │
│ • Portainer       │ • Grafana           │ • IT Tools        │
│ • Gitea           │ • Prometheus        │ • Draw.io         │
├───────────────────┴─────────────────────┴───────────────────┤
│  📥 DOWNLOAD SPEED    │    🎬 NOW PLAYING WIDGET            │
└─────────────────────────────────────────────────────────────┘
```

### Setup Steps

1. **Create Board**: Manage → Boards → New Board → "Homelab"
2. **Enter Edit Mode**: Click pencil icon
3. **Add Sections**: + Add → Section (Media, Downloads, etc.)
4. **Add Apps**: + Add → App → Select from list
5. **Add Widgets**: + Add → Widget → Configure integrations
6. **Save**: Click checkmark to exit edit mode

### Key Widgets

- **Calendar**: Shows Sonarr/Radarr upcoming releases
- **Downloads**: SABnzbd speed and queue
- **Media Server**: Plex now playing
- **Health Monitoring**: Service status

## Backup & Maintenance

### Database Location
```
/volume2/metadata/docker/homarr/appdata/db/db.sqlite
```

### Backup Command
```bash
cp db.sqlite db.sqlite.backup.$(date +%Y%m%d)
```

### Update Homarr
```bash
docker pull ghcr.io/homarr-labs/homarr:latest
docker restart homarr
```

## API Reference

### Create App
```bash
curl -X POST "http://localhost:7575/api/trpc/app.create" \
  -H "ApiKey: <token>" \
  -H "Content-Type: application/json" \
  -d '{"json":{"name":"App","description":"Desc","iconUrl":"...","href":"...","pingUrl":"..."}}'
```

### Create Integration
```bash
curl -X POST "http://localhost:7575/api/trpc/integration.create" \
  -H "ApiKey: <token>" \
  -H "Content-Type: application/json" \
  -d '{"json":{"name":"Name","kind":"sonarr","url":"...","secrets":[{"kind":"apiKey","value":"..."}],"attemptSearchEngineCreation":false}}'
```

### Valid Integration Kinds
`sabNzbd`, `nzbGet`, `sonarr`, `radarr`, `lidarr`, `prowlarr`, `plex`, `jellyseerr`, `homeAssistant`, `adGuardHome`, `proxmox`, `piHole`

## Troubleshooting

| Issue | Solution |
|-------|----------|
| "No home board found" | Create board, set as home |
| Integration no data | Verify API keys |
| Auth redirect loop | Clear vish.gg cookies |
| Websocket errors | Ensure NPM has websockets enabled |
