OpenSakura
MekaHime 첫 AI 동반자, 오픈소스. 26가지 감정·실제 음성·실시간 답변·기억 기능을 PC에서 구동, 곧 디스코드 모드 제공
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. 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.