{
  "projects": [
    {
      "slug": "guidance",
      "title": "Application for a guidance centre",
      "label": "guidance centre",
      "kind": "client",
      "tagline": "Site, CMS and CRM for Polo Fabricamente in a single Next.js app with Payload.",
      "summary": "Site, CMS and CRM for Polo Fabricamente in a single Next.js app with Payload, with a cache that updates on every save rather than on a timer.",
      "stack": [
        "Next.js",
        "Payload CMS",
        "PostgreSQL"
      ],
      "status": "in-production",
      "lead": "The site, CMS and CRM of Polo Fabricamente, a guidance centre for online degrees. I designed and built it on my own.",
      "facts": [
        {
          "name": "client",
          "value": "Polo Fabricamente",
          "href": null
        },
        {
          "name": "site",
          "value": "orientamentostudenti.it",
          "href": "https://www.orientamentostudenti.it"
        },
        {
          "name": "stack",
          "value": "Next.js 16, Payload CMS 3, PostgreSQL on Neon, Vercel",
          "href": null
        }
      ],
      "_links": {
        "self": {
          "href": "/en/projects/guidance"
        }
      }
    },
    {
      "slug": "driving-school",
      "title": "Driving school management system",
      "label": "driving school system",
      "kind": "personal",
      "tagline": "A modular monolith on Spring Modulith serving several driving schools from one installation.",
      "summary": "A modular monolith on Spring Modulith serving several driving schools from one installation, with module boundaries checked by tests.",
      "stack": [
        "Java 21",
        "Spring Boot 3.5",
        "Spring Modulith",
        "PostgreSQL"
      ],
      "status": "stopped",
      "lead": "A management system for Italian driving schools: students, instructors, lessons, exams and payments, for several schools on one installation.",
      "facts": [
        {
          "name": "roles",
          "value": "administration, office staff, instructor, student",
          "href": null
        },
        {
          "name": "code",
          "value": "private repository",
          "href": null
        }
      ],
      "_links": {
        "self": {
          "href": "/en/projects/driving-school"
        }
      }
    },
    {
      "slug": "travel-agency",
      "title": "Travel agency management system",
      "label": "travel agency",
      "kind": "personal",
      "tagline": "A Spring Boot app on MariaDB that started as a console and grew a web interface.",
      "summary": "A Spring Boot app on MariaDB that started as a console and grew a web interface, with session login and BCrypt, PayPal payments and PDF tickets with QR codes.",
      "stack": [
        "Java 25",
        "Spring Boot 3.5",
        "Spring Security",
        "Spring Data JPA",
        "MariaDB"
      ],
      "status": "completed",
      "lead": "Search for a trip, book it for several people, pay with PayPal and download the ticket: the management system of a small travel agency, built with Spring Boot.",
      "facts": [
        {
          "name": "payments",
          "value": "PayPal, tested end to end in the sandbox",
          "href": null
        },
        {
          "name": "code",
          "value": "private repository",
          "href": null
        }
      ],
      "_links": {
        "self": {
          "href": "/en/projects/travel-agency"
        }
      }
    }
  ],
  "_links": {
    "self": {
      "href": "/en/projects"
    },
    "alternate": {
      "href": "/it/projects",
      "hreflang": "it"
    },
    "up": {
      "href": "/en"
    }
  }
}
