From 09a862cb896ae830f6c6206b6eb99f08d22473e4 Mon Sep 17 00:00:00 2001
From: mnau23 <51322165+mnau23@users.noreply.github.com>
Date: Sun, 23 Aug 2026 23:29:57 +0200
Subject: [PATCH 01/12] use textarea in contact page
---
dist/contact.html | 2 +-
dist/css/main.css | 9 +++++++--
scss/main.scss | 7 ++++++-
3 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/dist/contact.html b/dist/contact.html
index 9ae1e5e..d202f96 100644
--- a/dist/contact.html
+++ b/dist/contact.html
@@ -109,7 +109,7 @@
Send message
-
+
Write your message
diff --git a/dist/css/main.css b/dist/css/main.css
index d2b436d..abf9dc7 100644
--- a/dist/css/main.css
+++ b/dist/css/main.css
@@ -350,7 +350,8 @@ main#home h1 {
width: 100%;
margin-top: 10px;
}
-.container .contact-form .input-box input {
+.container .contact-form .input-box input,
+.container .contact-form .input-box textarea {
width: 100%;
height: 35px;
padding: 5px 0;
@@ -363,11 +364,15 @@ main#home h1 {
outline: none;
resize: none;
}
-.container .contact-form .input-box input:focus ~ span, .container .contact-form .input-box input:valid ~ span {
+.container .contact-form .input-box input:focus ~ span, .container .contact-form .input-box input:valid ~ span, .container .contact-form .input-box textarea:focus ~ span, .container .contact-form .input-box textarea:valid ~ span {
color: rgba(107, 159, 238, 0.9058823529);
font-size: 12px;
transform: translateY(-25px);
}
+.container .contact-form .input-box textarea {
+ min-height: 120px;
+ padding-top: 10px;
+}
.container .contact-form .input-box span {
position: absolute;
left: 0;
diff --git a/scss/main.scss b/scss/main.scss
index 9bf3924..6816790 100644
--- a/scss/main.scss
+++ b/scss/main.scss
@@ -234,7 +234,8 @@ main {
position: relative;
width: 100%;
margin-top: 10px;
- input {
+ input,
+ textarea {
width: 100%;
height: 35px;
padding: 5px 0;
@@ -252,6 +253,10 @@ main {
transform: translateY(-25px);
}
}
+ textarea {
+ min-height: 120px;
+ padding-top: 10px;
+ }
span {
position: absolute;
left: 0;
From 7ba070cf83f223e572fb5b646e9c3fb878cd147f Mon Sep 17 00:00:00 2001
From: mnau23 <51322165+mnau23@users.noreply.github.com>
Date: Sun, 23 Aug 2026 23:30:17 +0200
Subject: [PATCH 02/12] rename attribute to data-percentage
---
dist/css/main.css | 8 ++++----
dist/education.html | 22 +++++++++++-----------
dist/js/progress.js | 35 +++++++++++++++++++++++------------
scss/main.scss | 2 +-
4 files changed, 39 insertions(+), 28 deletions(-)
diff --git a/dist/css/main.css b/dist/css/main.css
index abf9dc7..aa0f114 100644
--- a/dist/css/main.css
+++ b/dist/css/main.css
@@ -241,7 +241,7 @@ main#home h1 {
font-weight: 900;
}
.more .skills .skill-per::before {
- content: attr(percentage);
+ content: attr(data-percentage);
position: absolute;
padding: 4px 6px;
background-color: #fff;
@@ -364,7 +364,9 @@ main#home h1 {
outline: none;
resize: none;
}
-.container .contact-form .input-box input:focus ~ span, .container .contact-form .input-box input:valid ~ span, .container .contact-form .input-box textarea:focus ~ span, .container .contact-form .input-box textarea:valid ~ span {
+.container .contact-form .input-box input:focus ~ span, .container .contact-form .input-box input:valid ~ span,
+.container .contact-form .input-box textarea:focus ~ span,
+.container .contact-form .input-box textarea:valid ~ span {
color: rgba(107, 159, 238, 0.9058823529);
font-size: 12px;
transform: translateY(-25px);
@@ -793,5 +795,3 @@ main#home h1 {
text-align: center;
}
}
-
-/*# sourceMappingURL=main.css.map */
diff --git a/dist/education.html b/dist/education.html
index ddaaca8..b12f98b 100644
--- a/dist/education.html
+++ b/dist/education.html
@@ -55,32 +55,32 @@ Programming skills
@@ -89,37 +89,37 @@
Programming skills
diff --git a/dist/js/progress.js b/dist/js/progress.js
index 5e67957..2b3f719 100644
--- a/dist/js/progress.js
+++ b/dist/js/progress.js
@@ -1,14 +1,25 @@
-$('.skill-per').each(function () {
- var $this = $(this);
- var per = $this.attr('percentage');
- $this.css("width", per + '%');
- $({ animatedValue: 0 }).animate({ animatedValue: per }, {
- duration: 2000,
- step: function () {
- $this.attr('percentage', Math.floor(this.animatedValue) + '%');
- },
- complete: function () {
- $this.attr('percentage', Math.floor(this.animatedValue) + '%');
+document.querySelectorAll('.skill-per').forEach((skillPer) => {
+ const percentageValue = Number.parseInt(
+ skillPer.getAttribute('data-percentage') || skillPer.getAttribute('percentage') || '0',
+ 10,
+ );
+ const targetPercentage = Number.isNaN(percentageValue) ? 0 : percentageValue;
+ const durationMs = 2000;
+ const startTime = performance.now();
+
+ skillPer.style.width = `${targetPercentage}%`;
+
+ const animatePercentage = (now) => {
+ const elapsed = now - startTime;
+ const progress = Math.min(elapsed / durationMs, 1);
+ const currentValue = Math.floor(progress * targetPercentage);
+
+ skillPer.setAttribute('data-percentage', `${currentValue}%`);
+
+ if (progress < 1) {
+ requestAnimationFrame(animatePercentage);
}
- });
+ };
+
+ requestAnimationFrame(animatePercentage);
});
diff --git a/scss/main.scss b/scss/main.scss
index 6816790..5eec2c7 100644
--- a/scss/main.scss
+++ b/scss/main.scss
@@ -123,7 +123,7 @@ main {
position: relative;
font-weight: 900;
&::before {
- content: attr(percentage);
+ content: attr(data-percentage);
position: absolute;
padding: 4px 6px;
background-color: config.set-text-color(config.$primary-color); //black;
From bfd241943ae9f2184f1894bb4af6f8fc4c225053 Mon Sep 17 00:00:00 2001
From: mnau23 <51322165+mnau23@users.noreply.github.com>
Date: Sun, 23 Aug 2026 23:35:57 +0200
Subject: [PATCH 03/12] guard menu initialization if DOM nodes are missing
---
dist/js/menu.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/dist/js/menu.js b/dist/js/menu.js
index 1facfab..ce49096 100644
--- a/dist/js/menu.js
+++ b/dist/js/menu.js
@@ -8,7 +8,9 @@ const navItems = document.querySelectorAll('.nav-item');
// Set menu initial state
let showMenu = false;
-menuBtn.addEventListener('click', toggleMenu);
+if (menuBtn && menu && menuNav && menuPhoto) {
+ menuBtn.addEventListener('click', toggleMenu);
+}
function toggleMenu() {
if (!showMenu) {
From f1d54cef98457c0fff8a597b19dae9c2a517e0f4 Mon Sep 17 00:00:00 2001
From: mnau23 <51322165+mnau23@users.noreply.github.com>
Date: Sun, 23 Aug 2026 23:36:47 +0200
Subject: [PATCH 04/12] guard modal overlay access in pages without overlay
---
dist/js/modal.js | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/dist/js/modal.js b/dist/js/modal.js
index cb4c9e9..4b3cb4a 100644
--- a/dist/js/modal.js
+++ b/dist/js/modal.js
@@ -9,12 +9,14 @@ openModalBtns.forEach(button => {
})
})
-overlay.addEventListener('click', () => {
- const modals = document.querySelectorAll('.modal.active')
- modals.forEach(modal => {
- closeModal(modal)
+if (overlay) {
+ overlay.addEventListener('click', () => {
+ const modals = document.querySelectorAll('.modal.active')
+ modals.forEach(modal => {
+ closeModal(modal)
+ })
})
-})
+}
closeModalBtns.forEach(button => {
button.addEventListener('click', () => {
@@ -24,13 +26,13 @@ closeModalBtns.forEach(button => {
})
function openModal(modal) {
- if (modal == null) return
+ if (modal == null || overlay == null) return
modal.classList.add('active')
overlay.classList.add('active')
}
function closeModal(modal) {
- if (modal == null) return
+ if (modal == null || overlay == null) return
modal.classList.remove('active')
overlay.classList.remove('active')
}
From 7f9b77e68637eaaa0312b060e994c8ebf6aab974 Mon Sep 17 00:00:00 2001
From: mnau23 <51322165+mnau23@users.noreply.github.com>
Date: Sun, 23 Aug 2026 23:39:07 +0200
Subject: [PATCH 05/12] harden typewriter against missing or invalid data
---
dist/js/typewriter.js | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/dist/js/typewriter.js b/dist/js/typewriter.js
index b975ef5..a16d578 100644
--- a/dist/js/typewriter.js
+++ b/dist/js/typewriter.js
@@ -45,7 +45,26 @@ document.addEventListener('DOMContentLoaded', init);
function init() {
const txtElement = document.querySelector('.txt-type');
- const words = JSON.parse(txtElement.getAttribute('data-words'));
+ if (!txtElement) {
+ return;
+ }
+
+ const wordsAttr = txtElement.getAttribute('data-words');
+ if (!wordsAttr) {
+ return;
+ }
+
+ let words = [];
+ try {
+ words = JSON.parse(wordsAttr);
+ } catch {
+ return;
+ }
+
+ if (!Array.isArray(words) || words.length === 0) {
+ return;
+ }
+
const wait = txtElement.getAttribute('data-wait');
new typeWriter(txtElement, words, wait); // Init typewriter
}
From cd870d0980436b6e63d784cb99b072b8b83b33e2 Mon Sep 17 00:00:00 2001
From: mnau23 <51322165+mnau23@users.noreply.github.com>
Date: Sun, 23 Aug 2026 23:40:50 +0200
Subject: [PATCH 06/12] replace footer document.write year rendering
---
dist/about.html | 6 +++++-
dist/contact.html | 6 +++++-
dist/education.html | 6 +++++-
dist/thanks.html | 6 +++++-
4 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/dist/about.html b/dist/about.html
index 2e4993e..a0acb26 100644
--- a/dist/about.html
+++ b/dist/about.html
@@ -111,8 +111,12 @@ Bio
This website is cookie-free!
Made with and by me ©
2021
+
diff --git a/dist/contact.html b/dist/contact.html
index d202f96..7003379 100644
--- a/dist/contact.html
+++ b/dist/contact.html
@@ -144,8 +144,12 @@ Send message
This website is cookie-free!
Made with and by me ©
2021
+
diff --git a/dist/education.html b/dist/education.html
index b12f98b..d6bb189 100644
--- a/dist/education.html
+++ b/dist/education.html
@@ -486,8 +486,12 @@ Certifications
This website is cookie-free!
Made with and by me ©
2021
+
diff --git a/dist/thanks.html b/dist/thanks.html
index d920231..afc68ac 100644
--- a/dist/thanks.html
+++ b/dist/thanks.html
@@ -80,8 +80,12 @@ Thank you!
This website is cookie-free!
Made with and by me ©
2021
+
From 9f81dc54d29fcac01b027690f4b413c7ac5e579c Mon Sep 17 00:00:00 2001
From: mnau23 <51322165+mnau23@users.noreply.github.com>
Date: Sun, 23 Aug 2026 23:41:59 +0200
Subject: [PATCH 07/12] add noopener/noreferrer to external blank links
---
dist/about.html | 12 ++++++------
dist/contact.html | 16 ++++++++--------
dist/education.html | 34 +++++++++++++++++-----------------
dist/index.html | 12 ++++++------
dist/thanks.html | 12 ++++++------
5 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/dist/about.html b/dist/about.html
index a0acb26..17b43a3 100644
--- a/dist/about.html
+++ b/dist/about.html
@@ -88,22 +88,22 @@ Bio