Flow-based kanban project and task management for Nextcloud dev and IT teams
Planix is a Kanban-based project and task management app for Nextcloud, built as a thin client on OpenRegister. It manages projects, tasks, kanban boards with WIP limits, backlogs, and time entries for internal dev and IT teams.
Pre-wired for OpenRegister β all data is stored as OpenRegister objects. If your app needs OpenRegister, install it first. If not, remove the dependency from
appinfo/info.xmlandopenspec/app-config.json.
Add screenshots here once the app has a UI.
Features are defined in openspec/specs/. See the roadmap for planned work.
- Dashboard β Personal overview page with key information at a glance
- Admin Settings β Configurable settings panel for administrators
- OpenRegister Integration β Pre-wired data layer using OpenRegister objects
- Quality Pipeline β PHPCS, PHPMD, Psalm, PHPStan, ESLint, Stylelint
graph TD
A[Vue 2 Frontend] -->|REST API| B[OpenRegister API]
B --> C[(PostgreSQL JSON store)]
A --> D[Nextcloud Activity]
A --> E[Nextcloud Search]
Update this diagram during /app-explore sessions as the architecture evolves.
| Object | Description |
|---|---|
| (define your data objects here) | β |
Data model is defined using OpenRegister schemas. See openspec/specs/ for feature-level design decisions and openspec/architecture/ for architectural decisions.
planix/
βββ appinfo/ # Nextcloud app manifest, routes, navigation
βββ lib/ # PHP backend
β βββ AppInfo/Application.php
β βββ Controller/ # DashboardController, SettingsController
β βββ Service/SettingsService.php
β βββ Listener/DeepLinkRegistrationListener.php
β βββ Repair/InitializeSettings.php
β βββ Settings/ # AdminSettings, planix_register.json
βββ templates/ # PHP templates (SPA shells)
βββ src/ # Vue 2 frontend
β βββ main.js # App entry point
β βββ App.vue # Root component
β βββ navigation/MainMenu.vue # App navigation sidebar
β βββ router/ # Vue Router
β βββ store/ # Pinia stores
β βββ views/ # Route-level views + UserSettings.vue
βββ openspec/ # Specifications, decisions, and roadmap
β βββ app-config.json # Canonical app config (id, goal, dependencies, CI)
β βββ config.yaml # OpenSpec CLI configuration
β βββ specs/ # Feature specs (input for OpenSpec changes)
β βββ architecture/ # App-specific Architectural Decision Records
β βββ ROADMAP.md # Product roadmap
β βββ changes/ # OpenSpec change directories (created on first change)
βββ tests/ # Unit and integration tests
βββ l10n/ # Translations (en, nl)
βββ .github/workflows/ # CI/CD pipelines
βββ Makefile # Dev helpers (make dev-link)
βββ img/ # App icons and screenshots
| Dependency | Version |
|---|---|
| Nextcloud | 28 β 33 |
| PHP | 8.1+ |
| Node.js | 20+ |
| OpenRegister | latest |
- Go to Apps in your Nextcloud instance
- Search for Planix
- Click Download and enable
OpenRegister must be installed first. Install OpenRegister β
cd /var/www/html/custom_apps
git clone https://github.com/ConductionNL/planix.git planix
cd planix
npm install && npm run build
php occ app:enable planixdocker compose -f ../openregister/docker-compose.yml up -dnpm install
npm run dev # Watch mode
npm run build # Production build# PHP
composer check:strict # All quality checks (PHPCS, PHPMD, Psalm, PHPStan, tests)
composer cs:fix # Auto-fix PHPCS issues
composer phpmd # Mess detection
composer phpmetrics # HTML metrics report
# Frontend
npm run lint # ESLint
npm run stylelint # CSS lintingNextcloud requires the app directory name to match the <id> in appinfo/info.xml (planix).
Note: The
js/build output is not committed. You must build the frontend before enabling the app, or the UI will be blank.
make dev-link
npm install && npm run build
docker exec nextcloud php occ app:enable planix| Layer | Technology |
|---|---|
| Frontend | Vue 2.7, Pinia, @nextcloud/vue |
| Build | Webpack 5, @nextcloud/webpack-vue-config |
| Backend | PHP 8.1+, Nextcloud App Framework |
| Data | OpenRegister (PostgreSQL JSON objects) |
| UX | @conduction/nextcloud-vue |
| Quality | PHPCS, PHPMD, Psalm, PHPStan, ESLint, Stylelint |
| Branch | Purpose |
|---|---|
main |
Stable releases β triggers release workflow |
beta |
Beta / pre-release builds |
development |
Active development β merge target for feature branches |
| Resource | Description |
|---|---|
openspec/app-config.json |
App identity, goals, dependencies, and CI configuration |
openspec/specs/ |
Feature specs β what the app should do |
openspec/architecture/ |
App-specific Architectural Decision Records |
openspec/ROADMAP.md |
Product roadmap |
openspec/ |
Implementation specifications and changes |
- Accessibility: WCAG AA (Dutch government requirement)
- Authorization: RBAC via OpenRegister
- Audit trail: Full change history on all objects
- Localization: English and Dutch
- OpenRegister β Object storage layer (required dependency)
Add related apps here as integrations are built.
The js/ build output is not committed to the repo. Run the frontend build before enabling the app:
npm install && npm run buildNextcloud requires the app directory name to exactly match the <id> in appinfo/info.xml. Make sure the directory is named planix:
make dev-link # creates apps-extra/planix -> planixThen enable the app again:
docker exec nextcloud php occ app:enable planixFor support, contact us at support@conduction.nl.
For a Service Level Agreement (SLA), contact sales@conduction.nl.
This project is licensed under the EUPL-1.2.
All dependencies (PHP and JavaScript) are automatically checked against an approved license allowlist during CI. The following SPDX license families are approved:
- 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
Built by Conduction β open-source software for Dutch government and public sector organizations.