Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/sys-witch/llms.txt
Use this file to discover all available pages before exploring further.
TomeCard is the display component for individual writing post entries on the Writing Archive page. Each card is styled like a page torn from a spell book — a neon-purple left border, a font-display title that glows on hover, and a ghost-button link that drifts rightward with a → arrow when the card is focused. Cards scroll into view with a staggered Framer Motion fade-and-rise animation based on their position in the list.
Rendered Layout
The card is an<article> element built on a bg-surface-elevated border-l-4 border-neon-purple base. On hover the entire card lifts by -translate-y-1 and a vertical magenta-to-transparent gradient bleeds through the background at 30% opacity.
Inside the card, the structure is top-to-bottom:
- Header row — a
writingsigil icon (neon-purple,opacity-70→opacity-100on hover) alongside the channel name infont-mono text-xs text-neon-purple tracking-widest uppercase. A<time>element on the right shows thedatevalue in the same mono style. - Title —
font-display text-2xl text-text-primary, transitioning totext-glow-purpleon hover. - Excerpt —
font-sans text-text-secondary leading-relaxed, filling the remaining vertical space viaflex-grow. - Action link — a
GlyphButtoninghost/purplevariant with the label"Invoke Text"and an animated→that translates right on hover. Theurlfield in the data shape is intended for the live post link; wiring it to the button requires passing anonClick(e.g.window.open(article.url, "_blank")) in the page that rendersTomeCard.
Props
| Prop | Type | Required | Description |
|---|---|---|---|
article | object | Yes | A writing entry from data/writing.js |
index | number | Yes | Position in the list; drives animation stagger delay (index * 0.1s) |
Data Shape
Each writing entry indata/writing.js follows this schema:
Writing Channels
The five channel categories established indata/writing.js act as the tagging system for the archive. Each maps to a distinct type of content:
Technical
Deep dives into specific technologies, APIs, or front-end patterns. Example: Banishing Memory Leaks in React Applications.
Reflections
Personal essays on career path, process, and perspective. Example: From Retail to React: A Non-Linear Path.
Bug Reports
Post-mortems on specific bugs with root-cause analysis and resolution. Example: The Great Z-Index War of 2025.
Project Writeups
Build logs and architectural decision records for personal projects. Example: Building the Void Tracker.
General Audience
Accessible explainers on developer concepts for non-specialists. Example: Demystifying the Event Loop.
Full Writing Data
All five entries fromdata/writing.js:
JSX Usage
Adding a New Writing Entry
Fill in all required fields
Provide
id, title, excerpt, date (ISO 8601), channel (one of the five categories above), and url (the live URL of the post, or "#" for drafts).Choose the correct channel
Use one of the five established channel strings exactly as written. The channel string is rendered verbatim in the card header as a
tracking-widest uppercase label.