-
Notifications
You must be signed in to change notification settings - Fork 5
/
about.njk
342 lines (320 loc) · 11 KB
/
about.njk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
---
layout: layouts/base.njk
templateClass: no-footer-home
title: Designer and writer.
---
<style>
.container {
display: flex;
position: relative;
flex-wrap: none;
height: calc(100dvh - 45px);
width: 100dvw;
margin-left: calc(50% - 50dvw);
overflow: hidden;
gap: 20px;
scroll-snap-type: x mandatory;
margin-top: calc(var(--space-nav) * -7);
@media screen and (min-width: 550px) {
margin-top: calc(var(--space-nav) * -1.7);
}
}
.card {
--card-padding: 20px;
padding: var(--card-padding);
font-size: 1.25rem;
line-height: 1.3;
padding-right: 0;
scroll-snap-align: start;
height: calc(100dvh - 40px);
max-height: 630px;
margin: auto;
min-width: calc(100dvw - var(--card-padding));
flex-wrap: nowrap;
display: flex;
justify-content: center;
@media screen and (min-width: 600px) {
font-size: 1.625rem;
}
}
.card c-window {
max-width: 950px;
height: 100%;
width: 100%;
text-align: center;
}
.card .window-content {
width: 100%;
display: grid;
place-content: center;
gap: 30px;
padding: 0 30px;
text-wrap: balance;
@media screen and (min-width: 600px) {
padding: 0 60px;
}
}
.card img {
width: auto !important;
max-width: 250px;
max-height: 150px;
margin: -30px auto 0;
}
.container .card:last-of-type {
padding-left: 0;
padding-right: var(--card-padding);
}
.card-nav {
position: fixed;
bottom: 0;
top: 0;
left: 0;
right: 30px;
display: flex;
gap: 6px;
margin: auto;
text-align: center;
max-width: 930px;
height: calc(100dvh - 40px);
max-height: 600px;
justify-content: flex-end;
align-items: flex-end;
pointer-events: none;
}
.card-nav button {
pointer-events: initial;
font-family: inherit;
-webkit-appearance: none;
border: none;
background: transparent;
}
.card-nav button:focus,
.card-nav button:hover {
cursor: pointer;
}
.card-nav button:active {
transform: translate(0, 2px);
}
#next,
#prev {
background-size: 100%;
background-repeat: no-repeat;
height: 80px;
width: 80px;
color: transparent;
text-decoration: none;
}
#prev {
background-image: url("/images/home-essay/arrow-left.webp");
}
#next {
background-image: url("/images/home-essay/arrow-right.webp");
}
</style>
<c-grid class="container">
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/Buildings9.webp" alt="A house, a home, a tree in the background"/>
<p>There’s many ways to think of a personal website but to explain how I see this place we have to go back…</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/Mac8.webp" alt="A tiny Mac screen"/>
<p>…way back to 1987.
</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/windows-on-windows.webp" alt="Windows on a computer overlapping one another"/>
<p>In the summer of that year, a proto-internet emerged called HyperCard. (Yes, this is how I greet people at parties).
</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/TopicsStack.webp" alt="The old HyperCard interface showing an app about endangered animals. A big zebra looks off to the right."/>
<p>It was designed to help folks write apps—or “stacks” as they called them—and it was way ahead of its time. With HyperCard you could bundle stories and games together, or even learn how to program from scratch. It was a beautiful mess.</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/3987hf.webp" alt="Computer interface elements bumping into one another in a big white space"/>
<p>I’ve always loved that word—stacks!—and it’s perfect to describe this website of mine: bundles of disorganized and chaotic gatherings of pure, raw stuff. It’s all so messy! And embarrassing! Don’t look over there!</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/MapOfStack.webp" alt="An illustration of how HyperCard stacks connect and link to one another"/>
<p>Sure, my website is just a website about websites but if you look closely there’s a few topics in the stack that keep returning.</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/2_laserwriter.webp" alt="A laserprinter from the 1980s"/>
<p>First: reading, writing, and publishing—the shape of text on screens.</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/fonts-fonts-fonts.webp" alt="A series of books overlapping with the title 'Fonts' set in a serif font on the cover"/>
<p>Second: graphic design and web typography that’s all tuned in, with every flourish and detail cared for.</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/bike.webp" alt="A bicycle for the mind"/>
<p>Third: figuring out how to organize folks to make punk rock software (if there is such a thing).</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/calendar.webp" alt="A calendar showing the year 1995 at the top"/>
<p>I’ll admit I’ve drunk the cyberpunk koolaid of 1995 and 1987 and every year in-between where networked computers were seen as an adventure. And so I still believe that websites can be as beautiful or, sometimes, even more beautiful than a handmade book.</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/Communication58.webp" alt="A pixelated woman smiles in a tiny television"/>
<p>Just in their own way.</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/AssortedCards8.webp" alt="Wonky windows and user interface elements fly all over the place"/>
<p>My excitement here might sound unhinged since websites in 2024 often feel like a burden we have to endure. When we boot up a browser and dial in a URL, how often do we brace ourselves for impact?</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/Group12.webp" alt="A business card reads: 'Please wait. This business card is loading.'"/>
<p>It feels like we’ve collectively given up on the hope of making a new kind of graphic design or a new kind of literature along the way. Websites are boring now. The frontier has been seized. We’re too late.</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/nah-mate.webp" alt="'Nah, mate' in the center of a speech bubble"/>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/Nature14.webp" alt="An illustration of several planets, from smallest to largest"/>
<p>
I believe (perhaps naively!) that we haven’t figured out everything that a website can be just yet. The constraints, the screens, the responsiveness! Where does all that lead?
</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/SpiralandTabs1.webp" alt="A retro illustration of a book"/>
<p>I reckon we haven’t figured out the web in the same way that great book designers haven’t figured out all the things a book can be yet, 500 hundred years after the reinvention of movable type.</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/Communication10.webp" alt="A collection of folders"/>
<p>So everything about my work makes that argument in varying degrees of loudness: websites can and should aspire to be so much more than they are today.</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<p>And that’s what my website—my stack—aspires to be, too.</p>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper">
<img src="/images/home-essay/Communication17.webp" alt="A stack of tiny cards"/>
</div>
</c-window>
</div>
<div class="card">
<c-window>
<div class="window-content window-content-wrapper"></div>
</c-window>
</div>
<nav class="card-nav">
<button id="prev">Previous</button>
<button id="next">Next</button>
</nav>
</c-grid>
<script>
let currentPosition = 0;
const container = document.querySelector('.container');
const cardList = document.querySelectorAll('.card');
const prev = document.querySelector('#prev');
const next = document.querySelector('#next');
function turnPageForward() {
if (currentPosition < cardList.length - 1) {
currentPosition = currentPosition + 1;
cardList[currentPosition].scrollIntoView({behavior: "instant", block: "center", inline: "nearest"});
} else {
return;
}
}
function turnPageBack() {
if (currentPosition > 0) {
currentPosition = currentPosition - 1;
cardList[currentPosition].scrollIntoView({behavior: "instant", block: "center", inline: "nearest"});
} else {
return;
}
}
prev.addEventListener('click', (e) => {
console.log(currentPosition);
console.log(cardList);
turnPageBack();
});
next.addEventListener('click', (e) => {
console.log(cardList);
console.log(currentPosition);
turnPageForward();
});
document.addEventListener("keydown", (e) => {
if (event.keyCode === 37) {
e.preventDefault();
turnPageBack();
}
if ((event.keyCode === 39) || (event.keyCode === 32)) {
e.preventDefault();
turnPageForward();
}
});
</script>