Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Internship Management System (IMS)

A multi-application platform for managing student internships, connecting students, companies, and faculty through a shared backend. Built as a university project for the Internet Programming course at the Faculty of Electrical Engineering, University of Banja Luka.

IMS

Overview

The system supports the full internship lifecycle: students build a CV profile and apply to internship postings, companies review applications and manage ongoing internships, and faculty oversee the process, evaluate outcomes, and manage company/student records. An AI-powered recommendation engine suggests relevant internships to students based on their profile.

Three separate client applications talk to a single REST API backend, each tailored to a specific user role:

Application Role Stack Port
backend Shared REST API Spring Boot, PostgreSQL 8080
student-app Students React + TypeScript (Vite) 5173
company-app Companies Java Servlets + JSP (embedded Tomcat) 8081
faculty-app Faculty staff Java Servlets + JSP (embedded Tomcat) 8082

Features

Students

  • Build a CV profile (education, experience, skills, interests) and export it as PDF
  • Browse and apply to internship postings
  • Get AI-powered internship recommendations based on their profile (Gemini)
  • Log work hours / journal entries during an active internship
  • Track application status and evaluation results

Companies

  • Post and manage internship listings
  • Review student applications and CVs, accept or reject candidates
  • Review and comment on student work logs
  • Submit end-of-internship evaluations

Faculty

  • Manage company and student records (including bulk student import via CSV)
  • Oversee internships, applications, and work logs across the system
  • Review evaluations submitted by companies

Architecture

  • Backend — Spring Boot REST API with a modular, domain-driven structure (student, company, internship, application, evaluation, worklog, cv, recommendation, user). Stateless JWT authentication, PostgreSQL with Flyway migrations, OpenAPI/Swagger documentation, CSV and PDF export, and an AI client abstraction (Gemini, with a stub implementation for local development without an API key).
  • student-app — a single-page application (React Router, typed API client) consuming the backend REST API directly.
  • company-app / faculty-app — server-rendered Java web apps (Servlets + JSP) that act as thin clients, calling the backend through a typed gateway layer rather than hitting the database directly.
  • Infrastructure — PostgreSQL 16 and pgAdmin, orchestrated via Docker Compose for local development.

Tech Stack

  • Backend: Java, Spring Boot (Web, Security, Data JPA, Validation, WebFlux), PostgreSQL, Flyway, JWT (jjwt), springdoc-openapi, OpenPDF, Apache Commons CSV, Google GenAI (Gemini)
  • Student App: React 18, TypeScript, Vite, React Router
  • Company / Faculty Apps: Java, Jakarta Servlet API, JSP, embedded Tomcat
  • Infrastructure: Docker Compose, PostgreSQL, pgAdmin

Getting Started

Prerequisites

  • Java 17+ and Maven
  • Node.js and npm
  • Docker (for the PostgreSQL database)

Run everything

The repo includes a run.bat script that starts the database, backend, and all three client apps in one go:

run.bat

This will:

  1. Start PostgreSQL (and pgAdmin) via Docker Compose
  2. Start the backend on http://localhost:8080
  3. Start company-app on http://localhost:8081
  4. Start faculty-app on http://localhost:8082
  5. Start student-app on http://localhost:5173

Manual setup

# 1. Start the database
docker compose -f backend/docker-compose.yml up -d

# 2. Start the backend
cd backend && mvn spring-boot:run

# 3. Start each client app in its own terminal
cd company-app && run-dev.bat   # or run-dev.ps1
cd faculty-app && run-dev.bat
cd student-app && npm install && npm run dev

Before running, set real values for security.jwt.secret and ai.api-key in backend/src/main/resources/application.properties (placeholder values are provided for local development). If no Gemini API key is configured, the recommendation service falls back to a stub implementation.

API Documentation

Once the backend is running, interactive API docs are available at:

http://localhost:8080/swagger-ui

Project Structure

.
├── backend/          # Spring Boot REST API
├── company-app/       # Server-rendered app for companies
├── faculty-app/        # Server-rendered app for faculty staff
├── student-app/       # React + TypeScript SPA for students
├── docker/            # Docker Compose setup for local infra
└── run.bat            # One-command startup script (Windows)

Author

Vedran Topić — github.com/vedrantopicc

About

Multi-app internship management system with backend API, and separate web apps for students, companies and faculty. Built with Docker for containerized deployment.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages