Hersel Giannella
-Analista Programmatore / Linux SysAdmin
- {% include "content/skills.html" %} - {% include "content/link.html" %} + + + {% include "navbar.html" %} -diff --git a/static/css/styles.css b/static/css/styles.css
index 316bb3b..006e2fe 100644
--- a/static/css/styles.css
+++ b/static/css/styles.css
@@ -1,110 +1,86 @@
-/* styles.css */
+:root {
+ --primary-color: #0d6efd;
+ --secondary-color: #6c757d;
+ --accent-color: #ffc107;
+ --dark-color: #212529;
+ --light-color: #f8f9fa;
+}
+
body {
- margin: 0;
- padding: 0;
- background: radial-gradient(circle, #000000, #1a1a1a);
- color: white;
- font-family: 'Courier New', Courier, monospace;
- overflow: hidden;
- }
-
- .black-hole-container {
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
position: relative;
- width: 100%;
+}
+
+section {
+ padding: 5rem 0;
+}
+
+.hero-section {
height: 100vh;
display: flex;
- flex-direction: column;
- justify-content: center;
align-items: center;
- text-align: center;
- color: antiquewhite;
- }
-
- .black-hole {
- position: absolute;
- width: 250px;
- height: 250px;
- background: radial-gradient(circle, rgba(0, 0, 0, 0.8), #000000);
- border-radius: 50%;
- box-shadow: 0 0 80px 40px rgba(0, 0, 0, 0.7);
- animation: spin 2s linear infinite;
- }
-
- @keyframes spin {
- 0% {
- transform: rotate(0deg);
- }
- 100% {
- transform: rotate(360deg);
- }
- }
-
- .content {
- opacity: 0;
- transform: translateY(30px);
- animation: fadeIn 2s ease-in-out forwards 0.5s;
- }
-
- @keyframes fadeIn {
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
-
- #name {
- font-size: 3.5rem;
- letter-spacing: 3px;
- margin-bottom: 10px;
- color: #bfbfbf; /* Grigio chiaro per armonizzare con il tema */
- text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.7); /* Ombra scura per contrasto */
- font-weight: bold;
- }
+ background-color: var(--dark-color);
+ color: var(--light-color);
+}
-
-
- #subtitle {
- font-size: 1.5rem;
- margin-bottom: 30px;
- }
-
- #skills .icon-link {
- display: inline-flex;
- align-items: center;
- gap: 8px;
- font-size: 1.2rem;
- color: #ffffff;
- text-decoration: none;
- transition: color 0.3s ease;
- }
-
- #skills .icon-link i {
- font-size: 1.5rem;
- }
-
- #skills .icon-link:hover {
- color: #00c1ff;
- }
-
- #social-links .social-link {
- display: inline-flex;
- align-items: center;
- gap: 8px;
- font-size: 1.2rem;
- color: #ffffff;
- text-decoration: none;
- padding: 5px 10px;
- border: 1px solid #ffffff;
- border-radius: 5px;
+.tech-icon {
+ font-size: 3rem;
+ margin: 1rem;
+ color: var(--primary-color);
transition: all 0.3s ease;
- }
-
- #social-links .social-link i {
- font-size: 1.5rem;
- }
-
- #social-links .social-link:hover {
- color: #000000;
- background-color: #ffffff;
- }
-
\ No newline at end of file
+}
+
+.tech-icon:hover {
+ color: var(--accent-color);
+ transform: scale(1.2);
+}
+
+.project-card {
+ transition: transform 0.3s ease;
+ height: 100%;
+}
+
+.project-card:hover {
+ transform: translateY(-10px);
+}
+
+.navbar.scrolled {
+ background-color: rgba(33, 37, 41, 0.98) !important;
+ transition: background-color 0.5s ease;
+}
+
+.social-icon {
+ font-size: 2.5rem;
+ margin: 0 1.5rem;
+ color: var(--primary-color);
+ transition: all 0.3s ease;
+}
+
+.social-icon:hover {
+ color: var(--accent-color);
+ transform: scale(1.2);
+}
+
+.section-title {
+ position: relative;
+ margin-bottom: 3rem;
+}
+
+.section-title::after {
+ content: "";
+ position: absolute;
+ left: 50%;
+ bottom: -10px;
+ transform: translateX(-50%);
+ width: 50px;
+ height: 3px;
+ background-color: var(--primary-color);
+}
+
+#back-to-top {
+ position: fixed;
+ bottom: 20px;
+ right: 20px;
+ display: none;
+ z-index: 99;
+}
\ No newline at end of file
diff --git a/static/img/personal.png b/static/img/personal.png
new file mode 100644
index 0000000..db6ca35
Binary files /dev/null and b/static/img/personal.png differ
diff --git a/static/js/main.js b/static/js/main.js
index b054583..20d892f 100644
--- a/static/js/main.js
+++ b/static/js/main.js
@@ -1,10 +1,53 @@
-const blackHole = document.querySelector('.black-hole');
+ // Navbar color change on scroll
+ window.addEventListener('scroll', function() {
+ const navbar = document.getElementById('navbar');
+ if (window.scrollY > 50) {
+ navbar.classList.add('scrolled');
+ } else {
+ navbar.classList.remove('scrolled');
+ }
+ });
-blackHole.addEventListener('mouseover', () => {
- blackHole.style.transform = 'scale(1.2)';
- blackHole.style.transition = 'transform 0.2s ease';
-});
+ // Back to top button
+ const backToTopButton = document.getElementById('back-to-top');
-blackHole.addEventListener('mouseout', () => {
- blackHole.style.transform = 'scale(1)';
-});
+ window.addEventListener('scroll', function() {
+ if (window.scrollY > 300) {
+ backToTopButton.style.display = 'block';
+ } else {
+ backToTopButton.style.display = 'none';
+ }
+ });
+
+ backToTopButton.addEventListener('click', function() {
+ window.scrollTo({
+ top: 0,
+ behavior: 'smooth'
+ });
+ });
+
+ // Activate animation when elements come into view
+ const animateOnScroll = function() {
+ const elements = document.querySelectorAll('.animate__animated');
+
+ elements.forEach(function(element) {
+ const position = element.getBoundingClientRect();
+
+ // If the element is in the viewport
+ if(position.top < window.innerHeight && position.bottom >= 0) {
+ // Get the animation class
+ const animationClass = Array.from(element.classList).find(className =>
+ className.startsWith('animate__') && className !== 'animate__animated'
+ );
+
+ // If it has 'animate__fadeIn' class and is not already visible
+ if(animationClass && !element.classList.contains('animated-in')) {
+ element.classList.add('animated-in');
+ }
+ }
+ });
+ };
+
+ window.addEventListener('scroll', animateOnScroll);
+ // Trigger on page load
+ window.addEventListener('load', animateOnScroll);
diff --git a/templates/content/about.html b/templates/content/about.html
new file mode 100644
index 0000000..47e62f6
--- /dev/null
+++ b/templates/content/about.html
@@ -0,0 +1,58 @@
+ Con oltre 7 Anni di esperienza nello sviluppo di applicazioni web con Python Flask, offro soluzioni complete end-to-end. La mia doppia specializzazione mi permette di comprendere a fondo l'intero ciclo di vita delle applicazioni, dall'architettura del server fino all'implementazione e al deployment. Mi piace risolvere problemi complessi e creare soluzioni che siano robuste, scalabili e facili da mantenere. Linux Windows Python Flask Database Docker Server NetworkingChi Sono
+ Il ponte tra sistemi e sviluppo web
+ Tecnologie che utilizzo
+
GitHub
+Stack Overflow
+CodeWars
+Blog
+Scopri di più sul mio lavoro e segui i miei progetti attraverso questi canali
+Script in Bash per sistemi Linux che permette l'automazione dei backup database
+Ho realizzato un repository personale di snippet sfruttando Bytestash, ottimizzando la gestione del codice riutilizzabile e migliorando la produttività nello sviluppo di progetti software.
+Installazione di Nextcloud su container LXC con database PostgreSQL e caching Redis, integrato in una rete privata con gestione IP tramite server DHCP.
+Analista Programmatore / Linux SysAdmin
- {% include "content/skills.html" %} - {% include "content/link.html" %} + + + {% include "navbar.html" %} -Trasformo infrastrutture complesse in soluzioni web innovative ed efficienti
+
+