TheDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dev.void/llms.txt
Use this file to discover all available pages before exploring further.
MissionLogTimeline component presents your work history as a mission log — a vertical axis represents the passage of time, and a luminous gradient line grows along that axis as the user scrolls down the page. Each role appears as a card that animates into view, alternating left and right on desktop layouts for visual rhythm. The effect mirrors a mission debrief being printed out in real time.
The scrolling line animation uses Framer Motion’s
useScroll and useTransform hooks tied to the component’s own section ref — not the window scroll position. This means the animation is scoped to when the timeline section is within the viewport, not the overall page scroll depth.Work History Data Shape
All entries are stored in a static array (We in the compiled source). Each entry must conform to this object shape:
Pre-configured Entries
The timeline ships with three work history entries:Senior Frontend Architect — Stellar Dynamics
Period: 2023 – PresentLeading a crew of 5 developers building the next-generation orbital tracking interface. Reduced load times by 40% through strategic code-splitting and WebGL optimizations.
UI Engineer — Nebula Corp
Period: 2020 – 2023Developed the core component library used across 12 different internal tools. Implemented complex data visualization dashboards for telemetry data.
Web Developer — Void Technologies
Period: 2018 – 2020Maintained and upgraded legacy systems. Migrated monolithic architecture to micro-frontends, improving deployment velocity.
Scroll-Driven Line Animation
The vertical timeline line sits in anabsolute container pinned at left-1/2 on desktop (and left-[27px] on mobile, aligned with the node dots). It consists of two layers:
- Background track — a static
w-full h-full bg-space-800div that fills the full height of the section. - Animated fill — a Framer Motion div whose
heightCSS property is driven by scroll position.
useScroll hook with a scoped target ref:
scrollYProgress value (0 → 1) is then remapped with useTransform to compress the active range to the middle portion of the scroll:
lineProgress value is then applied to the fill bar’s height style as a percentage string:
Card Entrance Animations
Each<motion.div> card uses whileInView to animate in from below as it enters the viewport:
margin: "-100px" on the viewport option means the animation triggers 100px before the card’s top edge fully enters the viewport — cards begin fading in slightly before they are fully visible, creating a smoother reveal.
once: true ensures each card only animates once per page load.
Alternating Layout
Onmd and larger screens, entries alternate between left-aligned and right-aligned to create a classic timeline chevron layout. The alternation is determined by the array index:
flex-row with three children:
- The content card (
flex-1) — floats left or right depending onflex-row-reverse. - The timeline node (
flex-shrink-0 w-14 h-14) — always at the centre of the row, aligned with the vertical line. - A spacer div (
hidden md:block flex-1) — occupies the opposite half, keeping the node centred.
flex-col), all cards stack in a single column and the node appears below each card.
Timeline Node
Each node is a circularrounded-full bg-space-950 border-2 border-aurora-teal div. At its centre, a smaller pulsing dot creates a beacon effect:
shadow uses the aurora-light color (rgba(204,251,241,0.8)) as a glow cast, and Tailwind’s built-in animate-pulse class provides the breathing animation without any Framer Motion configuration.
Card Anatomy
Each glass-panel card contains four pieces of information:| Element | Classes | Content |
|---|---|---|
| Year range | font-mono text-aurora-mint text-sm | e.g. “2023 - Present” |
| Job title | font-sans text-2xl font-bold text-slate-100 | e.g. “Senior Frontend Architect” |
| Company name | font-serif italic text-slate-400 | e.g. “Stellar Dynamics” |
| Description | text-slate-300 text-sm leading-relaxed | Free-text role summary |
md:text-right on even (right-side) cards, md:text-left on odd (left-side) cards.
Adding New Timeline Entries
Open the data array
Find the
We array in components/MissionLogTimeline.js. Entries are ordered newest-first (top of the array = top of the timeline).Prepend a new role
Insert a new object at the beginning of the array for a current or most recent position:
Check the alternating layout
Adding an entry at the front shifts the even/odd index of all subsequent entries, flipping their left/right alignment. Review the rendered timeline to ensure the visual rhythm still looks balanced.
Customizing the line gradient
Customizing the line gradient
The fill bar uses the Tailwind class Always end with
bg-gradient-to-b from-aurora-teal via-aurora-pink to-transparent. To change it, edit the className on the motion.div fill bar inside MissionLogTimeline.js.Some alternatives:to-transparent to preserve the soft leading-edge fade effect.