Посторінковий розбір коду · внутрішній документ

English Prime LMS — карта платформи

Кожен екран і кожен значущий блок платформи: що він робить, чи працює зараз, чого бракує і скільки коштує доробка. Складено читанням коду двох репозиторіїв, звіркою фронтенду з сервером. 125 блоків.

23 липня 2026 · lms-fe (develop) + lms-be (dev)
працює як задумано
працює частково
макет без логіки
мертвий код
блоків усього

Три речі, які треба закрити раніше за все інше

Мінімум, щоб віддати

90–150 год

Безпека, критичні дефекти, прибрати макети з очей користувача. Приблизно 3–4 тижні роботи одного розробника.

Без онлайн-оплати

280–420 год

Мінімум плюс усі функціональні діри, крім платіжної системи. Оплати лишаються ручними. Близько 2 місяців.

Повний обсяг

390–630 год

Разом із наскрізною онлайн-оплатою і майстром для абітурієнта. 2,5–4 місяці роботи одного розробника.

Що з цього випливає для вересня

До вересня лишається близько шести тижнів. Одна людина за цей час закриває мінімум для здачі — і це реалістично. Повний обсяг з онлайн-оплатою за цей строк не закривається навіть теоретично. Тобто рішення не «встигнемо чи ні», а що саме входить у здачу: або віддаємо платформу з ручними оплатами і чесно це фіксуємо, або переносимо строк, або додаємо людей.

Зона 1

Урок і навчальний процес

БлокМаршрутХто бачитьЩо робитьСтанЧого бракуєГодин
Онлайн-урок — головний екран/lessons/{id}студент, викладач, адмінЖивий урок: ліворуч матеріали й вкладки, праворуч відеодзвінок, знизу панель дій.працює
Відеодзвінок (Jitsi)у складі урокуусі учасникиВбудований відеозв'язок на власному сервері: камера, мікрофон, демонстрація екрана, кімнати для підгруп.працюєАдреса відеосервера вписана в код і вказує на тестовий інстанс — перед продом винести в налаштування.2–4
Кнопка «Закрити всі кімнати»у складі відеовикладачОдним кліком повертає всіх студентів із міні-кімнат у головну.працює
Демонстрація екранау складі відеовикладачПід час показу екрана відеовікно ховається в банер «Ви показуєте екран» з кнопкою зупинки.працює
Зміна ширини відеопанеліу складі урокуусіПанель відео розтягується мишкою від чверті до двох третин екрана.працює
Таймер урокуу складі відеоусіЗворотний відлік до кінця заняття.частковоКоли час вийшов — не відбувається нічого. Немає попередження за 5 хвилин і автозавершення. Значення рахується один раз при відкритті.3–6
Вкладка «Теми уроку»у складі урокуусіУсі частини заняття списком: теорія, відео, ідіоми, слова, шаблони речень, розмовна тема, домашнє. Окремо — непройдене з минулих уроків.працює
Відмітки «Пройдено» біля блоківу складі урокувикладачМали б відмічати, які частини заняття пройдено.мертвеЧекбокси не з'являються взагалі — умова їх появи спирається на параметр адреси, якого на сторінці уроку немає. Навіть якби з'явились, стан жив би лише в пам'яті вкладки: ні збереження, ні поля в базі.8–14
Картки слів із вимовоюу складі урокуусіСлово, переклад, картинка, визначення, приклад, дві транскрипції і кнопки озвучення.працює
Трансляція звуку учняму складі урокувикладач → студентиВикладач вмикає озвучення — і той самий файл програється у браузері кожного учня, без ехо та втрат.частковоПрацює лише для карток слів. У презентації слайдів звук грає локально — учні нічого не чують. Команда «зупинити» не надсилається взагалі.5–9
Картки шаблонів речень, ідіом, малих сліву складі урокуусіВикладач бачить додатковий блок «для викладача», студент — теорію для себе.працює
Відеоматеріали урокуу складі урокуусіПлеєр із відео заняття та кадром-прев'ю.працює
Коментарі викладача до матеріаліву складі урокувикладач пише, усі бачатьКоментар до конкретного слова, ідіоми чи цілого розділу зберігається і показується плашкою.частковоНемає видалення коментаря. Вікно не перекладене. На сервері помилка пошуку існуючої нотатки — коментар до розділу може перезаписати чужий.4–7
Вкладка «Студенти» на уроціу складі урокувикладачСписок учнів із позначкою «онлайн» і випадачкою статусу відвідування, що зберігається одразу.Позначка «онлайн» рахується за ідентифікатором візиту замість студента — підсвічує не тих. Показник часу на уроці закоментований, хоча сервер його віддає.3–5
Нотатки на уроціу складі урокуусіОсобистий блокнот із форматуванням, нотатки приватні.працює
Чат урокуу складі урокуусіЧат групи в реальному часі; викладач може перемкнутись на приватну розмову з окремим студентом.працює
Чат-шторка на телефоніу складі урокуусіТой самий чат висувною панеллю, щоб не займати екран на мобільному.працює
Показ слайдіву складі урокувикладачПовноекранний показ шаблонів речень, ідіом, домашнього завдання, розмовної теми з перегортанням.працює
Конструктор реченьу складі слайдіввикладач демонструєСлова перетягуються в пропуски речення.частковоЦе лише демонстрація: правильність не перевіряється, результат не зберігається, студент зі свого пристрою нічого не перетягує — бачить тільки через показ екрана.12–20
Презентація сліву складі урокувикладачПовноекранна презентація словникових блоків із вкладками на кожну групу слів.працює
Показ слайда словау складі презентаціївикладачКлік поступово відкриває слово → переклад → визначення → приклад → транскрипції, далі гортає далі.частковоЗвук транскрипції чує лише той, хто клацнув. Заголовки блоків захардкоджені українською.4–7
Вкладка «Повторення»у складі презентаціївикладачСуцільний список усіх слів заняття для швидкого повторення.працює
Малювання поверх слайдау складі презентаціївикладачОлівець із кольорами, гумка, скасувати-повернути, текстові наліпки, які можна пересувати.працюєАнотації локальні: учні бачать їх лише через показ екрана, при закритті все стирається.
Пам'ятки «Правила»у складі урокуусіДві статичні картинки-підказки для роботи зі словами і шаблонами.працює
Завершення урокуу складі урокувикладачВікно, де можна відмітити непройдені теми для переносу на наступний урок і оновити домашнє, після чого урок закривається.працює
Вихід студента з урокуу складі урокустудентПерехоплює всі посилання й кнопку «назад», питає підтвердження і фіксує вихід на сервері.працює
Перехід у режим корекційу складі урокувикладачНа останньому уроці циклу викладач переводить заняття в режим перевірки корекцій; студенти отримують сповіщення наживо.працює
День корекцій — екран викладачарежим корекціївикладачСписок студентів, їхні виправлення, оцінювання, коментарі, зміна статусу; відповіді прилітають наживо.працює
День корекцій — екран студентарежим корекціїстудентСтудент бачить помилки, вписує виправлення, відправляє на перевірку і бачить статус.частковоКілька написів захардкоджені українською, зокрема тестовий рядок «Завдання Номер 4» підставляється замість реального номера.2–4
Список занять/lessonsусіРозклад по днях із вкладками поточні/майбутні/минулі, фільтром, копіюванням посилання і входом в урок.працює
Підготовка до уроку/lessons/preview/…викладачПеред стартом показує всі матеріали і список студентів; кнопка «Почати урок» створює кімнату.частковоПеревірку часу на кнопці «Почати урок» закоментовано — урок можна стартувати будь-коли й будь-кому, у кого є посилання. На сервері теж немає перевірки ролі.4–8
Офлайн-урок/lessons/offline/{id}викладачТой самий урок без відео: матеріали, відвідуваність, нотатки, оцінки, коментарі.частковоНемає чату й трансляції звуку. Підвкладки «Нотатки» та «Оцінки» неробочі.8–14
Табель відвідуваності офлайн?preview=studentsвикладачТаблиця учнів із присутністю, статусом домашки, часом на уроці й коментарем.працює
Нотатки на офлайн-уроці?preview=notesвикладачМає показувати нотатку до заняття.частковоКомпонент викликається без даних — завжди порожній. На екрані результатів той самий блок викликається правильно.0,5–1
Вкладка «Оцінки»?preview=marksстудент, викладачМає показувати бали студента за частинами іспиту.макетПовністю намальована заглушка: 5 частин і 3 завдання генеруються циклом, бал жорстко вписаний «24,75 / 25», жодного запиту до сервера. Це бачить і студент.12–20
Підсумок уроку/lessons/summary/{id}викладачВикладач лишає коментар для студентів і окремо для адміністрації.працює
Результати проведеного уроку/lessons/results/…усіМатеріали заняття в режимі читання плюс студенти, нотатки, коментарі, оцінки.частковоВкладка «Оцінки» — заглушка. У режимі читання не всюди приховані кнопки додавання коментаря.4–8
Відпрацювання пропущеного/lessons/working-out/{id}студентСтудент самостійно проходить матеріали пропущеного заняття і тисне «Вважати пройденим».частковоНотатка зберігається лише якщо студент реально щось надрукував. Немає жодної перевірки, що матеріали справді переглянуто.3–6
Конструктор уроку (10 кроків)/lessonадмін, методистМайстер створення заняття: основне, теорія, відеослова, ідіоми, слова, домашнє або іспит, шаблони, розмовна тема, вправи.працює
Наповнення дня корекцій/lessons/correction/{id}викладачТой самий конструктор, прив'язаний до дати в календарі.працює
Залишки Zoom у застосункуСтарий код відеозв'язку до переходу на Jitsi.мертвеДва файли не використовуються, три Zoom-пакети висять у залежностях (десятки мегабайт у збірці), папка досі зветься «zoom-part».2–4
Залишки Zoom на серверіСтарі Zoom-запити в API.мертвеОбидва запити без перевірки авторизації — доступні неавторизованому користувачу, і в одному стоїть налагоджувальний виклик, що обриває процес.1–3
Картка «слова з відео»Дубль картки слова для відеоблоку.мертвеКомпонент не використовується ніде, всередині порожній блок замість опису.0,5
Заготовка таблиці відвідуваностіПорожня заготовка компонента.мертвеПовертає порожній блок, експортується, ніде не використовується.0,5
Зона 2

Домашні завдання, іспити, кабінет студента

БлокМаршрутХто бачитьЩо робитьСтанЧого бракуєГодин
Мої завдання/assignmentsстудентКартки домашок та іспитів із фільтром за статусом і мовою, з посторінковим гортанням.працює
Список груп/assignmentsвикладач, адмінЗамість домашок викладач бачить свої групи за рівнями; клік веде в журнал.працює
Фільтри над списком завдань/assignmentsусіПанель фільтрів: тип навчання, рівень, форма, мова, філія.частковоУ студента жоден фільтр не застосовується до запиту, а вибір мови ще й ховає вкладки мов. У викладача не передаються рівень і філія.4–8
Журнал завдань групи/assignments/group/{id}викладач, адмінТаблиця «студенти × уроки»: статус домашки, відсоток, дата, відвідуваність.частковоНемає гортання по студентах і уроках, немає легенди статусів — порожні клітинки без пояснення.6–10
Рядок «Середня оцінка» в журналі/assignments/group/{id}викладач, адмінМає показувати середню оцінку по кожному уроку.макетЗамість значень стоїть текст «Н/Д 1», «Н/Д 2»… На сервері поля середньої оцінки взагалі немає.10–16
Ручна зміна статусу домашки/assignments/group/{id}викладачВипадайка прямо в клітинці журналу для офлайн-студента.працює
Оцінка за офлайн-іспит/assignments/group/{id}викладачМодалка з усною та письмовою частинами, сума рахується автоматично.працює
Сторінка домашнього завдання/assignments/homework/{id}студент, викладачГоловний екран домашки: завдання, відповіді, корекції, чат, кнопка здачі.працює
Заповнення відповідейу складі домашкистудентТекстовий редактор, набір полів або поля під фото.працює
Автозбереження чернеткиу складі домашкистудентКожні пів секунди зберігає введене і відновлює при поверненні.частковоЧернетка живе лише в браузері — з іншого пристрою її не видно. Індикатор «збережено» закоментований, тому студент не бачить, що робота збереглась.8–14
Здача домашнього завданняу складі домашкистудентКнопка «Здати» з підтвердженням, робота йде на перевірку.частковоКнопка показується і тоді, коли здавати вже не можна — студент отримує технічну помилку замість зрозумілого пояснення.3–5
Перевірка домашки викладачему складі домашкивикладачКоментар і вибір результату: виконано / доопрацювати / корекція, з подвійним підтвердженням.працює
Правки прямо у відповідіу складі домашкивикладачВикладач виділяє шматок тексту і ставить правку, закреслення чи коментар просто в тексті.працює
Спливне вікно коментаряу складі домашкистудент, викладачКлік по підсвіченому фрагменту показує коментар; викладач може його видалити.працює
Бали за кожну відповідь у домашціу складі домашкивикладачМало б дозволяти ставити бал за кожну відповідь, як в іспиті.мертвеІнтерфейсу немає взагалі. Через це при завершенні перевірки сервер записує кожному завданню повний бал — цифри успішності в базі несправжні.12–20
Створення корекціїу складі домашкивикладачРедактор, де викладач формулює завдання на переробку; зроблені в тексті правки підтягуються самі.працює
Ланцюжок корекційу складі домашкистудент, викладач«Пінг-понг»: кожен раунд — завдання викладача і відповідь студента; чия черга, визначає статус.частковоНа сторінці іспиту ланцюжок не показується взагалі. Статус «Корекція» прибрано з фільтрів списку, тож знайти такі домашки важко.8–14
Кнопка «Надіслати» в корекціїу складі домашкивикладачМає відкривати новий раунд і повертати роботу студенту.частковоЯкщо викладач лише розмітив текст, але не написав коментар — сервер не відкриває раунд, а мовчки закриває весь ланцюг зі статусом «Виконано».3–6
Минулі раунди тільки для читанняу складі домашкистудент, викладачРедагувати можна лише останній раунд і лише коли твоя черга.працює
Стара одиночна корекціяу складі домашкиПопередній варіант однієї корекції на домашку.мертвеПоле, від якого залежить зв'язок, ніде не заповнюється — блок ніколи не з'являється. Дублює логіку ланцюга.2–3
Чат по домашціу складі домашкистудент, викладачПриватне листування по конкретному завданню з історією й оновленням наживо.працює
Нотатка викладача до домашкиу складі домашкистудентПоказує прикріплену до заняття нотатку тільки для читання.працює
Сторінка іспиту/assignments/exam/{id}студент, викладачІспит на 5 частин із вкладками, відповідями, оцінюванням і підсумковим звітом.працює
Іспит під час живого уроку/lessons/exam/{id}студент, викладачТой самий іспит, але з відеоблоком і чатом групи збоку.частковоОзнака «останній урок» не передається, тому блок усної частини під час заняття не з'являється.4–6
Попередження про незаповненеу складі іспитустудентПеред здачею перелічує частини, де лишились пропуски.працює
Бали за кожну відповідь в іспитіу складі іспитувикладачБал за кожне поле, поруч рахується підсумок по завданню.працює
Оцінка усної частиниу складі іспитувикладачПовзунки за критеріями мовлення: граматика, словниковий запас та інші.частковоІнструкція захардкоджена українською. Повзунки блокуються без пояснення, якщо статус не «на перевірці».2–4
Підсумковий звіт за іспиту складі іспитустудент, викладачПівколо з відсотком, загальний бал і розбивка по частинах.працює
Корекція в іспитіу складі іспитувикладачВикладач може дописати корекцію в кінці іспиту.частковоСтудент її не побачить — блок ланцюга в іспиті не показується. До того ж іспит завжди позначається «виконано повністю», навіть якщо корекцію видано.6–10
Чат на сторінці іспитуу складі іспитустудент, викладачМає відкривати чат по іспиту.частковоУ чат передається не те поле — сервер шукає групу за номером чату, тож або помилка, або підключення до чужої групи.2–4
Таймер іспитуМав би обмежувати час на іспит.мертвеКомпонент ніде не підключений, а сам лічильник рахує вгору від нуля при кожному відкритті — це не обмеження часу.10–16
Прогрес студента/progress/{id}викладач, адмінТаблиця занять студента: відвідуваність, час на уроці, результат тесту, статус домашки.частковоПідсвітка вкладок рівнів завжди лишається на першому, хоча дані підвантажуються правильні.2–3
Нотатки/notesусіСтворення власних нотаток і перегляд нотаток з уроків.частковоНемає редагування й видалення, хоча на сервері обидві дії існують. Створена нотатка завжди особиста — тип не вибирається.4–6
Профіль/profileусіОсобисті дані, інформація про навчання, вихід з акаунту.частковоКнопки збереження в шапці закоментовані — на комп'ютері зберегти зміни ніяк, залишилась лише мобільна панель.3–5
Історія оплат у профілі/profileстудентТаблиця рахунків студента: сума, дата, статус.частковоВитік даних. Фільтр за користувачем не передається, а сервер без фільтра віддає рахунки всіх користувачів школи.3–5
Головна сторінка/усіНабір віджетів під роль плюс бічний календар.частковоЧастина віджетів неробоча — див. нижче.
Віджет «Домашні завдання»у складі головноїстудентОстанні чотири домашки зі статусом.частковоРядки не клікабельні, стрілка праворуч — кнопка без дії, «Дивитись всі» веде на головну замість розділу завдань.2–4
Віджет «Оплати»у складі головноїстудентМає показувати останні рахунки.макетСервер віддає одні поля, а віджет читає інші — рядки рендеряться порожніми.3–5
Віджет «Акційні пропозиції»у складі головноїстудентКартки акцій зі знижкою і ціною.частковоЦіна тягнеться з жорстко вписаного курсу, дата підставляється поточна замість реальної, «Дивитись всі» веде на головну.4–8
Картка «Курси, за якими я навчаю»у складі головноїусіМає показувати курси викладача.макетДані вигадані в коді — два однакові «Elementary». Картка показується всім ролям, а посилання веде на розділ, якого в застосунку не існує.6–10
Онбординг-підказкиу складі головноїусіМали б проводити нового користувача по інтерфейсу.мертвеСписок підказок повністю закоментований, компонент завжди повертає порожнечу.6–10
Кабінет абітурієнта/абітурієнтМає бути стартовим екраном людини, яка ще не почала навчання.макетРолі не видано жодного дозволу, у конфігурації віджетів її немає взагалі. Абітурієнт бачить лише фейкову картку курсів. Якщо це реальний сценарій продажу — це окремий шматок робіт.20–30
Опитування «оціни урок» зірочкамимодалкастудентПісля заняття мала б спливати оцінка від 1 до 5 зірочок.мертвеІнтерфейс і збереження готові, але сервер жорстко повертає порожній список активних опитувань — вікно не з'являється ніколи, а в журналі групи зірочка завжди порожня.4–8
Зона 3

Адміністрування і керування школою

БлокМаршрутХто бачитьЩо робитьСтанЧого бракуєГодин
Користувачі — список/usersадмінТаблиця всіх людей школи з вкладками студенти / викладачі / адміни / абітурієнти / видалені, фільтрами й масовими діями.працюєКолонка «Групи» завжди показує прочерк. Колонки статусів навчання, оплати й опитувань вирізані, хоча код їх виводу лишився.4–8
Створення користувача/users/createадмінДвокроковий майстер: особисті дані, потім навчальна або викладацька інформація.працює
Картка користувача — особисті дані/users/{id}адмінРедагування контактів, фото, дати народження, видалення акаунту.працює
Картка — навчальна інформація/users/{id}адмінПрив'язка до групи, рівня, мови, форми навчання.працюєДля абітурієнта вкладку закоментовано — налаштувати його з картки неможливо.6–10
Картка — історія платежів/users/{id}адмінРахунки студента і кнопка «Виставити рахунок».працюєСтворений рахунок нікуди не веде — оплатити його онлайн неможливо.
Картка — коментарі/users/{id}адмінВнутрішні нотатки про студента чи викладача.працює
Мої студенти/studentsвикладачСписок студентів викладача зі статусами навчання й оплати, останньою відповіддю в опитуванні, друком у PDF.працюєКолонка «Групи» так само захардкоджена прочерком.2–4
Групи — список/groupsадмін, викладачПерелік груп із пошуком, фільтрами і створенням нової.працює
Картка групи/groups/{id}адмін, викладачДані групи, прогрес, склад, додавання студентів, зміна статусів, заявка на заміну викладача, друк списку.працює
Картка групи — календар і домашні/groups/{id}адмін, викладачРозклад занять групи та журнал домашніх завдань.працює
Заявки — дошка лідів/requestsадмінКанбан зі статусами: колонки створюються й перейменовуються, заявки перетягуються мишкою.працює
Створення та картка заявки/requests/…адмінФорма нового ліда та редагування з переведенням у інший статус.працює
Бібліотеки — довідники школи/libsадмінФорми й типи навчання, рівні, філії, джерела, мови, статуси, теми тікетів, ролі з правами, особливості учнів.працюєРозділ статусів навчання паралельно тягне ще й статуси домашок — зайвий запит ламає гортання.3–5
Бібліотеки — тарифи та аванс/libsадмінПрайс на рівні навчання зі старою й новою ціною, мінімальні суми авансу, історія змін.частковоПошук по розділу вимкнено — при сотні тарифів шукати нема як.3–5
Бібліотеки — платіжні акаунти/libsадмінЗберігання ключів платіжної системи та прив'язка до групи.частковоКлючі зберігаються, але ніде не використовуються — на сервері немає жодного платіжного виклику. Це довідник «у стіл».входить в оплату
Опитування — конструктор/libsадмінСтворення опитування: питання, варіанти з іконками, вкладені додаткові питання, поле коментаря.працює
Опитування — запуск за тригероммодалка з /libsадмінЗапуск за подією: номер заняття, до іспиту, після іспиту, за датою, прямо зараз.частковоТригер «за датою» — фікція. Дати зберігаються, але сервер їх не обробляє: адміністратор натисне «активувати» і буде впевнений, що опитування піде — воно не піде, мовчки. Немає й деактивації.8–12
Опитування — проходження студентоммодалкастудентПри вході спливає активне опитування з ланцюжком питань і коментарем.працюєКрок «назад» перестрибує через питання.2–3
Опитування — відповідь у таблиці/students, /groups/{id}адмін, викладачУ таблиці студента видно останню відповідь про продовження навчання та дату.працює
Опитування — зведена аналітикане існуєМала б показувати розподіл відповідей по опитуванню, групі, періоду.мертвеЕкрана немає, і сервер його не витягне — запиту, що повертає список результатів, у схемі не існує взагалі. Дані збираються «в нікуди».20–30
Бібліотеки — навчальний контент/libsадмінСлова, списки слів, ідіоми, малі слова, відеослова, шаблони речень: перегляд, пошук, видалення.працює
Редактор словникової одиниці/libs/{edit}адмінПовноекранна форма створення й редагування слова, ідіоми, шаблона речення.працює
Транзакції — журнал платежів/transactionsадмінРеєстр усіх рахунків школи: сума, тип оплати, дата, платник, статус.частковоКнопки «Сплатити» і «Завантажити PDF» не мають жодного обробника — обіцяють дію, якої немає. Змінити статус рахунку з цього екрана теж не можна.див. оплату + 12–20
Оплата — крок 1 «Акції»/paymentабітурієнт, студентВибір пакета на 1–3 рівні зі знижкою.макетУсі ціни й знижки вписані в код. Реальні тарифи вже є в довіднику — майстер їх просто не читає.10–16
Оплата — крок 2 «Рівні»/paymentабітурієнт, студентВибір рівня або кількох рівнів навчання.частковоРівні тягнуться з сервера, але вибір ніде не зберігається.8–12
Оплата — крок 3 «Категорія»/paymentабітурієнт, студентПовна оплата, часткова або аванс, із вибором суми.макетСуми курсу, залишку й авансу вписані в код, довідник авансів не використовується, вибір нікуди не передається.10–16
Оплата — крок 4 «Спосіб оплати»/paymentабітурієнт, студентВибір: карткою або банківським переказом.макетПеремикачі без стану, кнопки «Оплатити» немає, жодного збереження. Це фінальний крок майстра, який не робить нічого.30–40
Оплата — крок 5 «Зв'язок з менеджером»/paymentабітурієнт, студентФорма зворотного дзвінка: ім'я, телефон, зручний час.макетЗаявка нікуди не відправляється — на сервері немає відповідної дії.8–12
Оплата — навігація майстром/paymentабітурієнт, студентКнопки «Назад» і «Наступний крок».частковоУмова кнопки «Назад» інвертована — повернутись на попередній крок неможливо, лише через бічне меню.2–4
Налаштування — «Загальні»/settingsусі роліМали б задавати мову інтерфейсу, назви та базові параметри школи.макетЗбереження порожнє, поля підписані заглушками, три поля мають однакове ім'я, кнопки «Зберегти» немає. На сервері таких налаштувань не існує взагалі.16–24
Налаштування — «Повідомлення»/settingsусі роліМали б вмикати й вимикати типи сповіщень.макетДев'ять однакових перемикачів із текстом-заглушкою, збереження порожнє, на сервері полів немає.16–24
Налаштування — «Віджети»/settingsусі роліВмикає й вимикає блоки головної сторінки; перемикач зберігається одразу. Єдина робоча вкладка.працює
Налаштування — «Фінанси»/settingsусі роліМали б містити реквізити ФОП і рахунків школи.макетСписок — два однакові вигадані ФОП із фейковим рахунком у коді. Редагування й видалення закоментовані, додавання пише дані в консоль. Сутності на сервері немає.20–30
Сповіщеннябічна панельусі роліСписок сповіщень із вкладками, позначення прочитаним, спливні повідомлення, оновлення наживо.частковоДжерел подій лише два: заміна викладача і нове повідомлення в чаті. Оплати, дедлайни, нові заявки й тікети не сповіщають. Кнопки «прочитати всі» й «видалити» описані, але ніде не викликаються.24–40 + 4–6
Навчання (курси, акції, тести)/learningадмін, викладачКаталог навчальних матеріалів школи.частковоВкладки всього розділу закоментовані — доступний лише список уроків. Курси, акції й тести мають повний сервер і готові підключення, але недосяжні, ще й приховані на рівні конструктора ролей.16–24
Календар школи/calendarадмін, викладачЗагальний розклад занять із фільтрами.працює
Повідомлення (чати)/messagesусіСписок чатів, кімната з історією, надсилання тексту й файлів, статус «онлайн».працює
Підтримка — реєстр тікетів/supportусіТікети з вкладками всі / мої / архів, фільтрами і створенням нового.працює
Підтримка — картка тікета/support/{id}адмін, авторПереписка, взяття в роботу, передача в іншу філію, закриття.працюєСтворення тікета не породжує сповіщення — виклик закоментований на сервері.2–4
Історія дій/historyадмінЖурнал усіх дій у системі: що зроблено, коли і ким.працюєПоруч лежить невикористаний тестовий масив — сміття.0,5
Розділ «Викладання»маршруту немаєЗаглушка з вкладками і таблицею.мертвеМодуль недосяжний, у таблиці колонки «QQ» і «WW», рядки «row_1», «row_2». Прибрати разом із посиланням у списку сторінок.1–2
За цим фільтром нічого не знайдено.
Підсумок

Що з цим робити

Найнебезпечніший клас проблем — те, що мовчки не працює

Гірше за відсутню функцію те, що виглядає робочим і підводить непомітно. Тут таких випадків чотири: опитування «за датою», яке адміністратор запускає, а воно не йде; бали за домашки, які записуються повними автоматично; кнопка «Надіслати» в корекції, що замість нового раунду закриває ланцюг; і кнопки «Сплатити», які просто нічого не роблять. Ці чотири речі створюють хибну впевненість у школи — і їх варто закрити раніше за красиві доробки.

Що перевірити на живому стенді

Карта складена читанням коду — це дає точну картину структури, але не поведінки. Щоб довести її до стану «перевірено», потрібні три тестові акаунти (студент, викладач, адміністратор) на dev-стенді. Перевірки, які без цього неможливі: реальна робота кімнат для підгруп у відеозв'язку, фактична доставка звуку учням, поведінка чату на сторінці іспиту та повний прохід оплати абітурієнта.