- Application: https://internship-workflow-management-syst.vercel.app/
- Backend API: https://iwms-backend-huseyin.onrender.com
The backend uses a free hosting instance and may take a short time to wake up after inactivity.
A prototype of the Internship Workflow Management System (IWMS) developed for the Hacettepe University Computer Engineering Department. This system aims to digitalize and manage the internship workflow by supporting authentication, internship report management, semester management, and supervisor verification processes.
The current prototype includes the following modules:
- Authentication / Login
- Internship Report Management
- Internship Semester Management
- Supervisor Request / Token / OTP Verification
Frontend
- React
- Vite
- Axios
- React Router
Backend
- Spring Boot
- Spring Data JPA
- Spring Security
- JWT Authentication
Database
- PostgreSQL
Containerization
- Docker / Docker Compose
eternia/
├── docker-compose.yml
├── docs/
├── iwmsBackend/
└── iwmsFrontend/
iwmsBackend→ Spring Boot backendiwmsFrontend→ React frontenddocker-compose.yml→ PostgreSQL database containerdocs→ project documents and deliverables
Before running the project, make sure the following are installed:
- Git
- Docker Desktop
- Java 17
- Node.js
- npm
You can check them with:
git --version
docker --version
java --version
node --version
npm --versionAfter cloning the repository or pulling the latest changes, follow these steps carefully.
cd eterniaMake sure Docker Desktop is open.
Then run:
docker-compose up -dTo verify that the database container is running:
docker psOpen a new terminal and run:
cd eternia/iwmsBackend
./mvnw spring-boot:runThe backend should run on:
http://localhost:8080
Open another new terminal and run:
cd eternia/iwmsFrontend
npm install
npm run devThe frontend should run on:
http://localhost:5173
Open that address in your browser.
Student
- Email:
student@iwms.local - Password:
1234
Coordinator
- Email:
coordinator@iwms.local - Password:
1234
Admin
- Email:
admin@iwms.local - Password:
1234
The project currently uses JWT-based authentication.
Authentication flow:
- User logs in with email and password
- Backend validates credentials
- Backend returns a JWT token
- Frontend stores the token
- Token is sent with protected requests using the
Authorization: Bearer ...header - Backend enforces authentication and role-based authorization
This means:
- Unauthenticated users cannot access protected pages
- Users can only access pages allowed for their role
- Backend also enforces authorization rules
Public
- Home
- Login
- Company Registration
- Supervisor Access
Student
- Internship Reports
- Supervisor Requests
- Status Tracking
- Help / Content
Coordinator / Admin
- Semesters
- Supervisor Requests
- Internship Assessments
Admin
- User Management
- Company Registration Review
- FAQ / Announcement Management
- Login with seeded users
- JWT-based authentication
- Protected routes
- Role-based page access
- Create report draft
- Update report draft
- Delete report draft
- Submit report
- Real PDF file upload
- Attendance and duration validation
- Status tracking
- Create semester
- Update semester
- Deactivate semester
- Delete semester
- Overlap validation
- Create supervisor request
- Corporate email validation
- Approve / reject request
- Generate access token and OTP
- Verify access with token and OTP
- Supervisor token and OTP verification
- Supervisor certification form submission
- Certified report review by coordinator/admin
- Final internship approval or rejection
- Public company registration form
- Corporate domain validation
- Admin approval/rejection
- Approved company domains can be used in supervisor verification flows
- Create and manage FAQ/announcement content
- Publish content for students
The project includes automated backend and frontend tests to verify the main internship workflow use cases and demo-critical flows.
Backend tests are implemented with Spring Boot, JUnit, and Mockito.
To run all backend tests:
cd iwmsBackend
mvn testThe backend test suite covers the main use cases, including:
- Authentication and login
- User management
- Internship report management and PDF upload validation
- Status tracking
- Supervisor request, token, and OTP verification
- Supervisor certification
- Internship semester management
- Internship assessment
- Company registration and approval
- FAQ and announcement management
Frontend unit/component tests are implemented with Vitest and React Testing Library.
To run frontend tests:
cd iwmsFrontend
npm run testThese tests verify selected UI components, utility functions, and page-level behavior such as status timeline rendering and assessment page interactions.
Frontend end-to-end tests are implemented with Playwright.
Before running E2E tests, make sure:
- Docker database is running.
- Backend is running on
http://localhost:8080. - Frontend dependencies are installed.
Start the backend in a separate terminal:
cd iwmsBackend
mvn spring-boot:runThen run Playwright tests from the frontend folder:
cd iwmsFrontend
npm run e2eThe Playwright E2E suite covers demo-critical browser flows, including:
- Public and protected route behavior
- Authenticated login and role-based access control
- Company registration and admin approval
- Internship report PDF upload and submission
- Supervisor request creation and coordinator token/OTP approval
- Supervisor certification and coordinator assessment
To verify that the frontend builds successfully:
cd iwmsFrontend
npm run buildBefore the final demo, run:
cd iwmsBackend
mvn testcd iwmsFrontend
npm run e2e
npm run test
npm run buildAll commands should pass before opening a merge request or presenting the demo.
The database runs inside Docker.
To connect to PostgreSQL manually:
docker exec -it iwms-postgres psql -U iwms_user -d iwmsUseful PostgreSQL commands:
-- List tables
\dt
-- Show users
SELECT * FROM users;
-- Show internship reports
SELECT * FROM internship_reports;
-- Show internship semesters
SELECT * FROM internship_semesters;
-- Show supervisor requests
SELECT * FROM supervisor_requests;
-- Exit PostgreSQL shell
\qIf the database becomes messy or you want a clean start:
cd eternia
docker-compose down -v
docker-compose up -dThen restart the backend:
cd iwmsBackend
./mvnw spring-boot:runThis removes old database data and recreates it from scratch.
Stop frontend:
In the frontend terminal: press Ctrl + C
Stop backend:
In the backend terminal: press Ctrl + C
Stop database:
docker-compose downAlways pull the latest changes first:
git pullIf frontend dependencies changed:
cd iwmsFrontend
npm installIf backend dependencies changed, Maven wrapper will resolve them automatically when the backend starts.
If authentication or DB structure changed, resetting the Docker database may help:
docker-compose down -v
docker-compose up -dRecommended workflow:
- Pull the latest changes
- Create or switch to your branch
- Make your changes
- Test locally
- Commit your changes
- Push your branch
- Open a merge request
Example:
git pull
git checkout your-branch-name
git add .
git commit -m "Your commit message"
git pushProject team: eternia
Project: Internship Workflow Management System (IWMS)
See DEPLOYMENT.md for the Vercel, Render, and PostgreSQL deployment configuration.