Skip to content

ConductionNL/launchpad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,209 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

LaunchPad logo

LaunchPad

Customizable multi-dashboard for Nextcloud — drag-and-drop widgets, templates, and smart visibility rules

Latest release License Code quality Documentation


LaunchPad supercharges the Nextcloud dashboard. Create multiple personalized workspaces with drag-and-drop widgets, custom shortcut tiles, and smart visibility rules — then let admins roll out templates to entire teams. It works with every existing Nextcloud dashboard widget out of the box, supporting both the v1 and v2 Dashboard APIs.

📚 Step-by-step tutorials — user + admin walkthroughs with screenshots, kept in sync with the live UI via the journeydoc capture spec.

Screenshots

Dashboard with drag-and-drop widget grid Widget picker and placement editor Admin template management
Dashboard Widgets Admin Templates

Features

Dashboard Management

  • Multiple Dashboards — Create as many dashboards as you need and switch between them instantly
  • Drag-and-Drop Grid — Position and resize widgets freely on a flexible GridStack-powered layout
  • Active Dashboard — Set any dashboard as your default landing page
  • Dashboard Sharing — Share dashboards with other users or groups

Widget System

  • Widget Picker — Browse and add from all available Nextcloud dashboard widgets (API v1 and v2)
  • Custom Tiles — Add shortcut cards with icons, colors, and links to your most-used tools
  • Widget Styling — Customize colors, borders, titles, and padding for each individual widget
  • Compulsory Widgets — Admins can pin important widgets that users cannot remove

Templates & Rules

  • Admin Templates — Pre-configure dashboards and distribute them to user groups with one click
  • Permission Levels — Choose view-only, add-only, or full customization per template
  • Conditional Visibility — Show or hide widgets based on group membership, time of day, or date range
  • Default Dashboards — Assign templates as the default for new users or specific groups

Integrations

  • Nextcloud Dashboard API — Full compatibility with v1 and v2 widget APIs
  • NL Design Theming — Supports design token theming via the NL Design app
  • Responsive Layout — Adapts grid columns and widget sizes to screen width

Architecture

See docs/architecture.md for the full architecture reference, including the app-manifest adoption (ADR-024), the runtime-only OR consumption policy, and the permission model on oc_launchpad_dashboards.

OR-backed widget development: docs/widgets/or-data.md.

graph TD
    A[Vue 2 Frontend] -->|REST API| B[LaunchPad PHP Backend]
    B --> C[(PostgreSQL / MySQL)]
    A -->|GridStack.js| D[Drag-and-Drop Grid]
    A -->|Dashboard API| E[Nextcloud Widgets v1/v2]
    B --> F[Admin Template Engine]
    B --> G[Conditional Rules Engine]
Loading

Data Model

Table Description
oc_launchpad_dashboards Dashboard configurations and ownership
oc_launchpad_widget_placements Widget positions, sizes, and styling
oc_launchpad_conditional_rules Visibility rules (group, time, date)
oc_launchpad_admin_settings Admin templates and global settings

Directory Structure

launchpad/
├── appinfo/           # Nextcloud app manifest, routes, navigation
├── lib/               # PHP backend — controllers, services, mappers, entities
│   ├── Controller/    # API controllers (dashboard, widget, admin)
│   ├── Service/       # Business logic layer
│   ├── Db/            # Mappers and entities (Doctrine ORM)
│   └── Settings/      # Admin settings panel
├── src/               # Vue 2 frontend — components, Pinia stores, views
│   ├── components/    # Reusable UI components (grid, widgets, tiles)
│   ├── store/         # Pinia stores (dashboards, widgets, settings)
│   └── views/         # Route-level views
├── img/               # App icons and screenshots
├── l10n/              # Translations (en, nl)
└── tests/             # PHPUnit tests

Requirements

Dependency Version
Nextcloud 28 -- 33
PHP 8.1+
PostgreSQL 12+
MySQL (alternative) 8.0+

Installation

From the Nextcloud App Store

  1. Go to Apps in your Nextcloud instance
  2. Search for LaunchPad
  3. Click Download and enable

From Source

cd /var/www/html/custom_apps
git clone https://github.com/ConductionNL/launchpad.git
cd launchpad
composer install
npm install
npm run build
php occ app:enable launchpad

Development

Start the environment

docker compose -f openregister/docker-compose.yml up -d

Frontend development

cd launchpad
npm install
npm run dev        # Watch mode
npm run build      # Production build

Code quality

# Unified gate (runs all checks below)
composer check:strict   # lint + phpcs + phpmd + phpstan + tests

# PHP
composer phpcs          # Check coding standards (0 errors enforced)
composer cs:fix         # Auto-fix issues
composer phpmd          # Mess detection (baseline: phpmd.baseline.xml)
composer phpstan        # Static analysis (baseline: phpstan-baseline.neon)
composer phpmetrics     # HTML metrics report

# Frontend
npm run lint            # ESLint
npm run stylelint       # CSS linting

Quality gate status (as of the launchpad-legacy-quality-cleanup PR):

  • PHPCS: 0 errors (all 245 pre-existing errors cleared)
  • PHPMD: 222 violations baselined; ElseExpression (31) fixed outright. Remaining debt: StaticAccess (ResponseHelper pattern), complexity. Tracked in phpmd.baseline.xml — burn down in follow-up PRs.
  • PHPStan: passes with phpstan-baseline.neon (286 lines of pre-existing issues, mostly AuthorizedAdminSetting type mismatches and DataResponse generic types). Burn down tracked separately.

Tech Stack

Layer Technology
Frontend Vue 2.7, Pinia, @nextcloud/vue
Build Webpack 5, @nextcloud/webpack-vue-config
Grid GridStack.js (drag-and-drop layout engine)
Backend PHP 8.1+, Nextcloud App Framework
Data PostgreSQL 12+ / MySQL 8.0+ (own tables)
Quality PHPCS, PHPMD, phpmetrics, ESLint, Stylelint

Documentation

Full documentation is available at launchpad.app

Page Description
GitHub Source code and issue tracker
Discussions Community Q&A and feature requests

Standards & Compliance

  • Accessibility: WCAG AA (Dutch government requirement)
  • Theming: NL Design System design tokens
  • Dashboard API: Nextcloud Dashboard API v1 and v2
  • Authorization: Nextcloud group-based permissions
  • Localization: English and Dutch

Related Apps

License

This project is licensed under the EUPL-1.2.

Dependency license policy

All dependencies (PHP and JavaScript) are automatically checked against an approved license allowlist during CI. The following SPDX license families are approved for use in dependencies:

  • Permissive: MIT, ISC, BSD-2-Clause, BSD-3-Clause, 0BSD, Apache-2.0, Unlicense, CC0-1.0, CC-BY-3.0, CC-BY-4.0, Zlib, BlueOak-1.0.0, Artistic-2.0, BSL-1.0
  • Copyleft (EUPL-compatible): LGPL-2.0/2.1/3.0, GPL-2.0/3.0, AGPL-3.0, EUPL-1.1/1.2, MPL-2.0
  • Font licenses: OFL-1.0, OFL-1.1

Dependencies with licenses not on this list will fail CI unless explicitly approved in .license-overrides.json with a documented justification.

License exceptions

Package Reason
launchpad Own package - EUPL-1.2 licensed — approved 2026-03-15

Authors

Built by Conduction -- open-source software for Dutch government and public sector organizations.

About

Drag-and-drop dashboards for Nextcloud — build personal and team start pages with templates, tiles, and smart widgets.

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors