Slingslop — Hypermedia Apps on Apache Sling

HTMX + Sling OOTB endpoints, single-VPS deployment

Slingslop — Hypermedia Apps on Apache Sling HTMX + Sling OOTB endpoints, single-VPS deployment Browser · public visitors + editors · Architecture component Browser public visitors + editors Traefik · TLS + ACME + basicAuth · Single VPS — docker compose · rate-limit Traefik TLS + ACME + basicAuth rate-limit Webcache · Apache mod_cache · Single VPS — docker compose · nginx | varnish Webcache Apache mod_cache nginx | varnish Slingslop · Sling 14 on Felix · Single VPS — docker compose · HTL + HTMX Slingslop Sling 14 on Felix HTL + HTMX Oak JCR · SegmentNodeStore · Single VPS — docker compose Oak JCR SegmentNodeStore GitHub Actions · CI/CD + Ansible · Architecture component GitHub Actions CI/CD + Ansible GHCR · image registry · Architecture component GHCR image registry Prometheus · metrics · Single VPS — docker compose Prometheus metrics Loki · logs · Single VPS — docker compose Loki logs Grafana · dashboards · Single VPS — docker compose Grafana dashboards HTTPS public-cached apps cache miss JCR read/write build + push image deploy: pull image deploy: pull image metrics logs dashboards dashboards Single VPS — docker compose Legend Frontend Backend Database Cloud Security External

Edge & caching

  • • Traefik: TLS (Let's Encrypt), basicAuth gate for the editor host, rate-limiting
  • • 3 interchangeable webcache engines (apache default, nginx, varnish) from ONE tenant config
  • • URL shortening + Sling-aware request filtering (selector/extension allow-lists)
  • • Gated/author apps route Traefik → Sling directly, bypassing the webcache

Application

  • • Apache Sling 14 on Felix OSGi, HTL (Sightly) server-side rendering
  • • HTMX drives component-level GET/POST swaps — minimal client JS
  • • Sample apps: zengarden (CSS Zen Garden demo), sling-matrix, digitalmedia

Config as code

  • • CONGA generates Traefik routers, webcache vhosts, and Sling URL mappings
  • • One per-app 'tenant' block drives all 3 webcache engines identically
  • • Adding an app = one tenant entry, no hand-written per-app config

CI/CD & ops

  • • GitHub Actions builds + pushes images to GHCR, then runs Ansible playbooks
  • • Secrets in Ansible Vault, path-selective deploys, immutable sha-tagged images
  • • Composite NodeStore option bakes /apps + /libs read-only into the image