Feature Specification: Photo Carousels
Download MarkdownFeature: Photo Carousels
Terminology note: This example uses terms from the underlying semantic data model, such as
PublishedWorkandCarousel. This model is not included as another example.
Summary
A carousel is one visitor-facing PublishedWork containing an intentionally ordered sequence of Photos. It lets the photographer publish related images as one coherent work with one public name, one cover, one localized title, and one localized description.
A carousel is not a Series. A carousel is opened and viewed as a single portfolio entry; a Series curates multiple PublishedWorks and may include both carousels and standalone works.
Goals
- Publish a related sequence without presenting every contained Photo as a separate gallery entry.
- Preserve one shared artistic title and description for the sequence.
- Preserve Photo-specific representations, capture facts, year, and person-visibility classification.
- Make carousel publications recognizable before they are opened.
- Provide distinct, accessible controls for Photo-level and PublishedWork-level navigation.
- Include carousels in Series, highlight them as new publications, and make them discoverable through search. They use the same public route structure as standalone works.
Domain Rules
- A carousel is exactly one PublishedWork of type Carousel.
- It contains an ordered list of Photos. Normal publication calls for at least two Photos; the exception for recovery scenarios is described under “Edge Cases”.
- Its cover Photo is one of its contained Photos and is used in gallery and sharing contexts.
- All contained Photos share the carousel’s visitor-facing title and description.
- Each contained Photo retains its own preview/detail images, capture details, year, and person-visibility classification.
- A contained Photo is not also published as a standalone PublishedWork.
- A Photo belongs to at most one carousel in the current product.
- Optional Series membership and New status belong to the carousel PublishedWork, not to each contained Photo.
Gallery Presentation
A carousel appears once in the gallery, using its cover Photo. Its tile:
- shows the localized carousel title;
- is visibly marked as a carousel;
- communicates the number of Photos visually and in its accessible link name;
- shows New status when the carousel PublishedWork is highlighted.
Selecting the tile opens the carousel detail page at its first Photo. Contained Photos do not receive separate gallery tiles or visitor routes.
Detail Presentation
The carousel detail page:
- shows one Photo at a time;
- selects the first Photo when opened directly, from the gallery, or through the work-level controls; the exception for continuous backward navigation is described below;
- shows the carousel’s shared localized title and description;
- adds the visible Photo’s capture year to the title when known;
- shows capture details for the visible Photo;
- shows a Person Notice only when the visible Photo requires one;
- shows a localized position such as
2 of 6; - exposes previous/next carousel-Photo controls.
The shared title and description are not repeated as if they were different content for each Photo, and individual hidden Photo titles are not introduced.
Two Navigation Scopes
Carousel pages expose two deliberately separate control groups.
PublishedWork Controls
First, previous, next, and last controls move among PublishedWorks in the global portfolio. They never move only one position within the carousel.
Carousel-Photo Controls
Previous and next Photo controls move only within the current carousel. They disable at the first and last Photo and never cross into another PublishedWork. A visible position indicator communicates progress through the sequence.
The controls have distinct localized accessible names so a visitor can tell whether an action changes the portfolio entry or the Photo inside it.
Sequential Keyboard and Swipe Behavior
For Left/Right keyboard navigation and horizontal swipe gestures, the carousel behaves as one continuous segment in the portfolio:
- forward movement advances to the next carousel Photo;
- at the last Photo, further forward movement opens the next PublishedWork;
- backward movement advances to the previous carousel Photo; and
- at the first Photo, further backward movement opens the previous PublishedWork.
If the adjacent PublishedWork is also a carousel, forward navigation starts at its first Photo and backward navigation at its last Photo. This allows continuous traversal of the sequence in both directions.
Escape returns to the gallery. Gesture recognition remains confined to the image stage and favors vertical scrolling unless the movement is clearly horizontal.
This boundary-crossing behavior applies to keyboard and swipe navigation only. Visible carousel controls remain internal, and visible PublishedWork controls remain work-level.
Loading Behavior
- Every carousel Photo follows the same preview-first, detail-image loading behavior as a standalone Photo.
- Navigating to another Photo resets the loading and error state for that Photo.
- Images for the immediately adjacent carousel Photos are preloaded so that switching Photos introduces as little additional waiting time as possible.
- At carousel boundaries, the Photo that will be visible when entering the adjacent PublishedWork may be preloaded. For an adjacent carousel, this is its first or last Photo, depending on the direction of navigation.
Series Behavior
- A carousel may belong to one Series.
- It occupies one position and counts as one PublishedWork in that Series, regardless of its Photo count.
- If it belongs to a Series, its Series membership is shown and linked from the detail page.
- In the Series overview it remains identifiable as a multi-photo work.
Discovery and Sharing
- The carousel has one stable PublishedWork URL in each language.
- The localized carousel title and description describe the page.
- The cover Photo is the primary social-preview image.
- Search metadata may associate all contained Photos with the carousel page. The cover Photo comes first, followed by the remaining Photos in their carousel order. Each Photo is listed only once. This does not change the viewing order within the carousel.
- Contained Photos do not create separate PublishedWork sitemap locations.
Publication Behavior
The publisher must be able to determine:
- the ordered Photo membership;
- the cover Photo;
- the stable public name;
- German and English title and description;
- optional Series membership and Series position;
- whether the carousel is temporarily highlighted as new;
- person visibility for every contained Photo.
The publication workflow may infer a carousel when two or more Photo asset names share a base followed by a numeric index immediately before their representation suffix. Inferred order is ascending numeric order, the first Photo is the default cover, and the shared base is the default public name. Inference supplies candidates only: publication text, privacy classification, and curation still require review.
Edge Cases
- A carousel with missing Photo references presents the valid referenced Photos in their curated order. If the cover Photo cannot be resolved or none of the Photo references are valid, the PublishedWork is unavailable. For available carousels, the Photo count, position indicator, and navigation refer to the resolved Photos.
- A one-Photo carousel may be technically representable for recovery, but normal publication should use a standalone work or add the missing sequence members.
- At the beginning of the portfolio, the first and previous work-level controls are disabled; at the end, the next and last controls are disabled. Keyboard and swipe navigation only prevent crossing the corresponding portfolio boundary. Navigation within the carousel remains available.
- The year and Person Notice may change while the shared title and description remain constant.
Acceptance Criteria
- A carousel appears once as a recognizable gallery entry with a Photo count. Normal publications contain at least two Photos.
- Opening it directly, from the gallery, or through the work-level controls starts at the first Photo and shows one Photo at a time. Continuous backward navigation from an adjacent work starts at the last Photo.
- The title and description are shared across the sequence.
- Year, capture details, loading state, and Person Notice follow the visible Photo.
- Internal controls move only within the carousel and disable at its boundaries.
- PublishedWork controls always move between portfolio entries.
- Left/Right and swipe traverse Photos first, then adjacent PublishedWorks at sequence boundaries.
- The current position is localized and announced as text.
- A carousel has one public route. If it belongs to a Series, it occupies exactly one position in that Series.
- Search and sharing use the carousel text and cover while allowing all contained images in page metadata.
- Contained Photos are not also published as standalone works.
Out of Scope
- Automatic slideshow playback.
- Per-Photo public titles or descriptions inside a carousel.
- Swipe navigation on the gallery overview.
- One Photo appearing in multiple carousels.
- A carousel containing other carousels or Series.
References
For example, the semantic data model, not elaborated here.