ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
A classroom-friendly grid-based song maker
Translation pending
EducationTypeScript · CSSGitHub @TIshowOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
小学生が音楽を通して、試行錯誤と表現を学ぶための創作環境。 音楽は手段であって主題ではありません。学ぶのは「自分の意図を持ち、直しながら近づけていくこと」です。 価値の単位は完成した曲ではなく試した回数——だからこのアプリは、 子どもが曲を手に入れるためではなく、自分で作れるようになるために設計されています。 低い床(数秒で音が出る)と高い天井(近づいていく先がある)を両立させ、 その間にある制約は、子どもが育つにつれて自分で外していく足場として扱います。 設計上の非目標(意図的にやらないこと)は CLAUDE.md を参照してください。Read the full 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 テーブル+通報ボタン)。