Skuul - відкритий застосунок для управління школою від Marvellous Ifezue - вийшов у третій версії, повністю переписаній на Laravel 13 і Livewire 4. Це не пакет, який підключають через Composer, а цілий продукт: зарахування, відвідуваність, журнал оцінок, розклад, рахунки й портал для батьків в одній інсталяції. Проєкт має близько 470 зірок на GitHub і ліцензію MIT.
Реліз v3.0.0 вийшов 16 жовтня 2026 року, за ним того ж дня - два патчі з правками порталу. Свіжі v3.1.1 (24 жовтня) і v3.1.2 (28 жовтня) нових можливостей не додають: перший налаштовує Release Please і політику безпеки, другий відкриває документацію прямо із застосунку. Проєкт помітив і Laravel News.
Що вміє
Одна інсталяція тримає кілька організацій, а кожна організація - кілька кампусів. За нотатками до релізу, у v3 є:
- учні й родини - лист очікування на зарахування, зв'язки учня з опікунами, переведення учнів між кампусами; кампус може запросити записи учня в іншого кампусу, і кожен такий запит потребує схвалення;
- навчання й оцінювання - навчальні цикли, курси, журнали оцінок, розклад іспитів і результати, які перед публікацією проходять перевірку; табелі й транскрипти формуються з опублікованих результатів;
- фінанси - платежі, повернення коштів і кредит учня проводяться через бухгалтерську книгу, а фінансові періоди визначають, коли проведення дозволені;
- портал для родини - відвідуваність, оцінки, розклад, рахунки, документи, оголошення й звернення до школи;
- опційні модулі кампусу - дисципліна й добробут, персонал, календар, гуртожиток, бібліотека, гуртки й програми, імпорт даних;
- звіти - експорт у CSV, XLSX і PDF збирається у фоні;
- експлуатація - зашифровані резервні копії за розкладом, щотижнева репетиція відновлення, health-ендпоінти і команди
skuul:release-readiness та skuul:update.
Інтерфейс побудований на April UI - бібліотеці компонентів того ж автора (yungifez/april-ui у composer.json). Подивитися все можна в демо, яке скидається щогодини.
На чому побудований
У composer.json - laravel/framework ^13.0, livewire/livewire ^4.0, laravel/jetstream ^5.0, spatie/laravel-permission ^8.0, brick/money для грошових сум і barryvdh/laravel-dompdf для PDF. Для розробки - Pest 5, Larastan, Pint і Laravel Boost.
Вимоги з README:
- PHP 8.4.1 або новіший (Sail працює на PHP 8.5, CI тестує 8.4 і 8.5);
- Composer 2, Node.js 24 і npm;
- MySQL 8 і Redis;
- Docker із Compose для локальної розробки через Sail.
Як запустити
Для робочої інсталяції README радить брати тег релізу, а не гілку main, і йти за інструкцією зі встановлення. Локально все запускається через Sail:
git clone --branch v3.1.2 https://github.com/yungifez/skuul.git skuul
cd skuul
composer install --no-interaction --prefer-dist
cp .env.example .env
vendor/bin/sail up -d
vendor/bin/sail npm ci
vendor/bin/sail npm run build
vendor/bin/sail artisan key:generate --no-interaction
vendor/bin/sail artisan migrate --no-interaction
vendor/bin/sail artisan db:seed --class=WorldSeeder --no-interaction
vendor/bin/sail artisan storage:link --no-interaction
Далі браузерний інсталятор створює першого адміністратора платформи, організацію і перший кампус і завантажує потрібні ролі та дозволи. Пароля за замовчуванням немає. Після входу лишається пройти чекліст налаштування школи: навчальний рік, звітні періоди, класи, шкали оцінювання. Для фонових задач потрібні queue:work і schedule:work. Демо-дані README радить завантажувати лише в тестову інсталяцію і ніколи не запускати сідер за замовчуванням на продакшн-базі.
Що подивитися в коді
Навіть якщо школу ви не автоматизуєте, Skuul корисно почитати як великий відкритий застосунок на актуальному стеку.
Ролі в межах кампусу. У config/permission.php увімкнено 'teams' => true, а team_foreign_key - це school_id: кампус у коді називається школою. Middleware SetActiveSchool один раз на запит визначає, у якій школі працює користувач, а сервіс App\Services\School\SchoolContext зберігає її в сесії й викликає setPermissionsTeamId() у PermissionRegistrar. Коментар у middleware пояснює задум: усі подальші запити, політики й перевірки ролей читають школу з цього контексту, тож решті коду не треба пам'ятати про умову за школою. За оглядом Laravel News, інсталятор створює вісім ролей - від platform-admin і organization-admin до teacher, accountant, student і parent, а кампус може скопіювати роль і зробити з неї власну.
Модулі, що вимикаються. Middleware EnsureFeatureIsEnabled приймає назву модуля з enum App\Enums\Feature і віддає 404, якщо кампус його вимкнув. Записи при цьому лишаються: закривається лише вхід, і після повторного ввімкнення історія на місці.
Livewire-компоненти. У app/Livewire - 168 класів, майже всі на верхньому рівні й названі за дією: CreateStudentForm, EditFeeInvoiceForm, ListStudentsTable, GradebookMarkSheet, LibraryLendingDesk, PortalRequestInbox. Спільна поведінка винесена в трейти в app/Livewire/Concerns. Окремо варто глянути AGENTS.md і теку .ai/rules: проєкт тримає правила для ШІ-агентів у репозиторії, поруч із гайдлайнами Laravel Boost.
Обмеження й оновлення з v2
Оновлення з v2 - ламальна зміна з втратою даних. Міграції v3 видаляють старі результати іспитів, журнали без прив'язки до курсу та системи оцінювання і не конвертують їх, а відкат міграцій нічого не повертає. Автор радить спершу прогнати оновлення на копії даних і зберегти повну резервну копію бази, завантажені файли та початковий APP_KEY. Версію 2 оголошено застарілою.
Laravel News, посилаючись на документацію, перелічує й прогалини v3:
- немає публічного REST API, API-токени вимкнено;
- платіжний канал Stripe існує, але маршрутів оплати до нього не підключено, тож родини бачать рахунки в порталі, але не оплачують їх там - платежі персонал вносить вручну;
- немає процесу атестації персоналу;
- числовий калькулятор оцінок може рахувати порожню, пропущену чи незараховану оцінку як нуль - такі оцінки варто перевіряти перед публікацією результатів.
Кому це стане в пригоді
Українським розробникам, які роблять проєкти для шкіл, курсів чи мереж навчальних закладів, Skuul дає готову основу під MIT: структуру з кампусами, ролями й порталом можна взяти і доробити під себе, а не будувати з нуля. Варто пам'ятати, що інтеграції із зовнішніми системами та онлайн-оплату доведеться писати самим - як і місцеву специфіку оцінювання та звітності.
Як навчальний матеріал проєкт цікавий будь-кому, хто будує застосунок із кількома орендарями (multi-tenant) на Spatie Permission: команда в репозиторії вже розв'язала, як тримати контекст кампусу в одному місці. Почніть із SchoolContext, SetActiveSchool і config/permission.php, а потім відкрийте демо і подивіться, як це виглядає для різних ролей.