ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Асабісты слоўнік: беларускае слова ці выраз кірыліцай і лацінкай, пераклад на ангельскую і рускую, малюнак, камент і тэгі.
Стэк: Next.js 16 (App Router, Server Actions), Supabase (Postgres, Storage, Auth), Tailwind CSS 4, дэплой на Vercel.
supabase/schema.sql і націсніце Run. Гэта створыць табліцу words, bucket images і правілы доступу: чытаць могуць усе, пісаць толькі аўтарызаваныя.supabase/seed.sql, каб дадаць пачатковыя словы.Project URL і публічны ключ (anon ці publishable).cp .env.example .env.local
Запоўніце NEXT_PUBLIC_SUPABASE_URL і NEXT_PUBLIC_SUPABASE_ANON_KEY у .env.local, потым:
npm install
npm run dev
Адкрыйце http://localhost:3000, увайдзіце і дадайце першае слова.
NEXT_PUBLIC_SUPABASE_URL і NEXT_PUBLIC_SUPABASE_ANON_KEY. Ключ SUPABASE_SERVICE_ROLE_KEY і GEMINI_API_KEY у Vercel дадаваць не трэба, яны патрэбныя толькі лакальнаму скрыпту.Уручную. Згенеруйце малюнак у дадатку Gemini (Nano Banana) ці ў Whisk, спампуйце і загрузіце праз форму слова.
Пачкамі праз дадатак Gemini, без API. Gem «Беларускія карткі» малюе малюнкі ў адным стылі па спісе слоў, а скрыпты рыхтуюць спіс і загружаюць спампаваныя малюнкі на сайт. Падрабязна ў docs/gemini-gem.md.
npm run images:batch -- 10
npm run images:upload -- images-batch/<папка>
Аўтаматычна праз Gemini API. Скрыпт бярэ апублікаваныя словы без малюнка, генеруе ілюстрацыю ў адзіным стылі, сціскае яе ў WebP 768×768 і захоўвае ў Supabase Storage. Чарнавікі прапускаюцца.
.env.local дадайце GEMINI_API_KEY і SUPABASE_SERVICE_ROLE_KEY (Project Settings → API → service_role). Гэты ключ дае поўны доступ да базы, не публікуйце яго.npm run generate-images -- 5 --dry-run
npm run generate-images -- 5
Стыль малюнкаў задаецца зменнай IMAGE_STYLE у .env.local. Мадэлі задаюцца праз GEMINI_IMAGE_MODELS спісам праз коску, па змаўчанні gemini-3.1-flash-image,gemini-2.5-flash-image. Калі мадэль недаступная, скрыпт бярэ наступную.
Скрыпт чытае HTML-экспарт канала, дзе кожнае паведамленне пачынаецца радком «Кірыліца / Lacinka / English / Русский». Тлумачэнне і цытата трапляюць у камент, дата паведамлення становіцца датай дадання, кожнае слова атрымлівае тэг verbarium. Паведамленні без такога радка прапускаюцца, а словы, якія ўжо ёсць у базе, не дублююцца.
npm run import-telegram -- words/messages2.html --dry-run
Калі ў .env.local ёсць SUPABASE_SERVICE_ROLE_KEY, скрыпт без --dry-run запісвае словы наўпрост у базу. Без ключа ён стварае побач SQL-файл, які трэба выканаць у Supabase SQL Editor.
Папка words/ і файл Словы.txt не трапляюць у git.
Скрыпт раз на дзень чытае публічныя каналы са спіса src/lib/telegram-channels.ts і дадае новыя словы і выразы ў базу. Уваход у Telegram не патрэбны: чытаецца вэб-версія канала t.me/s/<канал>.
Як разбіраюцца пасты
autoPublishExact: true такія словы публікуюцца адразу.readImages: false.scripts/telegram/lacinka.ts, а не ШІ./drafts, дзе кожнае можна апублікаваць, выправіць ці выдаліць.Падрыхтоўка, адзін раз
supabase/migrations/2026-10-11_telegram_sync.sql у Supabase SQL Editor.SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, GEMINI_API_KEY.Пасля гэтага workflow .github/workflows/sync-telegram.yml запускаецца сам штодня а 05:23 UTC. Запусціць уручную можна на ўкладцы Actions → Сінхранізацыя Telegram → Run workflow.
Лакальны запуск
npm run sync-telegram -- --dry-run
Без --dry-run скрыпт запісвае ў базу. Іншыя параметры: --channel <назва> для аднаго канала і --pages <N> для глыбіні першага запуску.
Ліміты Gemini. Бясплатны тарыф дае каля 20 запытаў на дзень на мадэль. Скрыпт траціць адзін запыт на пачку пастоў і пры вычарпанні бярэ наступную мадэль са спіса. Калі ліміт скончыўся ва ўсіх мадэлях, ён спыняецца і наступным разам працягвае з таго ж паста.
Як дадаць канал. Дапішыце радок у src/lib/telegram-channels.ts: з назвай, апісаннем і тэгам. Канал мусіць быць публічным. Ён адразу з'явіцца і ў спасылках унізе сайта.
supabase/schema.sql схема базы і палітыкі доступу
supabase/seed.sql пачатковыя словы
supabase/migrations/ змены схемы для ўжо створанай базы
src/proxy.ts абнаўленне сесіі, абарона старонак дадання і рэдагавання
src/lib/supabase/ кліенты Supabase для браўзера і сервера
src/lib/words.ts запыты да табліцы words
src/app/page.tsx спіс слоў з пошукам
src/app/words/[id]/page.tsx старонка слова
src/app/words/new/page.tsx дадаць слова
src/app/words/[id]/edit/ рэдагаваць слова
src/app/words/actions.ts Server Actions: стварэнне, абнаўленне, выдаленне
src/app/login/ уваход і выхад
src/components/WordForm.tsx форма з загрузкай малюнка наўпрост у Storage
scripts/generate-images.ts пакетная генерацыя малюнкаў праз Gemini
scripts/import-telegram.ts імпарт слоў з экспарту Telegram
scripts/sync-telegram.ts штодзённая сінхранізацыя з каналаў
scripts/telegram/ спіс каналаў, чытанне, разбор, лацінка
.github/workflows/ расклад запуску ў GitHub Actions
src/app/drafts/page.tsx чарга чарнавікоў