ZiggyVue needs routes in its config, but page.props.ziggy from the server may not carry them in the SSR worker. Importing the static Ziggy config ensures routes are always available.
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).