ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Using for English
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗世界のニュースを題材に、AIと英語で話して練習するアプリ。
| 変数名 | 用途 | 公開してよいか |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | Supabase のURL(ビルド時に supabase-config.js へ書き出し) | ○ |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase の公開キー(同上) | ○ |
GNEWS_API_KEY | GNews のAPIキー。api/news.js だけが使う | ✕ 絶対にブラウザ側に出さない |
ANTHROPIC_API_KEY | Claude API のキー。api/chat.js だけが使う | ✕ 絶対にブラウザ側に出さない |
SUPABASE_SECRET_KEY | AIの1日あたり利用回数を数えるためのサーバー専用キー(Supabaseの Secret key sb_secret_…。旧名 SUPABASE_SERVICE_ROLE_KEY も可) | ✕ 絶対にブラウザ側に出さない |
AI_DAILY_LIMIT(任意) | 1人1日あたりのAI呼び出し回数の上限。未設定なら60 | ○ |
AI_CHAT_MODEL / AI_SCORE_MODEL / AI_TRANSLATE_MODEL(任意) | 会話・採点・翻訳に使うモデル。未設定なら claude-haiku-5-5 / claude-sonnet-5-5 / claude-haiku-5-5 | ○ |
AZURE_SPEECH_KEY | Azure AI Speech のキー。api/tts.js だけが使う | ✕ 絶対にブラウザ側に出さない |
AZURE_SPEECH_REGION | Azure AI Speech のリージョン(例: japaneast) | ○ |
ELEVENLABS_API_KEY(任意) | ElevenLabs の API キー。設定すると、AI の発言など長めの文を ElevenLabs の声で読む(短い語句・上限超過・エラー時は Azure) | ○ |
ELEVENLABS_MODEL(任意) | ElevenLabs のモデル。既定 eleven_flash_v2_5 | — |
ELEVENLABS_DAILY_CHARS(任意) | 1人1日あたり ElevenLabs で読む文字数の目安。既定 5000(超えた分は Azure) | — |
ELEVENLABS_MIN_CHARS(任意) | この文字数以上の文だけ ElevenLabs で読む。既定 40 | — |
ELEVENLABS_VOICES(任意) | 声の差し替え・追加(JSON)。"ID:表示名" を若い声・中くらい・年配の順に。例 {"in":{"female":["ID1:Priya","ID2:Ananya"]},"au":{"female":["ID3:Zoe"]}} | — |
TTS_DAILY_CHAR_LIMIT(任意) | 1人1日あたりの Azure 読み上げ文字数の上限。未設定なら20000 | ○ |
STRIPE_SECRET_KEY | Stripe の秘密キー(sk_test_… / sk_live_…)。lib/billing.js だけが使う | ✕ 絶対にブラウザ側に出さない |
STRIPE_WEBHOOK_SECRET | Stripe の Webhook の署名シークレット(whsec_…) | ✕ 絶対にブラウザ側に出さない |
STRIPE_PRICE_MONTHLY / STRIPE_PRICE_YEARLY | Pro の料金ID(price_…)。月額990円・年額9,900円 | ○ |
BILLING_ENABLED | true のときだけ課金(無料プランの制限と Pro の申込み)を有効にする。β公開中は設定しない | ○ |
APP_URL(任意) | サイトのURL(例: https://xxx.azurestaticapps.net)。決済後に戻る先に使う | ○ |
/api/chat を呼ぶ。api/chat.js がログイン状態を Supabase で確認し、
利用回数を数えてから Claude API を呼ぶ。キーはサーバー側にだけ置かれる。claude.use('sample') を使う(自動で切り替わる)。supabase/ai_usage.sql を
Supabase の SQL Editor で一度だけ実行する。SUPABASE_SECRET_KEY が未設定なら上限なしで動く。/api/news?cat=経済 や /api/news?q=サッカー を呼ぶだけで、GNews のキーは持たない。api/news.js(Vercel の関数)が GNews を呼び、結果を Vercel の CDN に1時間キャッシュする。
同じカテゴリ・同じ検索語へのアクセスは1時間に1回しか GNews に届かない。/api/news が使えない環境(claude.ai のプレビュー、キー未設定など)では、index.html に内蔵の記事で動く。index.html に書き、i18n.js が表示時に利用者の言語へ置き換える。
JS が後から差し込む文言も自動で訳される。数値などを含む文は t('今日練習しないと {n}日の記録が途切れます', {n}) のように書く。?lang= → 画面右上で選んだ言語(ns_lang)→ ブラウザの言語」の順で決まる。
ブラウザの言語に日本語・韓国語・繁体字中国語・フランス語・スペイン語のどれも含まれない人(それ以外の国・地域)は英語版になる。i18n/source/strings_ui.py(画面・メッセージ)と i18n/source/strings_pages.py(紹介・使い方)に
「日本語|韓国語|繁体字|フランス語|スペイン語」の表で並べてある。編集後に
python3 i18n/source/build.py を実行すると i18n/<言語>.js が作り直される(差し込み位置やタグの食い違いもチェック)。i18n/source/strings_en.py に「日本語の原文 → 英語」で並べてある(build.py が漏れを検出する)。/api/tts 経由で Azure AI Speech のニューラル音声を使う。スピーカー設定の地域(アメリカ・イギリス・インド・オーストラリア)・性別・年齢・速さ・音量が反映される。api/tts.js の VOICE_PREFS。AZURE_SPEECH_KEY が未設定、1日の上限に達した、通信に失敗した、のいずれかのときは、自動でブラウザの音声に切り替わる。supabase/tts_usage.sql を SQL Editor で一度だけ実行する(未実行なら上限なし)。AI_DAILY_LIMIT と TTS_DAILY_CHAR_LIMIT。BILLING_ENABLED=true と Stripe の設定(秘密キー・2つの料金ID)が揃うまでは課金は無効で、全員が Pro と同じ扱いになる(β公開中はこの状態)。/api/account/delete)。Pro の契約の解約・学習データ・アカウントを削除する。contact_messages テーブルに [β感想] 付きで保存される。/api/billing/webhook)で
Supabase の subscriptions テーブルに書き写す。必要な SQL は supabase/billing.sql。legal/terms.html(利用規約)、legal/privacy.html(プライバシーポリシー)、legal/tokushoho.html(特定商取引法に基づく表記)。
【屋号】などの黄色い箇所は公開前に埋める。npm run build:azure で dist/ にまとめて公開する。サーバー処理は azure-api/(Azure Functions)から api/ と lib/ をそのまま使う
(azure-api/adapter.js が Vercel 形式の関数を Azure の形式につなぐ)。.github/workflows/azure-static-web-apps-brave-river-05d4a2f1e.yml(Azure が作成)が自動で公開する。
ビルド時に GitHub の Variables NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY を使う。news_cache テーブルに6時間保存して GNews の呼び出し回数を抑える(Azure は API の応答を CDN に保存しないため)。i18n/*.js を直接書き換えず、i18n/source/strings_*.py に行を追加して python3 i18n/source/build.py を実行する(i18n/*.js は自動生成のため上書きされる)。scripts/build-static.mjs の PUBLIC に加える。漏れていると公開時のチェックで止まる。.png の元画像と一緒に、軽い .webp を置いて HTML からは .webp を読み込む。同じ名前の .webp がある .png は公開されない。analytics.js の CONFIG に Google アナリティクス 4 の測定ID・Meta ピクセルID・LinkedIn パートナーIDを入れると有効になる(空なら何も読み込まない)。page_view、sign_up(登録)、login、start_practice、complete_practice(採点あり)、wtp_vote(有料でも使いたいか)、send_feedback。
Meta には sign_up を標準イベント CompleteRegistration として送る。LinkedIn はコンバージョンIDを linkedinConversions に入れたものだけ送る。Europe/...)の人には同意バナーを出し、同意するまで読み込まない。「Cookie の設定」(紹介ページ下・アカウント設定)でいつでも変更できる。