SeaTech is part of the broader INCONE60 Green – Digital and Green Transition of Small Ports initiative (2024–2026), a pioneering European project aimed at accelerating the digital and sustainable transformation of small and medium ports.
The INCONE60 Green project focuses on making small ports smarter, greener, and more efficient. Through the use of innovative technologies such as AI-driven analytics, digital twins, and automation, the project supports environmentally friendly logistics and port management practices that reduce emissions and optimize operations.
By connecting stakeholders — from port management and shipping agencies to vessel operators — INCONE60 Green fosters collaboration, knowledge exchange, and economic growth across the South Baltic region.
Our mission is to enable small ports to operate efficiently while minimizing environmental impact. The project promotes:
- Smarter digital workflows and real-time data management,
- Green logistics solutions that reduce the carbon footprint,
- Cross-border collaboration and innovation for sustainable maritime development.
This initiative is realized within the framework of the Interreg South Baltic Programme 2021–2027,
Co-financed by the European Regional Development Fund: 1 548 720 EUR
Project ID: STHB.01.01.-IP.01-0009/23
Title: INCONE60 – Digital and Green Transition of Small Ports
SeaTech serves as one of the core digital tools developed within INCONE60 Green — a web-based platform supporting small port operations, vessel traffic visualization, and cost management automation using data sources such as AIS (VesselFinder).
The system is based on Java Spring, Angular, Docker, and Keycloak for IAM integration, enabling both port authorities and agents to collaborate securely and efficiently.
This README provides a complete guide for developers and technical teams working on the SeaTech module, including:
- Environment setup and prerequisites,
- Configuration for port-specific data,
- Instructions for running Dockerized environments,
- Keycloak authentication setup,
- E2E testing and project structure.
- Prerequisites
- Quick Start
- Port-Specific Configuration
- Development Setup
- Maven Repository Access
- Keycloak Configuration
- Testing
- Project Structure
- Docker and Docker Compose (for containerized deployment)
- Java 21+ (for backend development)
- Node.js 18+ and npm (for frontend development)
- Maven 3.8+ (or use the included Maven Wrapper)
- Configure hosts file (see Initial Configuration)
- Set up port-specific data (see Port-Specific Configuration)
- Create
.envfile with your GitLab access token - Start dependencies:
docker-compose --profile deps up --build - Start application:
docker-compose --profile app up --build - Access the application: http://localhost:4200
For detailed instructions on preparing port-specific data including:
- Quay definitions (berths, bollards, depths)
- Cost types and pricing (commodity dues, services, shipping dues)
- Port map and quay annotations
- Port logo and branding
👉 See the complete guide in seatech-backend/README.md
This configuration is essential for the system to work correctly with your port's infrastructure and pricing.
Add the following entry to your hosts file:
Linux/Mac: /etc/hosts
Windows: C:\Windows\System32\drivers\etc\hosts
127.0.0.1 keycloak.seatechThis allows the application to properly resolve the Keycloak authentication server.
Start the required infrastructure services (databases, Keycloak, and mail server):
docker-compose --profile deps up --buildThis command starts:
- PostgreSQL - Database for Keycloak
- PostgreSQL - Database for the backend application
- Keycloak - Authentication and authorization server
- Admin console: http://localhost:8080/
- Login credentials:
- Username:
admin - Password:
admin
- Username:
- Test user account:
- Username:
user1 - Password:
password1
- Username:
- On first run, imports realm configuration from
keycloak/import/seatech-realm.json
- MailHog - Local SMTP server for testing email notifications
- SMTP port:
1025 - Web interface: http://localhost:8025
- SMTP port:
Create a .env file in the root directory with the following variables:
CI_JOB_TOKEN=<your_gitlab_access_token>
AUTH_TOKEN_HEADER_NAME=Private-Token
ANGULAR_BUILD_CONFIGURATION=<angular_build_configuration>CI_JOB_TOKEN: Your GitLab access token (see Maven Repository Access)AUTH_TOKEN_HEADER_NAME: Set toPrivate-TokenANGULAR_BUILD_CONFIGURATION: Optional, defaults tolocal-neverland-port
These variables are required for downloading dependencies from the private Maven repository during Docker image compilation.
docker-compose --profile app up --buildThis starts both the backend and frontend services. The application will be available at:
- Frontend: http://localhost:4200
- Backend API: http://localhost:9090
For faster frontend development without Docker:
npm run start-${portName}Examples:
# For "neverland-port" port
npm run start-neverland-port
This allows hot-reloading during development while connecting to the backend running in Docker.
---
## Maven Repository Access
To access the private Maven dependency repository on `devel.inero.com.pl`:
### 1. Generate GitLab Access Token
Generate a personal access token with `read_api` scope:
- Follow the [GitLab documentation](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html)
### 2. Configure Maven Settings
Create or edit `~/.m2/settings.xml`:
```xml
<settings>
<servers>
<server>
<id>devel-inero-com-pl-maven</id>
<configuration>
<httpHeaders>
<property>
<name>Private-Token</name>
<value>YOUR_ACCESS_TOKEN</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
</settings>Replace YOUR_ACCESS_TOKEN with your generated token.
- Open File → Settings
- Navigate to Build, Execution, Deployment → Build Tools → Maven
- Check "Always update snapshots"
If you need to export the current Keycloak realm configuration:
-
Stop the dependencies (if running)
-
Run the export profile:
docker-compose --profile realm-export up
-
Wait for completion. Keycloak will display:
INFO [org.keycloak.services] (main) KC-SERVICES0034: Export of realm 'seatech' requested. INFO [org.keycloak.exportimport.singlefile.SingleFileExportProvider] (main) Exporting realm 'seatech' into file /tmp/realm-export/seatech-realm.json INFO [org.keycloak.services] (main) KC-SERVICES0035: Export finished successfully ... INFO [io.quarkus] (main) Keycloak stopped in 0.075s -
Stop the container with
Ctrl+C -
Find the export at
keycloak/import/seatech-realm.json
Prerequisites:
- Start dependencies with
docker-compose --profile deps up - Start the backend and frontend
Run tests:
cd seatech-frontend
npm install
npx cypress run --browser chrome-
Start all services (dependencies, backend, frontend)
-
Open Cypress GUI:
cd seatech-frontend npx cypress open -
Select "E2E Testing"
-
Choose a browser
-
Select and run specs
Test Locations:
- Test files:
./seatech-frontend/cypress/e2e/ - Common code:
./seatech-frontend/cypress/support/
- Backend Configuration: See
seatech-backend/README.mdfor detailed backend setup and port data configuration - Frontend Development: Check
seatech-frontend/for Angular-specific documentation
For issues, questions, or contributions, please contact the development team or open an issue in the project repository.