|
| 1 | +<p align="center"> |
| 2 | + <img src="img/app-store.svg" alt="OpenCatalogi logo" width="80" height="80"> |
| 3 | +</p> |
| 4 | + |
| 5 | +<h1 align="center">OpenCatalogi</h1> |
| 6 | + |
| 7 | +<p align="center"> |
| 8 | + <strong>Publication management and catalog federation for Nextcloud — publish, discover, and share open data across organizations</strong> |
| 9 | +</p> |
| 10 | + |
| 11 | +<p align="center"> |
| 12 | + <a href="https://github.com/ConductionNL/opencatalogi/releases"><img src="https://img.shields.io/github/v/release/ConductionNL/opencatalogi" alt="Latest release"></a> |
| 13 | + <a href="https://github.com/ConductionNL/opencatalogi/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-EUPL--1.2-blue" alt="License"></a> |
| 14 | + <a href="https://github.com/ConductionNL/opencatalogi/actions"><img src="https://img.shields.io/github/actions/workflow/status/ConductionNL/opencatalogi/code-quality.yml?label=quality" alt="Code quality"></a> |
| 15 | + <a href="https://documentatie.opencatalogi.nl"><img src="https://img.shields.io/badge/docs-opencatalogi.nl-green" alt="Documentation"></a> |
| 16 | +</p> |
| 17 | + |
1 | 18 | --- |
2 | | -description: >- |
3 | | - Welkom bij de gebruikersdocumentatie voor de OpenCatalogi Nextcloud App. Veel |
4 | | - succes met het gebruik van de app. |
5 | | ---- |
6 | 19 |
|
7 | | -# Welkom |
| 20 | +OpenCatalogi turns Nextcloud into a publication platform for open data and government transparency. Create catalogs, manage publications with metadata and attachments, and federate them across organizations so that citizens, businesses, and other government entities can discover and access public information. The app supports the Dutch WOO (Open Government Act) and follows Common Ground principles for interoperability. |
| 21 | + |
| 22 | +It connects to a federated directory of other OpenCatalogi instances, enabling cross-organization search and discovery without centralized infrastructure. A public-facing frontend can be deployed separately for citizen access, while administrators manage everything from within Nextcloud. |
| 23 | + |
| 24 | +> **Requires:** [OpenRegister](https://github.com/ConductionNL/openregister) — all data is stored as OpenRegister objects (no own database tables). |
| 25 | +
|
| 26 | +## Screenshots |
| 27 | + |
| 28 | +<table> |
| 29 | + <tr> |
| 30 | + <td><img src="img/screenshot-dashboard.png" alt="Dashboard with publication statistics and activity overview" width="320"></td> |
| 31 | + <td><img src="img/screenshot-publications.png" alt="Publication list with metadata and status columns" width="320"></td> |
| 32 | + <td><img src="img/screenshot-catalog.png" alt="Catalog detail view with publications and settings" width="320"></td> |
| 33 | + </tr> |
| 34 | + <tr> |
| 35 | + <td align="center"><em>Dashboard</em></td> |
| 36 | + <td align="center"><em>Publications</em></td> |
| 37 | + <td align="center"><em>Catalog</em></td> |
| 38 | + </tr> |
| 39 | +</table> |
| 40 | + |
| 41 | +## Features |
| 42 | + |
| 43 | +### Publication Management |
| 44 | +- **Create & Edit Publications** — Rich metadata editor for publications including title, summary, category, portal URL, and custom fields |
| 45 | +- **Attachments** — Upload documents, images, and other files to publications with automatic metadata extraction |
| 46 | +- **Publication Status** — Track publications through draft, published, and archived states |
| 47 | +- **Bulk Operations** — Manage multiple publications at once with batch actions |
| 48 | +- **Download & Export** — Generate downloadable packages of publications and their attachments |
| 49 | + |
| 50 | +### Catalog Federation |
| 51 | +- **Multiple Catalogs** — Create and manage separate catalogs for different domains or departments (e.g., WOO documents, software, datasets) |
| 52 | +- **Federated Directory** — Register your catalogs in a shared directory so other organizations can discover and subscribe to them |
| 53 | +- **Listings** — Subscribe to external catalogs and synchronize their publications into your local search index |
| 54 | +- **Cross-Organization Search** — Query publications across all federated catalogs from a single search interface |
| 55 | +- **Directory Sync** — Background cron job keeps federated listings up to date automatically |
| 56 | + |
| 57 | +### Search & Discovery |
| 58 | +- **Faceted Search** — Filter publications by category, organization, catalog, date range, and custom metadata fields |
| 59 | +- **Full-Text Search** — Search across publication content and attached documents |
| 60 | +- **ElasticSearch Support** — Optional ElasticSearch backend for high-performance search at scale |
| 61 | +- **Public Search API** — RESTful endpoints for external frontends and third-party integrations |
| 62 | + |
| 63 | +### Content Management |
| 64 | +- **Pages** — Create static content pages (about, contact, FAQ) served through the public API |
| 65 | +- **Menus** — Define navigation menus for the public-facing frontend |
| 66 | +- **Glossary** — Maintain a glossary of terms with definitions, shown alongside publications |
| 67 | +- **Themes** — Configure visual themes for the public frontend with colors, logos, and styling |
| 68 | + |
| 69 | +### WOO Compliance |
| 70 | +- **Publication Categories** — Predefined categories aligned with WOO information categories (decisions, reports, advice, etc.) |
| 71 | +- **Metadata Standards** — Structured metadata following Dutch government open data standards |
| 72 | +- **Sitemap Generation** — Automatic sitemaps per catalog and category for search engine indexing |
| 73 | +- **Robots.txt** — Configurable robots.txt for controlling crawler access |
| 74 | + |
| 75 | +### Administration |
| 76 | +- **Organization Management** — Configure the publishing organization with contact details and branding |
| 77 | +- **Settings Panel** — Centralized admin settings for storage, publishing rules, and federation behavior |
| 78 | +- **Manual Import** — Bulk import publications from external sources via the admin interface |
| 79 | +- **Version Info** — View app version and configuration status from the settings page |
| 80 | + |
| 81 | +## Architecture |
| 82 | + |
| 83 | +```mermaid |
| 84 | +graph TD |
| 85 | + A[Vue 2 Frontend] -->|REST API| B[OpenCatalogi Backend] |
| 86 | + B --> C[OpenRegister API] |
| 87 | + C --> D[(PostgreSQL JSON store)] |
| 88 | + B --> E[Federation Directory] |
| 89 | + E -->|sync| F[External OpenCatalogi Instances] |
| 90 | + B --> G[ElasticSearch — optional] |
| 91 | + H[Public Frontend — Tilburg WOO UI] -->|Public API| B |
| 92 | + B --> I[Nextcloud Activity] |
| 93 | +``` |
| 94 | + |
| 95 | +### Data Model |
| 96 | + |
| 97 | +| Object | Description | Standard | |
| 98 | +|--------|-------------|----------| |
| 99 | +| Publication | Core metadata wrapper for published information — title, summary, category, status | DCAT-AP | |
| 100 | +| Attachment | File or document linked to a publication with its own metadata | DCAT Distribution | |
| 101 | +| Catalogue | A named collection of publications with its own slug, organization, and settings | DCAT Catalog | |
| 102 | +| Organisation | The publishing organization with contact info, logo, and branding | Schema.org Organization | |
| 103 | +| Listing | A subscription to an external catalog from the federated directory | — | |
| 104 | + |
| 105 | +**Data standards:** DCAT-AP (EU metadata), Schema.org, WOO information categories. |
| 106 | + |
| 107 | +### Directory Structure |
| 108 | + |
| 109 | +``` |
| 110 | +opencatalogi/ |
| 111 | +├── appinfo/ # Nextcloud app manifest, routes, navigation |
| 112 | +├── lib/ # PHP backend |
| 113 | +│ ├── Controller/ # REST API controllers (publications, catalogi, search, federation…) |
| 114 | +│ ├── Service/ # Business logic (catalog, directory, publication, search, download) |
| 115 | +│ ├── Cron/ # Background jobs (DirectorySync, Broadcast) |
| 116 | +│ ├── Flow/ # Nextcloud Flow integration |
| 117 | +│ ├── Listener/ # Event listeners |
| 118 | +│ └── Settings/ # Admin settings panel |
| 119 | +├── src/ # Vue 2 frontend — components, Pinia stores, views |
| 120 | +│ ├── catalogi/ # Catalog management views |
| 121 | +│ ├── publications/ # Publication editor and list views |
| 122 | +│ ├── search/ # Search interface |
| 123 | +│ ├── directory/ # Federation directory management |
| 124 | +│ ├── themes/ # Theme configuration |
| 125 | +│ ├── store/ # Pinia stores per entity |
| 126 | +│ └── views/ # Route-level views |
| 127 | +├── docs/ # Documentation (users, admins, developers, schemas) |
| 128 | +├── img/ # App icons and screenshots |
| 129 | +└── docusaurus/ # Product documentation site (documentatie.opencatalogi.nl) |
| 130 | +``` |
| 131 | + |
| 132 | +## Requirements |
| 133 | + |
| 134 | +| Dependency | Version | |
| 135 | +|-----------|---------| |
| 136 | +| Nextcloud | 28 -- 33 | |
| 137 | +| PHP | 8.1+ | |
| 138 | +| PostgreSQL / MySQL 8+ / SQLite | — | |
| 139 | +| [OpenRegister](https://github.com/ConductionNL/openregister) | latest | |
| 140 | +| System Cron | required for federation sync | |
| 141 | + |
| 142 | +## Installation |
| 143 | + |
| 144 | +### From the Nextcloud App Store |
| 145 | + |
| 146 | +1. Go to **Apps** in your Nextcloud instance |
| 147 | +2. Search for **OpenCatalogi** |
| 148 | +3. Click **Download and enable** |
| 149 | + |
| 150 | +> OpenRegister must be installed first. The app will attempt to install it automatically, or you can [install OpenRegister manually](https://apps.nextcloud.com/apps/openregister). |
| 151 | +
|
| 152 | +### From Source |
| 153 | + |
| 154 | +```bash |
| 155 | +cd /var/www/html/custom_apps |
| 156 | +git clone https://github.com/ConductionNL/opencatalogi.git |
| 157 | +cd opencatalogi |
| 158 | +composer install --no-dev |
| 159 | +npm install |
| 160 | +npm run build |
| 161 | +php occ app:enable opencatalogi |
| 162 | +``` |
| 163 | + |
| 164 | +## Development |
| 165 | + |
| 166 | +### Start the environment |
| 167 | + |
| 168 | +```bash |
| 169 | +docker compose -f openregister/docker-compose.yml up -d |
| 170 | +``` |
| 171 | + |
| 172 | +To include the public frontend (Tilburg WOO UI): |
| 173 | + |
| 174 | +```bash |
| 175 | +docker compose -f openregister/docker-compose.yml --profile ui up -d |
| 176 | +``` |
| 177 | + |
| 178 | +### Frontend development |
| 179 | + |
| 180 | +```bash |
| 181 | +cd opencatalogi |
| 182 | +npm install |
| 183 | +npm run dev # One-time build (development mode) |
| 184 | +npm run watch # Watch mode with auto-rebuild |
| 185 | +npm run build # Production build |
| 186 | +``` |
| 187 | + |
| 188 | +### Code quality |
| 189 | + |
| 190 | +```bash |
| 191 | +# PHP |
| 192 | +composer phpcs # Check coding standards |
| 193 | +composer cs:fix # Auto-fix PHPCS issues |
| 194 | +composer phpmd # Mess detection |
| 195 | +composer psalm # Static analysis |
| 196 | +composer phpmetrics # HTML metrics report |
| 197 | + |
| 198 | +# Frontend |
| 199 | +npm run lint # ESLint |
| 200 | +npm run stylelint # CSS linting |
| 201 | + |
| 202 | +# Full check (all tools) |
| 203 | +composer check:strict # Runs lint, phpcs, phpmd, psalm, phpstan, tests |
| 204 | +``` |
| 205 | + |
| 206 | +## Tech Stack |
| 207 | + |
| 208 | +| Layer | Technology | |
| 209 | +|-------|-----------| |
| 210 | +| Frontend | Vue 2.7, Pinia, @nextcloud/vue | |
| 211 | +| Build | Webpack 5, @nextcloud/webpack-vue-config | |
| 212 | +| Backend | PHP 8.1+, Nextcloud App Framework | |
| 213 | +| Data | OpenRegister (PostgreSQL JSON objects) | |
| 214 | +| Search | ElasticSearch 8 (optional), SQL full-text (default) | |
| 215 | +| PDF | mPDF for document generation | |
| 216 | +| Templates | Twig for content rendering | |
| 217 | +| Quality | PHPCS, PHPMD, Psalm, PHPStan, phpmetrics, ESLint, Stylelint | |
| 218 | + |
| 219 | +## Documentation |
| 220 | + |
| 221 | +Full documentation is available at **[documentatie.opencatalogi.nl](https://documentatie.opencatalogi.nl)** |
| 222 | + |
| 223 | +| Section | Description | |
| 224 | +|---------|-------------| |
| 225 | +| [User Guide](docs/Users/index.md) | Publishing, searching, and managing publications | |
| 226 | +| [Administrator Guide](docs/Administrator/README.md) | Catalog setup, directory configuration, themes, and metadata | |
| 227 | +| [Developer Guide](docs/Developers/index.md) | Local development setup, architecture, and API reference | |
| 228 | +| [Installation](docs/Installation/README.md) | On-premise, SaaS, and upgrade instructions | |
| 229 | +| [Schemas](docs/schema/) | JSON Schema definitions for publications, catalogs, and attachments | |
8 | 230 |
|
9 | | -*** |
| 231 | +## Standards & Compliance |
10 | 232 |
|
11 | | -Deze documentatie richt zich op het gebruik van onze beheerapplicatie, speciaal ontworpen voor het beheren van publicaties en catalogi binnen het federatief netwerk. De OpenCatalogi Nextcloud App is een eenvoudig te installeren en krachtige oplossing voor publicatiebeheer: |
| 233 | +- **Metadata standard:** DCAT-AP (EU) for publication metadata interoperability |
| 234 | +- **WOO compliance:** Publication categories aligned with Dutch Open Government Act requirements |
| 235 | +- **Common Ground:** Follows Common Ground principles for federated, reusable government IT |
| 236 | +- **Accessibility:** WCAG AA (Dutch government requirement) |
| 237 | +- **Authorization:** RBAC via OpenRegister with organization-based multitenancy |
| 238 | +- **Federation:** Decentralized directory protocol for cross-organization catalog sharing |
| 239 | +- **Localization:** Dutch and English |
12 | 240 |
|
13 | | -* [**Quickstart**](installatie/instructies.md) voor een test/demo-omgeving |
14 | | -* [**Quickstart** ](developers/installatie-van-nextcloud-development-omgeving.md)voor een development-omgeving |
| 241 | +## Related Apps |
15 | 242 |
|
16 | | -Onze app ondersteunt de Common Ground-aanpak, waardoor je snel toegang hebt tot bestaande IT-oplossingen die je kunt hergebruiken om de ontwikkeltijd te verkorten en de kosten te verlagen. In deze gids vind je stapsgewijze instructies, nuttige tips en best practices om je te helpen bij het optimaal beheren van je federatief netwerk, zoals publicaties of softwarecomponenten. |
| 243 | +- **[OpenRegister](https://github.com/ConductionNL/openregister)** -- Object storage layer (required dependency) |
| 244 | +- **[OpenConnector](https://github.com/ConductionNL/openconnector)** -- API gateway for importing data from external sources |
| 245 | +- **[NL Design](https://github.com/ConductionNL/nldesign)** -- Design token theming for Dutch government styling |
| 246 | +- **[DocuDesk](https://github.com/ConductionNL/docudesk)** -- Document generation from publication data |
| 247 | +- **[Softwarecatalog](https://github.com/ConductionNL/softwarecatalog)** -- GEMMA software catalog built on OpenCatalogi |
17 | 248 |
|
18 | | -Deze documentatie is bedoeld voor diverse doelgroepen: |
| 249 | +## License |
19 | 250 |
|
20 | | -* **Gebruikers:** iedereen die wil delen binnen het netwerk. |
21 | | -* **Developers:** Ontwikkelaars die bijdragen aan de OpenCatalogi-projecten en behoefte hebben aan gedetailleerde technische informatie en API-documentatie. |
22 | | -* **Beheerders:** Professionals die verantwoordelijk zijn voor het beheren en onderhouden van het federatief netwerk voor publicaties en componenten. |
| 251 | +EUPL-1.2 |
23 | 252 |
|
24 | | -Voor meer informatie over OpenCatalogi en onze gemeenschappelijke inspanningen, bezoek onze [documentatie-pagina](https://documentatie.opencatalogi.nl) of de officiële website op [OpenCatalogi.nl](https://opencatalogi.nl). |
| 253 | +## Authors |
25 | 254 |
|
26 | | -Veel succes met het gebruik van de app. Voor vragen of bijdragen, neem gerust contact met ons op via [[email protected]](mailto:[email protected]). |
| 255 | +Built by [Conduction](https://conduction.nl) and [Acato](https://acato.nl) -- open-source software for Dutch government and public sector organizations. |
0 commit comments