The Case Studies page goes deeper than the Projects grid — each entry here tells a before-and-after story about a significant piece of work. Three case studies are presented as parchment-coloured scrolls. Each scroll has aDocumentation 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.
WaxSeal component that acts as a toggle: in its closed state only a brief summary is visible; clicking the seal breaks it open and reveals the full written account below.
Route
#/case-studies or click the Case Studies link in the site navigation.
Visual Layout
Parchment Scroll Cards
Each case study is displayed inside a card styled to resemble aged parchment — warm off-white background, slightly irregular edges, and a serif or calligraphic typeface. The visual contrast with the dark site background is deliberate and dramatic.
WaxSeal Toggle
A circular wax seal SVG sits at the top right of each scroll. In the closed state the seal is intact. Clicking it triggers a break-animation and expands the details section below the summary.
Summary Section
Always visible. A single sentence or two that communicates the outcome of the case study at a glance (e.g. “40% increase in successful transmutations”).
Details Section
Hidden until the wax seal is clicked. Contains a full paragraph describing the problem, approach, and solution. Expands with a smooth height animation.
Data & Configuration
Case studies are stored in theF array inside assets/main.js:
Field reference
| Field | Type | Purpose |
|---|---|---|
id | number | Unique identifier; used as the React list key and the open/closed state key |
title | string | Case study heading displayed at the top of the scroll |
summary | string | Brief outcome statement — always visible above the seal |
details | string | Full narrative — hidden until the wax seal is clicked |
Customisation
Edit an existing case study
Update the
summary and details strings in the relevant F array object. The summary should be a single punchy outcome statement; the details can be multiple sentences covering problem, approach, and result.Add a new case study
Append a new object to the
F array with a unique id, a title, a summary, and details. A new scroll card will render automatically.Add metrics or bullet points to details
The
details field is rendered as a plain string inside a <p> tag. To include bullet points or formatted metrics, convert the details field to JSX within the CaseStudyScroll component and render structured markup instead of a raw string.Change the parchment colour
The scroll background colour is a CSS custom property defined on the
.scroll-card class (or Tailwind utility). Adjust the background and border colour values to change the parchment tone — anything from a warm cream to a darker vellum shade works within the aesthetic.Key Components
| Component | Description | Docs |
|---|---|---|
CaseStudyScroll | Parchment-styled card wrapper; manages the open/closed state for its own details section | Internal |
WaxSeal | Clickable SVG wax seal; accepts isOpen and onClick props | /components/wax-seal |
Interactive Behaviour
Wax seal click — expand / collapse details
Wax seal click — expand / collapse details
Each
CaseStudyScroll maintains its own useState boolean for whether it is open. Clicking the WaxSeal toggles that boolean. When isOpen transitions from false to true, the details section animates from height: 0 to its natural height using a Framer Motion layout animation. The seal SVG plays a short “crack” animation on the first open.Independent open state per scroll
Independent open state per scroll
Each scroll manages its own open/closed state independently — opening one scroll does not close the others. This allows visitors to compare the details of multiple case studies simultaneously. If you prefer an accordion behaviour (only one open at a time), lift the open state up to the parent page component and pass a shared setter to each scroll.
The
WaxSeal animation plays once per page mount — if a visitor navigates away and returns, the seal will be in its closed (unbroken) state again and the animation will play fresh on the next click.