Loading today's season...

seasonly

Date-aware seasonal banners and particles for any website. Zero dependencies. LATAM-first. Web Components, framework-agnostic.

See every season of the year

Move the slider to any date in 2026 — the banner, particles and resolved season info update live. Click any peak on the timeline below to jump straight to it.

No active season for this date — try moving the slider.

Resolved season

id
name
peak
distance to peak
particles
window

            

Year at a glance

Every peak in the bundled co calendar (Colombia), including moving holidays computed correctly for 2026 — Mother's Day on the 2nd Sunday of May, Black Friday on the 4th Friday of November, Día del Niño on the last Saturday of April.

Install

Pick the path that matches your stack. All paths use the same package.

NPM (Next, Astro, Vue, Svelte, Vite)

# Install
npm install seasonly

// app.js
import { resolveSeason } from 'seasonly';
import { defineAll } from 'seasonly/components';
import co from 'seasonly/calendars/co.json' with { type: 'json' };

defineAll();
const active = resolveSeason(new Date(), co);

One-line CDN (WordPress, Shopify, Webflow, plain HTML)

<!-- Paste anywhere in your <head> or <body> -->
<script type="module"
        src="https://cdn.jsdelivr.net/npm/seasonly@0/src/auto.js"
        data-locale="co"
        data-mode="banner+particles"
        data-message="30% off this Black Friday"
        data-cta-text="Shop"
        data-cta-href="/promos">
</script>

Why seasonly

Calendar-aware, not stopwatch-aware

Most particle libraries fire when you tell them to. seasonly resolves which theme should be active today against a pluggable calendar — and the calendar can be Colombian, Mexican, religious, or your own product's anniversary roster.

Moving holidays done right

Mother's Day is the 2nd Sunday of May, not 05-11. Father's Day is the 3rd Sunday of June, not 06-15. seasonly expresses these as rules so the date is correct every year — without manual updates.

Accessibility is not a toggle

prefers-reduced-motion: reduce turns off animations and renders the particles layer empty. Users with vestibular sensitivities set that preference precisely to suppress decorative motion — the right answer is to listen.

Zero deps, by contract

The library has zero runtime and zero dev dependencies. CI fails the build the moment a single dependency sneaks in. The whole source ships at ~20 KB gzipped.