ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
Keçmiş DİM imtahan sualları mövzu və tiplərə bölünüb: hər tipin neçə dəfə çıxdığını və test toplusunun hansı səhifəsində olduğunu gör.
Translation pending
EducationHTML · PLpgSQLGitHub @elvinc1992-creatorOnlineOwner 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.
Подготовка к экзаменам DİM на основе статистики. Next.js 16 (App Router) + TypeScript + Tailwind 4 + Turso (libSQL) + Drizzle + Auth.js v5. Письма в разработке не отправляются: EMAIL_PROVIDER=console печатает их в терминал npm run dev и сохраняет в .dev-mail/ (ссылки подтверждения и сброса пароля берите оттуда). 2vur2.az (регистратор online.az) подключён к проекту imtahan-app; www.2vur2.az → 308 на `2vur2.aRead the full README ↗
Подготовка к экзаменам DİM на основе статистики. Next.js 16 (App Router) + TypeScript + Tailwind 4 + Turso (libSQL) + Drizzle + Auth.js v5.
cp .env.example .env.local # заполнить значения (см. ниже)
npm install
npm run db:migrate # применить миграции к Turso
npm run dev # http://localhost:3000
Письма в разработке не отправляются: EMAIL_PROVIDER=console печатает их в терминал npm run dev и сохраняет в .dev-mail/ (ссылки подтверждения и сброса пароля берите оттуда).
| Команда | Что делает |
|---|---|
npm run dev / build / start | Next.js |
npm run lint / typecheck / format | ESLint, TypeScript, Prettier |
npm test | Unit-тесты (Vitest) |
npm run test:e2e | E2E (Playwright в системном Google Chrome). Тестовые пользователи e2e+…@example.test удаляются после прогона |
npm run db:generate | Новая миграция из src/db/schema.ts → db/migrations/ |
npm run db:migrate / db:studio | Применить миграции / открыть Drizzle Studio |
| Переменная | Назначение |
|---|---|
TURSO_DATABASE_URL, TURSO_AUTH_TOKEN | База Turso (turso db show <db> --url, turso db tokens create <db>) |
AUTH_SECRET | Ключ подписи сессий: openssl rand -base64 33 |
AUTH_TRUST_HOST | true вне Vercel (локальный next start) |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Google-вход (пока не подключён; пусто — кнопка скрыта) |
APP_URL | Публичный адрес для ссылок в письмах (production: https://2vur2.az) |
EMAIL_PROVIDER, EMAIL_FROM | console (реальный провайдер позже) |
CAPTCHA_PROVIDER | none (провайдер позже) |
FEATURE_GUARDIAN_CONSENT | Шаг для родителя (<18). Выключен до решения юриста |
NEXT_PUBLIC_TELEGRAM_URL, NEXT_PUBLIC_INSTAGRAM_URL | Ссылки на каналы. Пусто — на главной вместо Telegram/Instagram показываются «Pulsuz başla» и «Statistikaya bax» |
2vur2.az (регистратор online.az) подключён к проекту imtahan-app; www.2vur2.az → 308 на 2vur2.az. У online.az можно менять только DNS-серверы, поэтому DNS ведёт Vercel: ns1.vercel-dns.com, ns2.vercel-dns.com. Записи (A и т. д.) Vercel создаёт сам; почтовые MX/TXT, если появятся, добавляются в Vercel → Domains.
src/
app/(auth)/ вход, регистрация, подтверждение почты, сброс пароля + server actions
app/api/auth/ Auth.js и ссылка подтверждения почты
auth.ts Auth.js (Credentials, JWT); auth.config.ts — лёгкая часть для proxy
proxy.ts редирект с защищённых страниц (основная проверка — на сервере)
components/ UI по дизайн-системе (кнопки, поля, пароль, сегменты, алерты…)
config/ бренд, реальные цифры, флаги
content/az.ts все тексты интерфейса
db/ схема Drizzle и подключение к Turso
lib/ пароли (argon2id), токены, rate limit, письма, CAPTCHA
db/migrations/ SQL-миграции
e2e/ Playwright-тесты
Пока нет Excel и банка вопросов, экраны приложения работают на демо-данных из дизайна (src/lib/demo/):
content.ts — темы, 70 вопросов дня (7 тем × 10), 4 пробных экзамена × 25 вопросов (без ответов);keys.ts — ответы и решения, только на сервере (в браузер уходят после ответа);state.ts — прогресс пользователя в httpOnly-cookie (покупки, ответы, результаты, подписка);actions.ts — server actions: ответ на вопрос дня, старт/автосохранение/завершение экзамена, mock-оплата, отмена подписки, сброс демо.Таймер экзамена считается от серверного времени старта. Письменные ответы проверяются вручную (в демо они «на проверке»), бал — демо-формула 4 балла за вопрос. Новый пользователь начинает с нуля и без подписки (бесплатный план): 0 / 70 вопросов дня, ни одного купленного экзамена, серия и прогресс по типам считаются из ответов. Сбросить всё к нулю: Профиль → «Demo məlumatlarını sıfırla».
Вопросы дня (/gunun-suallari — обзор всех тем с номерами 1–10, то же на панели): на бесплатном плане в каждой теме открыт только 1-й вопрос (FREE_DAILY_PER_TOPIC), остальные 9 — с замком и кнопкой «Abunə ol». Доступ проверяется на сервере: у закрытого вопроса текст, варианты и ссылка на сборник не попадают в HTML, server action ответ не принимает. Подписка — mock-оплата «Aylıq abunə» (/odenis), после неё открыты все 70. Переключатель «Pulsuz plan kimi bax» в Профиле показывает бесплатный вид и при активной подписке. Когда придут данные, src/lib/demo/ заменяется таблицами БД, экраны остаются.
Демо-аккаунт: npm run db:seed-demo (логин и пароль — DEMO_* в .env.local).
/)Лендинг по макету заказчика (Landing1 + Landing2): hero с живым топ-5 тем, цифры (вопросы, годы, темы, % найденных в сборнике 2025), «Necə işləyir», пример карточки (ответ не проверяется и не уходит в браузер — после выбора приглашение к регистрации), 8 самых частых тем, формат пробного экзамена, тарифы, блок учителя (заглушки), FAQ, CTA и тёмный футер.
Все цифры — из тех же SQL-представлений, что и /statistika. Страница статическая и обновляется раз в 10 минут (revalidate = 600); если база недоступна, блоки с цифрами скрываются. Тексты — src/content/az-landing.ts, компоненты — src/components/landing/.
/onlayn-repetitor)Вопросы, которые по анализу чаще всего попадают на экзамен (доля — REPETITOR_HIT_RATE в src/lib/repetitor/source.ts, сейчас 90 %, цифра из анализа заказчика). Только для подписчиков: на бесплатном плане — экран с замком и «Abunə ol», страницы вопросов редиректят туда, текст вопросов в HTML не попадает, server actions без подписки не работают.
Режим репетитора: вопрос → «İpucu» (подсказка приходит с сервера только по запросу) → проверка → «Repetitorun izahı» (пошаговое решение) → ссылка на сборник и статистику темы → следующий вопрос. Прогресс (ответ, верно/неверно, была ли подсказка) — в демо-cookie, на панели — карточка с прогрессом.
Сейчас данные — мок: src/lib/repetitor/mock.ts (5 самых частых тем × 4 вопроса, тексты свои). Когда появится админ-панель, меняется только src/lib/repetitor/source.ts (функции уже async: listRepetitorTopics, getRepetitorTopic, findRepetitorQuestion, getRepetitorKey) — страницы не трогаем. Формат вопроса — src/lib/repetitor/types.ts (тема = slug из статистики, тип, сколько раз выпадал, текст, варианты A–E, ссылка на сборник; отдельно на сервере — ответ, подсказка, шаги решения).
/sehvlerim)Собирает ошибки пользователя: вопросы дня (неверно или «Bilmirəm»), онлайн-репетитор, закрытые вопросы пробных экзаменов (неверный ответ; если вопрос экзамена совпадает с вопросом дня — это один вопрос). У каждой ошибки — «Sənin cavabın» / «Düzgün cavab» и ссылка на вопрос с решением; сгруппированы по темам. Вход — пункт бокового меню, карточка на панели, подсказка после неверного ответа.
«Səhvlərimi təkrar et» создаёт сессию (/sehvlerim/tekrar/[n]): каждая активная ошибка, после неё 0–2 похожих вопроса (сначала того же типа, потом той же темы; ещё не решённые — в приоритете), максимум 15 вопросов. Похожие берутся только из доступных пользователю (на бесплатном плане — открытые вопросы дня; репетитор — с подпиской; вопросы экзамена как «похожие» не даются). Верный ответ на ошибку отмечает её «Düzəldildi» (в следующую сессию она не попадает); неверный ответ на похожий вопрос добавляет его в ошибки. Код — src/lib/review/ (pool.ts — единая модель вопроса и ключи на сервере, mistakes.ts — список и сборка сессии, actions.ts).
/bal-simulyatoru)Каркас раздела, контент добавит заказчик. Выбор типа экзамена (сейчас доступен «Buraxılış · 11-ci sinif», «9-cu sinif» и «Qəbul» — «Tezliklə»), по каждому формату вопросов (13 закрытых, 5 кодируемых, 7 письменных) — количество верных ответов (поле и кнопки −/+), «Təxmini bal» пересчитывается сразу; на мобильном балл закреплён под шапкой. Расчёт — демо-формула (4 балла за верный ответ, как в результатах пробных экзаменов). Настоящие формулы DİM, новые типы экзаменов и тексты меняются в одном месте: src/lib/score/simulators.ts (правила) и az.app.score (тексты, блок «Bal necə hesablanır» — заглушка [...]). Доступен всем вошедшим пользователям; вход — боковое меню и плитка на панели.
/statistika)Данные — Excel-анализ DIM_riyaziyyat_YEKUN_statistika.xlsx (в репозиторий не коммитится, лежит в data/):
npm run stats:import # data/DIM_riyaziyyat_YEKUN_statistika.xlsx
npm run stats:import -- путь/к/файлу.xlsx
topics, «Bütün suallar» → exam_questions_stats (без текста вопросов), «Qeydlər» → stat_notes.db/migrations/0002_stats_views.sql, 0003_…): topic_stats, exam_stats, topic_exam_stats, topic_match_stats, topic_type_stats. Все цифры на странице берутся из них.nosniff, Referrer-Policy, X-Frame-Options, Permissions-Policy. CSP — на этапе 8.