Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
5a69849
feat: partner programme — Host / Service / Certified (#23)
rubenvdlinde May 8, 2026
0b9bdc5
feat: clickable app pills, real Acato SVG, gold avatar on transparent…
rubenvdlinde May 8, 2026
29b0fa7
feat(build): refresh app-downloads at build time, drop bot-push workf…
rubenvdlinde May 8, 2026
10be27f
docs(academy): add notify_push to local-Nextcloud tutorial (#28)
rubenvdlinde May 9, 2026
f11bed4
academy: Part 1 of the DeskDesk tutorial — Scaffold
rubenvdlinde May 10, 2026
b3807ce
academy: Parts 2, 3, 4 of the DeskDesk tutorial
rubenvdlinde May 10, 2026
1b3f08a
Merge pull request #31 from ConductionNL/feature/deskdesk-tutorial-pa…
rubenvdlinde May 11, 2026
3c45ead
Merge pull request #32 from ConductionNL/feature/deskdesk-tutorial-pa…
rubenvdlinde May 11, 2026
9ae599d
academy: real xWiki setup steps in Part 4 of the DeskDesk tutorial
rubenvdlinde May 11, 2026
61525ef
Merge pull request #34 from ConductionNL/feature/deskdesk-tutorial-pa…
rubenvdlinde May 11, 2026
5058c76
fix(www): point url to www.conduction.nl + document vanity-domain wiring
rubenvdlinde May 13, 2026
1059119
feat(apps): add 4 apps + 7 sidecars; rework OpenWoo/OpenTalk; site-wi…
rubenvdlinde May 13, 2026
820888b
chore(deps): bump @conduction/docusaurus-preset to ^2.10.0
rubenvdlinde May 13, 2026
c604f2b
chore(deps): bump @conduction/docusaurus-preset to ^2.10.1
rubenvdlinde May 13, 2026
a05b7d4
feat(apps): commercial page for Scholiq (LMS + LVS) (#40)
rubenvdlinde May 14, 2026
c8a4976
feat(connext): add App Versions to Technical Core; DeskDesk, Planix, …
rubenvdlinde May 14, 2026
dac41f6
feat(apps): fill DeskDesk/Planix/OpenTalk listings; rewrite App Versi…
rubenvdlinde May 14, 2026
a6f5e37
revert(apps): DeskDesk and Planix are academy tutorials, not register…
rubenvdlinde May 14, 2026
cadc7b5
chore(deps): bump @conduction/docusaurus-preset to ^2.10.2 (#44)
rubenvdlinde May 15, 2026
59383aa
chore(deps): bump @conduction/docusaurus-preset to ^3.0.0 (#45)
rubenvdlinde May 15, 2026
907cafa
chore(security): require 24h cooldown on npm packages (#47)
rubenvdlinde May 17, 2026
04865cf
feat(openregister): MCP tool shelf + clickable 24-leaf grid (#51)
rubenvdlinde May 17, 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
13 changes: 13 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
cooldown:
default-days: 1
include:
- "*"
exclude:
- "@conduction/*"
40 changes: 0 additions & 40 deletions .github/workflows/app-downloads.yml

This file was deleted.

9 changes: 9 additions & 0 deletions .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ on:
branches: [development, documentation]
pull_request:
branches: [development, documentation]
# Nightly rebuild so app-downloads.json (regenerated by the npm
# prebuild step) reflects fresh GitHub release-asset counts. 07:00
# UTC = 09:00 Amsterdam (CEST) / 08:00 (CET). Replaces the old
# app-downloads.yml that committed the JSON to development; the
# PR-required ruleset blocked the bot push. Build-time fetch
# sidesteps the bot-push problem entirely.
schedule:
- cron: '0 7 * * *'
workflow_dispatch:

jobs:
deploy:
Expand Down
5 changes: 5 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Supply-chain hardening: reject any npm package published less than
# 24h ago. Compromised first-party-Conduction packages are excluded via
# Dependabot cooldown (.github/dependabot.yml); for fresh @conduction/*
# releases, override per-install with `npm install --min-release-age=0`.
min-release-age=1
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

The Docusaurus 3 site for [conduction.nl](https://conduction.nl). Built on `@conduction/docusaurus-preset` for brand defaults; site-specific config lives in [docusaurus.config.js](docusaurus.config.js).

It also serves the `connext.conduction.nl` and `commonground.conduction.nl` vanity entry points (Cloudflare 301-redirects to `/connext` and `/commonground` paths on this site, with locale awareness via `Accept-Language`).
It also serves the `connext.conduction.nl` and `commonground.conduction.nl` vanity entry points (a Cloudflare worker — configured in the dashboard, not in this repo — 301-redirects to the `/connext` and `/commonground` paths on this site, with locale awareness via `Accept-Language`).

> **Vanity-domain redirect target:** the worker must redirect to `https://www.conduction.nl/connext/` — with the `www.` and the **trailing slash**. The site is built with `url: https://www.conduction.nl` (matching `static/CNAME`) and `trailingSlash: true`. Targeting the bare apex (`conduction.nl`) or the slash-less path (`/connext`) stacks extra GitHub Pages 301s on every request and, if the worker route also matches `www`, can produce a redirect loop. If you see a redirect loop on `connext.conduction.nl`, also check Cloudflare's SSL/TLS mode is **Full** (not "Flexible") — Flexible + GitHub Pages "Enforce HTTPS" is the classic infinite HTTP↔HTTPS loop.

## Local development

Expand Down
47 changes: 45 additions & 2 deletions academy/2026-05-07-nextcloud-lokaal-draaien/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Voor elke andere tutorial in deze academy heb je een werkende Nextcloud nodig. D

<Outcomes title="Wat je leert">
<Outcome>Een werkende Nextcloud op <code>http://localhost:8080</code> opzetten met Docker.</Outcome>
<Outcome>Postgres voor data, Redis voor cache en Nextcloud voor het werk in één compose-bestand combineren.</Outcome>
<Outcome>Postgres voor data, Redis voor cache, Nextcloud voor het werk en <code>notify_push</code> voor realtime updates in één compose-bestand combineren.</Outcome>
<Outcome>Een admin-account aanmaken waar je naar believen Conduction-apps op installeert.</Outcome>
<Outcome>Met één commando de hele stack weer opruimen.</Outcome>
</Outcomes>
Expand Down Expand Up @@ -90,12 +90,25 @@ services:
REDIS_HOST: redis
NEXTCLOUD_TRUSTED_DOMAINS: "localhost"

notify_push:
image: icewind1991/notify_push:latest
restart: unless-stopped
depends_on: [nextcloud, db, redis]
ports:
- "7867:7867"
volumes:
- nextcloud:/nextcloud:ro
environment:
NEXTCLOUD_URL: http://nextcloud
DATABASE_URL: postgres://nextcloud:nextcloud@db/nextcloud
REDIS_URL: redis://redis:6379

volumes:
db:
nextcloud:
```

Drie services, allemaal officiële images, geen custom build. De `./apps`-bind-mount is optioneel: handig als je een Conduction-app als zip naast de installatie wilt zetten in plaats van via de app store.
Vier services, allemaal officiële images, geen custom build. De `./apps`-bind-mount is optioneel: handig als je een Conduction-app als zip naast de installatie wilt zetten in plaats van via de app store. `notify_push` is de WebSocket push-server die Conduction-apps gebruiken voor realtime updates — meer daarover in stap 5.

## Stap 2: Start de stack

Expand Down Expand Up @@ -133,6 +146,32 @@ Klik je avatar rechtsboven en kies **Apps**. De Conduction-apps staan onder **In

Na elke install draait de schema-bootstrap automatisch. Voorbeelddata is binnen seconden zichtbaar.

Installeer ook de `notify_push`-app (onder **Integration**). Die is de Nextcloud-zijde van de WebSocket push-server die je in stap 1 al hebt gestart — je hoeft hem alleen te enabelen, geen verdere config nodig.

## Stap 5: Koppel `notify_push` aan de push-server

`notify_push` heeft één eenmalige setup-stap zodat de Nextcloud-app weet waar de Rust-binary draait. Voer in de werkmap uit:

```bash
docker compose exec --user www-data nextcloud php occ config:system:set redis host --value redis
docker compose exec --user www-data nextcloud php occ config:system:set redis port --value 6379 --type integer
docker compose exec --user www-data nextcloud php occ config:system:set memcache.distributed --value '\OC\Memcache\Redis'
docker compose exec --user www-data nextcloud php occ config:system:set trusted_proxies 0 --value 172.16.0.0/12
docker compose exec --user www-data nextcloud php occ notify_push:setup http://notify_push:7867
```

De eerste drie regels vertellen Nextcloud dat Redis de gedeelde cache is — `notify_push` luistert daarop voor change-events. De vierde regel markeert het Docker-netwerk als trusted zodat de push-server bij Nextcloud terugmag bellen voor authenticatie. De laatste regel registreert de URL bij de Nextcloud-app.

Verifieer dat alles werkt:

```bash
docker compose exec --user www-data nextcloud php occ notify_push:self-test
```

Je krijgt een lijstje vinkjes — `redis is configured`, `push server is receiving redis messages`, `push server can connect to the Nextcloud server`, et cetera. De waarschuwing over `unencrypted http` is voor lokaal werk normaal; in productie zit `notify_push` achter dezelfde reverse proxy als Nextcloud, dus dan is dat geen issue.

Vanaf nu krijgen apps die op `notify_push` luisteren — zoals OpenRegister's live-update-integratie via `@conduction/nextcloud-vue` — direct doorduwingen op object-wijzigingen, zonder dat de browser hoeft te pollen.

## Wat je krijgt

| Eigenschap | Waarde |
Expand Down Expand Up @@ -170,6 +209,10 @@ Na `down -v` is je laptop weer schoon. Twee minuten later kun je opnieuw beginne

**App-store install werkt niet:** controleer of Nextcloud naar buiten kan. In een corporate netwerk soms blokkade op `apps.nextcloud.com`. Een proxy via `HTTP_PROXY`-env-variabelen lost dit op.

**`notify_push` self-test faalt op `is not trusted as a reverse proxy`:** het Docker-netwerk-bereik in jouw setup wijkt af van `172.16.0.0/12`. Bekijk het bereik met `docker network inspect $(docker network ls --filter name=conduction-demo -q) --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}'` en pas de `trusted_proxies`-regel uit stap 5 aan met die subnet.

**`notify_push` blijft restarten na `docker compose up -d`:** kijk in de logs (`docker compose logs notify_push`) of je `× No redis server is configured` ziet. Dat betekent dat Nextcloud's `memcache.distributed`-config nog niet op Redis staat — voer de eerste drie `occ config:system:set`-commando's uit stap 5 uit, en herstart dan met `docker compose up -d notify_push`.

## Volgende stap

Een werkende Nextcloud is de aanleiding voor de andere tutorials in deze serie:
Expand Down
Loading
Loading