Pattern 1: The widget references existing content (piece-driven)
In this pattern, the widget pulls in content that lives elsewhere, such as a piece (aka “content type”), allowing the same content to be reused across multiple pages without having to re-enter it multiple times. As an editor, you're selecting which items to display, not creating or editing them inside the widget.
Example: Imagine a Testimonials widget on the homepage. Your developer might have built the widget to reference a Testimonials library, a central place where each testimonial (quote, author name, headshot, company) is stored and maintained.
When you place the widget on a page, you choose which testimonial(s) to show. The actual testimonial content (the quote, photo, name, title or role) is managed in a different part of the ApostropheCMS admin. Your main menu might have a top-level item called “Content” and under that, you might find “Testimonials.” This architecture is up to the team who customized the CMS with your individual editing experience and use cases in mind.
What editing looks like: Clicking to edit opens a form where you select or search for items from the library. You won't see the content itself inline on the page — you're making a selection.
Why developers build it this way: When the same testimonial appears on multiple pages, it only needs to be updated once in the library. Every widget that references it updates automatically. It also ensures consistency, so the same headshot and bio appear everywhere, without risk of one-off edits creating discrepancies. Imagine having to change the role or position of someone: Rather than find and update every instance, you would change it in one place.
The tradeoff for editors: You can't edit a testimonial's content from inside the widget to cater to a specific layout or page. If something needs changing, you'll need to find it in the Testimonials library and update it there.