EndonJournaling as a planet you visit
An independent build of what Endon’s (still-unreleased, endonspace.com) journaling product could feel like: each folder of entries renders as its own procedurally-generated voxel island, and the five mood states shift the island's weather and life rather than swap a UI color. Feedback is audible as well as visual: every mood plays its own synthesized tone, and zooming out turns your journals into a small solar system you click into.
Independent concept redesign · not affiliated with, endorsed by, or commissioned by Endon.
Commits
Every design decision, and why it was made.
feat(scene): mood as weather, not a lighting rig
Each folder is a biome-typed voxel island (11 biomes, hand-rolled fBm noise terrain, no noise library). Mood is applied as an orthogonal ‘weather’ layer (rain, wind, tint, sparseness) instead of remapping the palette, so switching between entries changes the atmosphere without regenerating the ground under you: a mood is no longer a lighting rig, it’s weather plus how much life the island grows. Sadness reads as rain and a sparser island, not as darkness.
feat(navigation): journals become planets you can see all at once
Zooming out turns the folder list into an orbiting solar system: the folders stop being a list and become planets, each one its own little world. Clicking a planet triggers a scripted camera dive back into that journal, so moving between journals is spatial rather than a menu.
feat(feedback): five moods get a sound, not just a color
Each mood selection plays its own short tone signature, synthesized live with the Web Audio API (no samples, no audio library). A voice-input mode drives the same visual pulse from actual microphone input instead of typing. The goal was to give a wellness app more senses to respond to than a blank text box.
fix(glass): tab row and writing card cut from one sheet
The entry tabs sat above the card as separate chips: where a tab met the card’s top edge the outline turned a hard 90°, so the row read as chips resting on a card rather than titles cut out of one continuous surface. The junction is now a concave fillet, one radial-gradient per tab base with no mask and no extra pane, and each tab carries its own share of the card’s top edge across the flex gap to its right, because a tab has nothing to break a card-drawn edge with (its glass is transparent down there). Strips, fillets and the trailing segment are all sized from one custom property, so six independent elements can’t fall out of agreement about a single shape; once the leftover space fits in the gaps it is dealt out exactly, landing the last tab flush against the card’s right edge and dropping the corner radius behind it.
fix(glass): one recipe per engine, after three answers to the same CSS
Every glass pane asks one element to carry two filter pipelines at once: backdrop-filter for the blur, and an SVG displacement filter that bends the light like real glass. No spec pins down how those compose, so the three engines each chose differently: Blink feeds the backdrop’s output into the element’s own filter (what the design was authored against), WebKit keeps them separate so the displacement is a no-op, and Gecko treats the element’s filter as making it a backdrop root, so its backdrop-filter samples an empty backdrop and the blur does not weaken, it disappears. The recipe is now split: backdrop-filter carries the blur unconditionally everywhere, and the SVG bend is added only where it composes, gated behind the one property that parses in Gecko alone, since every backdrop-filter: url() form parses true in all three engines and @supports can therefore separate them on vendor but never on capability.
feat(critters): 25 species that pathfind, graze and sleep by mood
All eleven biomes got animals, built from four parameterised body plans (quadruped, hopper, flyer, crawler) driven by a spec table instead of 25 near-duplicate builders: dimensions carry most of the species differentiation, and a short per-species extras list adds the few cells that make one actually read, a tusk, a beak, a shell dome. Every plan ends in the same voxel builder as the rest of the props, so animals inherit the mood saturation wash, the night-glow ramp and the biome-transition tweens with no new code, and they walk the terrain generator’s retained height map by breadth-first flood: at most 36 columns per island, so an exhaustive search is exact and instant, and the single legality rule (the neighbouring column exists and sits within one block of height) is the entire climbing behaviour. Behaviour profiles are re-read every frame, so a mood retunes the island without rebuilding it: measured across 180 seconds of headless simulation, tired travels 0.0 units at 71% sleep, neutral 67.5 at 70% walk, and angry 156.6 at 96% walk with no sleep and no eating.
fix(a11y): tab row clears WCAG AA without flattening the colour
Inactive tabs carry a mood-coloured wash so the row reads as a small palette of your moods at a glance, but composited over the page and under the pane’s white fill the original tint landed near rgb(134,125,71), an olive so desaturated that the row read as five grey chips, with labels measuring 3.22:1. Lightness became the budget rather than the knob: tint chroma nearly doubled and its alpha rose to 0.86, lightness dropped to L 0.43 (L 0.52 was tried first and measured 2.69:1 on hovered Neutral, teal being the lightest of the five hues at equal L and therefore the floor), labels went from 0.8 white to full white, and the hover fill came down from 0.16 to 0.13 because white fill is the one layer working against the label. Worst case moved from 3.22:1 to 4.64:1, and the version that clears AA is the more saturated one, not the flatter one.
Files changed
A tour of the build: each element as it appears.
Each folder is its own biome: same terrain algorithm everywhere, but a different palette, rock set, and prop list per island, so every journal reads as its own place rather than a reskinned template. This is the real geometry, live in the browser. Click a planet to fly down and stand on it.
The writing surface and its folder tabs read as one continuous sheet: the focus ring runs the same on all four sides, including the stretch of top edge past the last tab.
Five moods, each its own hue and sound (live below, not a screenshot). Click one to hear its tone, synthesized on the spot with the Web Audio API, same as the source app.