🔥🌊 Nuoga Siela
An anonymous place to let it out: write what you feel, then burn it or set it adrift on the river.
We don't know who you are, and we don't want to.
🌐 Live site: nuogasiela.lt · 💻 Code:
github.com/brutall100/nuoga-siela
About
Sometimes you need to say what hurts without telling anyone. That's what Nuoga Siela ("Naked Soul"
in Lithuanian) is for. There are no accounts, no names and no comments. Other people can only tap "I
understand you".
The design comes from the Lithuanian midsummer (Joninės) tradition of floating wreaths and candles
down a river at night, so whatever is heavy drifts away. Fire is for burning, water is for letting
go.
How it works
- Tag how you feel (hope is preselected). The emotion goes to your calendar, on this device
only.
- Pour out the words. No name, no sign-up.
- Decide what to do with them: 🔥 burn them (no one will see), 🏮 release them to the
Stream (gone in 24 h), or 📖 keep them as a story (stays until you delete it).
The bottom menu follows the same path: Write → Stream → Stories → Calendar. Settings live behind
the ⚙ button at the top.
Features
- ✍️ Write freely. Tag an emotion, each drawn as a space phenomenon: anger (colliding planets),
sadness (a falling star), anxiety (restless orbits), guilt (an eclipse), loneliness (a lone
planet), hope (a star rising over the horizon). The same symbols show up in the stream, the
stories and the calendar; the selected one moves.
- 🔥 Burn it. The text turns into embers and disappears. It is never sent to the server.
- 🏮 Release it to the Stream: the text is physically deleted after 24 h, unless you (only
you) tap "To Stories" on it: then it moves to Stories when its 24 hours are up. Up to 5000
characters either way.
- 📖 Keep it as a story: a text that stays until you delete it and gets its own page.
- 🤍 "I understand you". Support without comments, one vote per device.
- 🆘 SOS. Helplines and a breathing circle. If the text contains crisis words, help is offered
gently and the post is never blocked.
- 🔊 Scream room (on the SOS screen). Audio lives only in the phone's memory and is never
uploaded.
- 📅 Mood calendar (in the bottom menu). Your tagged emotions by day and a strip for this week;
when you release or burn a text, its symbol flies into the calendar. Only the day and the emotion
are saved, and only on your device. Next to it: how everyone feels this week (plain totals, no
link to anyone).
- 🎧 Calming sounds. River, rain or campfire while you write or breathe.
- 🌗 Light and dark mode. Follows the system setting, has a toggle, and doesn't flash while
loading.
- 🌊 Living background. Ripples spread on the water, lantern lights rise and soft glows drift.
Phones get half the particles, and
prefers-reduced-motion turns them off.
- 🌍 LT / EN, installable PWA, SEO (sitemap, Atom feed, server-rendered story pages).
Anonymity is enforced by technology, not just promised
- The device ID is created in the browser (
crypto.randomUUID()). The server immediately turns it
into sha256(salt + uuid) and never stores the original.
- IP addresses are never stored. The server log keeps only
method path status.
- Stream posts are written with
expireIn: 24h, so Deno KV deletes them physically on its own.
- Fonts are self-hosted, so Google never sees who visits.
Built with
| Area | What |
|---|
| Server | Deno 2 + Deno KV, zero dependencies |
| Client | Vanilla HTML / CSS / JS (PWA), no libraries and no build step |
| Fonts | Lora for headings, Nunito for text |
| Testing | deno test, CI on GitHub Actions (fmt + lint + test) |
"Let it drift" color palette (every color lives at the top of public/css/main.css, in
:root):
| Role | Dark | Light |
|---|
| Background | #08171C | #EAF4F2 |
| Surface | #0F242B | #FFFFFF |
| Text | #E4F1EE | #10292E |
| Accent (water) | #4FD1BD | #0B7A6A |
| Second accent (lamp) | #FFB86B | #E08A33 |
All contrast ratios are checked against WCAG: body text is at least 4.5:1, UI elements at least 3:1.
This is the beginning of the README. Read the rest at the original. Read the full README ↗