Inspiration
Grief and loss are usually handled through words — journaling, therapy, talking it through. But words can trap a memory instead of releasing it; rereading a journal entry can hurt the same way every time, because nothing about it ever changes. I wanted to build something that treated a memory the way memories actually work — vivid at first, then genuinely fading — instead of freezing it in permanent, rereadable text.
What it does
Grief Archive turns a short description of a memory into a one-of-a-kind generative artwork, then lets that artwork decay in real time. Type a memory, hit release, and it becomes a composition of organic shapes and color — always the same starting image for the same memory, since it's seeded deterministically from your words. From that moment, an exponential decay curve tied to real elapsed time slowly desaturates the colors, blurs the shapes, makes them drift from their original positions, and layers in grain — until, weeks later, it's dissolved into abstract noise. A "simulate decay" slider lets you scrub through days or weeks of decay instantly, so you can watch the whole arc without waiting. Every piece is shareable via a single link, so it can be revisited from any device.
How I built it
A single self-contained HTML file — vanilla JavaScript and HTML5 Canvas, no framework, no backend. The memory text is hashed into a seed, which drives a deterministic PRNG (mulberry32) that generates every shape's position, size, and color. Decay is computed fresh on every frame from Date.now() against the piece's stored creation timestamp, using an exponential curve, so the artwork is always "live" — no polling, no server round-trips. Persistence is entirely client-side: localStorage keeps a record of each piece, and the seed plus timestamp are encoded into the URL so a piece can be reopened anywhere without any backend at all.
Challenges I ran into
Getting the decay to feel emotionally right, not just visually correct, took the most iteration — too fast and it felt gimmicky, too slow and I'd never see it move during a demo. Building the simulate-decay slider without breaking the "live" real-time rendering was another one: the same render function had to work identically whether it was fed real elapsed time or an artificial scrubbed value. And keeping everything in one dependency-free HTML file meant hand-rolling things (deterministic noise, tileable grain textures) that would normally just be a library import.
Accomplishments that I'm proud of
The same memory always regenerates the exact same starting artwork — no randomness, no seed collisions across sessions — which makes the piece feel like it genuinely belongs to what you wrote, not just a random visual. I'm also proud that decay feels organic rather than mechanical: shapes don't just fade, they wander, blur, and grain over — like memory actually behaves.
What I learned
That decay is a genuinely hard thing to design well — it needed real trial and error on the curve's shape and rate to feel true to the emotional metaphor rather than arbitrary. I also learned a lot about deterministic generative art: how much visual richness you can get from a single hash and a seeded PRNG, with zero external assets or libraries.
What's next for Grief Archive
- A gallery/wall view where multiple released pieces can be seen decaying side by side
- Optional sound — a soft ambient layer that fades in step with the decay
- A "final rites" state at full decay, where the piece settles into pure noise permanently rather than continuing to drift
- Exploring collaborative or shared memories, where more than one person can watch the same piece fade
Log in or sign up for Devpost to join the conversation.