Most journaling apps look the same. A list of dated entries in a scrollable feed. Some add tags or mood trackers. None of them make you feel anything when you open them.
I wanted journaling to feel like something worth returning to. Not a productivity tool, not a habit tracker, but a place. A quiet, private sky that fills with light as you write.
Letters to the Stars turns every journal entry into a star. You tap on the sky, pick a mood color, write your thoughts, and send the letter. It dissolves into particles, converges into a point of light, and rises into a 3D celestial dome. Over weeks and months, your sky fills with meaning. Warm-toned stars for good days, cool-toned for harder ones. Tap any star to read what you wrote.
How It Works
The app runs entirely in the browser. There is no backend, no account, no server storing your data. Everything lives in your device’s local database. You open it, you write, and your sky is yours alone.
The experience has two modes:
Exploring your sky. A rotating 3D dome with nebula clouds, stardust, and a slowly moving starfield. On desktop, drag to look around. On mobile, tilt your phone and the gyroscope takes over. The camera drifts gently when idle, breathing with a slow vertical oscillation.
Writing. Tap anywhere on the sky to place a new star. A radial color picker lets you choose a mood, warm oranges and yellows for joy, deep blues and purples for reflection. Write your entry, hit send, and watch the text scatter into particles that converge and ignite into a new star at the position you chose. The whole animation takes about fourteen seconds, complete with synchronized sound and haptic feedback on supported devices.
Constellations
Stars can be connected into named constellations. Long-press a star to enter constellation mode, then tap other stars to draw lines between them. Group memories by theme, time period, or feeling. Each new connection plays a note from a pentatonic scale, so drawing a constellation has its own little melody.
The lines render as smooth curves that arc through the dome, and you can undo connections one at a time. Name your constellation when you’re done.
The Visual Layer
Every visual element in the sky is a custom shader. There are no pre-built materials or texture sprites. Seven hand-written GLSL programs handle everything: the glow and halo of journal stars, the progressive draw animation of constellation lines, the nebula clouds that blend from violet at the zenith to amber at the horizon, the background starfield, the Milky Way band, floating ambient particles, and occasional shooting stars.
Post-processing bloom ties it all together. Stars genuinely glow, and constellation lines accumulate light where they overlap.
Getting all of this to run at 60 frames per second on a phone required careful memory management. The render loop creates zero new objects per frame. All temporary vectors, quaternions, and projection matrices are pre-allocated and reused. Stars render as flat quads with shader-based glow instead of 3D geometry. Quality tiers adjust shader complexity and particle counts based on device capability.
Sound Design
The audio layer is generative rather than static. A six-track ambient playlist crossfades between songs, pre-caching the next track thirty seconds before the current one ends. Audio files persist across sessions so they don’t need to be re-downloaded.
During star creation, a spinning sound sweeps its playback rate from half speed to two and a half times speed, synchronized with the particle convergence. Constellation edges each play a pentatonic note, stepping up the scale as you add connections. Undo plays the last note in reverse.
Haptic Choreography
On devices that support it, vibration patterns are synchronized to the star creation animation. Rapid pulses as text scatters into particles. Gentle taps that accelerate as particles converge, gaps shrinking from 400 milliseconds to 15 as intensity ramps up. A long press when the star consolidates. A single buzz as it ascends into the dome. The haptics make the whole sequence feel physical, like you’re holding something that’s building up energy and releasing it.
Privacy by Default
All data stays on the device in IndexedDB. No account, no analytics, no tracking. The app works offline as a PWA (installable from the browser menu). Internationalization is handled at build time, so translations add zero runtime cost.
What I Learned
This project taught me how far you can push the browser as a creative medium. Custom shaders, generative audio, choreographed haptics, and physics-based particle systems, all running on a phone without dropping frames. The key was treating performance as a design constraint from the start, not something to fix later.
The emotional design mattered more than the technical achievement. The fourteen-second star creation animation exists because sending a journal entry should feel like a moment, not a click. The gentle camera drift exists because an empty sky should still feel alive. Every technical decision served how the experience should feel.
Letters to the Stars
A sky woven from a million lived moments


