https://github.com/velopert/oiia
Oiiai Keyboard is a browser-based musical toy built around the viral oiiai cat meme.
https://github.com/velopert/oiia
Last synced: about 1 month ago
JSON representation
Oiiai Keyboard is a browser-based musical toy built around the viral oiiai cat meme.
- Host: GitHub
- URL: https://github.com/velopert/oiia
- Owner: velopert
- Created: 2026-04-17T14:18:17.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-04-17T15:20:32.000Z (about 2 months ago)
- Last Synced: 2026-04-17T17:29:15.033Z (about 2 months ago)
- Language: HTML
- Homepage: https://oiia.velopert.com/
- Size: 287 MB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ko.md
Awesome Lists containing this project
README
# Oiiai Keyboard
[๐บ๐ธ English README](./README.md)

> ์ธ์์ ์ ํ๋ ์๋ถ: ํ์
1๋
ํ, ์ ์ง๋ด๊ณ ์์ต๋๋ค.
> AI์ ๊ฐ์ด ์ฆ๊ธฐ๋ฉฐ ๋ง๋ ์ฅ๋๊ฐ์
๋๋ค.
**๋ผ์ด๋ธ โ [oiia.velopert.com](https://oiia.velopert.com)**
---
Oiiai Keyboard๋ ๋ฐ์ด๋ด ๋ฐ *oiiai ๊ณ ์์ด*๋ฅผ ๊ฐ์ง๊ณ ๋ง๋ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ๋ฎค์ง์ปฌ ํ ์ด์
๋๋ค. ํค๋ณด๋๋ฅผ ๋๋๋ฆฌ๋ฉด ์์ ์ด ํฐ์ง๊ณ , DJ ์ดํํธ๊ฐ ์๊ณ , ํ๋ฉด ์ฌ๊ธฐ์ ๊ธฐ๋ก ๊ณ ์์ด๊ฐ ํฉ๋ฟ๋ ค์ง๋๋ค. ํค๋ณด๋๋ฅผ ์์ DJ ํจ๋๋ก ๋ฐ๊ฟ๋์ ๋ฏํ ๋ฌผ๊ฑด โ 60๊ฐ ๋๋ DJ ์ดํํธ, BPM ํํ์ด์ฆ, ์ธ์
๋
นํ, ํ๋ฆฌ์
๊ณต์ , ๊ทธ๋ฆฌ๊ณ ๋๋ฅผ ๋๋ง๋ค ํฐ์ง๋ ๊ณ ์์ด ๋ถ๊ฝ๋์ด.
## ๊ธฐ๋ฅ
- **์ํ ํค 7๊ฐ** โ `o` / `i` / `a` (์งง์ ์์ ) + `q` / `w` / `e` / `r` (๊ธด ์ํ, ๊ฐ๊ฐ ๋ค๋ฅธ ๊ณ ์์ด ์ฐ์ถ)
- **DJ ์ฌ๋กฏ 9๊ฐ** (1โ9) โ 60๊ฐ ์ด์์ ์ค๋์ค ์ดํํธ ์ค์์ ๊ณ ๋ฅด๊ธฐ: distort, vinyl, siren, reverb, chop, drumroll, sub drop, granular, โฆ
- **Tap-tempo BPM** + 16๋ถ์ํ ๊ธฐ์ค FX ํํ์ด์ฆ
- **Loop layer** โ ์ฐ์ฃผ๋ฅผ ๋
น์ํด์ ๋ฐฐ๊ฒฝ์ ๊น๊ณ , ๊ทธ ์์ live ์ฐ์ฃผ
- **์ํด๋ฆญ Make Clip** โ ~10์ด์ง๋ฆฌ WebM ๋น๋์ค๋ก FX ์บ๋ฒ์ค + ์ค๋์ค๋ฅผ ํจ๊ป ์ ์ฅ
- **๊ณต์ ๊ฐ๋ฅํ URL ํ๋ฆฌ์
** โ BPM + DJ ๋งคํ + ์ธ๊ทธ๋จผํธ ํ๋์ ํด์์ ์ธ์ฝ๋ฉ
- **๋ชจ๋ฐ์ผ ์ฐ์ DJ ํจ๋ ๋ชจ๋** โ 3ร3 ๊ทธ๋ฆฌ๋, ํฐ์น ์ต์ ํ, ํ์ด์ง ์คํฌ๋กค ์ ๊ธ
- **Advanced ๋ชจ๋** โ ํํ ์ธ๊ทธ๋จผํธ ํธ์ง, ์ฌ๋กฏ๋ณ ๋ณผ๋ฅจ, ๋ง์คํฐ ๋ฆฌ๋ฏธํฐ, ํ๋ฆฌ์
๊ฐค๋ฌ๋ฆฌ
- **๋คํฌ / ๋ผ์ดํธ ํ
๋ง**, **ํ๊ธ / ์๋ฌธ ์ ํ**, ํค๋ณด๋ ์ ๊ทผ์ฑ, `prefers-reduced-motion` ๋์
## Claude Code๊ฐ `/loop` ๋ฐฉ์์ผ๋ก ๋ง๋ ํ๋ก์ ํธ
์ด ์ฑ์ ์ ๋ถ **[Claude Code](https://www.anthropic.com/claude-code)** ๊ฐ ์์จ **`/loop` ๋ชจ๋**๋ก ์์ฑํ์ต๋๋ค. Claude๊ฐ 130๋ฒ์ ๋ฃจํ๋ฅผ ๋๋ฉด์, ๋งค ๋ฃจํ๋ง๋ค ๋์ ๋ณด์ด๋ ์๊ณ ๋๋ ๋ณํ ํ๋๋ฅผ ๋จ๊น๋๋ค. ์ฌ๋(์ )์ ์งง์ ํ ์ค ํผ๋๋ฐฑ์ผ๋ก ๋ฐฉํฅ๋ง ์ก๊ณ , Claude๊ฐ ๊ตฌํ โ Playwright ๊ฒ์ฆ โ ์ปค๋ฐ โ ๋ค์ ๋ฃจํ๋ก ์ด์ด๊ฐ๋ ๊ตฌ์กฐ.
์ ์ฒด ๊ฐ๋ฐ ๊ธฐ๋ก์ **[oiia.velopert.com/blog](https://oiia.velopert.com/blog)** ์์ ์ฝ์ ์ ์์ต๋๋ค โ ํ๋กค๋ก๊ทธ, 9๊ฐ ๋ฃจํ ๋ธ๋ก, ์ํ๋ก๊ทธ๊น์ง ์ด 11ํธ. ํ๊ตญ์ด/์์ด ๋์ ์ ๊ณต. ํนํ ์ํ๋ก๊ทธ("130 ๋ฃจํ ๋์์")๋ ์ด ์์
๋ฐฉ์์ ํ๊ณ์ ๋ํ Claude์ ํ๊ณ ๋ผ์ ํ ๋ฒ ์ฝ์ด๋ณผ ๋งํฉ๋๋ค.
## ์คํ
- **Vite** + ๋ฐ๋๋ผ JS โ ํ๋ ์์ํฌ ์์
- **Web Audio API** ๋ก ๋ชจ๋ ํฉ์ฑ ยท ์ดํํธ ยท ๋
น์
- **Canvas** ๋ก ์๊ฐ FX
- **Playwright** ๋ก E2E ํ๊ท ํ
์คํธ (๋ฐ์คํฌํ + ๋ชจ๋ฐ์ผ ๋ทฐํฌํธ)
- **Cloudflare Pages** ๋ก ํธ์คํ
- ๊ฐ๋ฐ์ผ์ง์ฉ ์ ์ ๋ธ๋ก๊ทธ ๋น๋ (`scripts/build-blog.js`)
## ๊ฐ๋ฐ
```bash
npm install
npm run dev # http://localhost:5174
npm run build # ๋ธ๋ก๊ทธ + ์ฑ โ dist/
npm run build:blog # ๋ธ๋ก๊ทธ๋ง โ public/blog/
npm run test # Playwright ํ๊ท
```
## ๋ฐฐํฌ
```bash
npm run build
npx wrangler pages deploy dist --project-name oiiai --branch main
```
`.env`์ `CLOUDFLARE_API_TOKEN`, `CLOUDFLARE_ACCOUNT_ID` ํ์.
## ํฌ๋ ๋ง
- **Oiiai Cat** โ ์ธํฐ๋ท
- **Human** โ ๋ฐฉํฅ ์ง์, ํผ๋๋ฐฑ, ํ๋ ์ด์
, ๋ฐฐํฌ, ๊ทธ๋ฆฌ๊ณ ๊ณ ์์ด GIF ํ๋
- **Claude Code (Opus 4.7, 1M context)** โ ์ฝ๋ ์์ฑ, ํ ๋ฒ์ ํ ๋ฃจํ์ฉ
## ๋ผ์ด์ ์ค
MIT. ๊ณ ์์ด๋ ์ ๊ฒ์ด ์๋๋๋ค.