Skip to content
This repository was archived by the owner on Jul 28, 2026. It is now read-only.

Repository files navigation

BugBoard26 is a collaborative issue-tracking platform for software teams. It provides a shared workspace for reporting, assigning, prioritizing, tracking, and resolving issues throughout a project's lifecycle.

The application combines an Angular frontend with a Spring Boot REST API, PostgreSQL persistence, and Azure Blob Storage-compatible attachments.

Features

  • Project creation and member management
  • Invitation-based user registration
  • Role-based access for administrators, technical users, and external users
  • Issue creation, assignment, status tracking, filtering, sorting, and pagination
  • Project-specific tags and priorities
  • File and image attachments
  • CSV issue export
  • Project activity reports
  • Responsive interface for desktop and mobile devices
  • JWT authentication through HTTP-only cookies
  • Interactive OpenAPI documentation

Architecture

flowchart LR
U[Web browser] --> F[Angular frontend]
F -->|REST / JSON| B[Spring Boot backend]
B --> P[(PostgreSQL)]
B --> S[Azure Blob Storage or Azurite]
Loading
LayerTechnologies
FrontendAngular 21, TypeScript, RxJS, Bootstrap 5, SCSS
BackendJava 21, Spring Boot 4, Spring Security, Spring Data JPA
DataPostgreSQL 15, Hibernate
AttachmentsAzure Blob Storage, Azurite for local development
TestingJUnit 5, Mockito, H2, Vitest, JaCoCo
Delivery and qualityDocker/Podman, GitHub Actions, SonarQube Cloud, Microsoft Azure

Quick start

The simplest way to run the complete application is with Podman Compose or Docker Compose.

Prerequisites

  • Git
  • Podman with Compose support, or Docker with Docker Compose
  • OpenSSL, used to generate a secure JWT signing secret

On macOS, start the Podman virtual machine before launching the stack:

podman machine start

1. Clone the repository

git clone https://github.com/simoneparente/BugBoard26.git
cd BugBoard26

2. Create the environment file

cp .env.example .env
openssl rand -base64 48

Open .env and:

  • replace JWT_SECRET with the generated value;
  • choose secure PostgreSQL and seeded-user credentials;
  • replace the placeholder Azure Storage values with a valid Azure Blob Storage or Azurite connection string.

When the backend runs inside the Compose network, an Azurite connection string must use azurite:10000 as its Blob service endpoint. When the backend runs directly on the host, use the exposed endpoint at 127.0.0.1:10001.

Never commit .env or any production credential.

3. Start the application

With Podman:

podman compose up -d --build
podman compose ps

With Docker:

docker compose up -d --build
docker compose ps

The first build may take a few minutes while the application images and dependencies are downloaded.

4. Open the services

ServiceAddress
Web applicationhttp://localhost:4200
Backend APIhttp://localhost:8080/api
Swagger UIhttp://localhost:8080/swagger-ui/index.html
OpenAPI documenthttp://localhost:8080/v3/api-docs
PostgreSQLlocalhost:5432 by default
Azurite Blob servicelocalhost:10001

The initial administrator account uses the SEED_USERNAME and SEED_PASSWORD values from .env.

Stop the application

podman compose down

Docker users can run docker compose down instead. To remove the PostgreSQL and upload volumes as well, add --volumes; this permanently deletes local application data.

Local development

For development outside containers, install:

  • Java 21;
  • Node.js 22 and npm;
  • PostgreSQL 15, or run the db Compose service;
  • Azure Blob Storage access, or run the azurite Compose service.

Start only the local infrastructure:

podman compose up -d db azurite

Export the required variables from .env in your terminal or IDE before starting the backend. At minimum, configure JWT_SECRET, AZURE_STORAGE_CONNECTION_STRING, and AZURE_STORAGE_CONTAINER_NAME.

Backend

From the repository root:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml spring-boot:run

The backend uses localhost:5432 by default and starts on port 8080.

Frontend

In a separate terminal:

cd bugboard-frontend
npm ci
npm start

The Angular development server starts on port 4200 and proxies /api requests to http://localhost:8080.

Configuration

The main environment variables are:

VariablePurposeDefault or example
POSTGRES_DBPostgreSQL database namebugboard_db
POSTGRES_USERPostgreSQL userbugboard
POSTGRES_PASSWORDPostgreSQL passwordNo safe production default
POSTGRES_PORTHost PostgreSQL port5432
JWT_SECRETHS256 signing secret; must be at least 32 bytesRequired
SEED_USERNAMEInitial administrator usernamebugboard
SEED_EMAILInitial administrator emailbugboard@bugboard.it
SEED_PASSWORDInitial administrator passwordChange before shared use
AZURE_STORAGE_CONNECTION_STRINGAzure Blob Storage or Azurite connectionRequired
AZURE_STORAGE_CONTAINER_NAMEAttachment containerattachments
CORS_ALLOWED_ORIGINSComma-separated frontend originshttp://localhost:4200
POSTGRES_SSLMODEPostgreSQL SSL modeprefer outside Compose

Tests and quality checks

Run the backend test suite:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml test

Run the frontend test suite:

cd bugboard-frontend
npm ci
npm test

Check or fix frontend formatting:

npm run format:check
npm run format:fix

Create production builds:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml clean package
cd bugboard-frontend
npm ci
npm run build:prod

GitHub Actions checks frontend formatting, builds and analyzes the backend with SonarQube Cloud, and deploys the application to Azure from the main branch.

Repository structure

.
├── bugboard-backend/ Spring Boot REST API
├── bugboard-frontend/ Angular web application
├── db/ PostgreSQL container configuration
├── setup/ Local and Azure helper scripts
├── .github/workflows/ CI, quality analysis, and deployment workflows
├── .env.example Environment configuration template
└── docker-compose.yml Complete local application stack

Additional operational commands are available in setup/README.md.

Development workflow

Development uses short-lived feature and bug-fix branches:

  • main contains stable releases;
  • development is the integration branch;
  • feature/* contains new features;
  • bug/* and fix/* contain corrections.

Changes should be submitted through a pull request and reviewed before they are merged.

Academic context

BugBoard26 was developed for the Software Engineering course in the 2025/2026 academic year.

  • University: University of Naples Federico II
  • Department: Department of Electrical Engineering and Information Technology (DIETI)
  • Degree programme: Computer Science (L-31)
  • Professors: P. Tramontana and B. Breve

Team

  • Simone Parente Martone — N86004297
  • Mario Penna — N86003308
  • Michela Pollio — N86003697

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - simoneparente/BugBoard26: A lightweight bug tracking board to manage issues and streamline workflows. Developed as a university project for the Software Engineering course. · GitHub
Skip to content
This repository was archived by the owner on Jul 28, 2026. It is now read-only.

Repository files navigation

BugBoard26 is a collaborative issue-tracking platform for software teams. It provides a shared workspace for reporting, assigning, prioritizing, tracking, and resolving issues throughout a project's lifecycle.

The application combines an Angular frontend with a Spring Boot REST API, PostgreSQL persistence, and Azure Blob Storage-compatible attachments.

Features

  • Project creation and member management
  • Invitation-based user registration
  • Role-based access for administrators, technical users, and external users
  • Issue creation, assignment, status tracking, filtering, sorting, and pagination
  • Project-specific tags and priorities
  • File and image attachments
  • CSV issue export
  • Project activity reports
  • Responsive interface for desktop and mobile devices
  • JWT authentication through HTTP-only cookies
  • Interactive OpenAPI documentation

Architecture

flowchart LR
U[Web browser] --> F[Angular frontend]
F -->|REST / JSON| B[Spring Boot backend]
B --> P[(PostgreSQL)]
B --> S[Azure Blob Storage or Azurite]
Loading
LayerTechnologies
FrontendAngular 21, TypeScript, RxJS, Bootstrap 5, SCSS
BackendJava 21, Spring Boot 4, Spring Security, Spring Data JPA
DataPostgreSQL 15, Hibernate
AttachmentsAzure Blob Storage, Azurite for local development
TestingJUnit 5, Mockito, H2, Vitest, JaCoCo
Delivery and qualityDocker/Podman, GitHub Actions, SonarQube Cloud, Microsoft Azure

Quick start

The simplest way to run the complete application is with Podman Compose or Docker Compose.

Prerequisites

  • Git
  • Podman with Compose support, or Docker with Docker Compose
  • OpenSSL, used to generate a secure JWT signing secret

On macOS, start the Podman virtual machine before launching the stack:

podman machine start

1. Clone the repository

git clone https://github.com/simoneparente/BugBoard26.git
cd BugBoard26

2. Create the environment file

cp .env.example .env
openssl rand -base64 48

Open .env and:

  • replace JWT_SECRET with the generated value;
  • choose secure PostgreSQL and seeded-user credentials;
  • replace the placeholder Azure Storage values with a valid Azure Blob Storage or Azurite connection string.

When the backend runs inside the Compose network, an Azurite connection string must use azurite:10000 as its Blob service endpoint. When the backend runs directly on the host, use the exposed endpoint at 127.0.0.1:10001.

Never commit .env or any production credential.

3. Start the application

With Podman:

podman compose up -d --build
podman compose ps

With Docker:

docker compose up -d --build
docker compose ps

The first build may take a few minutes while the application images and dependencies are downloaded.

4. Open the services

ServiceAddress
Web applicationhttp://localhost:4200
Backend APIhttp://localhost:8080/api
Swagger UIhttp://localhost:8080/swagger-ui/index.html
OpenAPI documenthttp://localhost:8080/v3/api-docs
PostgreSQLlocalhost:5432 by default
Azurite Blob servicelocalhost:10001

The initial administrator account uses the SEED_USERNAME and SEED_PASSWORD values from .env.

Stop the application

podman compose down

Docker users can run docker compose down instead. To remove the PostgreSQL and upload volumes as well, add --volumes; this permanently deletes local application data.

Local development

For development outside containers, install:

  • Java 21;
  • Node.js 22 and npm;
  • PostgreSQL 15, or run the db Compose service;
  • Azure Blob Storage access, or run the azurite Compose service.

Start only the local infrastructure:

podman compose up -d db azurite

Export the required variables from .env in your terminal or IDE before starting the backend. At minimum, configure JWT_SECRET, AZURE_STORAGE_CONNECTION_STRING, and AZURE_STORAGE_CONTAINER_NAME.

Backend

From the repository root:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml spring-boot:run

The backend uses localhost:5432 by default and starts on port 8080.

Frontend

In a separate terminal:

cd bugboard-frontend
npm ci
npm start

The Angular development server starts on port 4200 and proxies /api requests to http://localhost:8080.

Configuration

The main environment variables are:

VariablePurposeDefault or example
POSTGRES_DBPostgreSQL database namebugboard_db
POSTGRES_USERPostgreSQL userbugboard
POSTGRES_PASSWORDPostgreSQL passwordNo safe production default
POSTGRES_PORTHost PostgreSQL port5432
JWT_SECRETHS256 signing secret; must be at least 32 bytesRequired
SEED_USERNAMEInitial administrator usernamebugboard
SEED_EMAILInitial administrator emailbugboard@bugboard.it
SEED_PASSWORDInitial administrator passwordChange before shared use
AZURE_STORAGE_CONNECTION_STRINGAzure Blob Storage or Azurite connectionRequired
AZURE_STORAGE_CONTAINER_NAMEAttachment containerattachments
CORS_ALLOWED_ORIGINSComma-separated frontend originshttp://localhost:4200
POSTGRES_SSLMODEPostgreSQL SSL modeprefer outside Compose

Tests and quality checks

Run the backend test suite:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml test

Run the frontend test suite:

cd bugboard-frontend
npm ci
npm test

Check or fix frontend formatting:

npm run format:check
npm run format:fix

Create production builds:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml clean package
cd bugboard-frontend
npm ci
npm run build:prod

GitHub Actions checks frontend formatting, builds and analyzes the backend with SonarQube Cloud, and deploys the application to Azure from the main branch.

Repository structure

.
├── bugboard-backend/ Spring Boot REST API
├── bugboard-frontend/ Angular web application
├── db/ PostgreSQL container configuration
├── setup/ Local and Azure helper scripts
├── .github/workflows/ CI, quality analysis, and deployment workflows
├── .env.example Environment configuration template
└── docker-compose.yml Complete local application stack

Additional operational commands are available in setup/README.md.

Development workflow

Development uses short-lived feature and bug-fix branches:

  • main contains stable releases;
  • development is the integration branch;
  • feature/* contains new features;
  • bug/* and fix/* contain corrections.

Changes should be submitted through a pull request and reviewed before they are merged.

Academic context

BugBoard26 was developed for the Software Engineering course in the 2025/2026 academic year.

  • University: University of Naples Federico II
  • Department: Department of Electrical Engineering and Information Technology (DIETI)
  • Degree programme: Computer Science (L-31)
  • Professors: P. Tramontana and B. Breve

Team

  • Simone Parente Martone — N86004297
  • Mario Penna — N86003308
  • Michela Pollio — N86003697

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - simoneparente/BugBoard26: A lightweight bug tracking board to manage issues and streamline workflows. Developed as a university project for the Software Engineering course. · GitHub
Skip to content
This repository was archived by the owner on Jul 28, 2026. It is now read-only.

Repository files navigation

BugBoard26 is a collaborative issue-tracking platform for software teams. It provides a shared workspace for reporting, assigning, prioritizing, tracking, and resolving issues throughout a project's lifecycle.

The application combines an Angular frontend with a Spring Boot REST API, PostgreSQL persistence, and Azure Blob Storage-compatible attachments.

Features

  • Project creation and member management
  • Invitation-based user registration
  • Role-based access for administrators, technical users, and external users
  • Issue creation, assignment, status tracking, filtering, sorting, and pagination
  • Project-specific tags and priorities
  • File and image attachments
  • CSV issue export
  • Project activity reports
  • Responsive interface for desktop and mobile devices
  • JWT authentication through HTTP-only cookies
  • Interactive OpenAPI documentation

Architecture

flowchart LR
U[Web browser] --> F[Angular frontend]
F -->|REST / JSON| B[Spring Boot backend]
B --> P[(PostgreSQL)]
B --> S[Azure Blob Storage or Azurite]
Loading
LayerTechnologies
FrontendAngular 21, TypeScript, RxJS, Bootstrap 5, SCSS
BackendJava 21, Spring Boot 4, Spring Security, Spring Data JPA
DataPostgreSQL 15, Hibernate
AttachmentsAzure Blob Storage, Azurite for local development
TestingJUnit 5, Mockito, H2, Vitest, JaCoCo
Delivery and qualityDocker/Podman, GitHub Actions, SonarQube Cloud, Microsoft Azure

Quick start

The simplest way to run the complete application is with Podman Compose or Docker Compose.

Prerequisites

  • Git
  • Podman with Compose support, or Docker with Docker Compose
  • OpenSSL, used to generate a secure JWT signing secret

On macOS, start the Podman virtual machine before launching the stack:

podman machine start

1. Clone the repository

git clone https://github.com/simoneparente/BugBoard26.git
cd BugBoard26

2. Create the environment file

cp .env.example .env
openssl rand -base64 48

Open .env and:

  • replace JWT_SECRET with the generated value;
  • choose secure PostgreSQL and seeded-user credentials;
  • replace the placeholder Azure Storage values with a valid Azure Blob Storage or Azurite connection string.

When the backend runs inside the Compose network, an Azurite connection string must use azurite:10000 as its Blob service endpoint. When the backend runs directly on the host, use the exposed endpoint at 127.0.0.1:10001.

Never commit .env or any production credential.

3. Start the application

With Podman:

podman compose up -d --build
podman compose ps

With Docker:

docker compose up -d --build
docker compose ps

The first build may take a few minutes while the application images and dependencies are downloaded.

4. Open the services

ServiceAddress
Web applicationhttp://localhost:4200
Backend APIhttp://localhost:8080/api
Swagger UIhttp://localhost:8080/swagger-ui/index.html
OpenAPI documenthttp://localhost:8080/v3/api-docs
PostgreSQLlocalhost:5432 by default
Azurite Blob servicelocalhost:10001

The initial administrator account uses the SEED_USERNAME and SEED_PASSWORD values from .env.

Stop the application

podman compose down

Docker users can run docker compose down instead. To remove the PostgreSQL and upload volumes as well, add --volumes; this permanently deletes local application data.

Local development

For development outside containers, install:

  • Java 21;
  • Node.js 22 and npm;
  • PostgreSQL 15, or run the db Compose service;
  • Azure Blob Storage access, or run the azurite Compose service.

Start only the local infrastructure:

podman compose up -d db azurite

Export the required variables from .env in your terminal or IDE before starting the backend. At minimum, configure JWT_SECRET, AZURE_STORAGE_CONNECTION_STRING, and AZURE_STORAGE_CONTAINER_NAME.

Backend

From the repository root:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml spring-boot:run

The backend uses localhost:5432 by default and starts on port 8080.

Frontend

In a separate terminal:

cd bugboard-frontend
npm ci
npm start

The Angular development server starts on port 4200 and proxies /api requests to http://localhost:8080.

Configuration

The main environment variables are:

VariablePurposeDefault or example
POSTGRES_DBPostgreSQL database namebugboard_db
POSTGRES_USERPostgreSQL userbugboard
POSTGRES_PASSWORDPostgreSQL passwordNo safe production default
POSTGRES_PORTHost PostgreSQL port5432
JWT_SECRETHS256 signing secret; must be at least 32 bytesRequired
SEED_USERNAMEInitial administrator usernamebugboard
SEED_EMAILInitial administrator emailbugboard@bugboard.it
SEED_PASSWORDInitial administrator passwordChange before shared use
AZURE_STORAGE_CONNECTION_STRINGAzure Blob Storage or Azurite connectionRequired
AZURE_STORAGE_CONTAINER_NAMEAttachment containerattachments
CORS_ALLOWED_ORIGINSComma-separated frontend originshttp://localhost:4200
POSTGRES_SSLMODEPostgreSQL SSL modeprefer outside Compose

Tests and quality checks

Run the backend test suite:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml test

Run the frontend test suite:

cd bugboard-frontend
npm ci
npm test

Check or fix frontend formatting:

npm run format:check
npm run format:fix

Create production builds:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml clean package
cd bugboard-frontend
npm ci
npm run build:prod

GitHub Actions checks frontend formatting, builds and analyzes the backend with SonarQube Cloud, and deploys the application to Azure from the main branch.

Repository structure

.
├── bugboard-backend/ Spring Boot REST API
├── bugboard-frontend/ Angular web application
├── db/ PostgreSQL container configuration
├── setup/ Local and Azure helper scripts
├── .github/workflows/ CI, quality analysis, and deployment workflows
├── .env.example Environment configuration template
└── docker-compose.yml Complete local application stack

Additional operational commands are available in setup/README.md.

Development workflow

Development uses short-lived feature and bug-fix branches:

  • main contains stable releases;
  • development is the integration branch;
  • feature/* contains new features;
  • bug/* and fix/* contain corrections.

Changes should be submitted through a pull request and reviewed before they are merged.

Academic context

BugBoard26 was developed for the Software Engineering course in the 2025/2026 academic year.

  • University: University of Naples Federico II
  • Department: Department of Electrical Engineering and Information Technology (DIETI)
  • Degree programme: Computer Science (L-31)
  • Professors: P. Tramontana and B. Breve

Team

  • Simone Parente Martone — N86004297
  • Mario Penna — N86003308
  • Michela Pollio — N86003697

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - simoneparente/BugBoard26: A lightweight bug tracking board to manage issues and streamline workflows. Developed as a university project for the Software Engineering course. · GitHub
Skip to content
This repository was archived by the owner on Jul 28, 2026. It is now read-only.

Repository files navigation

BugBoard26 is a collaborative issue-tracking platform for software teams. It provides a shared workspace for reporting, assigning, prioritizing, tracking, and resolving issues throughout a project's lifecycle.

The application combines an Angular frontend with a Spring Boot REST API, PostgreSQL persistence, and Azure Blob Storage-compatible attachments.

Features

  • Project creation and member management
  • Invitation-based user registration
  • Role-based access for administrators, technical users, and external users
  • Issue creation, assignment, status tracking, filtering, sorting, and pagination
  • Project-specific tags and priorities
  • File and image attachments
  • CSV issue export
  • Project activity reports
  • Responsive interface for desktop and mobile devices
  • JWT authentication through HTTP-only cookies
  • Interactive OpenAPI documentation

Architecture

flowchart LR
U[Web browser] --> F[Angular frontend]
F -->|REST / JSON| B[Spring Boot backend]
B --> P[(PostgreSQL)]
B --> S[Azure Blob Storage or Azurite]
Loading
LayerTechnologies
FrontendAngular 21, TypeScript, RxJS, Bootstrap 5, SCSS
BackendJava 21, Spring Boot 4, Spring Security, Spring Data JPA
DataPostgreSQL 15, Hibernate
AttachmentsAzure Blob Storage, Azurite for local development
TestingJUnit 5, Mockito, H2, Vitest, JaCoCo
Delivery and qualityDocker/Podman, GitHub Actions, SonarQube Cloud, Microsoft Azure

Quick start

The simplest way to run the complete application is with Podman Compose or Docker Compose.

Prerequisites

  • Git
  • Podman with Compose support, or Docker with Docker Compose
  • OpenSSL, used to generate a secure JWT signing secret

On macOS, start the Podman virtual machine before launching the stack:

podman machine start

1. Clone the repository

git clone https://github.com/simoneparente/BugBoard26.git
cd BugBoard26

2. Create the environment file

cp .env.example .env
openssl rand -base64 48

Open .env and:

  • replace JWT_SECRET with the generated value;
  • choose secure PostgreSQL and seeded-user credentials;
  • replace the placeholder Azure Storage values with a valid Azure Blob Storage or Azurite connection string.

When the backend runs inside the Compose network, an Azurite connection string must use azurite:10000 as its Blob service endpoint. When the backend runs directly on the host, use the exposed endpoint at 127.0.0.1:10001.

Never commit .env or any production credential.

3. Start the application

With Podman:

podman compose up -d --build
podman compose ps

With Docker:

docker compose up -d --build
docker compose ps

The first build may take a few minutes while the application images and dependencies are downloaded.

4. Open the services

ServiceAddress
Web applicationhttp://localhost:4200
Backend APIhttp://localhost:8080/api
Swagger UIhttp://localhost:8080/swagger-ui/index.html
OpenAPI documenthttp://localhost:8080/v3/api-docs
PostgreSQLlocalhost:5432 by default
Azurite Blob servicelocalhost:10001

The initial administrator account uses the SEED_USERNAME and SEED_PASSWORD values from .env.

Stop the application

podman compose down

Docker users can run docker compose down instead. To remove the PostgreSQL and upload volumes as well, add --volumes; this permanently deletes local application data.

Local development

For development outside containers, install:

  • Java 21;
  • Node.js 22 and npm;
  • PostgreSQL 15, or run the db Compose service;
  • Azure Blob Storage access, or run the azurite Compose service.

Start only the local infrastructure:

podman compose up -d db azurite

Export the required variables from .env in your terminal or IDE before starting the backend. At minimum, configure JWT_SECRET, AZURE_STORAGE_CONNECTION_STRING, and AZURE_STORAGE_CONTAINER_NAME.

Backend

From the repository root:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml spring-boot:run

The backend uses localhost:5432 by default and starts on port 8080.

Frontend

In a separate terminal:

cd bugboard-frontend
npm ci
npm start

The Angular development server starts on port 4200 and proxies /api requests to http://localhost:8080.

Configuration

The main environment variables are:

VariablePurposeDefault or example
POSTGRES_DBPostgreSQL database namebugboard_db
POSTGRES_USERPostgreSQL userbugboard
POSTGRES_PASSWORDPostgreSQL passwordNo safe production default
POSTGRES_PORTHost PostgreSQL port5432
JWT_SECRETHS256 signing secret; must be at least 32 bytesRequired
SEED_USERNAMEInitial administrator usernamebugboard
SEED_EMAILInitial administrator emailbugboard@bugboard.it
SEED_PASSWORDInitial administrator passwordChange before shared use
AZURE_STORAGE_CONNECTION_STRINGAzure Blob Storage or Azurite connectionRequired
AZURE_STORAGE_CONTAINER_NAMEAttachment containerattachments
CORS_ALLOWED_ORIGINSComma-separated frontend originshttp://localhost:4200
POSTGRES_SSLMODEPostgreSQL SSL modeprefer outside Compose

Tests and quality checks

Run the backend test suite:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml test

Run the frontend test suite:

cd bugboard-frontend
npm ci
npm test

Check or fix frontend formatting:

npm run format:check
npm run format:fix

Create production builds:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml clean package
cd bugboard-frontend
npm ci
npm run build:prod

GitHub Actions checks frontend formatting, builds and analyzes the backend with SonarQube Cloud, and deploys the application to Azure from the main branch.

Repository structure

.
├── bugboard-backend/ Spring Boot REST API
├── bugboard-frontend/ Angular web application
├── db/ PostgreSQL container configuration
├── setup/ Local and Azure helper scripts
├── .github/workflows/ CI, quality analysis, and deployment workflows
├── .env.example Environment configuration template
└── docker-compose.yml Complete local application stack

Additional operational commands are available in setup/README.md.

Development workflow

Development uses short-lived feature and bug-fix branches:

  • main contains stable releases;
  • development is the integration branch;
  • feature/* contains new features;
  • bug/* and fix/* contain corrections.

Changes should be submitted through a pull request and reviewed before they are merged.

Academic context

BugBoard26 was developed for the Software Engineering course in the 2025/2026 academic year.

  • University: University of Naples Federico II
  • Department: Department of Electrical Engineering and Information Technology (DIETI)
  • Degree programme: Computer Science (L-31)
  • Professors: P. Tramontana and B. Breve

Team

  • Simone Parente Martone — N86004297
  • Mario Penna — N86003308
  • Michela Pollio — N86003697

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - simoneparente/BugBoard26: A lightweight bug tracking board to manage issues and streamline workflows. Developed as a university project for the Software Engineering course. · GitHub
Skip to content
This repository was archived by the owner on Jul 28, 2026. It is now read-only.

Repository files navigation

BugBoard26 is a collaborative issue-tracking platform for software teams. It provides a shared workspace for reporting, assigning, prioritizing, tracking, and resolving issues throughout a project's lifecycle.

The application combines an Angular frontend with a Spring Boot REST API, PostgreSQL persistence, and Azure Blob Storage-compatible attachments.

Features

  • Project creation and member management
  • Invitation-based user registration
  • Role-based access for administrators, technical users, and external users
  • Issue creation, assignment, status tracking, filtering, sorting, and pagination
  • Project-specific tags and priorities
  • File and image attachments
  • CSV issue export
  • Project activity reports
  • Responsive interface for desktop and mobile devices
  • JWT authentication through HTTP-only cookies
  • Interactive OpenAPI documentation

Architecture

flowchart LR
U[Web browser] --> F[Angular frontend]
F -->|REST / JSON| B[Spring Boot backend]
B --> P[(PostgreSQL)]
B --> S[Azure Blob Storage or Azurite]
Loading
LayerTechnologies
FrontendAngular 21, TypeScript, RxJS, Bootstrap 5, SCSS
BackendJava 21, Spring Boot 4, Spring Security, Spring Data JPA
DataPostgreSQL 15, Hibernate
AttachmentsAzure Blob Storage, Azurite for local development
TestingJUnit 5, Mockito, H2, Vitest, JaCoCo
Delivery and qualityDocker/Podman, GitHub Actions, SonarQube Cloud, Microsoft Azure

Quick start

The simplest way to run the complete application is with Podman Compose or Docker Compose.

Prerequisites

  • Git
  • Podman with Compose support, or Docker with Docker Compose
  • OpenSSL, used to generate a secure JWT signing secret

On macOS, start the Podman virtual machine before launching the stack:

podman machine start

1. Clone the repository

git clone https://github.com/simoneparente/BugBoard26.git
cd BugBoard26

2. Create the environment file

cp .env.example .env
openssl rand -base64 48

Open .env and:

  • replace JWT_SECRET with the generated value;
  • choose secure PostgreSQL and seeded-user credentials;
  • replace the placeholder Azure Storage values with a valid Azure Blob Storage or Azurite connection string.

When the backend runs inside the Compose network, an Azurite connection string must use azurite:10000 as its Blob service endpoint. When the backend runs directly on the host, use the exposed endpoint at 127.0.0.1:10001.

Never commit .env or any production credential.

3. Start the application

With Podman:

podman compose up -d --build
podman compose ps

With Docker:

docker compose up -d --build
docker compose ps

The first build may take a few minutes while the application images and dependencies are downloaded.

4. Open the services

ServiceAddress
Web applicationhttp://localhost:4200
Backend APIhttp://localhost:8080/api
Swagger UIhttp://localhost:8080/swagger-ui/index.html
OpenAPI documenthttp://localhost:8080/v3/api-docs
PostgreSQLlocalhost:5432 by default
Azurite Blob servicelocalhost:10001

The initial administrator account uses the SEED_USERNAME and SEED_PASSWORD values from .env.

Stop the application

podman compose down

Docker users can run docker compose down instead. To remove the PostgreSQL and upload volumes as well, add --volumes; this permanently deletes local application data.

Local development

For development outside containers, install:

  • Java 21;
  • Node.js 22 and npm;
  • PostgreSQL 15, or run the db Compose service;
  • Azure Blob Storage access, or run the azurite Compose service.

Start only the local infrastructure:

podman compose up -d db azurite

Export the required variables from .env in your terminal or IDE before starting the backend. At minimum, configure JWT_SECRET, AZURE_STORAGE_CONNECTION_STRING, and AZURE_STORAGE_CONTAINER_NAME.

Backend

From the repository root:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml spring-boot:run

The backend uses localhost:5432 by default and starts on port 8080.

Frontend

In a separate terminal:

cd bugboard-frontend
npm ci
npm start

The Angular development server starts on port 4200 and proxies /api requests to http://localhost:8080.

Configuration

The main environment variables are:

VariablePurposeDefault or example
POSTGRES_DBPostgreSQL database namebugboard_db
POSTGRES_USERPostgreSQL userbugboard
POSTGRES_PASSWORDPostgreSQL passwordNo safe production default
POSTGRES_PORTHost PostgreSQL port5432
JWT_SECRETHS256 signing secret; must be at least 32 bytesRequired
SEED_USERNAMEInitial administrator usernamebugboard
SEED_EMAILInitial administrator emailbugboard@bugboard.it
SEED_PASSWORDInitial administrator passwordChange before shared use
AZURE_STORAGE_CONNECTION_STRINGAzure Blob Storage or Azurite connectionRequired
AZURE_STORAGE_CONTAINER_NAMEAttachment containerattachments
CORS_ALLOWED_ORIGINSComma-separated frontend originshttp://localhost:4200
POSTGRES_SSLMODEPostgreSQL SSL modeprefer outside Compose

Tests and quality checks

Run the backend test suite:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml test

Run the frontend test suite:

cd bugboard-frontend
npm ci
npm test

Check or fix frontend formatting:

npm run format:check
npm run format:fix

Create production builds:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml clean package
cd bugboard-frontend
npm ci
npm run build:prod

GitHub Actions checks frontend formatting, builds and analyzes the backend with SonarQube Cloud, and deploys the application to Azure from the main branch.

Repository structure

.
├── bugboard-backend/ Spring Boot REST API
├── bugboard-frontend/ Angular web application
├── db/ PostgreSQL container configuration
├── setup/ Local and Azure helper scripts
├── .github/workflows/ CI, quality analysis, and deployment workflows
├── .env.example Environment configuration template
└── docker-compose.yml Complete local application stack

Additional operational commands are available in setup/README.md.

Development workflow

Development uses short-lived feature and bug-fix branches:

  • main contains stable releases;
  • development is the integration branch;
  • feature/* contains new features;
  • bug/* and fix/* contain corrections.

Changes should be submitted through a pull request and reviewed before they are merged.

Academic context

BugBoard26 was developed for the Software Engineering course in the 2025/2026 academic year.

  • University: University of Naples Federico II
  • Department: Department of Electrical Engineering and Information Technology (DIETI)
  • Degree programme: Computer Science (L-31)
  • Professors: P. Tramontana and B. Breve

Team

  • Simone Parente Martone — N86004297
  • Mario Penna — N86003308
  • Michela Pollio — N86003697

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - simoneparente/BugBoard26: A lightweight bug tracking board to manage issues and streamline workflows. Developed as a university project for the Software Engineering course. · GitHub
Skip to content
This repository was archived by the owner on Jul 28, 2026. It is now read-only.

Repository files navigation

BugBoard26 is a collaborative issue-tracking platform for software teams. It provides a shared workspace for reporting, assigning, prioritizing, tracking, and resolving issues throughout a project's lifecycle.

The application combines an Angular frontend with a Spring Boot REST API, PostgreSQL persistence, and Azure Blob Storage-compatible attachments.

Features

  • Project creation and member management
  • Invitation-based user registration
  • Role-based access for administrators, technical users, and external users
  • Issue creation, assignment, status tracking, filtering, sorting, and pagination
  • Project-specific tags and priorities
  • File and image attachments
  • CSV issue export
  • Project activity reports
  • Responsive interface for desktop and mobile devices
  • JWT authentication through HTTP-only cookies
  • Interactive OpenAPI documentation

Architecture

flowchart LR
U[Web browser] --> F[Angular frontend]
F -->|REST / JSON| B[Spring Boot backend]
B --> P[(PostgreSQL)]
B --> S[Azure Blob Storage or Azurite]
Loading
LayerTechnologies
FrontendAngular 21, TypeScript, RxJS, Bootstrap 5, SCSS
BackendJava 21, Spring Boot 4, Spring Security, Spring Data JPA
DataPostgreSQL 15, Hibernate
AttachmentsAzure Blob Storage, Azurite for local development
TestingJUnit 5, Mockito, H2, Vitest, JaCoCo
Delivery and qualityDocker/Podman, GitHub Actions, SonarQube Cloud, Microsoft Azure

Quick start

The simplest way to run the complete application is with Podman Compose or Docker Compose.

Prerequisites

  • Git
  • Podman with Compose support, or Docker with Docker Compose
  • OpenSSL, used to generate a secure JWT signing secret

On macOS, start the Podman virtual machine before launching the stack:

podman machine start

1. Clone the repository

git clone https://github.com/simoneparente/BugBoard26.git
cd BugBoard26

2. Create the environment file

cp .env.example .env
openssl rand -base64 48

Open .env and:

  • replace JWT_SECRET with the generated value;
  • choose secure PostgreSQL and seeded-user credentials;
  • replace the placeholder Azure Storage values with a valid Azure Blob Storage or Azurite connection string.

When the backend runs inside the Compose network, an Azurite connection string must use azurite:10000 as its Blob service endpoint. When the backend runs directly on the host, use the exposed endpoint at 127.0.0.1:10001.

Never commit .env or any production credential.

3. Start the application

With Podman:

podman compose up -d --build
podman compose ps

With Docker:

docker compose up -d --build
docker compose ps

The first build may take a few minutes while the application images and dependencies are downloaded.

4. Open the services

ServiceAddress
Web applicationhttp://localhost:4200
Backend APIhttp://localhost:8080/api
Swagger UIhttp://localhost:8080/swagger-ui/index.html
OpenAPI documenthttp://localhost:8080/v3/api-docs
PostgreSQLlocalhost:5432 by default
Azurite Blob servicelocalhost:10001

The initial administrator account uses the SEED_USERNAME and SEED_PASSWORD values from .env.

Stop the application

podman compose down

Docker users can run docker compose down instead. To remove the PostgreSQL and upload volumes as well, add --volumes; this permanently deletes local application data.

Local development

For development outside containers, install:

  • Java 21;
  • Node.js 22 and npm;
  • PostgreSQL 15, or run the db Compose service;
  • Azure Blob Storage access, or run the azurite Compose service.

Start only the local infrastructure:

podman compose up -d db azurite

Export the required variables from .env in your terminal or IDE before starting the backend. At minimum, configure JWT_SECRET, AZURE_STORAGE_CONNECTION_STRING, and AZURE_STORAGE_CONTAINER_NAME.

Backend

From the repository root:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml spring-boot:run

The backend uses localhost:5432 by default and starts on port 8080.

Frontend

In a separate terminal:

cd bugboard-frontend
npm ci
npm start

The Angular development server starts on port 4200 and proxies /api requests to http://localhost:8080.

Configuration

The main environment variables are:

VariablePurposeDefault or example
POSTGRES_DBPostgreSQL database namebugboard_db
POSTGRES_USERPostgreSQL userbugboard
POSTGRES_PASSWORDPostgreSQL passwordNo safe production default
POSTGRES_PORTHost PostgreSQL port5432
JWT_SECRETHS256 signing secret; must be at least 32 bytesRequired
SEED_USERNAMEInitial administrator usernamebugboard
SEED_EMAILInitial administrator emailbugboard@bugboard.it
SEED_PASSWORDInitial administrator passwordChange before shared use
AZURE_STORAGE_CONNECTION_STRINGAzure Blob Storage or Azurite connectionRequired
AZURE_STORAGE_CONTAINER_NAMEAttachment containerattachments
CORS_ALLOWED_ORIGINSComma-separated frontend originshttp://localhost:4200
POSTGRES_SSLMODEPostgreSQL SSL modeprefer outside Compose

Tests and quality checks

Run the backend test suite:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml test

Run the frontend test suite:

cd bugboard-frontend
npm ci
npm test

Check or fix frontend formatting:

npm run format:check
npm run format:fix

Create production builds:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml clean package
cd bugboard-frontend
npm ci
npm run build:prod

GitHub Actions checks frontend formatting, builds and analyzes the backend with SonarQube Cloud, and deploys the application to Azure from the main branch.

Repository structure

.
├── bugboard-backend/ Spring Boot REST API
├── bugboard-frontend/ Angular web application
├── db/ PostgreSQL container configuration
├── setup/ Local and Azure helper scripts
├── .github/workflows/ CI, quality analysis, and deployment workflows
├── .env.example Environment configuration template
└── docker-compose.yml Complete local application stack

Additional operational commands are available in setup/README.md.

Development workflow

Development uses short-lived feature and bug-fix branches:

  • main contains stable releases;
  • development is the integration branch;
  • feature/* contains new features;
  • bug/* and fix/* contain corrections.

Changes should be submitted through a pull request and reviewed before they are merged.

Academic context

BugBoard26 was developed for the Software Engineering course in the 2025/2026 academic year.

  • University: University of Naples Federico II
  • Department: Department of Electrical Engineering and Information Technology (DIETI)
  • Degree programme: Computer Science (L-31)
  • Professors: P. Tramontana and B. Breve

Team

  • Simone Parente Martone — N86004297
  • Mario Penna — N86003308
  • Michela Pollio — N86003697

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - simoneparente/BugBoard26: A lightweight bug tracking board to manage issues and streamline workflows. Developed as a university project for the Software Engineering course. · GitHub
Skip to content
This repository was archived by the owner on Jul 28, 2026. It is now read-only.

Repository files navigation

BugBoard26 is a collaborative issue-tracking platform for software teams. It provides a shared workspace for reporting, assigning, prioritizing, tracking, and resolving issues throughout a project's lifecycle.

The application combines an Angular frontend with a Spring Boot REST API, PostgreSQL persistence, and Azure Blob Storage-compatible attachments.

Features

  • Project creation and member management
  • Invitation-based user registration
  • Role-based access for administrators, technical users, and external users
  • Issue creation, assignment, status tracking, filtering, sorting, and pagination
  • Project-specific tags and priorities
  • File and image attachments
  • CSV issue export
  • Project activity reports
  • Responsive interface for desktop and mobile devices
  • JWT authentication through HTTP-only cookies
  • Interactive OpenAPI documentation

Architecture

flowchart LR
U[Web browser] --> F[Angular frontend]
F -->|REST / JSON| B[Spring Boot backend]
B --> P[(PostgreSQL)]
B --> S[Azure Blob Storage or Azurite]
Loading
LayerTechnologies
FrontendAngular 21, TypeScript, RxJS, Bootstrap 5, SCSS
BackendJava 21, Spring Boot 4, Spring Security, Spring Data JPA
DataPostgreSQL 15, Hibernate
AttachmentsAzure Blob Storage, Azurite for local development
TestingJUnit 5, Mockito, H2, Vitest, JaCoCo
Delivery and qualityDocker/Podman, GitHub Actions, SonarQube Cloud, Microsoft Azure

Quick start

The simplest way to run the complete application is with Podman Compose or Docker Compose.

Prerequisites

  • Git
  • Podman with Compose support, or Docker with Docker Compose
  • OpenSSL, used to generate a secure JWT signing secret

On macOS, start the Podman virtual machine before launching the stack:

podman machine start

1. Clone the repository

git clone https://github.com/simoneparente/BugBoard26.git
cd BugBoard26

2. Create the environment file

cp .env.example .env
openssl rand -base64 48

Open .env and:

  • replace JWT_SECRET with the generated value;
  • choose secure PostgreSQL and seeded-user credentials;
  • replace the placeholder Azure Storage values with a valid Azure Blob Storage or Azurite connection string.

When the backend runs inside the Compose network, an Azurite connection string must use azurite:10000 as its Blob service endpoint. When the backend runs directly on the host, use the exposed endpoint at 127.0.0.1:10001.

Never commit .env or any production credential.

3. Start the application

With Podman:

podman compose up -d --build
podman compose ps

With Docker:

docker compose up -d --build
docker compose ps

The first build may take a few minutes while the application images and dependencies are downloaded.

4. Open the services

ServiceAddress
Web applicationhttp://localhost:4200
Backend APIhttp://localhost:8080/api
Swagger UIhttp://localhost:8080/swagger-ui/index.html
OpenAPI documenthttp://localhost:8080/v3/api-docs
PostgreSQLlocalhost:5432 by default
Azurite Blob servicelocalhost:10001

The initial administrator account uses the SEED_USERNAME and SEED_PASSWORD values from .env.

Stop the application

podman compose down

Docker users can run docker compose down instead. To remove the PostgreSQL and upload volumes as well, add --volumes; this permanently deletes local application data.

Local development

For development outside containers, install:

  • Java 21;
  • Node.js 22 and npm;
  • PostgreSQL 15, or run the db Compose service;
  • Azure Blob Storage access, or run the azurite Compose service.

Start only the local infrastructure:

podman compose up -d db azurite

Export the required variables from .env in your terminal or IDE before starting the backend. At minimum, configure JWT_SECRET, AZURE_STORAGE_CONNECTION_STRING, and AZURE_STORAGE_CONTAINER_NAME.

Backend

From the repository root:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml spring-boot:run

The backend uses localhost:5432 by default and starts on port 8080.

Frontend

In a separate terminal:

cd bugboard-frontend
npm ci
npm start

The Angular development server starts on port 4200 and proxies /api requests to http://localhost:8080.

Configuration

The main environment variables are:

VariablePurposeDefault or example
POSTGRES_DBPostgreSQL database namebugboard_db
POSTGRES_USERPostgreSQL userbugboard
POSTGRES_PASSWORDPostgreSQL passwordNo safe production default
POSTGRES_PORTHost PostgreSQL port5432
JWT_SECRETHS256 signing secret; must be at least 32 bytesRequired
SEED_USERNAMEInitial administrator usernamebugboard
SEED_EMAILInitial administrator emailbugboard@bugboard.it
SEED_PASSWORDInitial administrator passwordChange before shared use
AZURE_STORAGE_CONNECTION_STRINGAzure Blob Storage or Azurite connectionRequired
AZURE_STORAGE_CONTAINER_NAMEAttachment containerattachments
CORS_ALLOWED_ORIGINSComma-separated frontend originshttp://localhost:4200
POSTGRES_SSLMODEPostgreSQL SSL modeprefer outside Compose

Tests and quality checks

Run the backend test suite:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml test

Run the frontend test suite:

cd bugboard-frontend
npm ci
npm test

Check or fix frontend formatting:

npm run format:check
npm run format:fix

Create production builds:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml clean package
cd bugboard-frontend
npm ci
npm run build:prod

GitHub Actions checks frontend formatting, builds and analyzes the backend with SonarQube Cloud, and deploys the application to Azure from the main branch.

Repository structure

.
├── bugboard-backend/ Spring Boot REST API
├── bugboard-frontend/ Angular web application
├── db/ PostgreSQL container configuration
├── setup/ Local and Azure helper scripts
├── .github/workflows/ CI, quality analysis, and deployment workflows
├── .env.example Environment configuration template
└── docker-compose.yml Complete local application stack

Additional operational commands are available in setup/README.md.

Development workflow

Development uses short-lived feature and bug-fix branches:

  • main contains stable releases;
  • development is the integration branch;
  • feature/* contains new features;
  • bug/* and fix/* contain corrections.

Changes should be submitted through a pull request and reviewed before they are merged.

Academic context

BugBoard26 was developed for the Software Engineering course in the 2025/2026 academic year.

  • University: University of Naples Federico II
  • Department: Department of Electrical Engineering and Information Technology (DIETI)
  • Degree programme: Computer Science (L-31)
  • Professors: P. Tramontana and B. Breve

Team

  • Simone Parente Martone — N86004297
  • Mario Penna — N86003308
  • Michela Pollio — N86003697

Releases

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - simoneparente/BugBoard26: A lightweight bug tracking board to manage issues and streamline workflows. Developed as a university project for the Software Engineering course. · GitHub
Skip to content
This repository was archived by the owner on Jul 28, 2026. It is now read-only.

Repository files navigation

BugBoard26 is a collaborative issue-tracking platform for software teams. It provides a shared workspace for reporting, assigning, prioritizing, tracking, and resolving issues throughout a project's lifecycle.

The application combines an Angular frontend with a Spring Boot REST API, PostgreSQL persistence, and Azure Blob Storage-compatible attachments.

Features

  • Project creation and member management
  • Invitation-based user registration
  • Role-based access for administrators, technical users, and external users
  • Issue creation, assignment, status tracking, filtering, sorting, and pagination
  • Project-specific tags and priorities
  • File and image attachments
  • CSV issue export
  • Project activity reports
  • Responsive interface for desktop and mobile devices
  • JWT authentication through HTTP-only cookies
  • Interactive OpenAPI documentation

Architecture

flowchart LR
U[Web browser] --> F[Angular frontend]
F -->|REST / JSON| B[Spring Boot backend]
B --> P[(PostgreSQL)]
B --> S[Azure Blob Storage or Azurite]
Loading
LayerTechnologies
FrontendAngular 21, TypeScript, RxJS, Bootstrap 5, SCSS
BackendJava 21, Spring Boot 4, Spring Security, Spring Data JPA
DataPostgreSQL 15, Hibernate
AttachmentsAzure Blob Storage, Azurite for local development
TestingJUnit 5, Mockito, H2, Vitest, JaCoCo
Delivery and qualityDocker/Podman, GitHub Actions, SonarQube Cloud, Microsoft Azure

Quick start

The simplest way to run the complete application is with Podman Compose or Docker Compose.

Prerequisites

  • Git
  • Podman with Compose support, or Docker with Docker Compose
  • OpenSSL, used to generate a secure JWT signing secret

On macOS, start the Podman virtual machine before launching the stack:

podman machine start

1. Clone the repository

git clone https://github.com/simoneparente/BugBoard26.git
cd BugBoard26

2. Create the environment file

cp .env.example .env
openssl rand -base64 48

Open .env and:

  • replace JWT_SECRET with the generated value;
  • choose secure PostgreSQL and seeded-user credentials;
  • replace the placeholder Azure Storage values with a valid Azure Blob Storage or Azurite connection string.

When the backend runs inside the Compose network, an Azurite connection string must use azurite:10000 as its Blob service endpoint. When the backend runs directly on the host, use the exposed endpoint at 127.0.0.1:10001.

Never commit .env or any production credential.

3. Start the application

With Podman:

podman compose up -d --build
podman compose ps

With Docker:

docker compose up -d --build
docker compose ps

The first build may take a few minutes while the application images and dependencies are downloaded.

4. Open the services

ServiceAddress
Web applicationhttp://localhost:4200
Backend APIhttp://localhost:8080/api
Swagger UIhttp://localhost:8080/swagger-ui/index.html
OpenAPI documenthttp://localhost:8080/v3/api-docs
PostgreSQLlocalhost:5432 by default
Azurite Blob servicelocalhost:10001

The initial administrator account uses the SEED_USERNAME and SEED_PASSWORD values from .env.

Stop the application

podman compose down

Docker users can run docker compose down instead. To remove the PostgreSQL and upload volumes as well, add --volumes; this permanently deletes local application data.

Local development

For development outside containers, install:

  • Java 21;
  • Node.js 22 and npm;
  • PostgreSQL 15, or run the db Compose service;
  • Azure Blob Storage access, or run the azurite Compose service.

Start only the local infrastructure:

podman compose up -d db azurite

Export the required variables from .env in your terminal or IDE before starting the backend. At minimum, configure JWT_SECRET, AZURE_STORAGE_CONNECTION_STRING, and AZURE_STORAGE_CONTAINER_NAME.

Backend

From the repository root:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml spring-boot:run

The backend uses localhost:5432 by default and starts on port 8080.

Frontend

In a separate terminal:

cd bugboard-frontend
npm ci
npm start

The Angular development server starts on port 4200 and proxies /api requests to http://localhost:8080.

Configuration

The main environment variables are:

VariablePurposeDefault or example
POSTGRES_DBPostgreSQL database namebugboard_db
POSTGRES_USERPostgreSQL userbugboard
POSTGRES_PASSWORDPostgreSQL passwordNo safe production default
POSTGRES_PORTHost PostgreSQL port5432
JWT_SECRETHS256 signing secret; must be at least 32 bytesRequired
SEED_USERNAMEInitial administrator usernamebugboard
SEED_EMAILInitial administrator emailbugboard@bugboard.it
SEED_PASSWORDInitial administrator passwordChange before shared use
AZURE_STORAGE_CONNECTION_STRINGAzure Blob Storage or Azurite connectionRequired
AZURE_STORAGE_CONTAINER_NAMEAttachment containerattachments
CORS_ALLOWED_ORIGINSComma-separated frontend originshttp://localhost:4200
POSTGRES_SSLMODEPostgreSQL SSL modeprefer outside Compose

Tests and quality checks

Run the backend test suite:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml test

Run the frontend test suite:

cd bugboard-frontend
npm ci
npm test

Check or fix frontend formatting:

npm run format:check
npm run format:fix

Create production builds:

./bugboard-backend/mvnw -f bugboard-backend/pom.xml clean package
cd bugboard-frontend
npm ci
npm run build:prod

GitHub Actions checks frontend formatting, builds and analyzes the backend with SonarQube Cloud, and deploys the application to Azure from the main branch.

Repository structure

.
├── bugboard-backend/ Spring Boot REST API
├── bugboard-frontend/ Angular web application
├── db/ PostgreSQL container configuration
├── setup/ Local and Azure helper scripts
├── .github/workflows/ CI, quality analysis, and deployment workflows
├── .env.example Environment configuration template
└── docker-compose.yml Complete local application stack

Additional operational commands are available in setup/README.md.

Development workflow

Development uses short-lived feature and bug-fix branches:

  • main contains stable releases;
  • development is the integration branch;
  • feature/* contains new features;
  • bug/* and fix/* contain corrections.

Changes should be submitted through a pull request and reviewed before they are merged.

Academic context

BugBoard26 was developed for the Software Engineering course in the 2025/2026 academic year.

  • University: University of Naples Federico II
  • Department: Department of Electrical Engineering and Information Technology (DIETI)
  • Degree programme: Computer Science (L-31)
  • Professors: P. Tramontana and B. Breve

Team

  • Simone Parente Martone — N86004297
  • Mario Penna — N86003308
  • Michela Pollio — N86003697

Releases

Used by

Contributors

Languages