kReative Labs
Back to kReative Labs

Live 2026 · /timeTravel

Time travel interface

The same career rendered in four complete design systems, selected by year. The facts are identical in every frame. Only the visual language and the vocabulary change, which turns out to be the whole argument.

A career is not static, it is read from a moment

A resume pretends to be a neutral record. It is not. It is written in the vocabulary of the moment it was written in, and the same facts would have been framed completely differently ten years earlier or ten years later.

So this makes that literal. Pick a year and the entire interface becomes that year: a CRT terminal in 1998, skeuomorphic iOS in 2012, a glass dashboard in 2024, and a sparse archival retrospective in 2035 where the whole career is described in the past tense by something that has finished observing it.

One attribute swaps the entire visual language

Time travel interface architecture Year tabs and the URL hash both set a data-era attribute on the body element. Four scoped CSS blocks key off that attribute, each defining a complete theme, and only the matching era section is displayed. Year tabs click, arrows, Home/End URL hash #1998 deep link, back body[data-era] the only piece of state 1998 CRT terminal mono, scanlines, ASCII 2012 skeuomorphic linen, gloss, bevels 2024 glass dashboard blur, metric tiles 2035 archive sparse, thin, past tense Same facts sourced from profile.json
All four era sections exist in the DOM at once. CSS decides which is visible and what everything looks like, so switching years is a single attribute write and one paint.

There is no JavaScript rendering and no component framework. The script does three things: set the attribute, keep the URL hash in sync, and handle keyboard navigation across the tablist. Everything else is CSS keyed off body[data-era], in a stylesheet loaded only by this page so the other pages carry none of its weight.

The interesting problems were not technical

What it runs on

RenderingStatic HTML. All four eras in the DOM, CSS controls visibility.
StateA single data-era attribute on body, mirrored to the URL hash.
StylingFour scoped theme blocks in a page-local stylesheet.
AccessibilityTablist semantics, roving tabindex, arrow and Home/End keys, reduced-motion support.
ScriptRoughly 50 lines, inline. No dependencies.