ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Приложение для изучения с помощью флеш-карточек с системой интервальных повторений (SRS). 1. Zustand + Immer - минимальные ре-рендеры, иммутабельность 2. MMKV Storage - самое быстрое локальное хранилище для RN 3. React.memo - мемоизация компонентов 4. FlatList с оптимизациями: • removeClippedSubviews • maxToRenderPerBatch • windowSize 5. Reanimated 2 - анимации на UI потоке (60 FPS) 6. O(1) доступ - данные хранятся в объектах, не массивахREADME 전문 보기 ↗
Приложение для изучения с помощью флеш-карточек с системой интервальных повторений (SRS).
npm install
cd ios && pod install && cd ..
npm run ios
npm run android
src/
├── components/ # UI компоненты
│ ├── common/ # Переиспользуемые компоненты (Button, Input, Text)
│ └── cards/ # Компоненты карточек (FlashCard, SetCard)
│
├── screens/ # Экраны приложения
│ ├── HomeScreen # Главный экран со списком наборов
│ ├── StudyScreen # Экран изучения карточек
│ ├── SetDetailScreen # Детали набора
│ └── ...
│
├── navigation/ # Навигация (React Navigation)
│
├── store/ # Состояние приложения (Zustand)
│ ├── cardsStore # Управление карточками
│ ├── setsStore # Управление наборами
│ ├── studyStore # Сессия изучения
│ └── settingsStore # Настройки и тема
│
├── services/ # Бизнес-логика
│ ├── SRSService # Алгоритм интервальных повторений
│ ├── StorageService # Локальное хранилище (MMKV)
│ └── DatabaseService # Персистентность данных
│
├── types/ # TypeScript типы
├── constants/ # Константы (цвета, отступы, конфиг)
├── hooks/ # Кастомные хуки
└── utils/ # Утилиты
removeClippedSubviewsmaxToRenderPerBatchwindowSizeВесь интерфейс следует брендбуку: plan/done/brandbook.md — цвета, шрифты, отступы, иконки, компоненты, тексты.
Создание:
npm run new:screen -- Achievements # → src/screens/AchievementsScreen.tsx из шаблона
Шаблон — src/screens/templates/ScreenTemplate.tsx: каркас, состояния загрузки, ошибки и пустого экрана, закреплённая кнопка. Дальше:
src/types/navigation.tssrc/navigation/AppNavigator.tsxsrc/screens/index.tsЧек-лист перед коммитом:
Screen + ScreenHeader; кнопки, поля, списки, окна — только из @/components/uiuseThemeColors(): никаких '#…', rgba, isDark ? …; кнопки с текстом — primaryFill + onPrimary<Text variant="…">: размеры шкалы (12–40), не меньше 12, веса 400 / 600 / 700spacing и borderRadius (только s / m / l / xl / full)lucide-react-native, без эмодзи (исключения — флаги языков и панель вкладок на Ionicons)Skeleton; ошибка — ErrorState; пусто — EmptyState с подсказкой, что сделать дальшеtoast; опасное подтверждение — confirmDialog; системный Alert — только для вопросов с выборомaccessibilityLabel, у выбора — accessibilityState, зона нажатия ≥ 44 (hitSlop)pluralize из @/utilsАвтопроверка: npm run brand:check — таблица нарушений (-- --details <путь> — по строкам). Перед коммитом и в CI (Codemagic, GitHub Actions) запускается --fail-on-new: коммит и сборка не проходят, если нарушений стало больше, чем в снимке scripts/brand-baseline.json. Хук ставится сам на npm install (или npm run hooks:install). Когда нарушений стало меньше — обновите снимок: npm run brand:check -- --update-baseline.
src/components/[category]/index.tssrc/store/src/store/index.tsГотовые наборы по учебникам: Книга → Юнит → Набор. Книги загружаются локальными скриптами из scripts/ напрямую в Neon. Скрипты не входят в приложение. План: plan/book_catalog_plan.md.
В .env.local должны быть:
DATABASE_URL_UNPOOLED — строка подключения к Neon.ADMIN_USER_ID — UUID пользователя с users.is_admin = true. Он будет владельцем официальных наборов.npx tsx scripts/create-book-template.ts # → templates/book_template.xlsx
Один файл = одна книга. В шаблоне есть лист «Инструкция».
Лист «Книга» — одна строка:
| title | edition | level | subject | language_from | language_to | publisher |
|---|---|---|---|---|---|---|
| Solutions Pre-Intermediate | 3rd | A2 | English | en | ru | Oxford |
Обязательные поля: title, language_from (язык изучения) и language_to (язык перевода: ru, ky).
Лист «Карточки» — одна строка на одно слово:
| unit | unit_title | pages | term | translation | example |
|---|---|---|---|---|---|
| 1 | Feelings | 8–17 | happy | счастливый | I'm happy to see you. |
unit, unit_title и pages повторяйте в каждой строке юнита одинаково.term и translation обязательны.translation и example можно менять когда угодно, прогресс учеников сохранится. Если исправить term, получится новая карточка.npx tsx scripts/import-book.ts book.xlsx --dry-run # проверка + отчёт, база не меняется
npx tsx scripts/import-book.ts book.xlsx # импорт (новая книга — черновик)
--prune удаляет их после подтверждения y. Вместе с карточками удаляется прогресс учеников по ним.npx tsx scripts/publish-book.ts "Solutions Pre-Intermediate" "3rd" # видна всем
npx tsx scripts/publish-book.ts "Solutions Pre-Intermediate" "3rd" --unpublish # снова черновик
Опубликовать можно и сразу при импорте, флагом --publish.
keystore_credentials переменные: CM_KEYSTORE_BASE64 (base64 от release keystore), CM_KEYSTORE_PASSWORD, CM_KEY_ALIAS, CM_KEY_PASSWORD.base64 my-release-key.keystore > keystore.b64 и вставьте содержимое в CM_KEYSTORE_BASE64.codemagic.yaml, workflow android-apk использует Node 18 / Java 17, декодирует keystore и запускает ./gradlew clean assembleRelease.android/app/build/outputs/apk/release/app-release.apk.