OpenSakura
MekaHime 첫 AI 동반자, 오픈소스. 26가지 감정·실제 음성·실시간 답변·기억 기능을 PC에서 구동, 곧 디스코드 모드 제공
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A gift for my beloved girlfriend
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
An interactive 3D garden where each flower opens an "open when…" letter.
Built with Next.js 15, React 19, TypeScript, Tailwind CSS, React Three Fiber + drei, GSAP and Framer Motion.
Then open http://localhost:3000. To try it on a phone, run npm run dev -- -H 0.0.0.0 and open http:// :3000 on a phone on the same Wi-Fi.
Everything she reads lives in data/memories.ts: one entry per flower.README 전문 보기 ↗An interactive 3D garden where each flower opens an "open when…" letter.
Built with Next.js 15, React 19, TypeScript, Tailwind CSS, React Three Fiber + drei, GSAP and Framer Motion.
npm install
npm run dev
Then open http://localhost:3000. To try it on a phone, run npm run dev -- -H 0.0.0.0 and open http://<your-computer's-LAN-IP>:3000 on a phone on the same Wi-Fi.
Everything she reads lives in data/memories.ts: one entry per flower.
{
id: "sad", // keep ids stable: they're how opened letters are remembered
flower: "lily",
label: "Open when you're sad", // shown on the envelope and the flower's tag
message: `First paragraph.
Second paragraph, after a blank line.`,
photo: { src: "/images/personal/us.jpg", alt: "Us at the beach" }, // optional
audio: { src: "/audio/personal/sad.m4a", title: "Listen to this" }, // optional
},
message between backticks. A blank line starts a new paragraph; a single line break stays as a line break.public/images/personal/ and audio in public/audio/personal/. Both folders are gitignored, so those files never reach GitHub, which also means a deploy from GitHub won't include them. See "Deploying" below.flower: "final") stays locked as a bud until the other six have been opened.Besides the seven letters above, either of you can plant new ones from the garden itself: Plant something (top right) asks for the passcode once per device, then lets you pick a flower, write an "open when…" letter, and attach a photo or voice note. The new flower grows in where you're looking, and if the other person has the garden open it grows in on their screen too, with a note saying who planted it.
It runs on the Supabase project our-little-garden (Singapore):
plants: one row per planted letter, including its position in the garden. The browser can read and add rows, but never edit or delete them, so a leaked link can't wipe anything. To remove a plant, delete its row in the Supabase dashboard (Table Editor → plants).garden-media: uploaded photos (resized to at most 2000px) and voice notes, 25 MB max each.lib/supabase.ts. They're safe in client code: the key only allows what the table's access policies permit. Set NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY to point at a different project.The passcode is checked in the browser against a SHA-256 hash in lib/plants.ts, which also shows how to change it. It keeps casual visitors out, not a determined one. It needs a secure connection, so planting works on localhost and the deployed site but not over http://<LAN-IP>.
Unfamiliar flower_type values (added by hand in the dashboard, say) still render as one of the six flowers.
The first time each device opens the garden, it asks Who are you? Zorrow / Skelly. The answer is saved in the browser, and there's a "Not Zorrow?" link under "Enter the garden" to change it.
Inside the cottage. Follow the stepping stones out of the gate to the cottage, then walk into its door or click it to go inside. Inside is a little room with a bed, a table, a bookshelf and a plant. To go back out, walk into the door or click it.
The cottage keeps three things you can click. Each glows softly when you hover over it.
house_photos, with the files under house-photos/ in the garden-media bucket.notes. To take one down, delete its row in the dashboard (Table Editor → notes).Around the garden. There are four more places to spend time. Each glows faintly and shows a tag when you hover over it.
mailbox. To remove one, delete its row in the dashboard (Table Editor → mailbox).Inside, the music softens as if heard through the walls. To use a separate cottage track instead, put it in public/audio/ and set HOUSE_SRC in lib/music.ts.
The far garden. At the back of the garden, a gateway in the fence leads to a little wooden bridge over a brook.
The five places off the far garden:
NEXT_VISIT_DATE in lib/countdown.ts to a date and time with its time zone, e.g. "2026-12-20T15:00:00+08:00", and redeploy.MAZE_SECRET in lib/places/maze.ts.You only see the other person's gardener when you're in the same place. The top-left corner says where they are: "here with you", "in the garden", "in the cottage", "in the far garden", "in the greenhouse", "up in the treehouse", "in the gazebo", "in the lighthouse", "in the maze", or "away". While someone is away, their gardener is at home in the cottage, pottering about.
This runs on a Supabase Realtime channel (garden-live):
Nothing is stored. There's no login: the name is just a choice on each device.
While a festival is on, the garden is dressed for it. Thadingyut, the Festival of Lights, runs from 25 to 28 October 2026 in Myanmar time, a day longer than the festival itself.
festival_lamps; to remove one, delete its row in the dashboard.FESTIVALS in lib/festivals.ts (Tazaungdaing, say) with its dates and colours. Everything above follows on its own.?festival=thadingyut to the URL, e.g. to try it out or show it after it's over. Use ?festival=off to turn it off.Add these to the URL:
| Flag | What it does |
|---|---|
?skipintro | Skip the opening line and go straight to the garden |
?reset | Forget which letters have been opened on this device (progress is saved in the browser) |
?debug | Show an FPS meter, for checking performance on a phone |
?festival=thadingyut | Dress the garden for Thadingyut whatever the date (?festival=off for none) |
Flags combine, e.g. /?reset&skipintro.
The scene adapts to the device: it starts at a moderate resolution, and if the frame rate drops it lowers the resolution and halves the grass, wildflowers, fireflies and petals. Open the site with ?debug on her kind of phone to check the frame rate.
The project deploys on Vercel from the main branch of the private GitHub repo; every push to main redeploys.
Because photos and audio are gitignored, they won't be in a GitHub-based deploy. Options:
public/*/personal blocks from .gitignore and commit the media.data/memories.ts.The site is public to anyone with its URL (it's hidden from search engines), so share the link only with her.
| Path | What |
|---|---|
data/memories.ts | Letter text, labels and optional photo/audio for each flower |
lib/layout.ts | Where each flower grows, and the stepping-stone path |
lib/flowerSpecs.ts | Petal shapes and colours for each flower |
components/garden/ | The 3D scene: terrain, pond, flowers, camera, effects |
components/ui/ | Intro, envelope and letter, progress row, flower tags |
lib/gardenStore.ts | Garden state: intro stage, open letter, which letters have been read |
lib/plants.ts, lib/plantStore.ts | The shared garden: Supabase reads, uploads, realtime, passcode, where new plants grow |
components/garden/Fence.tsx | The fence and gate around the garden |
components/garden/Gardeners.tsx | Zorrow and Skelly: their looks, pace, wandering, tending and the wave when tapped, their walk in from the cottage, and walking them yourself or live |
lib/presence.ts, lib/playerInput.ts | The live garden: who you are, who's online, sending and replaying movement; keyboard and joystick input |
components/ui/PlayerControls.tsx, components/ui/WhoAreYou.tsx | WASD/arrow keys and the touch joystick; the "Who are you?" question |
components/zones/registry.ts, lib/zones.ts | The zones (garden, cottage, far garden and its five places): each one's scene, spawn points and exits, and which one is showing |
components/zones/FarGardenZone.tsx, components/zones/far/, lib/farGarden.ts | The far garden: its meadow, signpost and five entrances |
components/zones/places/, lib/places/, lib/rooms.ts | The greenhouse, treehouse, gazebo, lighthouse and maze: their scenes, layouts, and walking about in them |
lib/countdown.ts | The lighthouse's countdown: the date of your next visit |
lib/bridge.ts, components/garden/props/Bridge.tsx, |
components/garden/props/Brook.tsx| The bridges and the brook between the garden and the far garden |
components/zones/HouseZone.tsx, lib/house.ts | The cottage's interior and its layout |
components/zones/HouseKeepsakes.tsx, components/ui/Keepsakes.tsx | The photo wall, notes board and letter shelf in the room, and the panels they open |
lib/keepsakes.ts, lib/notes.ts, lib/housePhotos.ts | Which keepsake panel is open, opened letters and the photo wall's photos; the shared notes board; photos hung in the cottage |
components/ui/PartnerStatus.tsx, components/ui/ZoneFade.tsx | Where the other person is; the fade when you go through a door |
components/garden/Cottage.tsx, lib/procession.ts | The cottage outside the gate, its path, and the intro's walk and camera shots (runs after "Enter the garden"; there's a Skip intro link) |
lib/props.ts, components/garden/props/ | The swing, dock, mailbox and stargazing hill: where they stand, sitting on them, and the starry night |
lib/mailbox.ts, components/ui/MailboxPanel.tsx, lib/stargazing.ts | Delayed letters in the mailbox; when the stars are out |
lib/festivals.ts, components/garden/festival/ | The festivals, their dates and colours; the lights, lamps and fireworks in the garden |
lib/festivalLamps.ts, lib/fireworks.ts, lib/fireworkSound.ts, components/ui/FestivalMenu.tsx, components/ui/FestivalGreeting.tsx, components/ui/LampPanel.tsx | Lighting lamps, fireworks and lighting together, their sound, and the festival's menu, greeting and lamp panel |
components/garden/GardenerBody.tsx, lib/wander.ts | How the gardeners are built from simple shapes, and where they're allowed to walk |