The Pacts page lives at routeDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/nightshade/llms.txt
Use this file to discover all available pages before exploring further.
/work and is rendered by the WorkPage component (minified export Fe). It presents the developer’s professional history as three parchment-styled cards stacked vertically. Each card enters from the left as the user scrolls and reveals a wax-seal stamp, an animated underline on the job title, and decorative SVG corner brackets that reinforce the aged-document aesthetic.
Page Header
The header is centered at the top of amax-w-4xl mx-auto py-12 wrapper:
- Title —
"The Book of Pacts"in Cormorant Unicase (font-heading text-5xl text-glow-teal) - Subtitle —
"A ledger of professional bindings."in JetBrains Mono (font-code text-sm text-witch-turquoise/70)
The Parchment Card
Each work entry is amotion.div with .parchment-bg, border border-witch-plum/30 rounded-sm, p-8, and overflow-hidden. The cards are spaced with space-y-8 (32px gaps).
The .parchment-bg CSS Class
The parchment background is a custom utility defined in main.css. It combines a dark base color with an SVG fractal-noise texture overlaid at 5% opacity:
feTurbulence filter with type="fractalNoise" produces an organic, papery grain. Because the SVG is inlined as a data URI, no external file is needed.
Wax Seal
In the top-right corner of each card (absolute top-6 right-8) is a circular wax seal:
div is rotated 12°, and the inner span counter-rotates by -12° so the text remains readable while the seal itself sits at a slight slant. The start year is extracted from the period string by splitting on " - " and taking index [0].
Animated Title Underline
The job title (<h2>) is a relative inline-block. Beneath it, a motion.div acts as a decorative underline line that animates its width from 0 to "100%" on hover:
useState(null) variable in the parent component, updated by onMouseEnter and onMouseLeave handlers on the card’s outer motion.div.
Corner Ornaments
Each card has two decorative SVG bracket marks — one in the top-left corner and one rotated 180° in the bottom-right corner:text-witch-plum/40 (40% opacity plum color) and a thin strokeWidth="1" to remain subtle.
Work History Data
The work entries are defined as theworkHistory array (minified as De) at module scope:
Entry details
Entry details
Senior Alchemist (Frontend) at Ethereal Systems (2022 – Present) — Led a frontend team through a jQuery-to-React migration. The “40% load time reduction” maps to real-world bundle splitting, lazy loading, and elimination of synchronous render-blocking scripts.Spellweaver (Fullstack) at Arcane Analytics (2019 – 2022) — Full-stack role spanning database maintenance and telemetry dashboards. The “great ledger” metaphor refers to a PostgreSQL database; the dashboards consumed streaming data for internal analytics.Apprentice Conjurer at Startup Void (2017 – 2019) — Early-career role at a startup. The reference to “CSS floats and callback hell” is a period-accurate joke — these were genuinely common patterns before Flexbox/Grid and Promises/async-await became standard.
Scroll Animation
Each card useswhileInView to slide in from the left as it enters the viewport:
margin on the viewport option or a staggered delay. All three cards animate independently: each triggers the moment its top edge enters the viewport.
viewport={{ once: true }} means each card animates in exactly once. Scrolling back up and down again will not replay the entrance animation.Customization
Add a new work entry
Append a new object to the The wax seal will automatically display
workHistory array (De in the minified build). Provide id, title, company, period, and description. The id is used as the React list key and as the hover-state comparison value — it must be unique:2024 (the start year from period.split(" - ")[0]).Change the entry card background
The
.parchment-bg class is defined in main.css. To darken the base color, change background-color: #1a1c23 to a darker hex value. To remove the noise texture entirely, delete the background-image line. To increase the grain visibility, raise the SVG rect opacity from 0.05 to 0.1 or higher.Adjust the underline animation speed
The underline
motion.div has transition={{ duration: 0.4, ease: "easeOut" }}. Increase duration for a slower draw, or change ease to "linear" for a mechanical feel instead of the default ease-out deceleration.Move the wax seal position
The seal’s parent
div uses absolute top-6 right-8. Change right-8 to right-4 to pull it closer to the card edge, or replace top-6 with top-4 to raise it. The card’s main content area uses pr-24 (96px right padding) to ensure text never runs under the seal — adjust this padding if you reposition the seal horizontally.