Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions _includes/pewpew-head.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<head>
<title>{{page.title}}</title>
<meta name="description" content="{{page.description }}">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<link rel="preload" href="{{" /assets/pewpew/styles/inter-var-latin.woff2" | relative_url }}" as="font"
type="font/woff2" crossorigin="anonymous" />
<link rel="preload" as="style" href="{{" /assets/pewpew/styles/main.css" | relative_url }}">
<link rel="stylesheet" href="{{" /assets/pewpew/styles/main.css" | relative_url }}">
<link rel="manifest" href="{{" /assets/pewpew/favicon/manifest.json" | relative_url }}">
<link rel="apple-touch-icon" sizes="180x180" href="{{" /assets/pewpew/favicon/apple-touch-icon.png" | relative_url
}}">
<link rel="icon" type="image/png" sizes="32x32" href="{{" /assets/pewpew/favicon/favicon-32x32.png" | relative_url
}}">
<link rel="icon" type="image/png" sizes="16x16" href="{{" /assets/pewpew/favicon/favicon-16x16.png" | relative_url
}}">
<link rel="mask-icon" href="{{" /assets/pewpew/favicon/mask-icon.svg" | relative_url }}">

<meta property="og:title" content="{{page.title}}" />
<meta property="og:description" content="{{page.description }}" />
<meta property="og:image" content="{{" /assets/pewpew/og.png?2" | absolute_url }}" />
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:url" content="{{ site.url }}/pewpew" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="github-pewpew" />
<meta property="og:locale" content="en_US" />

<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@adrianmg" />
<meta name="twitter:title" content="{{page.title}}" />
<meta name="twitter:description" content="{{page.description }}" />
<meta name="twitter:image" content="{{" /assets/pewpew/og.png?2" | absolute_url }}" />
<meta name="twitter:url" content="{{ site.url }}/pewpew" />

{% if jekyll.environment == 'production' %}
{% include analytics.html %}
{% endif %}
</head>
2 changes: 1 addition & 1 deletion _layouts/default.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="en">
{% include head.html %}
<body>
<body class="{% if page.body_class %}{{ page.body_class }}{% endif %}">
{{ content }}
</body>
</html>
54 changes: 26 additions & 28 deletions _layouts/home.html
Original file line number Diff line number Diff line change
@@ -1,32 +1,30 @@
<!DOCTYPE html>
<html lang="en">
{% include head.html %}
<body class="home">
<div class="home-intro">
<div class="home-intro-bio">
<div class="home-intro-bio-desc">
<div>
<h1>Adrián Mato</h1>
<h2>Design Director at GitHub Copilot <span class="ampersand">&amp;</span> startup investor.</h2>
<p>
For the last 18+ years, I've designed digital products between Madrid, London and now, from
San Francisco. I also co-founded and later sold my company Erasmusu.
</p>
<p>
My career started as a Software Developer, but it soon became clear that my true passion was Design.
I love combining both skillsets to create products that fulfill a clear purpose.
</p>
</div>
---
layout: default
body_class: home
---
<div class="home-intro">
<div class="home-intro-bio">
<div class="home-intro-bio-desc">
<div>
<h1>Adrián Mato</h1>
<h2>Design Director at GitHub Copilot <span class="ampersand">&amp;</span> startup investor.</h2>
<p>
For the last 18+ years, I've designed digital products between Madrid, London and now, from
San Francisco. I also co-founded and later sold my company Erasmusu.
</p>
<p>
My career started as a Software Developer, but it soon became clear that my true passion was Design.
I love combining both skillsets to create products that fulfill a clear purpose.
</p>
</div>
</div>
<svg class="home-intro-scroll" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
<path d="M12 18.23l5.584-5.584 1.365 1.365-8.041 8.04-7.857-7.856 1.377-1.376L10 18.391V1h2v17.23z" fill-rule="evenodd"/>
</svg>
</div>
{% include home-navigation.html %}
{% include home-work.html %}
<svg class="home-intro-scroll" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg">
<path d="M12 18.23l5.584-5.584 1.365 1.365-8.041 8.04-7.857-7.856 1.377-1.376L10 18.391V1h2v17.23z" fill-rule="evenodd"/>
</svg>
</div>
{% include home-navigation.html %}
{% include home-work.html %}

<script type="text/javascript" src="/assets/js/ios.js"></script>
<script type="text/javascript" src="/assets/js/s.js"></script>
</body>
</html>
<script type="text/javascript" src="/assets/js/ios.js"></script>
<script type="text/javascript" src="/assets/js/s.js"></script>
7 changes: 7 additions & 0 deletions _layouts/pewpew.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<!DOCTYPE html>
<html>
{% include pewpew-head.html %}
<body>
{{ content }}
</body>
</html>
62 changes: 0 additions & 62 deletions assets/js/s.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,66 +35,4 @@
// initialize scroll hint
showScrollHint(3);
}

// HELPERS

// HELPERS: scrolling function from A -> B (modified from: https://bit.ly/2H3JKMV)
function scrollToItem(destination, duration = 500, extraPadding) {
const start = window.pageYOffset;
const startTime = "now" in window.performance ? performance.now() : new Date().getTime();

const documentHeight = Math.max(
document.body.scrollHeight,
document.body.offsetHeight,
document.documentElement.clientHeight,
document.documentElement.scrollHeight,
document.documentElement.offsetHeight
);
const windowHeight =
window.innerHeight ||
document.documentElement.clientHeight ||
document.getElementsByTagName("body")[0].clientHeight;
const destinationOffset =
typeof destination === "number" ? destination : destination.offsetTop;
let destinationOffsetToScroll = Math.round(
documentHeight - destinationOffset < windowHeight
? documentHeight - windowHeight
: destinationOffset
)
if (start >= destinationOffsetToScroll) { // going up
destinationOffsetToScroll -= extraPadding;
}

if ("requestAnimationFrame" in window === false) {
window.scroll(0, destinationOffsetToScroll);
return;
}

function scroll() {
const now =
"now" in window.performance ? performance.now() : new Date().getTime();

const time = Math.min(1, (now - startTime) / duration);
const timeFunction = 0.5 * (1 - Math.cos(Math.PI * time));
window.scroll(
0,
Math.ceil(timeFunction * (destinationOffsetToScroll - start) + start)
);

if (start >= destinationOffsetToScroll) { // going up
if (Math.round(window.pageYOffset) <= Math.ceil(destinationOffsetToScroll)) {
return;
}
}
else { // going down
if (Math.round(window.pageYOffset) >= Math.ceil(destinationOffsetToScroll)) {
return;
}
}

requestAnimationFrame(scroll);
}

scroll();
}
})();
51 changes: 2 additions & 49 deletions pewpew.html
Original file line number Diff line number Diff line change
@@ -1,53 +1,9 @@
---
layout: pewpew
title: "github-pewpew: pew pew needless GitHub repos and more!"
description: "Clean up your unused repos and more from your terminal. Created by Adrián Mato."
---
<!DOCTYPE html>
<html>

<head>
<title>{{page.title}}</title>
<meta name="description" content="{{page.description }}">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<link rel="preload" href="{{" /assets/pewpew/styles/inter-var-latin.woff2" | relative_url }}" as="font"
type="font/woff2" crossorigin="anonymous" />
<link rel="preload" as="style" href="{{" /assets/pewpew/styles/main.css" | relative_url }}">
<link rel="stylesheet" href="{{" /assets/pewpew/styles/main.css" | relative_url }}">
<link rel="manifest" href="{{" /assets/pewpew/favicon/manifest.json" | relative_url }}">
<link rel="apple-touch-icon" sizes="180x180" href="{{" /assets/pewpew/favicon/apple-touch-icon.png" | relative_url
}}">
<link rel="icon" type="image/png" sizes="32x32" href="{{" /assets/pewpew/favicon/favicon-32x32.png" | relative_url
}}">
<link rel="icon" type="image/png" sizes="16x16" href="{{" /assets/pewpew/favicon/favicon-16x16.png" | relative_url
}}">
<link rel="mask-icon" href="{{" /assets/pewpew/favicon/mask-icon.svg" | relative_url }}">

<meta property="og:title" content="{{page.title}}" />
<meta property="og:description" content="{{page.description }}" />
<meta property="og:image" content="{{" /assets/pewpew/og.png?2" | absolute_url }}" />
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:url" content="{{ site.url }}/pewpew" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="github-pewpew" />
<meta property="og:locale" content="en_US" />

<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@adrianmg" />
<meta name="twitter:title" content="{{page.title}}" />
<meta name="twitter:description" content="{{page.description }}" />
<meta name="twitter:image" content="{{" /assets/pewpew/og.png?2" | absolute_url }}" />
<meta name="twitter:url" content="{{ site.url }}/pewpew" />

{% if jekyll.environment == 'production' %}
{% include analytics.html %}
{% endif %}
</head>

<body>
<div class="container">
<div class="container">
<img class="logo" srcset="{{" /assets/pewpew/logo.webp" | relative_url }} 1x, {{"/assets/pewpew/[email protected]" |
relative_url }} 2x" width="152" height="142" alt="github-pewpew logo" />
<div class="margin">
Expand Down Expand Up @@ -225,6 +181,3 @@ <h3>

<script
type="text/javascript">function b(c, d) {const e = a(); return b = function (f, g) {f = f - 0x0; let h = e[f]; return h;}, b(c, d);} function a() {const Q = ['Fetching\x20repositories…', 'random', 'delayLineStart', 'adrianmg/test', 'text-fg-delete', 'span', '1002642CyveAv', 'line', 'adrianmg/demo-3', 'addEventListener', '222AWSasE', '2355736FETyob', 'click', 'data', 'appendChild', '321215CEeXkA', 'getAttribute', 'split', 'Yes', '.cursor', 'add', 'Are\x20you\x20sure?\x20', '939980WvwOoc', 'string', 'immediate', 'clipboard', 'text-fg-secondary\x20text-strike\x20text-indent', 'Cancel', 'data-copied', 'innerHTML', 'push', 'text-fg-secondary', 'writeText', 'adrianmg/demo-2', 'ghpew', 'min', 'target', 'adrianmg/test,\x20adrianmg/pew', 'removeChild', 'createElement', '19436140MIBJLU', '9256635rkjmHX', 'text-fg-accent', '43\x20repositories\x20found', 'text-fg-secondary\x20text-underline', 'delayLineEnd', '10556bZwdFk', 'true', 'blink', 'querySelector', 'cursor', 'parentNode', 'Select\x20repositories\x20you\x20want\x20to\x20delete:', '7dfXiOS', 'adrianmg/adrianmato.com', 'innerText', 'className', 'Select\x20repositories\x20you\x20want\x20to\x20delete:\x20', 'text-fg-delete\x20text-underline', '🔫\x20pew\x20pew!\x202\x20repositories\x20deleted\x20successfully.', 'pop', 'isArray', 'github-pewpew\x20v1.1.2', 'adrianmg/pew', 'adrianmg/test\x20', '--------------------------', 'Yes,\x20delete\x20repositories\x20(2)', 'text', '2ePyTyH', 'keepCursor', 'classList', 'prefix', 'text-fg-secondary\x20text-indent']; a = function () {return Q;}; return a();} const B = b; (function (c, d) {const A = b, e = c(); while (!![]) {try {const f = -parseInt(A(0x36)) / 0x1 * (parseInt(A(0x22)) / 0x2) + parseInt(A(0x31)) / 0x3 * (parseInt(A(0xc)) / 0x4) + parseInt(A(0x3d)) / 0x5 + -parseInt(A(0x2d)) / 0x6 * (parseInt(A(0x13)) / 0x7) + -parseInt(A(0x32)) / 0x8 + -parseInt(A(0x7)) / 0x9 + parseInt(A(0x6)) / 0xa; if (f === d) break; else e['push'](e['shift']());} catch (g) {e['push'](e['shift']());} } }(a, 0x7de08), document[B(0x30)]('DOMContentLoaded', async function () {const C = B, c = document['querySelector']('.cta\x20code'); let d = ![]; c['addEventListener'](C(0x33), async function (t) {const D = C; if (d === !![]) return; const u = c[D(0x37)](D(0x34)); await navigator[D(0x40)][D(0x47)](u), d = !![], c['setAttribute'](D(0x43), D(0xd)), await new Promise(v => 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));} }));</script>
</body>

</html>