Compare commits

...

3 Commits

Author SHA1 Message Date
Gianmarco
521797dd12 feat: add corley and aws certification
Some checks failed
Build Site Develop / Build-Site (push) Failing after 5m41s
Build Site Main / Build-Site (push) Successful in 1m44s
2025-06-20 23:32:28 +02:00
9dd9940e55 testing ci
All checks were successful
Build Site Develop / Build-Site (push) Successful in 2m26s
2023-11-24 21:31:24 +01:00
297521efdc feat: add modal on img 2023-11-24 15:31:56 +01:00
16 changed files with 281 additions and 42 deletions

View File

@ -0,0 +1,26 @@
name: Build Site Develop
on:
push:
branches:
- develop
jobs:
Build-Site:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '18.18.2'
- run: npm install
- run: npm run build
- name: Publish
uses: nogsantos/scp-deploy@master
with:
src: ./build/*
host: ${{ secrets.SSH_HOST }}
remote: /mnt/user/appdata/binhex-nginx/nginx/html/
port: 69
user: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}

View File

@ -0,0 +1,17 @@
name: Build Site Main
on:
push:
branches:
- main
jobs:
Build-Site:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '16.x'
- run: npm install
- run: npm run build

View File

@ -0,0 +1,18 @@
name: Build Site PR
on:
pull_request:
branches:
- 'feat/**'
- 'develop'
jobs:
Build-Site:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '16.x'
- run: npm install
- run: npm run build

View File

@ -11,13 +11,45 @@
import type { CurrentLanguage } from '$lib/types'; import type { CurrentLanguage } from '$lib/types';
export let job: Job; export let job: Job;
export let currentLanguage: CurrentLanguage = 'it'; export let currentLanguage: CurrentLanguage = 'it';
const dialogs: { [k: string]: HTMLDialogElement } = {};
export let modalOpen: boolean;
</script> </script>
{#each job.images as image}
<!-- svelte-ignore a11y-click-events-have-key-events -->
<dialog
bind:this={dialogs[window.btoa(image)]}
on:scroll|preventDefault
on:click={() => {
dialogs[window.btoa(image)].close();
modalOpen = false;
}}
>
<img
src={image}
alt={image}
loading="lazy"
on:scroll={(e) => {
console.log(e);
}}
/>
</dialog>
{/each}
<div class="job-container"> <div class="job-container">
<h3>{job.title[currentLanguage]}</h3> <h3>{job.title[currentLanguage]}</h3>
<div class="image-container"> <div class="image-container">
{#each job.images as image} {#each job.images as image}
<img src={image} alt={image} loading="lazy" /> <!-- svelte-ignore a11y-click-events-have-key-events -->
<img
src={image}
alt={image}
loading="lazy"
on:click={() => {
dialogs[window.btoa(image)].showModal();
modalOpen = true;
}}
/>
{/each} {/each}
</div> </div>
<div class="text-content"> <div class="text-content">
@ -47,11 +79,11 @@
{/each} {/each}
</div> </div>
<div> <div>
{#if job.tecnologies.length != 0} {#if job.technologies.length != 0}
Tech: Tech:
{/if} {/if}
{#each job.tecnologies as tecnology, index} {#each job.technologies as tecnology, index}
{tecnology}{index != job.tecnologies.length - 1 ? ', ' : ''} {tecnology}{index != job.technologies.length - 1 ? ', ' : ''}
{/each} {/each}
</div> </div>
</div> </div>
@ -71,9 +103,66 @@
width: 100%; width: 100%;
img { img {
background-color: $text-color; background-color: $text-color;
cursor: zoom-in;
} }
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
} }
.hidden {
display: none;
}
.modal {
display: flex;
position: fixed;
position: -webkit-sticky;
top: 0;
left: 0;
z-index: 999;
background-color: rgba($color: #000000, $alpha: 0.4);
width: 100%;
height: 100%;
justify-content: center;
}
.modal-open {
overflow-y: hidden;
}
.modal-closed {
overflow-y: unset;
}
dialog {
img {
max-width: 80vw;
max-height: 80vh;
height: auto;
margin: auto;
background-color: $text-color;
}
}
dialog::backdrop {
background: rgba(0, 0, 0, 0.3);
}
dialog[open] {
animation: zoom 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@keyframes zoom {
from {
transform: scale(0.95);
}
to {
transform: scale(1);
}
}
dialog[open]::backdrop {
animation: fade 0.2s ease-out;
}
@keyframes fade {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style> </style>

View File

@ -4,11 +4,12 @@
import JobElement from './JobElement.svelte'; import JobElement from './JobElement.svelte';
export let currentLanguage: CurrentLanguage = 'it'; export let currentLanguage: CurrentLanguage = 'it';
export let jobs: Job[] = []; export let jobs: Job[] = [];
export let modalOpen: boolean;
</script> </script>
<div class="jobs-container"> <div class="jobs-container">
{#each jobs as job} {#each jobs as job}
<div class="job-card"><JobElement {job} {currentLanguage} /></div> <div class="job-card"><JobElement {job} {currentLanguage} bind:modalOpen /></div>
{/each} {/each}
{#if jobs.length % 2 !== 0} {#if jobs.length % 2 !== 0}
<div class="job-card hide" /> <div class="job-card hide" />

View File

@ -20,7 +20,7 @@
<div> <div>
<h3>{school.title[currentLanguage]}</h3> <h3>{school.title[currentLanguage]}</h3>
<p>{school.content[currentLanguage]}</p> <p>{school.content[currentLanguage]}</p>
<p>{school.year.start} - {school.year.end}</p> <p>{school.year.start} {#if school.year.end} - {school.year.end}{/if}</p>
</div> </div>
</div> </div>
{/each} {/each}

View File

@ -25,6 +25,6 @@ export interface Job {
ref: string; ref: string;
}[]; }[];
languages: string[]; languages: string[];
tecnologies: string[]; technologies: string[];
images: string[]; images: string[];
} }

View File

@ -1,9 +1,44 @@
[ [
{ {
"year": { "year": {
"start": "2022-01-03", "start": "2024-09-23",
"end": "" "end": ""
}, },
"title": {
"en": "Corley Cloud",
"it": "Corley Cloud"
},
"content": {
"en": "In September 2024, I joined Corley Cloud, a company focused on building scalable and resilient cloud-native solutions.\nMy role involves designing and developing **serverless architectures** and **event-driven applications** using **AWS** services such as Lambda, API Gateway, DynamoDB, and Step Functions.\nThe main technologies I use are **Node.js** and **Python**.\nI contribute to the definition of **DevOps pipelines**, infrastructure as code with **Terraform** and **AWS SAM**, and best practices for CI/CD in cloud environments.",
"it": "Nel settembre 2024 ho iniziato a lavorare in Corley Cloud, un'azienda specializzata nella creazione di soluzioni cloud-native scalabili e resilienti.\nIl mio ruolo prevede la progettazione e lo sviluppo di **architetture serverless** e **applicazioni event-driven** utilizzando servizi **AWS** come Lambda, API Gateway, DynamoDB e Step Functions.\nLe tecnologie principali che utilizzo sono **Node.js** e **Python**.\nContribuisco alla definizione delle **pipeline DevOps**, dellinfrastruttura come codice con **Terraform** e **AWS SAM**, e delle best practice per CI/CD in ambienti cloud."
},
"collaborators": [],
"languages": [
"TypeScript",
"Python",
"Node.js",
"yaml",
"json",
"bash"
],
"technologies": [
"AWS Lambda",
"API Gateway",
"DynamoDB",
"Step Functions",
"Terraform",
"AWS SAM",
"GitHub Actions"
],
"images": [
"corley.png"
]
},
{
"year": {
"start": "2022-01-03",
"end": "2024-09-06"
},
"title": { "title": {
"en": "ALTEN italy", "en": "ALTEN italy",
"it": "ALTEN italia" "it": "ALTEN italia"
@ -22,7 +57,7 @@
"TypeScript", "TypeScript",
"Python" "Python"
], ],
"tecnologies": [ "technologies": [
"Vue.js", "Vue.js",
"Node.js", "Node.js",
"Laravel", "Laravel",
@ -54,7 +89,7 @@
"yaml", "yaml",
"json" "json"
], ],
"tecnologies": [ "technologies": [
"Vue.js", "Vue.js",
"Node.js", "Node.js",
"Nuxt", "Nuxt",
@ -85,7 +120,7 @@
"HTML", "HTML",
"CSS" "CSS"
], ],
"tecnologies": [ "technologies": [
"Vue.js", "Vue.js",
"Node.js", "Node.js",
"Nuxt", "Nuxt",
@ -112,7 +147,7 @@
"languages": [ "languages": [
"PHP" "PHP"
], ],
"tecnologies": [ "technologies": [
"Telegram", "Telegram",
"Composer", "Composer",
"Docker" "Docker"
@ -136,7 +171,7 @@
}, },
"collaborators": [], "collaborators": [],
"languages": [], "languages": [],
"tecnologies": [], "technologies": [],
"images": [ "images": [
"/saxonhilllogo.webp" "/saxonhilllogo.webp"
] ]

View File

@ -17,7 +17,7 @@
"TypeScript", "TypeScript",
"JSON-schema" "JSON-schema"
], ],
"tecnologies": [ "technologies": [
"Svelte", "Svelte",
"Node.js" "Node.js"
], ],
@ -42,7 +42,7 @@
"languages": [ "languages": [
"TypeScript" "TypeScript"
], ],
"tecnologies": [ "technologies": [
"Node.js" "Node.js"
], ],
"images": [ "images": [
@ -66,7 +66,7 @@
"languages": [ "languages": [
"C" "C"
], ],
"tecnologies": [ "technologies": [
"QMK" "QMK"
], ],
"images": [ "images": [
@ -91,7 +91,7 @@
"bash", "bash",
"python" "python"
], ],
"tecnologies": [ "technologies": [
"raspberry" "raspberry"
], ],
"images": [ "images": [
@ -115,7 +115,7 @@
"languages": [ "languages": [
"YAML" "YAML"
], ],
"tecnologies": [ "technologies": [
"Docker", "Docker",
"Unraid", "Unraid",
"GNU/Linux" "GNU/Linux"
@ -139,7 +139,7 @@
}, },
"collaborators": [], "collaborators": [],
"languages": [], "languages": [],
"tecnologies": [], "technologies": [],
"images": [ "images": [
"/workstation.webp" "/workstation.webp"
] ]
@ -194,7 +194,7 @@
"Solidity", "Solidity",
"YAML" "YAML"
], ],
"tecnologies": [ "technologies": [
"Node.js", "Node.js",
"AWS Lambda", "AWS Lambda",
"Docker", "Docker",
@ -222,7 +222,7 @@
"languages": [ "languages": [
"bash" "bash"
], ],
"tecnologies": [ "technologies": [
"Docker", "Docker",
"GitHub Action" "GitHub Action"
], ],
@ -247,7 +247,7 @@
"languages": [ "languages": [
"bash" "bash"
], ],
"tecnologies": [ "technologies": [
"Docker", "Docker",
"GitHub Action" "GitHub Action"
], ],
@ -272,7 +272,7 @@
"languages": [ "languages": [
"C++" "C++"
], ],
"tecnologies": [ "technologies": [
"Qt" "Qt"
], ],
"images": [ "images": [
@ -313,7 +313,7 @@
"PHP", "PHP",
"SQL" "SQL"
], ],
"tecnologies": [ "technologies": [
"Apache", "Apache",
"MariaDB" "MariaDB"
], ],
@ -346,7 +346,7 @@
"SWL", "SWL",
"ANTLR grammar" "ANTLR grammar"
], ],
"tecnologies": [ "technologies": [
"ANTLR" "ANTLR"
], ],
"images": [ "images": [

View File

@ -82,7 +82,7 @@
"type": "string" "type": "string"
} }
}, },
"tecnologies": { "technologies": {
"type": "array", "type": "array",
"items": { "items": {
"type": "string" "type": "string"
@ -101,7 +101,7 @@
"content", "content",
"collaborators", "collaborators",
"languages", "languages",
"tecnologies", "technologies",
"images" "images"
], ],
"additionalProperties": false "additionalProperties": false

View File

@ -1,29 +1,62 @@
[ [
{
"year": {
"start": "2024"
},
"title": {
"en": "AWS Certified Developer Associate",
"it": "AWS Certified Developer Associate"
},
"content": {
"en": " AWS Certified Developer Associate Skills in developing and managing applications on AWS.",
"it": " AWS Certified Developer Associate Competenze nello sviluppo e nella gestione di applicazioni su AWS."
},
"collaborators": [],
"technologies": [
"AWS"
],
"images": [
"AWS_DEV.png"
]
},
{ {
"year": { "year": {
"start": "2016", "start": "2016",
"end": "2020" "end": "2020"
}, },
"title": {"en":"Bachelor's degree in Computer Science (EQF 6): ","it":"Laurea triennale in Scienze Informatiche (EQF 6)"}, "title": {
"en": "Bachelor's degree in Computer Science (EQF 6): ",
"it": "Laurea triennale in Scienze Informatiche (EQF 6)"
},
"content": { "content": {
"en":"Computer Science, Università degli Studi di Padova","it":"Corso triennale in Informatica all'Università degli Studi di Padova"}, "en": "Computer Science, Università degli Studi di Padova",
"it": "Corso triennale in Informatica all'Università degli Studi di Padova"
},
"collaborators": [], "collaborators": [],
"languages": [], "languages": [],
"tecnologies": [], "technologies": [],
"images":["unipd-universita-di-padova.webp"] "images": [
"unipd-universita-di-padova.webp"
]
}, },
{ {
"year": { "year": {
"start": "2007", "start": "2007",
"end": "2013" "end": "2013"
}, },
"title": {"en":"High School diploma, Liceo Scientifico Tecnologico (EQF 4): ","it":"Diploma di maturità di Liceo Scientifico Tecnologico (EQF 4)"}, "title": {
"en": "High School diploma, Liceo Scientifico Tecnologico (EQF 4): ",
"it": "Diploma di maturità di Liceo Scientifico Tecnologico (EQF 4)"
},
"content": { "content": {
"en":"The scientific and technological high school I.T.I.S. Severi di Padova where instead of Latin, there were more physics, chemistry and basic programming lessons.", "en": "The scientific and technological high school I.T.I.S. Severi di Padova where instead of Latin, there were more physics, chemistry and basic programming lessons.",
"it":"Corso di Liceo Scientifico Tecnologico all'istituto I.T.I.S. Severi di Padova, dove al posto del Latino i corsi puntavano di più su fisica, chimica e dei corsi introduttivi alla programmazione"}, "it": "Corso di Liceo Scientifico Tecnologico all'istituto I.T.I.S. Severi di Padova, dove al posto del Latino i corsi puntavano di più su fisica, chimica e dei corsi introduttivi alla programmazione"
},
"collaborators": [], "collaborators": [],
"languages": [], "languages": [],
"tecnologies": [], "technologies": [],
"images":["logoSeveri.webp"] "images": [
"logoSeveri.webp"
]
} }
] ]

View File

@ -1,10 +1,10 @@
<script lang="ts"> <script lang="ts">
import {} from 'svelte';
import { MetaTags } from 'svelte-meta-tags'; import { MetaTags } from 'svelte-meta-tags';
import type { CurrentLanguage } from '$lib/types'; import type { CurrentLanguage } from '$lib/types';
import AboutMe from '$lib/elements/AboutMe.svelte'; import AboutMe from '$lib/elements/AboutMe.svelte';
import Jobs from '$lib/elements/Jobs.svelte'; import Jobs from '$lib/elements/Jobs.svelte';
import Menu from '$lib/elements/Menu.svelte'; import Menu from '$lib/elements/Menu.svelte';
import MenuMobile from '$lib/elements/MenuMobile.svelte';
import Training from '$lib/elements/Training.svelte'; import Training from '$lib/elements/Training.svelte';
import Data_jobs from '$lib/model/jobs.json'; import Data_jobs from '$lib/model/jobs.json';
import Data_portfolio from '$lib/model/portfolio.json'; import Data_portfolio from '$lib/model/portfolio.json';
@ -24,6 +24,7 @@
contacts: { it: 'Contatti', en: 'Contacts' }, contacts: { it: 'Contatti', en: 'Contacts' },
portfolio: { it: 'Portfolio', en: 'Portfolio' } portfolio: { it: 'Portfolio', en: 'Portfolio' }
}; };
let modalOpen: boolean = false;
</script> </script>
<MetaTags <MetaTags
@ -52,14 +53,22 @@
<!-- svelte-ignore a11y-invalid-attribute --> <!-- svelte-ignore a11y-invalid-attribute -->
<LanguageSelector bind:currentLanguage /> <LanguageSelector bind:currentLanguage />
<Menu {currentLanguage} /> <Menu {currentLanguage} />
<div class="default"> <div
class="default"
on:scroll={(event) => {
if (modalOpen) {
event.preventDefault();
}
console.log(event);
}}
>
<span id="home" class="anchor" /> <span id="home" class="anchor" />
<AboutMe {currentLanguage} /> <AboutMe {currentLanguage} />
</div> </div>
<div class="default"> <div class="default">
<span id="jobs" class="anchor" /> <span id="jobs" class="anchor" />
<h2>{titles.job[currentLanguage]}</h2> <h2>{titles.job[currentLanguage]}</h2>
<Jobs {jobs} {currentLanguage} /> <Jobs {jobs} {currentLanguage} bind:modalOpen />
</div> </div>
<div class="default"> <div class="default">
<span id="training" class="anchor" /> <span id="training" class="anchor" />
@ -69,7 +78,7 @@
<div class="default"> <div class="default">
<span id="portfolio" class="anchor" /> <span id="portfolio" class="anchor" />
<h2>{titles.portfolio[currentLanguage]}</h2> <h2>{titles.portfolio[currentLanguage]}</h2>
<Jobs jobs={portfolio} {currentLanguage} /> <Jobs jobs={portfolio} {currentLanguage} bind:modalOpen />
</div> </div>
</main> </main>

BIN
static/AWS_DEV.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

BIN
static/corley.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@ -5,6 +5,6 @@ const config: UserConfig = {
plugins: [sveltekit()] plugins: [sveltekit()]
}; };
config.server = { port: 80, origin: 'pettinato.eu' }; // config.server = { port: 80, origin: 'pettinato.eu' };
export default config; export default config;

11
vite.config.ts.js Normal file
View File

@ -0,0 +1,11 @@
// vite.config.ts
import { sveltekit } from "@sveltejs/kit/vite";
var config = {
plugins: [sveltekit()]
};
// config.server = { port: 8800, origin: "pettinato.eu" };
var vite_config_default = config;
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHN2ZWx0ZWtpdCB9IGZyb20gJ0BzdmVsdGVqcy9raXQvdml0ZSc7XG5pbXBvcnQgdHlwZSB7IFVzZXJDb25maWcsIGRlZmluZUNvbmZpZyB9IGZyb20gJ3ZpdGUnO1xuXG5jb25zdCBjb25maWc6IFVzZXJDb25maWcgPSB7XG5cdHBsdWdpbnM6IFtzdmVsdGVraXQoKV1cbn07XG5cbmNvbmZpZy5zZXJ2ZXIgPSB7IHBvcnQ6IDgwLCBvcmlnaW46ICdwZXR0aW5hdG8uZXUnIH07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbmZpZztcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQTtBQUdBLElBQU0sU0FBcUI7QUFBQSxFQUMxQixTQUFTLENBQUM7QUFBQTtBQUdYLE9BQU8sU0FBUyxFQUFFLE1BQU0sSUFBSSxRQUFRO0FBRXBDLElBQU8sc0JBQVE7IiwKICAibmFtZXMiOiBbXQp9Cg==