HARMATTAN

A SEASON · NOVEMBER — MARCH

HARMATTAN

The dry-season trade wind that carries Saharan dust across West Africa — a poem in ten lines, written into moving weather.

Out of the Sahara the year exhales — a long dry word the maps call wind.

Morning arrives unwashed; the sun hangs like a coin dropped in milk.

The horizon packs its bags and leaves; the sky forgets which blue it was.

Dust signs its name on every sill — a guest who never knocks, and never goes.

Lips crack like riverbeds; we shea our skin against the thirsty air.

The mango holds its breath; the well lowers its voice to a whisper.

By dusk the light goes ember — the sun an old coal somebody blew on twice.

Somewhere the grass gives itself to fire, and smoke climbs up to greet its cousin, the haze.

Then the wind lies down like a tired dog, and the dust remembers it was earth.

And the sky, swept clean at last, spends all that dust as stars.

ABOUT THE PIECE

A poem you scroll through, and the weather it happens in.

HARMATTAN is an interactive shader poem. Every visible thing — the haze, the dust, the ember dusk, the stars — is a single full-viewport WebGL2 fragment shader: layered fractal noise advected along a wind field, graded from haze white to night as the ten lines pass. Nothing here is a photograph or a video. It is all math, running live.

Your scrolling is the wind. Scroll fast and the dust streams; stop, and the air goes still. Move your cursor and it becomes a hot gust, shoving the dust aside and warming the air where it passes. The letters themselves sit in the weather — their weight and spacing gust with the wind field, set in a single variable font.

The poem is original, written for this piece: ten lines for ten scenes, tracing one harmattan day from the first white morning to the swept-clean night. The season gives the piece its structure — the sky darkens as you read, and when the wind finally lies down, the dust it carried becomes the stars.

Accessibility is part of the design, not an afterthought. any time; under reduced-motion the shader renders five still frames instead of moving; arrow keys and space step line by line; and if WebGL2 isn’t available, the text is the piece.

Technique
Raw WebGL2 fragment shader — FBM dust, wind-field advection, no libraries
Type
Epilogue variable, one file, weight 100–900, driven per-frame by the wind
Reading time
Ten lines. One season. About two minutes, wind permitting