From 669fc1d64c7a7b10bd2eec1fd274fe9b32c528da Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:42:14 +0000 Subject: [PATCH 1/4] Initial plan From 27c33cfd101d2677ccd22c57e69d12cbd1f1d4f4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:51:22 +0000 Subject: [PATCH 2/4] Optimize performance: throttle scroll handler, defer scripts, optimize font loading Co-authored-by: adrianmg <589285+adrianmg@users.noreply.github.com> --- _includes/head.html | 6 ++++-- _layouts/home.html | 4 ++-- _sass/_layout.scss | 4 ---- assets/js/s.js | 14 +++++++++++++- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/_includes/head.html b/_includes/head.html index be1b0a9..8e9c795 100644 --- a/_includes/head.html +++ b/_includes/head.html @@ -20,9 +20,11 @@ - + + - + + diff --git a/_layouts/home.html b/_layouts/home.html index aad54ed..e0e6abc 100644 --- a/_layouts/home.html +++ b/_layouts/home.html @@ -26,7 +26,7 @@

Design Director at GitHub Copilot & start {% include home-navigation.html %} {% include home-work.html %} - - + + diff --git a/_sass/_layout.scss b/_sass/_layout.scss index 59f91e3..7ba80f0 100644 --- a/_sass/_layout.scss +++ b/_sass/_layout.scss @@ -131,8 +131,6 @@ pre { } @keyframes home-intro-scroll { - 20% { - } 45% { transform: translateY(0); } @@ -142,8 +140,6 @@ pre { 65% { transform: translateY(0); } - 75% { - } } @keyframes navigation-animation { diff --git a/assets/js/s.js b/assets/js/s.js index dbd33f9..d41459e 100644 --- a/assets/js/s.js +++ b/assets/js/s.js @@ -19,8 +19,20 @@ } } + // throttle function to limit scroll handler execution + function throttle(func, limit) { + let inThrottle; + return function() { + if (!inThrottle) { + func.apply(this, arguments); + inThrottle = true; + setTimeout(() => inThrottle = false, limit); + } + } + } + // scrolling event - document.addEventListener("scroll", scrollHandler); + document.addEventListener("scroll", throttle(scrollHandler, 100)); function scrollHandler() { // scroll hint From d46a564724d6b7ebddf811531bb797083fcb8aa0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:56:09 +0000 Subject: [PATCH 3/4] Extract inline script, add lazy loading, and DNS prefetch for analytics Co-authored-by: adrianmg <589285+adrianmg@users.noreply.github.com> --- _includes/head.html | 1 + _includes/home-work.html | 8 ++++---- assets/pewpew/pewpew-demo.js | 1 + pewpew.html | 3 +-- 4 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 assets/pewpew/pewpew-demo.js diff --git a/_includes/head.html b/_includes/head.html index 8e9c795..82d975e 100644 --- a/_includes/head.html +++ b/_includes/head.html @@ -22,6 +22,7 @@ + diff --git a/_includes/home-work.html b/_includes/home-work.html index 7d74953..571f6d4 100644 --- a/_includes/home-work.html +++ b/_includes/home-work.html @@ -14,13 +14,13 @@

Lead & Design Manager (2018 – 2020)

Adrián Mato - Azure Pipelines
-
Adrián Mato - Azure Pipelines
-
Adrián Mato - Azure Pipelines
-
Adrián Mato - Azure Pipelines
@@ -35,7 +35,7 @@

Sr. Product Designer (2015 – 2018)

and more available on mobile, tablet and desktop.

-
Adrián Mato - Yammer Office 365
setTimeout(v, 0x7d0)), c['removeAttribute'](D(0x43)), d = ![];}); const e = {'immediate': ![], 'prefix': '➜\x20', 'className': ![], 'target': document[C(0xf)]('#cli'), 'keepCursor': ![], 'delayLineStart': 0x190, 'delayLineEnd': 0x190}; let f = []; await s(0x1f4), await p(), await g(C(0x0)), await g(C(0x1c), {'immediate': !![], 'prefix': '', 'className': C(0x8)}), await g('pew\x20pew\x20those\x20needless\x20github\x20repos!', {'immediate': !![], 'prefix': ''}), await g(), await s(0x190), await g(C(0x27), {'immediate': !![], 'prefix': '\x20', 'className': 'spinner\x20text-fg-secondary'}), await s(0x5dc), await n(0x1), await g([{'text': C(0x9), 'className': 'text-fg-secondary'}], {'immediate': !![], 'prefix': '✔\x20'}), await g(C(0x12), {'immediate': !![], 'prefix': '?\x20', 'keepCursor': !![]}), await g(C(0x14), {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await g('adrianmg/pew\x20', {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await g(C(0x2a), {'immediate': !![], 'prefix': '\x20\x20', 'className': 'text-fg-secondary'}), await g('adrianmg/demo-1', {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await g(C(0x48), {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await g(C(0x2f), {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await g(C(0x1f), {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await s(0x8fc), await n(0x8), await g([{'text': C(0x17)}, {'text': C(0x3), 'className': 'text-fg-accent'}], {'immediate': !![], 'prefix': '✔\x20'}), await s(0x1f4), await g([{'text': C(0x3c)}, {'text': '…', 'className': C(0x46)}], {'immediate': !![], 'prefix': '?\x20'}), await g([{'text': C(0x20), 'className': C(0x18)}], {'immediate': !![], 'prefix': '›\x20'}), await g(C(0x42), {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await s(0x1f4), n(0x2), await g('Yes,\x20delete\x20repositories\x20(2)', {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x2b)}), await g([{'text': 'Cancel', 'className': C(0xa)}], {'immediate': !![], 'prefix': '›\x20'}), await s(0x12c), n(0x2), await g([{'text': C(0x20), 'className': C(0x18)}], {'immediate': !![], 'prefix': '›\x20'}), await g('Cancel', {'immediate': !![], 'prefix': '\x20\x20', 'className': C(0x46)}), await s(0x258), n(0x3), await g([{'text': 'Are\x20you\x20sure?\x20'}, {'text': C(0x39), 'className': C(0x8)}], {'immediate': !![], 'prefix': '✔\x20'}), await g(C(0x1e), {'immediate': !![], 'prefix': '', 'className': C(0x26)}), await s(0x320), n(0x1), await g('adrianmg/test', {'immediate': !![], 'prefix': '', 'className': C(0x41)}), await s(0xc8), await g(C(0x1d), {'immediate': !![], 'prefix': '', 'className': 'text-fg-secondary\x20text-indent'}), await s(0x258), n(0x1), await g(C(0x1d), {'immediate': !![], 'prefix': '', 'className': C(0x41)}), await s(0x1f4), await g(), await g(C(0x19), {'immediate': !![], 'prefix': ''}), await g('Recover\x20repos\x20from\x20github.com/settings/repositories', {'immediate': !![], 'prefix': '', 'className': C(0x46)}), o(!![], e[C(0x2)]); async function g(t, u) {const E = C; u = {...e, ...u}; if (m(t, u)) return; const v = i(u['target'], u[E(0x25)]); f['push'](v), r(v, u[E(0x16)]), await h(t, u, v);} async function h(t, u, v) {const F = C; if (typeof t === F(0x3e)) {if (u['immediate']) return k(t, u, v); await s(u[F(0x29)]), await l(t, u, v), await s(u[F(0xb)]), j(v, u[F(0x23)]);} else {if (Array[F(0x1b)](t)) {if (u[F(0x3f)]) {j(v, u[F(0x23)]); for (const w of t) {const x = document[F(0x5)](F(0x2c)); r(x, w[F(0x16)]), x[F(0x44)] = w[F(0x21)], v[F(0x35)](x);} return;} else {await s(u[F(0x29)]); for (const y of t) {const z = document[F(0x5)](F(0x2c)); r(z, y['className']), v[F(0x35)](z), await l(y['text'], u, z);} await s(u[F(0xb)]), j(v, u[F(0x23)]);} } } } function i(t, u = '') {const G = C, v = document[G(0x5)]('p'), w = document[G(0x5)](G(0x2c)); w[G(0x24)]['add'](G(0x2e)), w[G(0x15)] = u; const x = document[G(0x5)](G(0x2c)); return x[G(0x24)][G(0x3b)](G(0x10)), v[G(0x35)](w), v[G(0x35)](x), t[G(0x35)](v), w;} function j(t, u) {const H = C, v = t[H(0x11)]['querySelector'](H(0x3a)); return v && (u ? v[H(0x24)][H(0x3b)](H(0xe)) : t[H(0x11)][H(0x4)](v)), t;} function k(t, u, v) {const I = C; j(v, u[I(0x23)]), v[I(0x44)] += t; return;} async function l(t, u, v) {const J = C; for (const w of t) {v[J(0x44)] += w, await s(q());} } function m(t, u) {const K = C; if (!t) {const v = i(u[K(0x2)], ''); return f[K(0x45)](v), v[K(0x44)] = '\x20', j(v), v;} else return ![];} function n(t) {return new Promise(u => {const L = b; for (let v = 0x0; v < t; v++) {const w = f[L(0x1a)](); if (w) {const x = w[L(0x11)]; x[L(0x11)][L(0x4)](x);} } u();});} function o(t = !![], u) {const M = C, v = document[M(0x5)]('p'), w = document[M(0x5)](M(0x2c)); w[M(0x24)][M(0x3b)](M(0x10)), t && w[M(0x24)][M(0x3b)](M(0xe)), v[M(0x35)](w), u[M(0x35)](v);} function p() {const N = C; e[N(0x2)][N(0x44)] = '';} function q() {const O = C, t = {'min': 0x3c, 'max': 0x64}, u = Math[O(0x28)]() * (t['max'] - t[O(0x1)]) + t['min']; return u;} function r(t, u) {const P = C; if (u) {const v = u[P(0x38)]('\x20'); for (const w of v) {t[P(0x24)][P(0x3b)](w);} } } async function s(t) {return new Promise(u => window['setTimeout'](u, t));} })); diff --git a/pewpew.html b/pewpew.html index f52c3d6..0f32861 100644 --- a/pewpew.html +++ b/pewpew.html @@ -223,8 +223,7 @@

- + From b80ed31b02fac38f5e209d219e0074b92b3c20e5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:58:48 +0000 Subject: [PATCH 4/4] Fix liquid template syntax in pewpew.html Co-authored-by: adrianmg <589285+adrianmg@users.noreply.github.com> --- pewpew.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pewpew.html b/pewpew.html index 0f32861..b132d4c 100644 --- a/pewpew.html +++ b/pewpew.html @@ -223,7 +223,7 @@

- +