https://github.com/tschuegy/linkboard-nextcloud
Personal service dashboard for Nextcloud — organize, monitor and widget-ify your self-hosted services
https://github.com/tschuegy/linkboard-nextcloud
dashboard homelab nextcloud nextcloud-app php self-hosted vuejs widgets
Last synced: 3 months ago
JSON representation
Personal service dashboard for Nextcloud — organize, monitor and widget-ify your self-hosted services
- Host: GitHub
- URL: https://github.com/tschuegy/linkboard-nextcloud
- Owner: tschuegy
- License: agpl-3.0
- Created: 2026-03-04T10:12:42.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-03-29T11:33:25.000Z (3 months ago)
- Last Synced: 2026-03-29T14:21:35.321Z (3 months ago)
- Topics: dashboard, homelab, nextcloud, nextcloud-app, php, self-hosted, vuejs, widgets
- Language: JavaScript
- Size: 13.2 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# LinkBoard
A beautiful, customizable service dashboard for Nextcloud.



[](https://github.com/sponsors/tschuegy)
---
## About
LinkBoard turns your Nextcloud into a personal homelab dashboard.
Organize all your self-hosted services in one place — with live status checks,
real-time widgets, custom icons, and a fully configurable layout.
Inspired by [Gethomepage](https://gethomepage.dev), but deeply integrated into Nextcloud.
## Screenshots
| | | |
|---|---|---|
|  |  |  |
|  |  | |
## Features
- **Service Dashboard** – Organize services in categories with drag & drop sorting
- **Grid Layout** – Grafana-style grid layout with free drag, resize, and placement of cards within categories
- **Configurable Grid** – Set grid granularity per category (6, 12, or 24 columns) with auto-arrange and row-height options
- **Edit Mode** – Lock/unlock edit mode toggle to prevent accidental changes
- **Status Checks** – Live health checks with dot or border indicators
- **Status History** – Response time charts, uptime tracking, and a dedicated status overview page
- **Offline Notifications** – Nextcloud notifications when services go down, with configurable threshold and recovery alerts
- **External Notification Channels** – 19 providers: Discord, Slack, Telegram, Matrix, Teams, Ntfy, Gotify, Pushover, E-Mail (SMTP), and more, with per-service overrides
- **136 Built-in Widgets** – Real-time data from Proxmox, Patchman, Immich, Uptime Kuma, and 130+ more; plus an inline-editable Table widget ([full list](WIDGETS.md))
- **System Resources** – Monitor CPU, memory, disk usage, uptime, and CPU temperature with progress bars
- **Category Spacers** – Decorative separator categories with multiple styles (solid, dashed, dotted, dots, stars, and more)
- **Flexible Icons** – Upload custom images (PNG, SVG, WebP…), use Material Design Icons (inline SVG), or any URL
- **Theming** – Dark, light, or auto mode with custom background images and blur effects
- **Card Styles** – Glass, Solid, Flat, or Transparent card backgrounds
- **Configurable Layout** – Adjust columns, card styles, search bar, and more
- **Import / Export** – YAML & JSON support, compatible with Gethomepage services.yaml
- **Keyboard Shortcuts** – Quick access via `/`, `E`, `R`, `Esc` ([see below](#keyboard-shortcuts))
- **Multi-Language** – Full i18n support with 57 languages
- **Per-User** – Each Nextcloud user gets their own private dashboard
## Keyboard Shortcuts
| Key | Action |
|-----|--------|
| `/` | Focus search bar |
| `E` | Toggle edit mode |
| `R` | Refresh all (status checks, widgets, resources) |
| `Escape` | Close editor / exit edit mode / clear search |
> Shortcuts are disabled while typing in input fields. `E` and `R` are ignored when Ctrl/Cmd is held.
## Requirements
- Nextcloud 32 or 33
- PHP 8.2 – 8.4
## Installation
Download the latest release tarball and extract it into your Nextcloud `apps/` directory:
```bash
cd /path/to/nextcloud/apps
tar xzf linkboard.tar.gz
```
Then enable the app:
```bash
cd /path/to/nextcloud/
php occ app:enable linkboard
```
## Development Setup
### Prerequisites
- Node.js 20+
- npm
- PHP 8.2+
- Composer
- A Nextcloud development instance
### Getting Started
```bash
cd /path/to/nextcloud/apps/
git clone https://github.com/tschuegy/linkboard-nextcloud.git linkboard
cd linkboard
composer install
npm install
npm run build
cd /path/to/nextcloud/
php occ app:enable linkboard
```
### Development Commands
```bash
npm run watch # Auto-rebuild on changes
npm run build # Production build
npm run lint # Lint check
npm run lint:fix # Auto-fix lint issues
```
## Project Structure
```
linkboard/
├── appinfo/ # App metadata & routes
├── lib/ # PHP backend
│ ├── Controller/ # REST API controllers
│ ├── Db/ # Entity & mapper classes
│ ├── Service/ # Business logic
│ ├── Widget/ # 136 widget definitions
│ └── Migration/ # Database migrations
├── src/ # Vue.js frontend
│ ├── components/ # Vue components
│ ├── store/ # Pinia state management
│ └── services/ # API client
├── css/ # Global styles
├── img/ # App icon & screenshots
├── l10n/ # Translation files (57 languages)
└── templates/ # PHP templates
```
## API Overview
All endpoints under `/apps/linkboard/api/v1/`:
| Endpoint | Methods | Description |
|----------|---------|-------------|
| `/dashboard` | GET | Full dashboard (categories + services + settings) |
| `/categories` | GET, POST | List / create categories |
| `/categories/{id}` | GET, PUT, DELETE | Single category CRUD |
| `/categories/reorder` | PUT | Reorder categories |
| `/services` | GET, POST | List / create services |
| `/services/{id}` | GET, PUT, DELETE | Single service CRUD |
| `/services/reorder` | PUT | Reorder services |
| `/services/{id}/move/{catId}` | PUT | Move service to category |
| `/settings` | GET, PUT | User settings |
| `/icons` | GET, POST | List / upload icons |
| `/icons/{filename}` | GET, DELETE | Serve / delete icon |
| `/widgets/catalog` | GET | Available widget types |
| `/widgets/data` | POST | Fetch widget data |
| `/status/{id}/history` | GET | Status history for a service |
| `/status/history` | GET | Status history for all services |
| `/resources/{categoryId}` | GET | System resources (CPU, memory, disk) |
## License
AGPL-3.0-or-later