The Writing page — titled The Scrolls — presents Alex’s technical articles and reflections as physical paper artifacts: torn pages and folded notes scattered across the feed. A pinned manifesto sits above the feed, and a row of tag buttons lets visitors filter articles by category. Filtering is handled entirely client-side with a singleDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/digital-coven/llms.txt
Use this file to discover all available pages before exploring further.
useState hook.
Route
Page Header
text-cyan with glow-text-cyan drop-shadow — the only page in the app that uses cyan as its primary heading color.
State
The page uses a singleuseState hook to track the active filter tag:
Pinned Manifesto
A pinned article sits above the filter bar, permanently visible regardless of the active tag:📌 Pinned label is absolutely positioned at -top-3 left-6 to overlap the card’s top border, creating a sticky-label effect. The card uses border-magenta/50 (50% opacity) with bg-magenta/5 (5% opacity fill) for a subtle tinted border frame.
Filter Tags
bg-cyan/10 fill, text-cyan text, and a box-shadow glow. Inactive tags have a slate-700 border that shifts to cyan/50 on hover.
Article Data
The
type field on each article determines which card component renders it — "torn" maps to TornCard and "folded" maps to FoldedCard. There is no default fallback; unrecognized types render nothing.Article Card Components
Articles are rendered in agrid grid-cols-1 md:grid-cols-2 gap-8 layout:
y: 20 → 0 slide-up staggered by 0.1s per visible article. When the filter changes and visibleArticles updates, the cards re-mount and replay their entrance animations.
TornCard
Mimics a page torn from a notebook — ragged SVG edge along one side, slight rotation, and a paper-texture background. Used for Bug Reports and Reflections articles.
FoldedCard
Mimics a folded piece of paper with a dog-eared corner effect — a CSS
clip-path triangle in the top-right corner. Used for Technical Writing and Translated for Humans articles.Article–Component Mapping
| Title | Type | Tag | Date |
|---|---|---|---|
| Why Your `useEffect` is Haunting You | TornCard | Bug Reports | Oct 31, 2023 |
| The Alchemy of CSS Grid | FoldedCard | Technical Writing | Nov 15, 2023 |
| Imposter Syndrome in the Coven | TornCard | Reflections | Dec 02, 2023 |
| Explaining APIs to My Cat | FoldedCard | Translated for Humans | Jan 10, 2024 |
Filtering Behavior
Default State
On mount,
activeTag is "All" and all four articles are visible. The All filter button shows its active style (cyan border, cyan fill).Tag Selected
Clicking a tag button calls
setActiveTag(tag), which triggers a re-render. The visibleArticles derived list filters to only articles matching the selected tag.Cards Re-Animate
Because the filtered
visibleArticles array produces a new set of mapped motion.div elements, Framer Motion re-plays the initial → animate entrance for each visible card.