A web application built on .NET, React, MSSQL, Azure, and OpenAI, designed to manage course-related data at the University of Economics – Varna. Students actively use the platform while also developing new functionalities for it.
| Environment | URL | Notes |
|---|---|---|
| Production | https://students-manager.site/ | Public production deployment |
| Development | https://students-manager-dev.azurewebsites.net/ | Dev backend / API deployment |
| React (SPA) | https://students-manager-spa.azurewebsites.net/ | React version of the platform |
main.js is a single bundled + minified file that mixes third-party libraries with a custom global App namespace (site logic)
- jQuery 3.1.1
- GSAP TweenMax 1.19.x (plus plugins like ScrollToPlugin, CSSPlugin, etc.)
- ScrollMagic 2.0.5 (plus GSAP plugin)
- Blazy (lazy-loading images)
- fullPage.js (one-page scrolling sections)
- Swiper (carousel/slider)
- Plyr (video/audio player)
- jQBrowser (UA detection helper)
The bundle defines a global App object and initializes multiple modules via App.init().
On window load it calls:
App.resize()→ setsApp.viewport_height/App.viewport_widthandApp.mobilebased on UA/widthApp.bind()→ attaches UI handlers (menu, category tabs, video popup, job popup, chatbot start, etc.)App.UI.init()→ lazy-loading + fullPage initializationApp.Test.init()→ course tests behaviorApp.Scroll.init()→ parallax + header scroll states + scroll-toApp.sliderSwipper.init()→ initializes Swiper sliders- plus
App.Animations,App.Login,App.Profile, etc.
The key module is App.Test. It binds click handlers on the active question only:
#testclick on.question.active .answer input→animateAfterClick#testclick on.question.active .answer input→countStats
countStats() behavior:
- reads the value of the clicked radio (
action/process/people/idea) - reads
data-answer(1or2) anddata-question(1..40) - resets/recomputes category totals
- records the chosen answer for that question
animateAfterClick() behavior:
- hides answers for non-active questions initially (
setOpacityToAllUnactiveQuestions) - after selecting an answer, animates the transition to the next
.question(via TweenMax) - uses a guard like
#test.animatingto prevent double-clicks during transitions
- Lodash (
_) — bundled/minified at the top of the file (utility functions like_.trim,_.map,_.filter, etc.) - Typed.js — bundled/minified (typing animation effect via
new Typed(...)) - jQuery (
$) — not bundled; expected to be available globally )
curl ^"http://localhost:5173/api/chatbot/save_results^" ^
-H ^"Content-Type: application/json^" ^
--data-raw ^"{^\^"res^\^":^\^"[{^\^\^\^"question^\^\^\^":^\^\^\^"Welcome! Shall we start with some basic JS questions?^\^\^\^",^\^\^\^"answer^\^\^\^":^\^\^\^"Yes^\^\^\^"}]^\^",^\^"name^\^":^\^"John Doe^\^",^\^"email^\^":^\^"john.doe@example.com^\^"}^"POST
curl --location 'https://students-manager-dev.azurewebsites.net/api/slido/question' \
--header 'Content-Type: application/json' \
--data '{
"question":"api post get"
}'GET
curl --location 'https://students-manager-dev.azurewebsites.net/api/slido/questions?limit=20&skip=0'Example response:
["api post get","lowwer api/slido/question","because","why?","question",".net 10"]Request
curl --request POST \
--url https://students-manager-dev.azurewebsites.net/api/login \
--header 'content-type: application/json' \
--data '{
"email" : "jordan@abv.bg",
"password" : "password"
}'Responses
// 200
{
"userId": "1eac9820-5e6e-4d10-6e94-08de36f40f78"
}// 401
{
"message": "Invalid email or password."
}- Framework: ASP.NET Core MVC
- Containerization: Docker & Docker Compose
- Testing: xUnit (StudentsManager.Tests)
├── StudentsManager.Mvc/ # Main MVC application
│ ├── Controllers/ # MVC Controllers
│ ├── Domain/ # Domain models
│ ├── Mappings/ # Object mappings
│ ├── Migrations/ # Database migrations
│ ├── Persistence/ # Data access layer
│ ├── Services/ # Business logic services
│ ├── Settings/ # Configuration settings
│ ├── Views/ # Razor views
│ └── wwwroot/ # Static files
├── StudentsManager.Tests/ # Unit tests
└── docker-compose.yml # Docker orchestration
cd StudentsManager.Mvc
dotnet run./run-app.shOr using Docker Compose directly:
docker-compose up./run-down-app.sh./run-tests.shOr manually:
dotnet test StudentsManager.Tests/| Script | Description |
|---|---|
run-app.sh |
Start the application |
run-down-app.sh |
Stop the application |
push-app.sh |
Push Docker images |
run-tests.sh |
Run test suite |
See LICENSE for details.
See SECURITY.md for security policies.