Without this, session cookie is not sent with fetch() requests, causing server to redirect to login (returning HTML instead of JSON).
Corporate Digital University System (NTSPI)
A comprehensive web platform designed for the Nizhny Tagil State Social Pedagogical Institute (NTSPI). This system serves as a full-featured replacement for the legacy website, providing tools for content management, educational program administration, admission campaigns, and institutional structure management.
🚀 Tech Stack
Frontend
- Framework: Vue.js 3 (Composition API)
- Adapter: Inertia.js (Monolith structure with SPA feel)
- Styling: Tailwind CSS
- Build Tool: Vite
Backend
- Core: PHP 8.2 / Laravel
- Admin Panel: Filament PHP (CMS & Resource Management)
- Database: MySQL 8.0
- Caching & Queues: Redis
- Server: Nginx + PHP-FPM
Infrastructure
- Containerization: Docker & Docker Compose
- SSL: Certbot (Let's Encrypt)
🏗 Architecture
The backend follows the Porto Architecture Pattern, organizing code into logical modular units to ensure scalability and maintainability.
- Ship Layer: Low-level code, parent classes, and configuration.
- Containers Layer: Encapsulates business logic into modular containers (e.g.,
AdditionalEducation,Article,Event,User,Schedule, etc.). - Request Lifecycle: Route -> Controller -> Action -> Task -> UI.
✨ Key Features
- Content Management (CMS): Advanced management of News, Articles, and Events with media galleries and status workflows (Draft, Published, Archived).
- Institute Structure: Hierarchical management of Faculties, Departments (Kafedras), Divisions, and Staff profiles.
- Educational Programs: Catalog of study programs, admission plans, and entrance exam requirements.
- Admissions Management: Tools to manage "Admission Campaigns" (Priemnaya Kampaniya), enabling dynamic updates to student intake numbers and rules.
- Role-Based Access Control (RBAC): Powered by Filament Shield. Granular permissions allowing different departments (Deans, Press Service, HR) to manage their specific sections independently.
- Dynamic Routing: Custom pages and navigation structures managed directly via the Database.
- Cross-Model Search: Unified global search across News, Pages, Events, and Programs using standard Eloquent models.
🛠 Installation & Local Development
The project includes a Docker environment for easy deployment.
1. Clone the Repository
git clone https://github.com/F4ilji/ntspi-app.git
cd ntspi-app
2. Configure Environment
Create the environment file from the example.
cp example.env .env
3. Create Directories & Set Permissions
Ensure Laravel storage directories exist and have write permissions.
mkdir -p storage/{app,logs,framework/{cache,sessions,views}}
sudo chown -R www-data:www-data storage
sudo chmod -R 775 storage
4. Start Docker Containers
Launch Nginx, MySQL, Redis, and the App container.
docker compose up --build -d
5. Install Dependencies
Enter the PHP container to run setup commands:
docker exec -it ntspi-php bash
Inside the container, run:
# Backend dependencies
composer install
# Database migrations
php artisan migrate
# Frontend dependencies
npm i
# Build assets
npm run build
6. Initialize System Data
Set up user roles and seed the database with initial data.
# Initialize permissions/roles (Critical for Filament Shield)
php artisan roles:init-roles
# Seed dummy data (Optional)
php artisan db:seed
📂 Project Structure Overview
_docker/: Docker configuration files (Nginx, PHP, MySQL).app/Containers/: Business logic modules (Porto pattern).resources/js/: Vue.js components, Pages, and shared UI assets.routes/: Web and API routes (including dynamic DB-based routing logic).