Skip to content

release: promote development to main (MCP tool shelves + Scholiq + tutorials + preset bumps)#52

Merged
rubenvdlinde merged 22 commits into
mainfrom
development
May 17, 2026
Merged

release: promote development to main (MCP tool shelves + Scholiq + tutorials + preset bumps)#52
rubenvdlinde merged 22 commits into
mainfrom
development

Conversation

@rubenvdlinde
Copy link
Copy Markdown
Collaborator

Summary

Promote development to main so the queued work goes live on www.conduction.nl. Headline pieces:

Full commit list

$(cat /tmp/promo-commits.txt)

Test plan

  • Production build succeeds; no missing exports from @conduction/docusaurus-preset@^3.3.0.
  • /apps/openregister/, /apps/decidesk/, /apps/openbuilt/ all show the MCP tool shelf.
  • /apps/scholiq/ renders the commercial page.
  • Academy DeskDesk tutorial parts 1-4 all open and render.
  • Leaf grid on /apps/openregister/ is keyboard-focusable + links into the product docs.

rubenvdlinde and others added 22 commits May 8, 2026 13:13
Rewrite the partner directory around a three-tier programme that
matches how the relationship actually works, not the marketing
language we inherited:

  Host       Ships our open-source apps to their customers. Hosts and
             resells, may bundle Nextcloud-supported variants. No SLA
             with Conduction, no direct line to our support, not
             eligible to respond to public tenders with our products.
  Service    Has an SLA with Conduction. Their team can call us for
             third-line support, with named contacts and input on bug
             priority and roadmap. They run rollouts; we back them up.
  Certified  Trained, audited, on the joint roadmap with Conduction.
             Eligible to co-respond to public tenders alongside us.

Bumps preset to ^2.0.0 (which renames the slugs preset-side and adds
the combined Apps-and-solutions facet). All eleven partners re-tiered
and given fresh, factual one-liners researched from each company's
public site:

  Certified: Acato
  Service:   Shift2
  Host:      Centric, Procolix, The Goodcloud, BCT, Open Gemeenten,
             xxllnc (formerly Exxellence), YARD, iO, Sendent

Apps + solutions corrected per partner: Sendent ships only MyDash;
Procolix and The Goodcloud are Nextcloud hosts; Centric pairs
Nextcloud with DocuDesk; Acato, Shift2, BCT, Open Gemeenten, xxllnc,
YARD and iO all ship the Conduction Woo-solution
(OpenCatalogi + OpenRegister + OpenConnector).

/support tier cards rewritten to match the new programme.
…#24)

- Bumps @conduction/docusaurus-preset to ^2.1.0, which makes app
  chips on the partner directory cards and the partner detail
  Sidecard clickable links to /apps/<slug>. Apps not in the
  registry (Nextcloud) stay as static spans.
- Replaces the low-res Acato PNG with the official SVG from
  acato.nl, with white fills swapped for #0F0F12 so the wordmark
  reads against the white avatar plate. Catalog points at the SVG.
- Ships static/img/brand/avatar-conduction-gold.svg, the gold
  Conduction credential mark on a transparent background, so the
  Sidecard's certified-tier badge sits directly on the cobalt-fill
  card surface instead of inside a white plate.
…low (#26)

The old .github/workflows/app-downloads.yml ran nightly and tried to
git push the regenerated data/app-downloads.json to development.
The org-wide PR-required ruleset blocked the bot push, so the data
went stale and the homepage showed '0 downloads'.

Move the refresh to a Docusaurus prebuild step so the JSON is
regenerated on every site build. No bot push, no rule fight. Add a
nightly cron + workflow_dispatch trigger to documentation.yml so the
site rebuilds daily even without code changes, refreshing the data
each time. Centralized workflow already (PR ConductionNL/.github#46)
passes GITHUB_TOKEN to the build step so the script can authenticate
against the GitHub API and avoid the 60 req/hr unauth ceiling on the
331-repo enumeration.

The committed JSON snapshot stays for local-dev convenience but is
overwritten on every CI build.
OpenRegister's add-live-updates change (PR #1453) and the matching
@conduction/nextcloud-vue@1.0.0-beta.4 plugin both rely on
notify_push being available. Updating the canonical "Nextcloud lokaal
draaien" tutorial so anyone who follows it gets a stack ready for
realtime push out of the box, not just polling.

Adds:
- notify_push service to docker-compose (icewind1991/notify_push:latest,
  port 7867, depends on db + redis + nextcloud, mounts NC volume RO,
  reads REDIS_URL + DATABASE_URL + NEXTCLOUD_URL)
- New Stap 5 with the five occ config:system:set commands needed to
  wire NC's Redis cache, mark the Docker subnet as a trusted proxy,
  and run notify_push:setup
- Self-test step with expected check-mark output
- Two troubleshooting entries: trusted_proxies subnet mismatch, and
  the "No redis server is configured" restart loop

Outcomes section now mentions notify_push as the realtime channel.
First of a four-part tutorial that walks readers through building
DeskDesk, a desk-booking app for open-office environments, on the
Conduction Nextcloud stack. Part 1 covers:

- gh repo create from the nextcloud-app-template GitHub template
- The boot-critical rename ritual (id, namespace, autoload, every
  src/ and lib/ reference) with a clear table of which files matter
- Build + enable + verify the empty shell renders
- The chassis explained via the preset's <AtomZones/> visual:
  topbar, left navigation, main column, page header, sidebar

Reference repo: https://github.com/ConductionNL/deskdesk

Parts 2 (schemas + manifest), 3 (calendar provider), and 4
(xWiki + ship) follow.
Completes the four-part series started in Part 1.

Part 2 — Schemas + manifest (/academy/deskdesk-tutorial-2-schemas-manifest/)
  Define floor / desk / booking schemas in OpenRegister with typed
  relations and seed data. Declare the register + pages + menu in
  src/manifest.json. Replace 175-line App.vue with 10 lines: a single
  CnAppRoot reading the manifest. Generate router routes from the
  manifest pointing at CnPageRenderer. Delete navigation/MainMenu.vue
  and the views/ stubs — the manifest renderer replaces them all.

Part 3 — Schema-driven integrations (/academy/deskdesk-tutorial-3-calendar/)
  One configuration.calendarProvider block on the booking schema.
  Bookings appear in NC Calendar without any controller, listener, or
  per-app glue. Same pattern unlocks Activity, Mail Smart Picker,
  Contacts matching — anti-patterns called out (don't hand-code
  CalendarSync.vue / NotesService).

Part 4 — Knowledge + ship (/academy/deskdesk-tutorial-4-knowledge-and-ship/)
  Author three zone-tagged knowledge articles in xWiki. Wire an
  OpenConnector source + synchronisation that maps xWiki pages to a
  knowledge_article schema in OpenRegister. Surface them on
  CnObjectSidebar via a custom KnowledgeTab component registered with
  cnCustomComponents. Package + sign + release the app.

Reference repo: https://github.com/ConductionNL/deskdesk
Series outline cross-linked via series: deskdesk-tutorial frontmatter.
…rt-1

academy: Part 1 of the DeskDesk tutorial (Scaffold)
…rts-2-3-4

academy: Parts 2-4 of the DeskDesk tutorial (Schemas, Calendar, Knowledge + ship)
Part 4 was previously a paper walkthrough with placeholder URLs.
Rewrites it as the actual flow we ran against a local xWiki:

- New Step 0 + Step 0a: docker-compose --profile xwiki up -d, create
  the xwiki database in the shared Postgres, walk the Distribution
  Wizard (admin user, "Let the wiki be empty"), verify REST.
- Step 1: REST PUT recipe for the three zone-scoped articles using
  the actual subspace shape (DeskDeskKnowledge.{East,Central,West}).
  Subspaces replace the original "tags" approach because the
  no-flavor wiki ships without the Tags application.
- Step 2: knowledge_article schema with the actual JSON key/slug
  match-or-fail trap called out explicitly. Wires SCHEMA_SLUGS in
  PHP and the SCHEMAS list in the frontend store.
- Step 3-4: OpenConnector source + synchronisation against the
  container-internal http://openregister-xwiki:8080/rest URL (the
  host URL http://localhost:8086 is documented as the alternative).
- Step 5: real KnowledgeTab.vue with the watch-objectId pattern that
  the reference repo at ConductionNL/deskdesk now ships. App.vue
  shows the CnAppRoot #sidebar slot + objectSidebarState wiring
  consumers need to make CnDetailPage's external-sidebar channel
  work.
- New Troubleshooting block covering the four traps we hit while
  building this: schema-key/slug mismatch, DetailPageWrapper
  bridging, "Let the wiki be empty" path for offline containers,
  Accept-JSON header on the OpenConnector source.

Cross-links to the reference repo at ConductionNL/deskdesk (PR #4
shipped the matching Part 4 implementation).
…rt-4-xwiki-real

academy: real xWiki setup steps in Part 4 of the DeskDesk tutorial
GitHub Pages serves only on the CNAME host (www.conduction.nl); using the
bare apex stacked an apex->www hop onto every canonical/og:url/sitemap entry
and amplified redirect loops on the connext./commonground. vanity workers.
README clarifies that the Cloudflare worker must redirect to the trailing-
slash www. target and that Cloudflare SSL must be Full (not Flexible).
…de app counts

- /apps grows from 13 to 16: drop OpenWoo (it is a Solution composed of
  OpenRegister + OpenCatalogi + DocuDesk, not an installable app — moved
  to a new section on /commonground#openwoo and linked from the connext
  diagram), add shillinq, openbuilt, doriath (in-development), and
  app-versions (in-development).
- /sidecars/ route: new index + 7 sidecar product pages (openklant,
  openzaak, valtimo, n8n, keycloak, ollama, open-webui). OpenTalk dropped
  per product call. New sidecars-catalog.js + sidecars-registry.js
  mirror the apps-catalog shape.
- connext platform diagram: every Conduction item is now a clickable
  link to its /apps/<slug>; App Builder cluster replaces 'COMING SOON'
  with the real OpenBuilt entry; Doriath added under Solutions; OpenTalk
  removed from the ExternalAppShelf and prose; remaining 14 external
  tools route to the Nextcloud app store, the local /sidecars/<slug>
  page, or the new /apps/openregister#integrations anchor.
- openregister.mdx gains an #integrations anchor + new XWiki and
  Presidio rows so the external-tools shelf has a landing for tools
  that are not ours and not in the store.
- Site-wide app-count is now a derived constant: apps-catalog.js exports
  APP_COUNT (= Object.keys(PRESENTATION).length), INTEGRATED_COUNT, and
  ECOSYSTEM_COUNT. connext/index/demo/commonground all import and
  render these instead of hardcoding 'Twelve' or 'Twenty-four'.
- /support: 'Official Nextcloud partner' bullet added to the Service tier.
- Download counter fix: new scripts/sync-app-downloads.js mirrors
  data/app-downloads.json into node_modules/@conduction/data/ so the
  preset's stats import resolves on a fresh install. Wired into
  postinstall + prestart + prebuild so it survives npm install and
  works in both dev and prod.
The 2.10.0 release adds the platform-diagram href row attribute (every
Conduction item on the connext diagram becomes a clickable link), the
has-badge gating so the App Builder cluster styles like a real list when
its badge is absent, and the four new entries in apps-registry (shillinq,
openbuilt, doriath, app-versions). All of this is what connext.mdx now
relies on.
The 2.10.1 patch fixes the App Builder hex colour (defaults to cobalt;
the orange placeholder treatment is now gated behind a has-badge class
on the cluster) and the platform-diagram tooltip clip (.row:hover
becomes overflow:visible with z-index 10, so the .desc tooltip escapes
the row's overflow:hidden box and paints above sibling rows).
…Scholiq to Workspace Apps (#41)

Surface all in-house apps in the platform diagram so the home page of /connext/
matches the breadth of the catalogue under /apps. App Versions joins the
Technical Core (fleet-management infrastructure); DeskDesk, Planix and Scholiq
join the Workspace Apps row alongside the rest of the end-user apps.
…ons away from scaffold framing (#42)

- apps-catalog: add DeskDesk + Planix entries (Workspace category); rewrite
  app-versions tagline from "scaffold/template" to "pin and roll back any
  Nextcloud app version, multi-source picker, audit-trailed" so the catalog
  matches the actual app and its new docs site
- apps/app-versions.mdx: full rewrite around the version-management surface
  (version table, multi-source picker, rollback/pin, audit trail) with
  links to the four canonical specs
- apps/deskdesk.mdx: new commercial page for the desk and meeting-room
  booking app (plattegrond, kantoorweek planning, check-in, no-show
  handling)
- apps/planix.mdx: new commercial page for kanban-over-registers (boards,
  swim-lanes, workflow on typed data, saved views)
- sidecars-catalog + sidecars/opentalk.mdx: close the listing gap for the
  OpenTalk video-conferencing ExApp wrapper
… apps (#43)

DeskDesk and Planix are tutorial apps that live in /academy/deskdesk-tutorial-*
and the corresponding planix walk-through, not standalone products. Remove them
from the apps register (apps-catalog.js) and the /connext/ Workspace Apps panel
where they were briefly surfaced in #41 / #42, and drop the now-orphan
commercial pages at /apps/deskdesk and /apps/planix. The tutorial pages and
their docs sites (deskdesk.conduction.nl, planix.conduction.nl) stay put.
Picks up the App Builder hex always-orange rule from preset commit b7a0fce
("revert: App Builder hex stays KNVB orange unconditionally"). The previous
2.10.1 still rendered the hex cobalt unless a COMING SOON badge was present;
2.10.2 unconditionally fills it with var(--c-orange-knvb), which is the
documented brand non-negotiable (preset README "Brand rules" section).
Picks up the v3.0.0 brand-system refactor:

- 3D hex-prism mechanism removed (brand is flat-hex only)
- Family token ramps trimmed from 5 stops (50/100/300/500/700) to 2 stops (300/500)
- colors.html consolidated as the single canonical color page, folding in
  the categorical role labels (Process / Integrate / Data / Documents /
  Workspace) that used to live on the now-removed hex-prism page

No source changes needed in this repo; conduction-website only used the flat
<cn-hex> primitive and tinted hexes via brand-color names, both of which
remain in the new major. Locally verified on /connext/, /apps/, /apps/opencatalogi.
Defense against supply-chain attacks (e.g. shai-hulud, nx-style
compromised publishes) by blocking install of any package version
published less than 24h ago.

- .npmrc: `min-release-age=1` (npm 11.5+ native; older npm ignores it)
- .github/dependabot.yml: `cooldown.default-days: 1`, with @conduction/*
  excluded so first-party releases reach our apps immediately

For release-day consumption of fresh @conduction/* deps, use
`npm install --min-release-age=0 @conduction/pkg@x.y.z`.
* feat(openregister): add MCP tools section to the product page

Drops <McpToolShelf> between the LLM-integrations Showcase and the
"Pairs well with" PairRow. Lists the five MCP tools OpenRegister
contributes to the workspace AI chat companion plus one "soon"
write tool (createObject), with status hexes and an AgentTrace
mock showing a search call.

Uses showIds={false} per the product-page audience rule: the
namespaced ids show up on per-app docs sites instead. Requires
@conduction/docusaurus-preset >= the version that ships
McpToolShelf (auto-publish on push to design-system main).

* feat(apps): wire McpToolShelf into openregister, decidesk, openbuilt pages

Align the OpenRegister product page with the real built-in tool
surface from McpToolsService.php: three CRUD-shaped tools
(openregister.registers, openregister.schemas, openregister.objects)
instead of five placeholder ones. Lede + AgentTrace updated to match.

Add a new McpToolShelf section to DeciDesk listing the five tools
from DecideskToolProvider (listOpenActionItems, listRecentMeetings,
getMeetingDetails, startMeeting, addActionItem). English copy,
matching the rest of the page.

Add a new McpToolShelf section to OpenBuilt listing the eight tools
from OpenBuiltToolProvider (listApps, getAppManifest, createApp,
promoteVersion, upsertSchema, upsertPage, addWidget, upsertMenuItem).
Dutch copy, matching the rest of the page.

All three sections use showIds={false} per the conduction.nl audience
rule. Trace examples reference one or two tools from the same app
to keep the call story concrete. Tool lists are hand-curated, not
pulled at build time, matching how FeatureList / FeatureGrid are
authored elsewhere.

* feat(openregister): make leaf grid clickable into product docs

Bump @conduction/docusaurus-preset to ^3.3.0 (adds href on FeatureItem)
so the 24-leaf grid on /apps/openregister/ links each leaf to its
product-doc page on openregister.conduction.nl.

Also: strip em-dashes and curly apostrophes from the leaf tips (brand
rule), and swap <p> wrapper for <div> on the closing footnote to fix a
<p> inside <p> nesting warning.
@rubenvdlinde rubenvdlinde merged commit cbdf644 into main May 17, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant