The Work page maps a career journey onto a literal winding path. A faint dashed SVG bezier curve runs down the center of the page like a moonlit trail through a haunted forest. Work experience cards are planted alternately on the left and right of the path, connected to it by short horizontal glowing lines. As the visitor scrolls, each card materializes out of the dark with a Framer MotionDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/spooky-developer/llms.txt
Use this file to discover all available pages before exploring further.
whileInView animation. The visual metaphor reinforces the portfolio’s narrative: this is a path you walk, not a table you read.
Work Experiences
All three entries are defined in theEXPERIENCE constant array in assets/main.js:
| Company | Role | Years | Description |
|---|---|---|---|
| SpookyCorp | Senior Frontend Engineer | 2022 – Present | Architected the new haunting dashboard. |
| Ghostly Startups | Full Stack Developer | 2019 – 2022 | Built the MVP that raised $5M in seed funding. |
| Web Witches | Junior Dev | 2017 – 2019 | Maintained legacy PHP spells and incantations. |
Alternating Left / Right Layout
Cards alternate sides based on their zero-based array index. Even-index entries (0, 2, 4 …) align to the left; odd-index entries (1, 3, 5 …) align to the right:The Winding SVG Path
The central dashed path is an SVG<path> element using a cubic bezier curve that oscillates between the left and right sides of the container:
preserveAspectRatio="none"stretches the SVG to fill the container regardless of its actual aspect ratio.opacity-20keeps the path subtle — a ghost trail rather than a bold line.strokeDasharray="10 10"creates evenly spaced dashes.- The bezier control points (
C80,200 20,400andC80,800 20,1000) make the path sway left then right.
Scroll-Triggered Entrance Animations
Each card uses Framer Motion’swhileInView prop for scroll-triggered entrance. Cards start below their final position and slide up as they enter the viewport:
| Property | Value | Effect |
|---|---|---|
initial | {opacity:0, y:50} | Card starts transparent and 50 px below its final position |
whileInView | {opacity:1, y:0} | Fades in and rises to rest when scrolled into view |
viewport.once | true | Animation plays once and does not replay on scroll-up |
Card Design
Each experience card is abg-haunt-tombstoneDark rounded panel with a subtle border:
- Cards are
w-[80%]on mobile andw-[45%]onmd:and above so they don’t stretch across the full container — leaving room for the central path to remain visible.
Adding a Work Entry
Append to the EXPERIENCE array
Open
assets/main.js, find the EXPERIENCE constant, and add a new object:Check the side alignment
The new entry will appear at the bottom of the list. Its index determines which side it appears on. With four entries, index 3 is odd → it will align right. If you need it on the left, reorder the array or add a placeholder entry.
The SVG path uses
preserveAspectRatio="none" and stretches to fill its parent container’s height. The parent is relative max-w-3xl mx-auto — its height is determined by the space-y-32 stack of cards. The path always spans the full height automatically, regardless of how many entries you add.