Now Marker
A copy-paste timelines component in pure HTML & CSS. Zero dependencies, framework-agnostic, MIT-licensed.
TimelinesHTMLCSSany framework
Onboarding
First sprint
NOW
Review cycle
Release
Copy into your project
HTML
<div class="nuda-tl-now">
<div class="nuda-tl-now__item nuda-tl-now__item--past">
<div class="nuda-tl-now__dot"></div>
<div class="nuda-tl-now__body">
<span class="nuda-tl-now__label">Onboarding</span>
<span class="nuda-tl-now__meta">Apr 1</span>
</div>
</div>
<div class="nuda-tl-now__item nuda-tl-now__item--past">
<div class="nuda-tl-now__dot"></div>
<div class="nuda-tl-now__body">
<span class="nuda-tl-now__label">First sprint</span>
<span class="nuda-tl-now__meta">Apr 14</span>
</div>
</div>
<div class="nuda-tl-now__now-line">
<span class="nuda-tl-now__now-badge">NOW</span>
</div>
<div class="nuda-tl-now__item">
<div class="nuda-tl-now__dot"></div>
<div class="nuda-tl-now__body">
<span class="nuda-tl-now__label">Review cycle</span>
<span class="nuda-tl-now__meta">May 2</span>
</div>
</div>
<div class="nuda-tl-now__item">
<div class="nuda-tl-now__dot"></div>
<div class="nuda-tl-now__body">
<span class="nuda-tl-now__label">Release</span>
<span class="nuda-tl-now__meta">May 20</span>
</div>
</div>
</div>CSS
.nuda-tl-now {
display: flex;
flex-direction: column;
gap: 0;
width: 210px;
padding: 4px 0;
}
.nuda-tl-now__item {
display: flex;
align-items: center;
gap: 10px;
position: relative;
padding: 6px 0;
}
.nuda-tl-now__item::before {
content: '';
position: absolute;
left: 6px;
top: 0;
bottom: 0;
width: 2px;
background: rgba(255,255,255,.07);
}
.nuda-tl-now__dot {
width: 14px;
height: 14px;
border-radius: 50%;
border: 2px solid rgba(255,255,255,.12);
background: #1a1a1a;
flex-shrink: 0;
position: relative;
z-index: 1;
}
.nuda-tl-now__item--past .nuda-tl-now__dot {
background: rgba(255,255,255,.15);
border-color: rgba(255,255,255,.2);
}
.nuda-tl-now__item--past::before {
background: rgba(255,255,255,.15);
}
.nuda-tl-now__body {
display: flex;
flex-direction: column;
gap: 1px;
}
.nuda-tl-now__label {
font-size: 11px;
color: #777;
}
.nuda-tl-now__item--past .nuda-tl-now__label {
color: #555;
text-decoration: line-through;
text-decoration-color: #444;
}
.nuda-tl-now__meta {
font-size: 9px;
color: #444;
}
.nuda-tl-now__now-line {
display: flex;
align-items: center;
gap: 8px;
padding: 4px 0;
position: relative;
}
.nuda-tl-now__now-line::before {
content: '';
position: absolute;
left: 0;
right: 0;
top: 50%;
height: 1px;
background: rgba(228,255,84,.4);
}
.nuda-tl-now__now-badge {
position: relative;
z-index: 1;
font-size: 9px;
font-weight: 700;
color: #e4ff54;
background: #1a1a1a;
padding: 1px 8px;
border: 1px solid rgba(228,255,84,.4);
border-radius: 999px;
letter-spacing: .08em;
animation: _nuda-tlnowblink 2s ease-in-out infinite;
}
@keyframes _nuda-tlnowblink {
0%,100% {
opacity: 1;
}
50% {
opacity: .5;
}
}
@media (prefers-reduced-motion:reduce) {
.nuda-tl-now__now-badge {
animation: none;
}
}
How to use Now Marker
Paste the HTML where you need it and the CSS into a global stylesheet (or a <style> tag). Every class is prefixed nuda- so it never collides with Tailwind or your own styles. Tweak the CSS custom properties to match your design system.
Works in React, Vue, Svelte, Astro, Next.js, Nuxt, Laravel Blade, Django, Rails — or a single .html file. No npm install, no build step.