shiping
An interview assistant and an exam assistant that uses AI to provide solution ideas in real time during 「面试」 or 「在线考试」.
AI translation
An online workspace for NMT prep: topic tests, results, recommendations, and an exam simulator.
EducationTypeScript · CSSGitHub @tony-kobsOnlineOwner 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
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗nmt.in.ua — тренажер підготовки до НМТ з математики. Учень проходить діагностику, тренується за темами і на офіційних варіантах, бачить прогрес і отримує наступний крок. Викладач веде своїх учнів, призначає тести і читає результати. Адмін тримає банк завдань, профілі й денні марафони.
Кабінет учня безкоштовний: реєстрація за хвилину, без картки. Інтерфейс українською, англійською і німецькою, зручний з телефона.
| 20+ | тем сертифікаційної роботи |
| 13 | офіційних варіантів НМТ у симуляторі |
| 1 | підручник зі змістом за темами |
Окремий кабінет після реєстрації з роллю «викладач». Публічна сторінка викладача живе за адресою /t/slug.
/join.Адмін входить тим самим логіном. На головній замість тренажера — редактор банку.
/settings: теми, зв’язки тем, тести і за бажанням задачник. Одна транзакція на весь файл.Свій акаунт з адмінки забанити або видалити не можна.
| Сторінка | Адреса | Хто |
|---|---|---|
| Вітальна | /welcome | усі |
| Діагностика | /diagnostic | усі, без акаунта |
| Реєстрація | /register | гість, учень або викладач |
| Вхід | /login | гість |
| Тест за темою | /topic | учень |
| Симулятор | /simulator | учень |
| Підручник | /materials/textbook | учень |
| Задачник | /problems | учень |
| Результати і сесії | /results, /sessions | учень; викладач бачить клас |
| Мої учні | /students | викладач, адмін |
| Призначити тест | /assign | викладач, адмін |
| Консультації | /consultations | учень пише, викладач читає чергу |
| Візитка | /t/{slug} | усі, якщо опублікована |
| Профілі | /profiles | адмін |
| Імпорт | /settings | адмін |
| Відгуки | /feedback | адмін |
| Марафони | /admin/marathons | адмін |
Новому учаснику команди варто почати з гіда онбордингу. Беклог — docs/Goldener-Rechner-beklog-PM.md. Пам’ятка релізу — .cursor/rules/deploy-hosting.mdc.
Потрібні Node.js 20+ і npm. Працюйте з гілки dev: у main напряму не пушимо, merge в main одразу деплоїть хостинг.
git clone https://github.com/tony-kobs/nmt.in.ua.git
cd nmt.in.ua
git checkout dev
npm install
cp .env.example .env.local
npm run dev
Локально сайт відкриється на http://localhost:3000.
| Команда | Що робить |
|---|---|
npm run dev | локальна розробка |
npm run build | продакшен-збірка |
npm start | зібраний сайт через server.js |
npm test | unit-тести |
npm run lint | ESLint |
npm run migrate | SQL-міграції |
Демо-логінів немає. Тестовий акаунт — через /register. Адміна підвищують у базі: node scripts/promote-admin.mjs <login>.
Секрети живуть у .env.local (локально) або .env.production (хостинг). У git їх немає.
| Змінна | Призначення |
|---|---|
DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME | MySQL |
SESSION_SECRET | cookie nmt_session; без неї логін на проді падає |
NEXT_PUBLIC_SITE_URL | canonical URL |
SITE_URL | origin у листах підтвердження і скидання пароля |
BREVO_API_KEY | листи; без ключа локально текст іде в консоль |
CONTENT_IMPORT_API_KEY | Bearer для POST /api/import |
ADMIN_API_KEY | Bearer для POST /api/admin/sessions |
MAX_BODY_BYTES | ліміт тіла HTTP на server.js (дефолт 8 МіБ) |
TELEGRAM_BOT_TOKEN, TELEGRAM_BOT_USERNAME, TELEGRAM_WEBHOOK_SECRET | бот; без пари токен+username канал Telegram вимкнено |
TELEGRAM_SUPPORT_CHAT_ID | необов’язково, чат команди для звернень; той самий .env.production на хості |
Порожній ключ імпорту або адмін-API відхиляє всі такі запити (401).
Імпорт — одна форма за запит. CSV-поля: themes, themeConnections, quizTasks, опційно problems. JSON: file + format=json.
curl -X POST http://localhost:3000/api/import \
-H "Authorization: Bearer $CONTENT_IMPORT_API_KEY" \
-F "[email protected];type=text/csv" \
-F "themeConnections=@theme_connections.csv;type=text/csv" \
-F "quizTasks=@quiz_tasks.csv;type=text/csv"
Гілка фічі від свіжого dev, pull request у dev. Реліз: pull request dev → main.