Gianpaolo. Projects & Family Portal

Personal projects. Practical engineering.

Useful software.
From idea to deployment.

Hi, I'm Gianpaolo. I build applications around real-world problems, connecting interfaces, APIs and data with a hands-on, self-hosted approach.

  • Full-stack applications
  • Data & AI
  • Automation & self-hosting

01 / SELECTED BUILDS

Different problems. End-to-end ownership.

A few examples of the applications I develop. App links live in the launcher below and may require sign-in.

ANALYTICS & AI

AI Running Coach

Running analytics, a visual dashboard and opt-in AI coaching, with reproducible calculations kept separate from generated advice.

  • FastAPI
  • PostgreSQL
  • JavaScript
  • OpenAI
Find in service launcher

FULL-STACK APPLICATION

My Garage

Vehicle records, maintenance, fuel spending and mileage brought together through a relational API and an interactive web interface.

  • FastAPI
  • SQLAlchemy
  • PostgreSQL
  • Chart.js
Find in service launcher

AI & DOCUMENT AUTOMATION

CV OnDemand

Job-specific CV generation from a verified source profile, with optional AI rewording and checks for unsupported numbers and names.

  • Python
  • Streamlit
  • OpenAI
  • Docker
Find in service launcher

02 / HOW IT FITS TOGETHER

The system behind the projects.

Two connected flows: getting code into a running container, then serving an application and its data.

Delivery from GitHub through Jenkins and Docker to the Raspberry Pi; runtime requests through Caddy to applications with PostgreSQL, SQLite or file storage.

Repository-defined workflow, not live infrastructure monitoring. On smaller screens, open full size or use the text version below.

Open full-size diagram (opens in a new tab)
Read the workflow step by step Text version
DELIVERY

From a source change to a deployment check

  1. 01

    GitHub

    Application source and a checked-in Jenkinsfile.

    Source control
  2. 02

    Jenkins

    SCM polling picks up changes and builds the Docker image.

    Build automation
  3. 03

    Docker on Pi

    The job replaces the app container with the new build.

    Deployment
  4. 04

    Health probe

    The pipeline requests an app endpoint to check the deployment.

    Verification

Selected jobs also register the app. For example, CV OnDemand updates the live service registry after its health check. The launcher reads that registry.

RUNTIME

From a browser request to app-owned storage

  1. 01

    Browser

    Open the portal or navigate to an application's address.

    Web request
  2. 02

    Caddy

    Serves the static portal and routes requests to hosted apps.

    HTTPS & routing
  3. 03

    App containers

    Each hosted application runs its own interface and backend.

    Independent services
  4. 04 / STORAGE OPTIONS

    PostgreSQL

    Running Coach and My Garage use PostgreSQL. The shared-server convention gives each app its own database or schema.

    SQLite & files

    MTG uses SQLite. CV OnDemand keeps YAML profiles and generated documents in app-owned file storage.

Based on repository configuration and the hosting convention, not live infrastructure monitoring. Storage and registration vary by app; local/on-demand projects are not all deployed on the Pi.
A

Shared server, separate data

The PostgreSQL convention is a dedicated database or schema per app, not one common database for everything. Some apps use SQLite or files instead.

B

Build, deploy, verify

These Jenkins jobs include build, deploy and endpoint checks. Tests exist in individual projects; a universal pipeline test gate is not shown here.

C

A registry, not an admin backend

The launcher reads the service registry. Portal deployments preserve its live copy; app registration is a separate operation.

03 / FAMILY PORTAL

The service launcher.

Browse the configured apps and infrastructure. Links open separately; access is handled by the destination, not this page.

Loading services...

Reachability is a browser-side network check, not a health or authentication guarantee. App descriptions come from the registry; HTTP-only checks are skipped when this page uses HTTPS.