Skip to content
This repository was archived by the owner on May 29, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
78b9691
chore: Switch license to EUPL-1.2
rubenvdlinde Feb 26, 2026
10ab86d
chore: Add quality tooling (PHPCS, PHPMD, ESLint, stylelint) and CI w…
rubenvdlinde Feb 26, 2026
a276def
docs: Add project documentation and OpenSpec specifications
rubenvdlinde Feb 26, 2026
a10e5cb
feat: Add case management backend with coding standards
rubenvdlinde Feb 26, 2026
0d8fbb6
feat: Add case management frontend views and components
rubenvdlinde Feb 26, 2026
41300bf
ci: Add branch policy to restrict merges into main
rubenvdlinde Feb 26, 2026
ec1a385
ci: Update branch policy (main←beta←development←feature/*)
rubenvdlinde Feb 26, 2026
544abdf
docs: Add development guide with branching strategy and quality checks
rubenvdlinde Feb 26, 2026
3ee5144
chore: Update app icons, gitignore, and metadata
rubenvdlinde Feb 27, 2026
f4ff465
feat: Add user settings dialog and consolidate settings backend
rubenvdlinde Feb 27, 2026
7ae5522
feat: Add task create dialog and improve list/detail views
rubenvdlinde Feb 27, 2026
c646fd2
refactor: Migrate admin settings to CnSettingsSection from shared lib…
rubenvdlinde Feb 27, 2026
96fcd47
docs: Add development guide, feature docs, and test results
rubenvdlinde Feb 27, 2026
d7c1f0a
build: Add @conduction/nextcloud-vue git dependency with conditional …
rubenvdlinde Feb 27, 2026
b0ddd1c
build: Switch @conduction/nextcloud-vue from git to npm beta package
rubenvdlinde Feb 27, 2026
966b4d7
fix: Revert licence to agpl for Nextcloud App Store compatibility
rubenvdlinde Mar 1, 2026
9dc1e68
chore: Add complete PHP quality tooling to match OpenRegister standard
rubenvdlinde Mar 3, 2026
764c8be
docs: Add rich README with screenshots, architecture, and full featur…
rubenvdlinde Mar 3, 2026
1eb683d
feat: Migrate to Vue Router and refactor views to use @conduction/nex…
rubenvdlinde Mar 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions .github/workflows/branch-policy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Branch Policy

on:
pull_request:
branches: [main, beta, development]

jobs:
check-source-branch:
name: Branch Policy Check
runs-on: ubuntu-latest
steps:
- name: Verify source branch
run: |
SOURCE="${{ github.head_ref }}"
TARGET="${{ github.base_ref }}"

# hotfix/* is always allowed
if [[ "$SOURCE" == hotfix/* ]]; then
echo "✅ Hotfix branch '$SOURCE' is allowed to merge into '$TARGET'."
exit 0
fi

case "$TARGET" in
main)
if [ "$SOURCE" = "beta" ]; then
echo "✅ Branch '$SOURCE' is allowed to merge into main."
else
echo "❌ Branch '$SOURCE' is not allowed to merge into main."
echo "Only 'beta' and 'hotfix/*' branches can be merged into main."
exit 1
fi
;;
beta)
if [ "$SOURCE" = "development" ]; then
echo "✅ Branch '$SOURCE' is allowed to merge into beta."
else
echo "❌ Branch '$SOURCE' is not allowed to merge into beta."
echo "Only 'development' and 'hotfix/*' branches can be merged into beta."
exit 1
fi
;;
development)
if [[ "$SOURCE" == feature/* ]]; then
echo "✅ Branch '$SOURCE' is allowed to merge into development."
else
echo "❌ Branch '$SOURCE' is not allowed to merge into development."
echo "Only 'feature/*' and 'hotfix/*' branches can be merged into development."
exit 1
fi
;;
*)
echo "✅ No branch policy for target '$TARGET'."
;;
esac
79 changes: 79 additions & 0 deletions .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Code Quality

on:
pull_request:
branches: [main, beta, development]

concurrency:
group: quality-${{ github.head_ref || github.ref }}
cancel-in-progress: true

jobs:
php-quality:
name: PHP Quality
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.1'
extensions: mbstring, xml, ctype, iconv, intl, dom, filter, gd, json, posix, zip
tools: composer:v2

- name: Cache Composer dependencies
uses: actions/cache@v4
with:
path: vendor
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-

- name: Install dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloader

- name: PHP Lint
run: composer lint

- name: PHPCS (Coding Standards)
run: composer phpcs

- name: PHPMD (Mess Detection)
run: composer phpmd

- name: phpmetrics (Code Metrics)
if: always()
run: |
mkdir -p phpmetrics
composer phpmetrics:violations || true
if [ -f phpmetrics/violations.xml ]; then
CRITICAL=$(grep -c 'priority="1"' phpmetrics/violations.xml || echo 0)
echo "### phpmetrics" >> $GITHUB_STEP_SUMMARY
echo "Critical violations: $CRITICAL" >> $GITHUB_STEP_SUMMARY
fi

frontend-quality:
name: Frontend Quality
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: ESLint
run: npm run lint

- name: Stylelint
run: npm run stylelint
continue-on-error: true
67 changes: 67 additions & 0 deletions .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Documentation

on:
push:
branches:
- development
pull_request:
branches:
- development

jobs:
deploy:
name: Deploy Documentation
runs-on: ubuntu-latest
# Only deploy on push, not on pull requests
if: github.event_name == 'push'
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js 18
uses: actions/setup-node@v3
with:
node-version: '18'

- name: Clear build cache and install dependencies
timeout-minutes: 3
run: |
cd docusaurus
rm -rf node_modules/.cache
rm -rf .docusaurus
rm -rf build
npm run ci

- name: Verify build output
run: |
cd docusaurus/build
if [ ! -f index.html ]; then
echo "ERROR: index.html not found in build directory!"
exit 1
fi

- name: Create .nojekyll and CNAME files
run: |
cd docusaurus/build
touch .nojekyll
echo "procest.app" > CNAME

- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docusaurus/build
publish_branch: gh-pages
user_name: 'github-actions[bot]'
user_email: 'github-actions[bot]@users.noreply.github.com'
force_orphan: false
allow_empty_commit: true
keep_files: false

- name: Verify deployment
run: |
git fetch origin gh-pages
echo "Deployment completed. Latest commit: $(git rev-parse origin/gh-pages)"
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
/node_modules/
/js/
/vendor/
/docusaurus/node_modules/
/docusaurus/build/
/docusaurus/.docusaurus/
65 changes: 65 additions & 0 deletions DEVELOPMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Development

## Prerequisites

- Docker & Docker Compose
- Node.js >= 18
- npm
- A running Nextcloud instance with [OpenRegister](https://github.com/ConductionNL/openregister) installed

## Local Development

This app is developed using the [nextcloud-docker-dev](https://github.com/juliushaertl/nextcloud-docker-dev) environment. The app is volume-mounted into the Nextcloud container.

```bash
# Start the development environment
docker compose -f openregister/docker-compose.yml up -d

# Build the frontend
cd procest
npm install
npm run dev
```

The app will be available at `http://localhost:8080/apps/procest`.

## Frontend Build

```bash
npm install # Install dependencies
npm run dev # Development build (watch mode)
npm run build # Production build
```

## Code Quality

```bash
composer phpcs # PHP CodeSniffer — coding standards
composer cs:fix # Auto-fix coding standard issues
composer phpmd # PHP Mess Detector — complexity, naming, unused code
composer phpmetrics # Generate HTML metrics report
```

## Product Page

The product page at [procest.app](https://procest.app) is built with [Docusaurus 3](https://docusaurus.io/) and deployed via GitHub Pages.

### How it works

- The Docusaurus setup lives in the `docusaurus/` folder
- Documentation content comes from the `docs/` folder at the project root — **not** duplicated inside `docusaurus/`
- The Docusaurus config uses `path: '../docs'` to reference the root docs directly
- Pushing to the `development` branch triggers the GitHub Actions workflow (`.github/workflows/documentation.yml`) which builds and deploys to the `gh-pages` branch
- GitHub Pages serves the built site at `procest.app` (configured via `static/CNAME`)

### Local preview

```bash
cd docusaurus
npm install
npm start # Dev server at http://localhost:3000 with hot reload
```

### Adding documentation

Simply add or edit Markdown files in the `docs/` folder. The sidebar is auto-generated from the folder structure. Changes will appear on the product page after pushing to `development`.
Loading
Loading