ETS Zemun is a website tailored for a Serbian highschool named Elektrotehnička Škola Zemun. It was created by 2 students and was originally intended to be a simple react website showcasing the school, its facilities, and all of what it had to offer to its students but has evolved into a full-featured ecosystem including a CMS-like admin panel and a secure backend API.
Now, the project consists of 3 services:
- Main website - A dynamic and multilingual showcase of the school.
- Admin panel - A CMS-style interface for managing website content.
- Backend API - A secure, structured API that handles communication between frontend and database.
-
Basic Information at a Glance
Potential Students and their Parents can get a quick overview of the school by just visiting the website's frontpage. By displaying key information about the school, such as its mission, and statistics, we hoped to provide a clear and concise overview of what the school has to offer in order to build trust and help potential students make an informed decision. -
Increased Transparency
Everyone, including potential and current students, parents, teachers and staff, can access information about exactly who is teaching at the school, what their qualifications are, what subjects are taught to each class, all awards students have won, and much more. This information shows that the school has nothing to hide and is committed to transparency and growth. -
News
The website features a news section that displays the latest news, and updates from the school in form of blog posts. These posts can be read by everyone and created by the school's staff through the admin panel, helping keep those interested in the school's activities updated.
Originally built with React, React Router, and SCSS, the site was later migrated to Next.js by Andrej235 to enable Incremental Static Regeneration (ISR) for improved performance and SEO. Pages are regenerated every 24 hours to balance caching and real-time updates.
-
Full CMS Interface
Create, edit, and delete teachers, awards, news posts, and more through a secure and easy-to-use interface. -
Authentication and Authorization
Users must verify their email addresses before requesting access. Admins can grant the "moderator" role to verified users, allowing them to manage content without administrative privileges.
Since content must always be up to date, the admin panel relies exclusively on Server-Side Rendering (SSR). Middleware is used to restrict access based on user roles.
- Only verified email accounts can be granted access.
- Login tokens are stored as HttpOnly, Secure cookies, scoped to the .ets-zemun.edu.rs domain.
-
Full CRUD API
Handles all operations for the website content and user data. -
Authentication and Authorization
Built using ASP.NET Identity, with role-based access control. -
Rate Limiting Uses ASP.NET’s built-in middleware to prevent abuse by limiting request frequency.
Follows a clean controller-based architecture aligned with SOLID principles for maintainability and readability.
.
│
├── admin/ # Admin panel (Next.js + Tailwind)
├── website/ # Public website (Next.js + SCSS)
├── backend/ # ASP.NET Core API
└── top-level files
Docker setup is not available - setup must be done manually.
- Node.js
- npm
- Next.js
- .NET 9 SDK
- PostgreSQL (locally or externally hosted)
Example files are included in the repository.
website/.envadmin/.envbackend/secrets.json
- Clone the repository:
git clone https://github.com/andrej235/ets-zemun.git - Navigate to the project directory:
cd ets-zemun - Install dependencies for website and admin panel:
npm run deps
- Start the backend:
cd backend && dotnet run EtsZemun.csproj - Start the website:
cd website && npm run dev - Start the admin panel:
cd admin && npm run dev
All services are deployed and live:
- Website: ets-zemun.edu.rs
- Admin Panel: admin.ets-zemun.edu.rs
- API: api.ets-zemun.edu.rs
Deployment services:
- Vercel - Used for deploying both frontend services with CI/CD.
- Render - Used for Dockerized deployment of the backend API.
This project is licensed under the MIT License.
The ETS Zemun project is developed and maintained by: