ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
小学生が音楽を通して、試行錯誤と表現を学ぶための創作環境。 音楽は手段であって主題ではありません。学ぶのは「自分の意図を持ち、直しながら近づけていくこと」です。 価値の単位は完成した曲ではなく試した回数——だからこのアプリは、 子どもが曲を手に入れるためではなく、自分で作れるようになるために設計されています。 低い床(数秒で音が出る)と高い天井(近づいていく先がある)を両立させ、 その間にある制約は、子どもが育つにつれて自分で外していく足場として扱います。 設計上の非目標(意図的にやらないこと)は CLAUDE.md を参照してください。README 전문 보기 ↗
小学生が音楽を通して、試行錯誤と表現を学ぶための創作環境。
音楽は手段であって主題ではありません。学ぶのは「自分の意図を持ち、直しながら近づけていくこと」です。 価値の単位は完成した曲ではなく試した回数——だからこのアプリは、 子どもが曲を手に入れるためではなく、自分で作れるようになるために設計されています。
低い床(数秒で音が出る)と高い天井(近づいていく先がある)を両立させ、 その間にある制約は、子どもが育つにつれて自分で外していく足場として扱います。
設計上の非目標(意図的にやらないこと)は CLAUDE.md を参照してください。
/discoveries): 出会った生き物の図鑑。未発見はシルエット。採点も順位付けもしない/teacher): 先生のみ。誰がどの曲を作ったかの確認と、不適切な曲の非表示(可逆)。児童には保存時に「先生に見える」ことを明示| 操作 | 動作 |
|---|---|
| 空セルをクリック | メロディノート追加(duration=1) |
| ノートをクリック | ノート削除 |
| ノート始点からドラッグ | 持続時間を変更 |
| ドラム行をクリック | ヒットのトグル |
| ⚙ せってい | 設定パネルの開閉 |
| パス | 内容 |
|---|---|
/ | 作曲エディタ |
/discoveries | おとのずかん(出会った生き物のアルバム) |
/songs | みんなの曲一覧(SNS 風フィード) |
/teacher | 先生ページ(先生のみ。誰が作ったかの確認と非表示) |
保存した曲は /songs に表示され、「あそぶ」ボタンで /?load=<id> 経由でエディタに読み込まれます。古い形式で保存された曲は読み込み時に現行モデルへ自動移行されます。
src/
├── app/
│ ├── components/ # Header, SettingsPanel, Grid, NotePanel, SaveModal
│ │ ├── discovery/ # 出会い演出・図鑑エントリ UI
│ │ ├── companion/ # いっしょにつくる(同伴キャラ)UI
│ │ └── challenges/# お題の選択・演出 UI
│ ├── discoveries/ # おとのずかん(アルバム)ページ
│ ├── songs/ # みんなの曲一覧ページ
│ ├── teacher/ # 先生ページ(先生のみ・モデレーション)
│ ├── styles/ # 機能別に分割したグローバル CSS(base/header/settings/grid/…)
│ ├── layout.tsx
│ ├── page.tsx # 作曲エディタ(状態の配線とコンポーネント合成)
│ └── globals.css # styles/ を @import するエントリ
├── core/ # 型定義・純粋関数による状態操作 + 旧データ移行(DOM/Audio 非依存)
├── discovery/ # 何を見つけたかの判定(純粋ロジック・DOM/Audio 非依存)
│ └── rules/ # 和音・メロディ・リズム別の検出ルール
├── creatures/ # 見つけたものを「どう見せるか」(絵・名前・演出)。検出はしない
├── challenges/ # お題のカタログと、曲に応じた場面の反応
├── audio/ # Web Audio エンジン(先読みスケジューリング)
├── ui/ # 色・グリッド表示・音名表記(ドレミ)ヘルパー
├── hooks/ # 状態・操作・発見フィードバックを配線するカスタムフック
└── lib/ # Supabase クライアント、DBリポジトリ、i18n 翻訳定義
src/core/* は 純粋・不変(DOM/AudioContext/時刻に非依存)"C4", "F#3" など)で保持totalSteps(song) から導出(blocks × stepsPerBeat)。再生・グリッド描画ともここを参照Vercel(または .env)に以下を設定してください:
NEXT_PUBLIC_SUPABASE_URL=https://<project-ref>.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=<anon-key>
pnpm install
pnpm dev # http://localhost:3000
pnpm lint # ESLint
pnpm test # Vitest(コアのユニットテスト)
pnpm format # Prettier
/songs は匿名で読み書きできる公開フィード。安全対策は2層:
src/lib/validation.ts — タイトル/作者名の長さ・空チェック、NGワード、曲データのサイズ上限。保存前に検証してエラー表示。supabase/migrations/0001_harden_songs_feed_safety.sql — CHECK 制約(長さ/サイズ)、hidden モデレーション列、RLS で公開は「表示中の行」のみ読み書き可。匿名は更新/削除不可。不適切な曲を隠す(サービスロール / SQL エディタ):
update public.songs set hidden = true where id = '<uuid>'; -- 非表示
update public.songs set hidden = false where id = '<uuid>'; -- 復帰
未対応(#31): レート制限(エッジ関数が適切。素朴なDBトリガーは授業中の同時保存を阻害するため不可)、通報フロー(reports テーブル+通報ボタン)。