OpenSakura
MekaHime's first AI companion, now open source. 26 emotions, her real voice, real-time replies and memory, running on your own PC. Discord mode coming soon.
翻译准备中
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
Anonymous place to let it out: write what you feel, then burn it or set it adrift. Deno + KV, zero dependencies, privacy by design
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗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
| Dark mode | Phone (390px) |
|---|---|
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.
The bottom menu follows the same path: Write → Stream → Stories → Calendar. Settings live behind the ⚙ button at the top.
prefers-reduced-motion turns them off.crypto.randomUUID()). The server immediately turns it
into sha256(salt + uuid) and never stores the original.method path status.expireIn: 24h, so Deno KV deletes them physically on its own.| 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.
history.pushState) and server-rendered pages becomes visible to
Google.transform and opacity are
animated, and particles are created once.script-src 'self') changes habits: no inline scripts or styles, and the theme
is set by a separate file in <head>.You need Deno 2.
git clone https://github.com/brutall100/nuoga-siela.git
cd nuoga-siela
cp .env.example .env # optional locally; change DEVICE_SALT in production
deno task dev # http://localhost:8000
In .env you can set PORT, DEVICE_SALT (in production use a long random string:
openssl rand -hex 32), POST_TTL_MS, KV_PATH and INDEXNOW_KEY. Each one is explained in
.env.example.
Other commands:
deno task test # server tests
deno task lint # lint (main.ts + server/)
deno fmt # format
This project needs a server (Deno + KV), so GitHub Pages can't run it. The live version runs on Deno Deploy at nuogasiela.lt. To deploy: dash.deno.com → New Project → this repo → entrypoint
main.ts→ setDEVICE_SALT.
main.ts server: static files, /api, SSR story pages, sitemap, Atom, CSP
server/api.ts API (JSON)
server/store.ts Deno KV: posts, stories, hugs, rate limits, stats
server/filter.ts spam / personal data filter and crisis word detection
public/index.html single page with every screen
public/css/main.css design system and palette (:root)
public/js/theme.js light / dark mode (no flash)
public/js/river.js living background (ripples, lanterns)
public/js/ui.js button ripple, reveal on scroll, count-up
public/js/app.js routing, writing, stream, stories, settings
public/js/burn.js burn animation (Canvas)
public/js/scream.js scream room (audio only in RAM)
public/js/icons.js emotion symbols (space phenomena) and line icons
public/js/mood.js mood calendar (local only) and the shared weekly mood
public/js/sounds.js calming sounds (Web Audio loop, files in public/sounds/)
public/fonts/ Lora and Nunito (woff2 + OFL licenses)
public/sounds/ river, rain and campfire loops (Freesound, CC0)
public/images/ og-image.webp
docs/ README screenshots
| Method | Path | What |
|---|---|---|
POST | /api/posts | {text, emotion, kind} + X-Device. Returns sos: true on crisis words |
GET | /api/posts?emotion= | stream, newest first |
GET | /api/stories?emotion=&sort= | stories (suprastos = most understood, naujausios = newest) |
GET | /api/mine | my texts with their hug counts |
GET | /api/stats | {postsToday, hugsToday} |
GET | /api/mood | {counts, total}: how often each emotion was tagged in the last 7 days |
POST | /api/posts/:id/hug | "I understand you" (once per device) |
POST | /api/posts/:id/report | report; after 3 reports the post is hidden automatically |
POST | /api/mine/delete | delete all my posts |
public/fonts/.CHANGELOG.md (v2.6).AGPL-3.0 © 2026 brutall100
In plain words: you may use, change and share this code, but if you run a modified version as a website or service, you must publish your source code under the same license to its users.
The name "Nuoga Siela" and its logo are not covered by the license and may not be used for other projects without permission.