Oleks 90a4b8088b fix(#4): consistent normalized plugin↔CMS join + orphan-ref check
Interim fix for the free-text title-match footguns (issue #4); durable ULID
reference + seed migration tracked separately.

- New lib/cms.ts: single normCms() match key + cmsSlugByTitle / resolveCmsSlug,
  used by all three join sites so a plugin can no longer link from its own page
  yet vanish from a CMS list over case/whitespace drift.
- cms/index.astro + cms/[slug].astro: counts and "plugins from / targeting"
  lists now use the normalized key (were exact-match).
- plugins/[slug].astro: drop the local normalize copy; link target_cms too
  (was source-only) for parity.
- warnOrphanCmsRefs(): logs any source_cms/target_cms that resolves to no CMS,
  so silent orphans surface in the server log.
2026-06-02 05:05:30 +03:00

cms-plugins

A browseable catalog of CMS plugins and how they map across platforms, built on Emdash (Astro 6 + TypeScript + SQLite). The seed dataset is the WordPress → Emdash plugin parity matrix from kotkanagrilli.fi; new entries can be added through the Emdash admin.

Repo URL Role
cms-plugins (this repo) git@git.oleks.space:oleks/cms-plugins.git App, Dockerfile, Helm chart, Woodpecker pipeline
emdash.kotkanagrilli.fi git@git.oleks.space:oleks/emdash-kotkanagrilli.git Reference Emdash deployment whose pattern this repo mirrors
kotkanagrilli.fi (WordPress) git@git.oleks.space:oleks/kotkanagrilli.fi.git (+ github.com:retif/kotkanagrilli.fi.git) Source of the seeded plugin entries (parity matrix)
anton-helm-workloads https://git.oleks.space/anton/helm-workloads Houses the FluxCD HelmReleases for each environment (kotkanagrilli.fi subdomains)

Status

Phase 0 — Emdash scaffold + Helm chart + Woodpecker pipeline. No content beyond the seeded WordPress plugin entries. Not yet running anywhere.

What's in here

  • app/ — Emdash scaffold (Astro 6, node target). Three collections: cmses, plugins, pages. Seed at app/seed/seed.json.
  • Dockerfile + docker/entrypoint.sh — production image. Single PVC at /app/state holds data.db and uploads/.
  • deploy/helm/ — the Helm chart that runs the pod in k3s. Same shape as ~/projects/emdash.kotkanagrilli.fi/deploy/helm/.
  • deploy/fleet-overlay/HelmRelease + GitRepository + image-automation templates ready to drop into the anton-helm-workloads repo. Not consumed from this repo directly.
  • .woodpecker/container.yaml — build + push pipeline (develop / staging / production branches).
  • .ddev/ — DDEV setup for local development (https://cms-plugins.ddev.site/).
  • DEPLOYMENT.md — full pipeline from git push to a running pod, plus the first-time setup checklist.
  • ARCHITECTURE.md — chart / image / Flux contracts.
  • docs/ — additional notes.

Quickstart (local)

cd ~/projects/cms-plugins
ddev start
# → https://cms-plugins.ddev.site/  (admin at /_emdash/admin)

Or without DDEV:

cd app
npm install
npm run bootstrap       # emdash init: migrations + seed
npx emdash dev          # http://localhost:4321/

Reset to a blank state:

rm -f app/data.db app/data.db-shm app/data.db-wal
rm -rf app/uploads

Windows

DDEV runs on Windows via WSL2 — install WSL2 + an Ubuntu distro, then follow the Linux install instructions inside WSL: https://ddev.readthedocs.io/en/stable/users/install/ddev-installation/#windows.

Keep the repo on the WSL filesystem (~/projects/cms-plugins inside Ubuntu), not under /mnt/c/… — Vite HMR and npm install are noticeably slower across the Windows ↔ Linux mount boundary.

Deploying

Push to the matching branch:

Branch Environment URL
develop dev (local DDEV only) https://cms-plugins.ddev.site/
staging staging https://cms-plugins-staging.kotkanagrilli.fi/
production production https://cms-plugins-production.kotkanagrilli.fi/

Woodpecker builds + pushes the image to git.oleks.space/oleks/cms-plugins, FluxCD reconciles the chart from deploy/helm/ against the matching HelmRelease in anton-helm-workloads/cms-plugins-{staging,production}/.

See DEPLOYMENT.md for the full flow, the relationship between this repo and anton-helm-workloads, the first-time setup checklist, and how rollbacks work.

S
Description
CMS plugins catalog — Emdash-based catalog of WordPress→Emdash plugin parity, seeded from kotkanagrilli.fi
Readme
506 KiB
Languages
Astro 48.9%
CSS 22.4%
Shell 7.7%
Dockerfile 7.2%
Go Template 5.2%
Other 8.6%