An open API service indexing awesome lists of open source software.

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.

Awesome Lists containing this project

README

          

# Oiiai Keyboard

[๐Ÿ‡บ๐Ÿ‡ธ English README](./README.md)

![Oiiai Keyboard](./public/og.png)

> ์„ธ์ƒ์— ์ „ํ•˜๋Š” ์•ˆ๋ถ€: ํ์—… 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. ๊ณ ์–‘์ด๋Š” ์ œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.