Previous Hauntings transforms the standard work history section into a ghost story told chronologically. Each job is a haunting — a place the developer left their mark, their code, and inevitably a few bugs. The page header readsDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/mystery-haunting/llms.txt
Use this file to discover all available pages before exploring further.
PREVIOUS HAUNTINGS with the subtitle Places I've left my mark (and bugs). Entries are arranged on a vertical timeline and revealed one at a time as the visitor scrolls down the page, each card appearing as if materializing out of the dark.
Work History
The following hauntings are documented on the timeline:| Company | Role | Years | Description |
|---|---|---|---|
| Tech Corp | Senior Poltergeist (Engineer) | 2021 - Present | Haunting the legacy monolith and slowly migrating it to React. |
| Startup.io | Full Stack Apparition | 2018 - 2021 | Summoned features from the void. Survived 3 pivots. |
| Agency X | Junior Code Zombie | 2016 - 2018 | Mindlessly churned out WordPress themes. Brains… |
Timeline Layout
The timeline is a vertical center line running the full height of the entries section. It is rendered as a narrow bar styled inghost-teal/20 — a semi-transparent version of the site’s primary teal accent — giving it a faint, ethereal glow against the dark background.
At each work history entry, a pumpkin-colored glowing dot marks the position on the line. The dot uses a radial box-shadow to simulate a warm light emanating from the timeline at that point, as if the entry is a lantern hung on a path through a haunted wood.
Cards alternate left and right of the center line on desktop, so consecutive entries never stack on the same side. On mobile, all cards collapse to a single-column layout aligned to the right of the line.
| Element | Style |
|---|---|
| Timeline line | ghost-teal/20 vertical bar |
| Position marker | Pumpkin-colored glowing dot |
| Card layout | Alternating left/right (desktop), single column (mobile) |
| Card content | Company, role, years, and description |
Scroll Animation
Each timeline entry is wrapped in a Framer Motionmotion.div configured with whileInView. This means the entrance animation only fires when the card enters the viewport — cards that have not yet been scrolled to remain invisible until the visitor reaches them.
| Animation property | Value |
|---|---|
| Trigger | whileInView |
once | true (animates once, does not replay on scroll back) |
| Viewport margin | -100px (fires 100px before the element fully enters the viewport) |
| Initial state | opacity: 0, x: ±60 (direction matches card side) |
| Animate state | opacity: 1, x: 0 |
-100px viewport margin means the animation begins slightly before the card is fully visible, so it completes just as the visitor’s eye reaches it — giving the impression of the card materializing on approach.
Haunted House Icon
Each timeline entry includes an inline haunted house SVG icon positioned at the junction between the card and the center line. The icon is decorative but interactive:- Default state: house windows rendered in black (dark, uninhabited)
- Hover state: windows shift to
ghost-tealorpumpkinfill, as if lights are flickering on inside
fill transition on the SVG <rect> elements that represent the windows, triggered by a :hover pseudo-class on the parent icon container.
Customization
How to add work history entries
How to add work history entries
Work history entries are defined in an array of objects. Each entry requires The left/right alternation is calculated automatically from the entry’s index in the array — even-indexed entries appear on the left, odd-indexed on the right. Adding or removing an entry in the middle of the array will shift the alternation for all subsequent entries.
company, role, years, and desc fields. Add new entries to extend the timeline — they render in array order, top to bottom.Entries render in the order they appear in the array, top to bottom on the timeline. Place your most recent position first so the timeline reads from present to past as the visitor scrolls down — matching the ghost story convention of the oldest haunting resting deepest in the dark.