AutonomousVehicleControlBeginnersGuide
Python sample codes and documents about Autonomous vehicle control algorithm. This project can be used as a technical guide book to study the algorithms and the software architectures for beginners.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
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, на панели — карточка с прогрессом.
This is the beginning of the README. Read the rest at the original. Read the full README ↗