Testimonials Section
Collect real customer quotes with attribution and show them on your public pages.
What it adds
A store of customer quotes with name, role, photo, and rating, plus a section that renders them on public pages.
What your agent is told to do
5
What your agent is told to do
5-
1
Record consent as a field on the testimonial, along with when and how it was given, and refuse to publish a quote that does not have it.
-
2
Route submitted testimonials through the app's existing moderation queue rather than publishing them on arrival. Reuse the existing text moderation and image moderation checks if the app has them.
-
3
Reuse the app's existing avatar and image upload path for the photo and logo, including its size and type limits and its stored variants. Do not add a second upload endpoint with different rules.
-
4
Design the card to look right with no photo and no company logo. The photo is the optional part, not the layout.
-
5
Do not build a general-purpose slider. If the quotes fit, render them as a static grid, and only add rotation when there are genuinely more testimonials than the page can show.
Edge cases it handles
8
Edge cases it handles
8- A quote published without recorded consent from the named person is a legal problem, not a content problem. Publication must be blocked until consent is present and attributable.
- A missing avatar or company logo leaves a ragged row. Fall back to a consistent placeholder at the same reserved dimensions so the layout does not shift or gap.
- Very long quotes must truncate at a sensible length with an expand control that reveals the rest in place, not a modal and not a link to another page.
- If the section rotates, it must pause on hover, on keyboard focus, and when reduced motion is requested, and every quote must be reachable without waiting for the rotation.
- A withdrawn testimonial has to disappear everywhere. Removing the record must invalidate any cached page, static build, or feed that included it, and that must be verified rather than assumed.
- Star ratings need an accessible text equivalent, because a row of icons tells a screen reader nothing.
- Photos supplied by customers arrive at wildly different crops. Normalise them to one shape server-side rather than squashing them with CSS.
- A public submission form invites spam. Rate limit it, and never render unmoderated content, including in a preview visible to anyone but the author.
Definition of done
9
Definition of done
9- A testimonial cannot be published without a recorded consent entry.
- Submitted testimonials land in the existing moderation queue before they are visible.
- Cards render correctly with a photo, without a photo, and with a very long quote.
- Rotation pauses on hover, on focus, and under reduced-motion preferences.
- Removing a testimonial clears it from every public page and cached rendering.
- Ratings expose a text equivalent to assistive technology.
- Photos are uploaded through the app's existing image pipeline and limits.
- The feature matches the existing design system.
- No existing functionality is broken.
Related features
Reading Progress Bar
Reading Progress Bar
A slim bar showing how far through an article the reader has scrolled.
What it does
A thin progress indicator pinned to the top of article pages, tracking scroll through the body text.
How it works
- 1 Measure progress against the article body element only. Take the top and bottom of the prose, not the height of the document.
- 2 Recalculate the body height when the page reflows: late-loading images, expanded sections, embeds, and font swaps all change the total after first paint.
- 3 Reuse the app's existing Progress Indicator System tokens for the bar's colour and height rather than introducing a new accent, and keep it visually distinct from Route Change Progress so the two are not confused.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/reading-progress-bar
Press Kit
Press Kit
Give journalists your logos, colours, screenshots, and boilerplate on one public page.
What it does
A public page of downloadable brand assets, colour values, screenshots, and approved boilerplate copy.
How it works
- 1 Serve every asset through the app's existing file download path so that access, headers, and content types are handled the same way as everywhere else, rather than linking directly at raw storage.
- 2 Store the correct format and media type per asset and derive the filename and extension from the stored record, never from the label an author typed.
- 3 Present each logo variant on the background it is designed for, and reuse the app's theme-aware asset switching so the page shows the right variant in light and dark rather than a washed-out logo on the wrong panel.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/press-kit
FAQ Section
FAQ Section
Add an expandable list of questions and answers to any page, in the order you choose.
What it does
A reorderable set of question and answer pairs rendered as an accessible expand-collapse list on any page.
How it works
- 1 Build it on real disclosure semantics with a button that toggles its own panel, so keyboard and screen reader users get the behaviour for free.
- 2 Give every question a stable anchor derived from its text and keep it after edits, so a support reply can link straight to one answer.
- 3 Allow answers to contain formatted text, lists, and links, and reuse the app's existing content editor and its sanitisation rules rather than accepting raw markup.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/faq-section
How it works
-
1
Copy the link
Grab the Markdown instruction URL for this feature.
-
2
Give it to your AI
Paste it into Claude Code, Cursor, v0, Lovable — whatever you build with.
-
3
It inspects, then implements
Your agent reads your existing app first, then adds the feature to fit it.
Works with your stack
These instructions are written to adapt. They tell the agent to detect your framework, match your existing design system, and reuse what you already have — rather than assuming a particular stack.
Need it tighter than that? Customize the feature and tell it exactly what you're running.