ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Учи слова эффективно с интервальным повторением
Translation pending
EducationTypeScript · JavaScriptGitHub @BaYa06OnlineOwner 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.
Приложение для изучения с помощью флеш-карточек с системой интервальных повторений (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) доступ - данные хранятся в объектах, не массивахRead the full 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.