Skip to content

About

Project-finder system in Docker containers

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project Finder

A full-stack web application for collecting, storing and presenting consultant assignment listings from multiple external sources. The project was developed during my internship at Rejlers as a way to centralize assignment data and make it easier to search, filter and review relevant consultant opportunities.

Overview

The application consists of a Spring Boot backend, a Vue frontend and a PostgreSQL database, all running together through Docker Compose.

The backend fetches assignment data from several sources using a combination of REST APIs, GraphQL endpoints, sitemap parsing and HTML parsing. The collected data is normalized and stored in a PostgreSQL database, then displayed in a searchable frontend interface.

Features

  • Scrapes assignment listings from multiple external sources

  • Supports different scraping strategies:

    • REST API integration
    • GraphQL requests
    • Sitemap parsing
    • HTML parsing with Jsoup
  • Stores normalized assignment data in PostgreSQL

  • Frontend interface for browsing and filtering assignments

  • Keyword-based filtering

  • JWT-based authentication

  • Admin-only scraper trigger

  • Docker Compose setup for frontend, backend and database

Tech Stack

Backend

  • Java
  • Spring Boot
  • Spring Security
  • Spring Data JPA
  • PostgreSQL
  • Jsoup
  • Jackson
  • JWT authentication
  • Maven

Frontend

  • Vue 3
  • Vite
  • Tailwind CSS
  • Axios

DevOps

  • Docker
  • Docker Compose
  • Nginx

Architecture

Frontend (Vue + Nginx)
        |
        v
Backend (Spring Boot REST API)
        |
        v
PostgreSQL Database
        ^
        |
External assignment sources

Getting Started

Prerequisites

Make sure you have the following installed:

  • Docker
  • Docker Compose

Run the application

Clone the repository:

git clone <repository-url>
cd <repository-folder>

Start the application:

docker compose up --build

The application will start three services:

  • Frontend
  • Backend
  • PostgreSQL database

Access the application

Frontend:

http://localhost:5173

Backend API:

http://localhost:6767

Authentication

The application includes a simple JWT-based authentication system for demonstration purposes. To keep the project easy to run locally without additional configuration, it uses a simplified JWT authentication setup with predefined users and does not implement production-grade security practices.

Two predefined users are available for local testing:

  • User
  • Admin

The administrator account has permission to manually trigger scraper executions through the application.

Project Structure

.
├── backend/        # Spring Boot application
├── frontend/       # Vue application
├── docker-compose.yml
└── README.md

Scraping Sources

The application was built to handle several types of external data sources, including:

  • JSON-based public APIs
  • GraphQL endpoints
  • Static HTML pages
  • Sitemap-based page discovery
  • JavaScript-hydrated pages where relevant data could be extracted from embedded page data

Each scraper maps external assignment data into a common internal project model.

What I Learned

This project gave me practical experience with:

  • Building a full-stack application from scratch
  • Designing a backend API with Spring Boot
  • Working with PostgreSQL and JPA
  • Containerizing a full-stack application with Docker Compose
  • Handling inconsistent external data sources
  • Implementing different scraping strategies depending on the structure of each website
  • Structuring a frontend with Vue and reusable components
  • Authentication and role-based access control with JWT

Notes

This project was developed as an internship project and is intended as a portfolio project. Some external sources may change their structure over time, which can affect scraper behavior.

Future Improvements

Possible improvements include:

  • More advanced error handling and retry logic
  • Improved logging and monitoring
  • More detailed project filtering
  • Unit and integration tests
  • CI/CD pipeline
  • Deployment to a cloud environment

About

Project-finder system in Docker containers

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages