Destination
plone.gallery 2.x architecture locked and specced, ready to implement: the responsive-image approach (resize the <picture>, browser upgrades the scale) validated by prototype; the gallery block and listing gallery variation designed for both Aurora (React block) and Blicca (server-side rendering); the lightbox plugin decision made (adapt spotlight.js / adopt another / build custom); packaging and migration path settled. Planning only — implementation happens outside this map.
Notes
- Domain glossary:
CONTEXT.md at repo root (Aurora, Blicca, Somersault editor, picture variant, responsive lightbox, gallery block, listing gallery variation, flexbin mosaic). Use its vocabulary in all tickets.
- Skills to consult per session:
/grilling + /domain-modeling for grilling tickets, /prototype for prototype tickets, /research for research tickets.
- Working assumptions (offered twice, uncontested — flag here if wrong):
- Map produces decisions + spec; no execution inside the map beyond decision-serving prototypes.
- Package stays
plone.gallery, version 2.0.0a1 on the nextgen branch, modernized to pyproject.toml + uv; monorepo with the npm package for the Aurora add-on in the same repo (confirmed: "same repo").
- Settled by grilling (2026-08-19/20), recorded here because they predate the map:
- Plone floor for 2.x: 6.2.
- Both frontends stay supported: Blicca keeps classical TinyMCE pages and gets block pages (via the not-yet-public Aurora-editor-compatible Blicca block integration). plone.gallery 2.x ships the Blicca server-side rendering of its blocks.
- No Volto support planned.
- flexbin.css stays as the mosaic layout.
- Lightbox must use responsive images: zoom = resize the same
<picture> element, browser loads a bigger scale from srcset; no link to a separate large file. Other lightbox features (slideshow, keyboard, touch, captions, fullscreen…) are nice-to-have.
- Gallery surfaces: an own gallery block (editor picks individual images) plus a listing gallery variation (listing block searches images, renders them as a gallery).
Decisions so far
-
Research: rendering picture tags for catalog brains — image_scales catalog metadata (+ plone.picture_variants registry) suffices to build full <picture>/srcset markup without waking objects; no brain-level picture() exists in core (stock 6.2 listings even fall back to getObject() per item); decision: implement a brain-level picture() locally in plone.gallery first, output-identical to ImageScaling.picture(), then upstream to plone.namedfile as NavigationRootScaling.picture(). Findings: docs/research/brain-picture.md on local branch research/brain-picture.
-
Research: Aurora listing block variations and block add-on anatomy — Aurora has no working listing-block variations yet (unstable, being rewritten): ship our own gallery block; add-on = npm package with install(config) blocksConfig entry (+ optional config/server.ts data loader); images render as <img srcset> from image_scales with sizes as the block author's job; multi-image picking via object_browser widget, mode multiple. Findings: docs/research/aurora-listing-variation.md on local branch research/aurora-listing-variation.
-
Prototype: responsive lightbox zoom on a static page — concept validated in-browser: zoom = promote the same <picture> into an overlay and rewrite sizes; the browser then fetches a bigger scale from srcset (no separate large-image URL). Constraints: sizes must be rewritten on zoom/resize/fullscreen (element size alone never re-selects); sizes="auto" + loading="lazy" does it JS-free in Chromium (progressive enhancement); browsers never downgrade; blur-up transition comes free. Prototype: prototypes/responsive-lightbox/ on local branch prototype/responsive-lightbox.
Not yet specified
- Lightbox implementation plan — sharpens after the plugin decision (responsive-zoom prototype validated the mechanism): exact feature set (slideshow/autoplay, keyboard, touch, captions, fullscreen, deep-linking?), and whether one implementation serves both Blicca (Patternslib/Svelte pattern) and Aurora (React) or two thin wrappers share a core.
- Aurora block view/edit component design — depends on block schema decisions and on Aurora alpha churn; includes how the block consumes Aurora's own responsive-image rendering once final.
- 1.x → 2.x migration — what happens to existing
photo_gallery view users, the TinyMCE shortcode/outputfilter, and the tinymce grid templates; upgrade steps. Sharpens once the content-model decisions close.
- Testing strategy — how to test two frontends + server-side block rendering (robot tests? Playwright against both frontends?).
- CI/release pipeline — releasing a Python package + npm package from one repo.
Out of scope
Destination
plone.gallery 2.x architecture locked and specced, ready to implement: the responsive-image approach (resize the
<picture>, browser upgrades the scale) validated by prototype; the gallery block and listing gallery variation designed for both Aurora (React block) and Blicca (server-side rendering); the lightbox plugin decision made (adapt spotlight.js / adopt another / build custom); packaging and migration path settled. Planning only — implementation happens outside this map.Notes
CONTEXT.mdat repo root (Aurora, Blicca, Somersault editor, picture variant, responsive lightbox, gallery block, listing gallery variation, flexbin mosaic). Use its vocabulary in all tickets./grilling+/domain-modelingfor grilling tickets,/prototypefor prototype tickets,/researchfor research tickets.plone.gallery, version 2.0.0a1 on thenextgenbranch, modernized to pyproject.toml + uv; monorepo with the npm package for the Aurora add-on in the same repo (confirmed: "same repo").<picture>element, browser loads a bigger scale from srcset; no link to a separate large file. Other lightbox features (slideshow, keyboard, touch, captions, fullscreen…) are nice-to-have.Decisions so far
Research: rendering picture tags for catalog brains —
image_scalescatalog metadata (+plone.picture_variantsregistry) suffices to build full<picture>/srcsetmarkup without waking objects; no brain-levelpicture()exists in core (stock 6.2 listings even fall back togetObject()per item); decision: implement a brain-levelpicture()locally in plone.gallery first, output-identical toImageScaling.picture(), then upstream to plone.namedfile asNavigationRootScaling.picture(). Findings:docs/research/brain-picture.mdon local branchresearch/brain-picture.Research: Aurora listing block variations and block add-on anatomy — Aurora has no working listing-block variations yet (unstable, being rewritten): ship our own gallery block; add-on = npm package with
install(config)blocksConfig entry (+ optionalconfig/server.tsdata loader); images render as<img srcset>fromimage_scaleswithsizesas the block author's job; multi-image picking viaobject_browserwidget, modemultiple. Findings:docs/research/aurora-listing-variation.mdon local branchresearch/aurora-listing-variation.Prototype: responsive lightbox zoom on a static page — concept validated in-browser: zoom = promote the same
<picture>into an overlay and rewritesizes; the browser then fetches a bigger scale from srcset (no separate large-image URL). Constraints:sizesmust be rewritten on zoom/resize/fullscreen (element size alone never re-selects);sizes="auto"+loading="lazy"does it JS-free in Chromium (progressive enhancement); browsers never downgrade; blur-up transition comes free. Prototype:prototypes/responsive-lightbox/on local branchprototype/responsive-lightbox.Not yet specified
photo_galleryview users, the TinyMCE shortcode/outputfilter, and the tinymce grid templates; upgrade steps. Sharpens once the content-model decisions close.Out of scope
plone.*namespace (GitHub issue Why is this package in the plone.* core namespace? #20) — 2.x keeps the name; a rename would be a separate effort.