Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/apursley2012/web-weaver/llms.txt

Use this file to discover all available pages before exploring further.

The Testimonials page reimagines the standard endorsement section by assigning each reviewer a magical familiar — a cat, raven, owl, toad, or bat — rather than using a generic avatar placeholder. Every testimonial is rendered using the Familiar component, which pairs a thematic creature illustration with the quote. On medium and larger screens the components alternate between left- and right-aligned indents, giving the page a staggered, rhythmic layout that prevents the monotony of a plain list.

Route

#/testimonials
Navigate to #/testimonials or click the Testimonials link in the site navigation.

Visual Layout

Familiar Illustration

Each testimonial features a small SVG or icon illustration of its assigned familiar creature (cat, raven, owl, toad, bat). The illustration appears beside the quote block.

Quote Block

The testimonial text is displayed in a styled blockquote. The author’s name and role appear below the quote in smaller, muted type.

Alternating Indent

On md and larger breakpoints, odd-indexed testimonials indent from the left and even-indexed ones indent from the right. This creates a conversational, back-and-forth visual rhythm down the page.

Stacked on Mobile

On small viewports all indents collapse and the testimonials stack in a single centred column, each with the familiar illustration above the quote.

Familiar Types

TypeCreaturePersonality implied
catLunaMeticulous, quality-focused
ravenCorvusTechnically brilliant, observant
owlArchimedesWise, forward-thinking
toadBarnabyPractical, problem-solving
batVladFearless in complex / dark codebases

Data & Configuration

Testimonials are stored in the q array inside assets/main.js:
// assets/main.js — Testimonials data (array q)
const q = [
  {
    type: 'cat',
    quote:
      "Morgan's code is cleaner than my whiskers after a fresh grooming. " +
      "The deployment pipelines purr flawlessly.",
    author: 'Luna',
    role: 'Lead QA Engineer',
  },
  {
    type: 'raven',
    quote:
      "I've seen many shiny things in my time, but the architectures Morgan " +
      "designs are truly brilliant. Never drops a packet.",
    author: 'Corvus',
    role: 'Systems Architect',
  },
  {
    type: 'owl',
    quote:
      'Wise beyond their years. Morgan foresaw edge cases we hadn\'t even ' +
      'considered. A true oracle of logic.',
    author: 'Archimedes',
    role: 'Product Manager',
  },
  {
    type: 'toad',
    quote:
      'Fixed a memory leak that had been plaguing our swamp for months. ' +
      'Ribbiting performance improvements.',
    author: 'Barnaby',
    role: 'Backend Developer',
  },
  {
    type: 'bat',
    quote:
      'Navigates legacy codebases in the dark with perfect echolocation. ' +
      'Fearless in the face of spaghetti code.',
    author: 'Vlad',
    role: 'Engineering Director',
  },
];

Field reference

FieldTypePurpose
type'cat' | 'raven' | 'owl' | 'toad' | 'bat'Determines which familiar illustration renders alongside the quote
quotestringThe testimonial text displayed in the blockquote
authorstringReviewer’s (familiar’s) name displayed below the quote
rolestringReviewer’s job title or role displayed beneath the name

Customisation

1

Edit a testimonial quote

Update the quote, author, or role fields in the relevant q array object. You can use real testimonials from colleagues or clients — keep the whimsical tone in the quote text if you want to maintain the aesthetic, but real names and roles in the author and role fields are perfectly appropriate.
2

Add a new testimonial

Append a new object to the q array. Choose a type from the five available familiars. If all five familiar types are already in use, you can reuse a type — multiple testimonials can share the same familiar illustration.
3

Add a new familiar type

Define a new type string (e.g. 'fox') and create the corresponding SVG illustration. Register the new type in the Familiar component’s type-to-illustration map, then use it in the q array.
4

Change the alternating layout threshold

The left/right alternation is controlled by a CSS media query breakpoint in the Familiar component. By default it activates at md (768 px). Change this to lg to keep the stacked layout on tablets, or to sm to activate alternation on larger phones.
5

Use real profile photos

Replace the familiar SVG illustration in the Familiar component with a circular <img> element. Add a photo URL field to each q object and pass it as a prop. This adapts the page for real professional headshots while keeping the layout structure intact.

Key Components

ComponentDescriptionDocs
FamiliarRenders a single testimonial with a creature illustration and alternating indent/components/familiar

Interactive Behaviour

The Familiar component receives its index in the q array as a prop. Even indices render with margin-left: auto (right-aligned) and odd indices with margin-right: auto (left-aligned) on viewports wider than the md breakpoint. This is a pure CSS layout behaviour — no JavaScript state is involved.
By default the testimonials render statically. If you want them to animate in as the user scrolls, wrap each Familiar in a Framer Motion motion.div with whileInView={{ opacity: 1, y: 0 }} and initial={{ opacity: 0, y: 30 }}. Add viewport={{ once: true }} so the animation only fires once per page visit, and set a transition.delay proportional to the index for a staggered effect.
The type field is case-sensitive. Using 'Cat' instead of 'cat' will fail to match the illustration map inside the Familiar component and the illustration will fall back to a default placeholder. Always use lowercase type strings.
Five testimonials is a strong number for this layout — enough to demonstrate broad social proof without the page feeling like a wall of quotes. If you have more, consider showing five on the page and linking to a separate “All Testimonials” view, or using a carousel component to cycle through a larger pool.

Build docs developers (and LLMs) love