TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/spell-index/llms.txt
Use this file to discover all available pages before exploring further.
CandleTimeline component presents the portfolio’s work history as a row of physical wax candles. Each candle represents one job: its height is proportional to how long that role lasted, a Framer Motion flame flickers at the top of each wick, and the job details (title, company, period, description) float above the candle body in a card that lifts on hover. The component accepts no props — all data is stored internally.
Hardcoded work data
Three work experiences are defined as aconst array at the top of CandleTimeline.js:
Candle height calculation
Candle height in pixels is calculated fromdurationYears using a linear scale clamped to a minimum of 100 px and a maximum of 250 px:
durationYears | Raw (× 60) | Clamped height |
|---|---|---|
| 1 | 60 px | 100 px (min) |
| 2 | 120 px | 120 px |
| 3 | 180 px | 180 px |
| 4 | 240 px | 240 px |
| 5+ | 300+ px | 250 px (max) |
div:
Animated flame
Each candle has a three-layer flame assembly mounted above the wick:0.5 s cycle on the main flame combined with the slower 2 s glow pulse creates naturalistic flickering without feeling mechanical.
Layout and entrance animation
All three candles sit in aflex-col md:flex-row container, switching from a vertical mobile stack to a side-by-side desktop layout at md breakpoint. Each candle group is a motion.div that animates into view using whileInView:
viewport={{ once: true }} flag ensures the entrance fires only on first scroll-into-view, not on every scroll-up/scroll-down cycle.
A thin horizontal gradient rule (via-ink) runs along the bottom of the container to represent the table surface the candles rest on.
Wax drip details
Three SVG-styleddiv elements are absolutely positioned on the candle body to simulate wax drip streaks:
w-16 h-2 bg-void blur-sm) gives the illusion that each candle is resting on the surface.
Usage
Adding a new work experience
To add a new job, append an entry to theexperiences array at the top of CandleTimeline.js:
Candle heights are automatically recalculated from
durationYears — you do not need to set a height manually. The layout adapts to any number of entries: the flex container wraps on mobile and spreads evenly on desktop.