-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearch-api.html
More file actions
447 lines (424 loc) · 39.1 KB
/
search-api.html
File metadata and controls
447 lines (424 loc) · 39.1 KB
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
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
<!DOCTYPE html>
<html lang="en">
<!-- Page head -->
<head>
<script>
(function () {
let theme = localStorage.getItem('jm-color-mode') || (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
document.documentElement.setAttribute('data-theme', theme);
})();
</script>
<style>
[data-theme="dark"] body {
background-color: rgba(18, 18, 12, 1);
color: rgba(244, 243, 238, 1);
}
</style>
<meta charset="utf-8">
<meta name="MobileOptimized" content="width" />
<meta name="HandheldFriendly" content="true" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" href="img/favicon.ico" type="image/x-icon">
<link rel="icon" href="img/favicon.ico" type="image/x-icon" media="(prefers-color-scheme: light)">
<link rel="icon" href="img/favicon-dark.ico" type="image/x-icon" media="(prefers-color-scheme: dark)">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz@0,9..144;1,9..144&family=Poppins:ital,wght@0,400;0,500;0,600;1,400;1,500;1,600&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="css/reset.min.css">
<link rel="stylesheet" type="text/css" href="css/style.min.css">
<link rel="stylesheet" type="text/css" href="css/hamburgers.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/theme-toggles@4.10.1/css/within.min.css">
<title>Jacquelyn Marcella | Search API case study</title>
<meta property="og:image" content="https://www.jacquelynmarcella.com/img/og-search.png" />
<meta property="og:description" content="API migration and UI redesign with JavaScript, CSS, Twig" />
<meta name="description" content="API migration and UI redesign with JavaScript, CSS, Twig" />
<link rel="stylesheet" type="text/css" href="css/projects.min.css">
</head>
<body class="projects">
<!-- Global nav -->
<a href="#main" class="visually-hidden skip-to-main">Skip to main content</a>
<nav class="navbar">
<h2 class="visually-hidden">Main Menu</h2>
<ul class="navbar--contents navbar--level-1">
<li class="navbar--home">
<a href="index.html" class="animate-wavy" p data-animation="JacquelynMarcellaJacquelynMarcella">Jacquelyn Marcella</a>
</li>
<li class="text-align-right mobile theme-toggle--container">
<!-- Theme toggle here -->
</li>
<li class="nav-item navbar--links">
<button class="navbar--toggle text-align-right button alternate mobile" id="navbar--toggle" aria-expanded="false" aria-controls="navbar--dropdown">
<span class="visually-hidden">Menu</span>
<div class="hamburger hamburger--squeeze">
<div class="hamburger-box">
<div class="hamburger-inner"></div>
</div>
</div>
</button>
<ul class="navbar--contents navbar--level-2" id="navbar--dropdown">
<li class="text-align-right"><a href=" index.html#skills" data-animation="TechnicalskillsTechnicalskills" class="animate-wavy">Technical skills</a></li>
<li><a href="index.html#experience" class="animate-wavy" data-animation="ExperienceExperience">Experience</a></li>
<li><a href="index.html#featured-projects" class="animate-wavy" data-animation="ProjectsProjects">Projects</a></li>
<li><a href="img/Jacquelyn-Marcella-Resume-12-2025.pdf" target="_blank" class="mobile">Resume</a></li>
<li class="contact mobile">
<ul>
<li><a href="https://github.com/jacquelynmarcella" target="_blank" class="icon-link github">
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right: 4px;">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z" transform="scale(64)" fill="var(--copyColor)" />
</svg>
<span class="visually-hidden">Follow on GitHub</span>
</a></li>
<li><a href="https://www.linkedin.com/in/jmarcella/" target="_blank" class="icon-link linkedin">
<svg height="72" viewBox="0 0 72 72" width="72" xmlns="http://www.w3.org/2000/svg" style="margin-right: 4px;">
<g fill="none" fill-rule="evenodd">
<path d="M8,72 L64,72 C68.418278,72 72,68.418278 72,64 L72,8 C72,3.581722 68.418278,-8.11624501e-16 64,0 L8,0 C3.581722,8.11624501e-16 -5.41083001e-16,3.581722 0,8 L0,64 C5.41083001e-16,68.418278 3.581722,72 8,72 Z" fill="var(--copyColor)" />
<path d="M62,62 L51.315625,62 L51.315625,43.8021149 C51.315625,38.8127542 49.4197917,36.0245323 45.4707031,36.0245323 C41.1746094,36.0245323 38.9300781,38.9261103 38.9300781,43.8021149 L38.9300781,62 L28.6333333,62 L28.6333333,27.3333333 L38.9300781,27.3333333 L38.9300781,32.0029283 C38.9300781,32.0029283 42.0260417,26.2742151 49.3825521,26.2742151 C56.7356771,26.2742151 62,30.7644705 62,40.051212 L62,62 Z M16.349349,22.7940133 C12.8420573,22.7940133 10,19.9296567 10,16.3970067 C10,12.8643566 12.8420573,10 16.349349,10 C19.8566406,10 22.6970052,12.8643566 22.6970052,16.3970067 C22.6970052,19.9296567 19.8566406,22.7940133 16.349349,22.7940133 Z M11.0325521,62 L21.769401,62 L21.769401,27.3333333 L11.0325521,27.3333333 L11.0325521,62 Z" fill="var(--backgroundColor)" />
</g>
</svg>
<span class="visually-hidden">Connect on LinkedIn</span>
</a>
</li>
</ul>
</li>
<li class="mobile"><a href="mailto:jacquelynmarcella@gmail.com" class="button primary">Email me</a></li>
<li class="text-align-right desktop theme-toggle--container">
<button class="theme-toggle" type="button" title="Toggle theme" aria-label="Toggle theme">
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" class="theme-toggle__within" height="1em" width="1em" viewBox="0 0 32 32" fill="currentColor">
<clipPath id="theme-toggle__within__clip">
<path d="M0 0h32v32h-32ZM6 16A1 1 0 0026 16 1 1 0 006 16" />
</clipPath>
<g clip-path="url(#theme-toggle__within__clip)">
<path d="M30.7 21.3 27.1 16l3.7-5.3c.4-.5.1-1.3-.6-1.4l-6.3-1.1-1.1-6.3c-.1-.6-.8-.9-1.4-.6L16 5l-5.4-3.7c-.5-.4-1.3-.1-1.4.6l-1 6.3-6.4 1.1c-.6.1-.9.9-.6 1.3L4.9 16l-3.7 5.3c-.4.5-.1 1.3.6 1.4l6.3 1.1 1.1 6.3c.1.6.8.9 1.4.6l5.3-3.7 5.3 3.7c.5.4 1.3.1 1.4-.6l1.1-6.3 6.3-1.1c.8-.1 1.1-.8.7-1.4zM16 25.1c-5.1 0-9.1-4.1-9.1-9.1 0-5.1 4.1-9.1 9.1-9.1s9.1 4.1 9.1 9.1c0 5.1-4 9.1-9.1 9.1z" />
</g>
<path class="theme-toggle__within__circle" d="M16 7.7c-4.6 0-8.2 3.7-8.2 8.2s3.6 8.4 8.2 8.4 8.2-3.7 8.2-8.2-3.6-8.4-8.2-8.4zm0 14.4c-3.4 0-6.1-2.9-6.1-6.2s2.7-6.1 6.1-6.1c3.4 0 6.1 2.9 6.1 6.2s-2.7 6.1-6.1 6.1z" />
<path class="theme-toggle__within__inner" d="M16 9.5c-3.6 0-6.4 2.9-6.4 6.4s2.8 6.5 6.4 6.5 6.4-2.9 6.4-6.4-2.8-6.5-6.4-6.5z" />
</svg>
</button>
</li>
<li class="desktop"><a href="#contact" class="button primary">Contact</a></li>
</ul>
</li>
</ul>
</nav>
<!-- Hero -->
<header id="top">
<div class="container two-up">
<div class="flex--66">
<h1>Generated cost savings through search API migration</h1>
<h2 class="visually-hidden">Overview</h2>
<h3 class="visually-hidden">Technology stack</h3>
<ul class="tags">
<li>CSS</li>
<li>Sass</li>
<li>JavaScript</li>
<li>Twig</li>
<li>Drupal</li>
<li>Figma</li>
</ul>
</div>
<div class="flex--66">
<img src="img/tile-search-api.webp" fetchpriority="high" alt="Visual of search UI on Help Center" width="900" height="506">
<h3 class="visually-hidden">Project impact</h3>
<div class="tile-grid odd">
<div>
<span class="stats--number size-2">$150k</span>
<span class="stats--desc">saved annually after migration</span>
</div>
<div>
<span class="stats--number size-2">65</span>
<span class="stats--desc">search experiences migrated</span>
</div>
<div>
<span class="stats--number size-2">2</span>
<span class="stats--desc">migrations completed concurrently</span>
</div>
<div>
<h3>Company</h3>
<p>Smartsheet</p>
</div>
<div>
<h3>Role</h3>
<p>Front end engineer</p>
</div>
<div>
<h3>Project links</h3>
<ul class="link-list">
<li><a href="https://help.smartsheet.com/search?search_api_fulltext=formulas" target="_blank">Help Center <span class="arrow-link--icon">
<span class="arrow-icon start">
<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg" xlink:href="data:image/png;base64;">
<g clip-path="url(#clip0_1599_53375)">
<path d="M7.24689 10.406L12.4069 5.24599C12.5644 5.08832 12.7782 4.99968 13.001 4.99959C13.2239 4.9995 13.4377 5.08795 13.5954 5.24549C13.7531 5.40303 13.8417 5.61675 13.8418 5.83963C13.8419 6.06252 13.7534 6.27632 13.5959 6.43399L9.0289 11L13.5939 15.566C13.6719 15.644 13.7338 15.7366 13.776 15.8385C13.8182 15.9404 13.8399 16.0497 13.8399 16.16C13.8399 16.2703 13.8182 16.3795 13.776 16.4815C13.7338 16.5834 13.6719 16.676 13.5939 16.754C13.5159 16.832 13.4233 16.8939 13.3214 16.9361C13.2194 16.9783 13.1102 17 12.9999 17C12.8896 17 12.7803 16.9783 12.6784 16.9361C12.5765 16.8939 12.4839 16.832 12.4059 16.754L7.2459 11.594C7.16789 11.516 7.10601 11.4234 7.06379 11.3215C7.02157 11.2195 6.99984 11.1103 6.99984 11C6.99984 10.8897 7.02157 10.7804 7.06379 10.6785C7.10601 10.5766 7.16888 10.484 7.24689 10.406Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_1599_53375">
<rect width="21" height="21" fill="white"/>
</clipPath>
</defs>
</svg>
</span>
<span class="arrow-icon active">
<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1599_53380)">
<path d="M0.247139 10.406L5.40714 5.24599C5.56468 5.08832 5.7784 4.99968 6.00129 4.99959C6.22418 4.9995 6.43797 5.08795 6.59564 5.24549C6.75331 5.40303 6.84195 5.61675 6.84204 5.83963C6.84213 6.06252 6.75368 6.27632 6.59614 6.43399L2.02914 11L6.59414 15.566C6.67214 15.644 6.73402 15.7366 6.77624 15.8385C6.81845 15.9404 6.84019 16.0497 6.84019 16.16C6.84019 16.2703 6.81845 16.3795 6.77624 16.4815C6.73402 16.5834 6.67214 16.676 6.59414 16.754C6.51613 16.832 6.42353 16.8939 6.32161 16.9361C6.21969 16.9783 6.11046 17 6.00014 17C5.88983 17 5.78059 16.9783 5.67867 16.9361C5.57675 16.8939 5.48415 16.832 5.40614 16.754L0.24614 11.594C0.168129 11.516 0.106253 11.4234 0.0640335 11.3215C0.0218142 11.2195 8.39233e-05 11.1103 8.39233e-05 11C8.39233e-05 10.8897 0.0218142 10.7804 0.0640335 10.6785C0.106253 10.5766 0.169129 10.484 0.247139 10.406Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.25024 11C1.25024 10.5858 1.58603 10.25 2.00024 10.25H16.0002C16.4145 10.25 16.7502 10.5858 16.7502 11C16.7502 11.4142 16.4145 11.75 16.0002 11.75H2.00024C1.58603 11.75 1.25024 11.4142 1.25024 11Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_1599_53380">
<rect width="21" height="21" fill="white"/>
</clipPath>
</defs>
</svg>
</span>
</span></a></li>
<li><a href="https://www.smartsheet.com/content-center/managing-work/project-management" target="_blank">Content Center <span class="arrow-link--icon">
<span class="arrow-icon start">
<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg" xlink:href="data:image/png;base64;">
<g clip-path="url(#clip0_1599_53375)">
<path d="M7.24689 10.406L12.4069 5.24599C12.5644 5.08832 12.7782 4.99968 13.001 4.99959C13.2239 4.9995 13.4377 5.08795 13.5954 5.24549C13.7531 5.40303 13.8417 5.61675 13.8418 5.83963C13.8419 6.06252 13.7534 6.27632 13.5959 6.43399L9.0289 11L13.5939 15.566C13.6719 15.644 13.7338 15.7366 13.776 15.8385C13.8182 15.9404 13.8399 16.0497 13.8399 16.16C13.8399 16.2703 13.8182 16.3795 13.776 16.4815C13.7338 16.5834 13.6719 16.676 13.5939 16.754C13.5159 16.832 13.4233 16.8939 13.3214 16.9361C13.2194 16.9783 13.1102 17 12.9999 17C12.8896 17 12.7803 16.9783 12.6784 16.9361C12.5765 16.8939 12.4839 16.832 12.4059 16.754L7.2459 11.594C7.16789 11.516 7.10601 11.4234 7.06379 11.3215C7.02157 11.2195 6.99984 11.1103 6.99984 11C6.99984 10.8897 7.02157 10.7804 7.06379 10.6785C7.10601 10.5766 7.16888 10.484 7.24689 10.406Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_1599_53375">
<rect width="21" height="21" fill="white"/>
</clipPath>
</defs>
</svg>
</span>
<span class="arrow-icon active">
<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1599_53380)">
<path d="M0.247139 10.406L5.40714 5.24599C5.56468 5.08832 5.7784 4.99968 6.00129 4.99959C6.22418 4.9995 6.43797 5.08795 6.59564 5.24549C6.75331 5.40303 6.84195 5.61675 6.84204 5.83963C6.84213 6.06252 6.75368 6.27632 6.59614 6.43399L2.02914 11L6.59414 15.566C6.67214 15.644 6.73402 15.7366 6.77624 15.8385C6.81845 15.9404 6.84019 16.0497 6.84019 16.16C6.84019 16.2703 6.81845 16.3795 6.77624 16.4815C6.73402 16.5834 6.67214 16.676 6.59414 16.754C6.51613 16.832 6.42353 16.8939 6.32161 16.9361C6.21969 16.9783 6.11046 17 6.00014 17C5.88983 17 5.78059 16.9783 5.67867 16.9361C5.57675 16.8939 5.48415 16.832 5.40614 16.754L0.24614 11.594C0.168129 11.516 0.106253 11.4234 0.0640335 11.3215C0.0218142 11.2195 8.39233e-05 11.1103 8.39233e-05 11C8.39233e-05 10.8897 0.0218142 10.7804 0.0640335 10.6785C0.106253 10.5766 0.169129 10.484 0.247139 10.406Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.25024 11C1.25024 10.5858 1.58603 10.25 2.00024 10.25H16.0002C16.4145 10.25 16.7502 10.5858 16.7502 11C16.7502 11.4142 16.4145 11.75 16.0002 11.75H2.00024C1.58603 11.75 1.25024 11.4142 1.25024 11Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_1599_53380">
<rect width="21" height="21" fill="white"/>
</clipPath>
</defs>
</svg>
</span>
</span></a></li>
</ul>
</div>
</div>
</div>
</div>
</header>
<!-- Main-->
<main id="main">
<div class="article-body">
<section>
<h2>Plan</h2>
<p>A cost-benefit analysis determined that Smartsheet's minimal usage of Coveo’s advanced features was disproportionate to the contract cost. The engineering team conducted research and recommended a search API migration to Open Search.</p>
<p>Meanwhile, the design team conducted user research on the existing search UI, which concluded that the excessive amount of exposed filters and an unclear tab design created a confusing and overwhelming experience.</p>
<p>The front-end goal for the project was to improve the search UI/UX and resolve a long-standing issue of disorganized, redundant search styles that had accumulated over time and had made maintanence a challenge.</p>
</section>
<section>
<h2>Process</h2>
<p>My role on this project was to lead the front-end rebuild to support the updated search functionality. The engineering team implemented migrations concurrently on two multilingual Drupal websites:</p>
<h3>Smartsheet Help Center Site</h3>
<p>Working with back-end engineers and UI/UX designers, the front-end engineers implemented a total design overhaul of the Help Center search experience as part of the migration. Taking into account the insights from the user research, we collaborated with the design team to build out improved facets, sorts, tabs, and results in Drupal using Twig, JavaScript, PHP, and CSS.</p>
<div class="two-up width-max">
<div class="flex--50">
<figure>
<img src="img/help-search-old.webp" width="800" height="781" loading="lazy" alt="Old Help Center search UI">
<figcaption>Before: Help Center search used Coveo and had too many filters exposed and was designed with confusing tab placement.</figcaption>
</figure>
</div>
<div class="flex--50">
<figure>
<img src="img/help-search-new.webp" width="800" height="781" loading="lazy" alt="New Help Center search UI">
<figcaption>After: Help Center uses OpenSearch and has an improved UI with collapsed filters, clearer tabs, and a more organized layout.</figcaption>
</figure>
</div>
</div>
<h3>Primary Smartsheet Marketing Site</h3>
<p>Simultaneously, I worked with closely with back-end engineers to figure out an approach to centralize our search styles and themes on the primary Smartsheet site, as this site contains <b class="highlight">over 65 search experiences</b> across different pages. I focused on consolidating numerous repetitive Coveo templates into a centralized Drupal View template, while ensuring that there was no regression visually in the search experiences sitewide.</p>
<p>This centralization made it easy to rapidly spin up new search Views with standardized filters and visual components. By integrating the search components with our <a href="design-system.html">global component system</a> (e.g., using our existing tile/card molecule), I ensured visual consistency sitewide while drastically improving the efficiency of the front-end code base.</p>
<figure>
<img src="img/www-content-center.webp" width="1100" height="1033" class="width-content" loading="lazy" alt="Visual of Content Center with filtered results">
<figcaption>Smartsheet's Content Center is one area of the site that could be simplified into a re-usable View template.</figcaption>
</figure>
</section>
<section>
<h2>Impact</h2>
<p>The successful migration to Open Search’s Search API provided an immediate, quantifiable return on investment: Smartsheet was able to substantially scale back its contract with Coveo, resulting in <b class="highlight">$150k in annual savings</b> for the business.</p>
<p>We completed our migration on both sites without any downtime or disruption to the user experience. For both sites, we now have a simplified front-end architecture that is far easier to maintain and expand upon in the future.</p>
</section>
<nav class="project-nav" aria-label="Project pagination">
<ul>
<li><a href="form-api.html"><span class="direction">Previous project</span> <span class="description">Form API integration</span> <svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg" xlink:href="data:image/png;base64;">
<g clip-path="url(#clip0_1599_53375)">
<path d="M7.24689 10.406L12.4069 5.24599C12.5644 5.08832 12.7782 4.99968 13.001 4.99959C13.2239 4.9995 13.4377 5.08795 13.5954 5.24549C13.7531 5.40303 13.8417 5.61675 13.8418 5.83963C13.8419 6.06252 13.7534 6.27632 13.5959 6.43399L9.0289 11L13.5939 15.566C13.6719 15.644 13.7338 15.7366 13.776 15.8385C13.8182 15.9404 13.8399 16.0497 13.8399 16.16C13.8399 16.2703 13.8182 16.3795 13.776 16.4815C13.7338 16.5834 13.6719 16.676 13.5939 16.754C13.5159 16.832 13.4233 16.8939 13.3214 16.9361C13.2194 16.9783 13.1102 17 12.9999 17C12.8896 17 12.7803 16.9783 12.6784 16.9361C12.5765 16.8939 12.4839 16.832 12.4059 16.754L7.2459 11.594C7.16789 11.516 7.10601 11.4234 7.06379 11.3215C7.02157 11.2195 6.99984 11.1103 6.99984 11C6.99984 10.8897 7.02157 10.7804 7.06379 10.6785C7.10601 10.5766 7.16888 10.484 7.24689 10.406Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_1599_53375">
<rect width="21" height="21" fill="white"/>
</clipPath>
</defs>
</svg></a></li>
<li><a href="media-optimization.html"><span class="direction">Next project</span> <span class="description">Media optimization</span> <svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg" xlink:href="data:image/png;base64;">
<g clip-path="url(#clip0_1599_53375)">
<path d="M7.24689 10.406L12.4069 5.24599C12.5644 5.08832 12.7782 4.99968 13.001 4.99959C13.2239 4.9995 13.4377 5.08795 13.5954 5.24549C13.7531 5.40303 13.8417 5.61675 13.8418 5.83963C13.8419 6.06252 13.7534 6.27632 13.5959 6.43399L9.0289 11L13.5939 15.566C13.6719 15.644 13.7338 15.7366 13.776 15.8385C13.8182 15.9404 13.8399 16.0497 13.8399 16.16C13.8399 16.2703 13.8182 16.3795 13.776 16.4815C13.7338 16.5834 13.6719 16.676 13.5939 16.754C13.5159 16.832 13.4233 16.8939 13.3214 16.9361C13.2194 16.9783 13.1102 17 12.9999 17C12.8896 17 12.7803 16.9783 12.6784 16.9361C12.5765 16.8939 12.4839 16.832 12.4059 16.754L7.2459 11.594C7.16789 11.516 7.10601 11.4234 7.06379 11.3215C7.02157 11.2195 6.99984 11.1103 6.99984 11C6.99984 10.8897 7.02157 10.7804 7.06379 10.6785C7.10601 10.5766 7.16888 10.484 7.24689 10.406Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_1599_53375">
<rect width="21" height="21" fill="white"/>
</clipPath>
</defs>
</svg></a></li>
</ul>
</nav>
</div>
<section class="projects-section">
<div class="container">
<h2 class="text-align-center">Additional projects</h2>
<ul class="tile-grid odd">
<li>
<div class="tile--image left">
<img src="img/design-system-med.webp" alt="" loading="lazy" aria-hidden="true" width="900" height="506">
</div>
<div class="tile-content">
<a href="design-system.html">Oversee scalable design system that improves efficiency <svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1599_53380)">
<path d="M0.247139 10.406L5.40714 5.24599C5.56468 5.08832 5.7784 4.99968 6.00129 4.99959C6.22418 4.9995 6.43797 5.08795 6.59564 5.24549C6.75331 5.40303 6.84195 5.61675 6.84204 5.83963C6.84213 6.06252 6.75368 6.27632 6.59614 6.43399L2.02914 11L6.59414 15.566C6.67214 15.644 6.73402 15.7366 6.77624 15.8385C6.81845 15.9404 6.84019 16.0497 6.84019 16.16C6.84019 16.2703 6.81845 16.3795 6.77624 16.4815C6.73402 16.5834 6.67214 16.676 6.59414 16.754C6.51613 16.832 6.42353 16.8939 6.32161 16.9361C6.21969 16.9783 6.11046 17 6.00014 17C5.88983 17 5.78059 16.9783 5.67867 16.9361C5.57675 16.8939 5.48415 16.832 5.40614 16.754L0.24614 11.594C0.168129 11.516 0.106253 11.4234 0.0640335 11.3215C0.0218142 11.2195 8.39233e-05 11.1103 8.39233e-05 11C8.39233e-05 10.8897 0.0218142 10.7804 0.0640335 10.6785C0.106253 10.5766 0.169129 10.484 0.247139 10.406Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.25024 11C1.25024 10.5858 1.58603 10.25 2.00024 10.25H16.0002C16.4145 10.25 16.7502 10.5858 16.7502 11C16.7502 11.4142 16.4145 11.75 16.0002 11.75H2.00024C1.58603 11.75 1.25024 11.4142 1.25024 11Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_1599_53380">
<rect width="21" height="21" fill="white"/>
</clipPath>
</defs>
</svg></a>
<ul class="tags">
<li>CSS</li>
<li>Sass</li>
<li>Figma</li>
<li>JavaScript</li>
<li>Atomic design</li>
<li>PatternLab</li>
</ul>
</div>
</li>
<li>
<div class="tile--image right">
<img src="img/tile-accessibility-med.webp" alt="" loading="lazy" aria-hidden="true" width="900" height="506">
</div>
<div class="tile-content">
<a href="accessibility.html">Led accessibility remediation to achieve WCAG compliance <svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1599_53380)">
<path d="M0.247139 10.406L5.40714 5.24599C5.56468 5.08832 5.7784 4.99968 6.00129 4.99959C6.22418 4.9995 6.43797 5.08795 6.59564 5.24549C6.75331 5.40303 6.84195 5.61675 6.84204 5.83963C6.84213 6.06252 6.75368 6.27632 6.59614 6.43399L2.02914 11L6.59414 15.566C6.67214 15.644 6.73402 15.7366 6.77624 15.8385C6.81845 15.9404 6.84019 16.0497 6.84019 16.16C6.84019 16.2703 6.81845 16.3795 6.77624 16.4815C6.73402 16.5834 6.67214 16.676 6.59414 16.754C6.51613 16.832 6.42353 16.8939 6.32161 16.9361C6.21969 16.9783 6.11046 17 6.00014 17C5.88983 17 5.78059 16.9783 5.67867 16.9361C5.57675 16.8939 5.48415 16.832 5.40614 16.754L0.24614 11.594C0.168129 11.516 0.106253 11.4234 0.0640335 11.3215C0.0218142 11.2195 8.39233e-05 11.1103 8.39233e-05 11C8.39233e-05 10.8897 0.0218142 10.7804 0.0640335 10.6785C0.106253 10.5766 0.169129 10.484 0.247139 10.406Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.25024 11C1.25024 10.5858 1.58603 10.25 2.00024 10.25H16.0002C16.4145 10.25 16.7502 10.5858 16.7502 11C16.7502 11.4142 16.4145 11.75 16.0002 11.75H2.00024C1.58603 11.75 1.25024 11.4142 1.25024 11Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_1599_53380">
<rect width="21" height="21" fill="white"/>
</clipPath>
</defs>
</svg></a>
<ul class="tags">
<li>WCAG Accessibility</li>
<li>JavaScript</li>
<li>HTML5</li>
<li>NVDA</li>
</ul>
</div>
</li>
<li class="">
<div class="tile--image left">
<img src="img/tile-nav-mockup-med.webp" alt="" loading="lazy" aria-hidden="true" width="900" height="506">
</div>
<div class="tile-content">
<a href="mega-menu-navigation.html">Architected global navigation that increased engagement <svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1599_53380)">
<path d="M0.247139 10.406L5.40714 5.24599C5.56468 5.08832 5.7784 4.99968 6.00129 4.99959C6.22418 4.9995 6.43797 5.08795 6.59564 5.24549C6.75331 5.40303 6.84195 5.61675 6.84204 5.83963C6.84213 6.06252 6.75368 6.27632 6.59614 6.43399L2.02914 11L6.59414 15.566C6.67214 15.644 6.73402 15.7366 6.77624 15.8385C6.81845 15.9404 6.84019 16.0497 6.84019 16.16C6.84019 16.2703 6.81845 16.3795 6.77624 16.4815C6.73402 16.5834 6.67214 16.676 6.59414 16.754C6.51613 16.832 6.42353 16.8939 6.32161 16.9361C6.21969 16.9783 6.11046 17 6.00014 17C5.88983 17 5.78059 16.9783 5.67867 16.9361C5.57675 16.8939 5.48415 16.832 5.40614 16.754L0.24614 11.594C0.168129 11.516 0.106253 11.4234 0.0640335 11.3215C0.0218142 11.2195 8.39233e-05 11.1103 8.39233e-05 11C8.39233e-05 10.8897 0.0218142 10.7804 0.0640335 10.6785C0.106253 10.5766 0.169129 10.484 0.247139 10.406Z" fill="currentColor"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.25024 11C1.25024 10.5858 1.58603 10.25 2.00024 10.25H16.0002C16.4145 10.25 16.7502 10.5858 16.7502 11C16.7502 11.4142 16.4145 11.75 16.0002 11.75H2.00024C1.58603 11.75 1.25024 11.4142 1.25024 11Z" fill="currentColor"/>
</g>
<defs>
<clipPath id="clip0_1599_53380">
<rect width="21" height="21" fill="white"/>
</clipPath>
</defs>
</svg></a>
<ul class="tags">
<li>JavaScript</li>
<li>jQuery</li>
<li>CSS</li>
<li>Figma</li>
<li>Responsive design</li>
</ul>
</div>
</li>
</ul>
</div>
</section>
</main>
<!-- Footer -->
<footer id="contact">
<div class="container">
<div>
<h2>Get in touch</h3>
<ul>
<li class="email"><a href="mailto:jacquelyn.marcella@gmail.com" class="button primary icon">
<!-- <svg xmlns="http://www.w3.org/2000/svg" width="430" height="430" fill="none" viewBox="0 0 430 430"><g stroke="#121331" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="14.8" stroke-width="12"><path d="m150.8 131.3 105.5 106.1c11.4 11.5 30 11.5 41.5 0l105.7-106"/><path d="M150.8 131.3v167.3h252.7V131.4z"/><path d="m150.8 282 66.7-57.8c4.7-4.1 9.9-7.6 15.3-10.5m88.7-.1c5.6 3 10.8 6.6 15.7 10.8l66.3 56.9M107.4 131.4H26.6m80.8 41.8H26.6m81 41.2H26.8m80.8 41.8H26.8m80.6 41.2H26.6"/></g></svg> -->
<span class="label">Email me</span></a>
</li>
<li><a href="img/Jacquelyn-Marcella-Resume-12-2025.pdf" target=" _blank" class="icon-link resume">
<svg width="56px" height="56px" viewBox="0 0 56 56" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="Icons-56/download_square_outline_56" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="download_square_outline_56">
<rect x="0" y="0" width="56" height="56"></rect>
<path d="M35.0042242,11 L35.6235033,11.0013367 C38.845519,11.0246295 40.4501729,11.3555688 42.1147811,12.245811 C43.6798875,13.0828391 44.9171609,14.3201125 45.7642726,15.9044057 L45.7642726,15.9044057 L45.914534,16.1958101 C46.6453722,17.6675669 46.9502065,19.2118503 46.9943027,21.9993856 L46.9943027,21.9993856 L47,22.7555408 L47,37.2556817 L46.9945337,37.974023 C46.9478287,40.9627201 46.6179001,42.4997817 45.754189,44.1147811 C44.9171609,45.6798875 43.6798875,46.9171609 42.0955943,47.7642726 L42.0955943,47.7642726 L41.8041899,47.914534 C40.3324331,48.6453722 38.7881497,48.9502065 36.0006144,48.9943027 L36.0006144,48.9943027 L35.2444592,49 L20.7443183,49 L20.025977,48.9945337 C17.0372799,48.9478287 15.5002183,48.6179001 13.8852189,47.754189 C12.3201125,46.9171609 11.0828391,45.6798875 10.2357274,44.0955943 L10.2357274,44.0955943 L10.085466,43.8041899 C9.31914622,42.2609806 9.02405501,40.6463567 9.00132265,37.6054828 L9.00132265,37.6054828 L9.00132265,22.3764967 C9.0246295,19.154481 9.35556882,17.5498271 10.245811,15.8852189 C11.0828391,14.3201125 12.3201125,13.0828391 13.9044057,12.2357274 L13.9044057,12.2357274 L14.1958101,12.085466 C15.7390194,11.3191462 17.3536433,11.024055 20.3945172,11.0013226 L20.3945172,11.0013226 L20.9997987,11.0012687 C21.8282258,11.001195 22.4998585,11.672708 22.4999323,12.5011351 C22.500006,13.3295623 21.828493,14.0011949 21.0000659,14.0012687 L21.0000659,14.0012687 L20.0730763,14.0049602 C17.6902542,14.0402783 16.5611513,14.2604067 15.5511588,14.7617455 L15.5511588,14.7617455 L15.3000155,14.8912506 C14.2577145,15.4486793 13.4486793,16.2577145 12.8912506,17.3000155 C12.2817685,18.4396479 12.0380753,19.5464775 12.0041905,22.089013 L12.0041905,22.089013 L12,22.7554072 L12.0012806,37.5941158 C12.0208477,40.206854 12.2376186,41.3929399 12.7617455,42.4488412 L12.7617455,42.4488412 L12.8912506,42.6999845 C13.4486793,43.7422855 14.2577145,44.5513207 15.3000155,45.1087494 C16.450087,45.7238144 17.5277176,45.9551266 20.0606374,45.9947589 L20.0606374,45.9947589 L20.7555408,46 L35.2444592,46 C38.0964351,46 39.350611,45.7834009 40.4488412,45.2382545 L40.4488412,45.2382545 L40.6999845,45.1087494 C41.7422855,44.5513207 42.5513207,43.7422855 43.1087494,42.6999845 C43.7238144,41.549913 43.9551266,40.4722824 43.9947589,37.9393626 L43.9947589,37.9393626 L44,37.2444592 L44,22.7555408 C44,19.9035649 43.7834009,18.649389 43.2382545,17.5511588 L43.2382545,17.5511588 L43.1087494,17.3000155 C42.5513207,16.2577145 41.7422855,15.4486793 40.6999845,14.8912506 C39.4653828,14.2309784 38.2692786,14 35.2444592,14 L35.2444592,14 L35.0042242,14 C34.1757971,14 33.5042242,13.3284271 33.5042242,12.5 C33.5042242,11.6715729 34.1757971,11 35.0042242,11 L35.0042242,11 Z M28,5 C28.8284271,5 29.5,5.67157288 29.5,6.5 L29.5,6.5 L29.4993226,33.878 L34.4393398,28.9393398 C34.9885146,28.390165 35.857577,28.3558416 36.4467378,28.8363696 L36.5606602,28.9393398 C37.1464466,29.5251263 37.1464466,30.4748737 36.5606602,31.0606602 L36.5606602,31.0606602 L29.0606602,38.5606602 C28.4748737,39.1464466 27.5251263,39.1464466 26.9393398,38.5606602 L26.9393398,38.5606602 L19.4393398,31.0606602 C18.8535534,30.4748737 18.8535534,29.5251263 19.4393398,28.9393398 C20.0251263,28.3535534 20.9748737,28.3535534 21.5606602,28.9393398 L21.5606602,28.9393398 L26.4993226,33.878 L26.5,6.5 C26.5,5.72030388 27.0948881,5.07955132 27.85554,5.00686658 Z" id="↳-Icon-Color" fill="currentColor" fill-rule="nonzero"></path>
</g>
</g>
</svg>
<span class="label">Download Resume</span>
</a></li>
<li><a href="https://github.com/jacquelynmarcella" target="_blank" class="icon-link github">
<svg width="1024" height="1024" viewBox="0 0 1024 1024" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right: 4px;">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8C0 11.54 2.29 14.53 5.47 15.59C5.87 15.66 6.02 15.42 6.02 15.21C6.02 15.02 6.01 14.39 6.01 13.72C4 14.09 3.48 13.23 3.32 12.78C3.23 12.55 2.84 11.84 2.5 11.65C2.22 11.5 1.82 11.13 2.49 11.12C3.12 11.11 3.57 11.7 3.72 11.94C4.44 13.15 5.59 12.81 6.05 12.6C6.12 12.08 6.33 11.73 6.56 11.53C4.78 11.33 2.92 10.64 2.92 7.58C2.92 6.71 3.23 5.99 3.74 5.43C3.66 5.23 3.38 4.41 3.82 3.31C3.82 3.31 4.49 3.1 6.02 4.13C6.66 3.95 7.34 3.86 8.02 3.86C8.7 3.86 9.38 3.95 10.02 4.13C11.55 3.09 12.22 3.31 12.22 3.31C12.66 4.41 12.38 5.23 12.3 5.43C12.81 5.99 13.12 6.7 13.12 7.58C13.12 10.65 11.25 11.33 9.47 11.53C9.76 11.78 10.01 12.26 10.01 13.01C10.01 14.08 10 14.94 10 15.21C10 15.42 10.15 15.67 10.55 15.59C13.71 14.53 16 11.53 16 8C16 3.58 12.42 0 8 0Z" transform="scale(64)" fill="var(--copyColor)" />
</svg>
<span class="label hide-mobile">Follow on GitHub</span>
</a></li>
<li><a href="https://www.linkedin.com/in/jmarcella/" target="_blank" class="icon-link linkedin">
<svg height="72" viewBox="0 0 72 72" width="72" xmlns="http://www.w3.org/2000/svg" style="margin-right: 4px;">
<g fill="none" fill-rule="evenodd">
<path d="M8,72 L64,72 C68.418278,72 72,68.418278 72,64 L72,8 C72,3.581722 68.418278,-8.11624501e-16 64,0 L8,0 C3.581722,8.11624501e-16 -5.41083001e-16,3.581722 0,8 L0,64 C5.41083001e-16,68.418278 3.581722,72 8,72 Z" fill="var(--copyColor)" />
<path d="M62,62 L51.315625,62 L51.315625,43.8021149 C51.315625,38.8127542 49.4197917,36.0245323 45.4707031,36.0245323 C41.1746094,36.0245323 38.9300781,38.9261103 38.9300781,43.8021149 L38.9300781,62 L28.6333333,62 L28.6333333,27.3333333 L38.9300781,27.3333333 L38.9300781,32.0029283 C38.9300781,32.0029283 42.0260417,26.2742151 49.3825521,26.2742151 C56.7356771,26.2742151 62,30.7644705 62,40.051212 L62,62 Z M16.349349,22.7940133 C12.8420573,22.7940133 10,19.9296567 10,16.3970067 C10,12.8643566 12.8420573,10 16.349349,10 C19.8566406,10 22.6970052,12.8643566 22.6970052,16.3970067 C22.6970052,19.9296567 19.8566406,22.7940133 16.349349,22.7940133 Z M11.0325521,62 L21.769401,62 L21.769401,27.3333333 L11.0325521,27.3333333 L11.0325521,62 Z" fill="var(--backgroundColor)" />
</g>
</svg>
<span class="label hide-mobile">Connect on LinkedIn</span>
</a></li>
</ul>
<p class="about">When I'm not at my keyboard, you can find me exploring the Pacific
Northwest 🌲 watching horror movies 🧟 practicing photography 📷 and building out my own native plant
habitat 🌻</p>
</div>
<div class="copyright">
<p class="fine-print">Copyright ©
<script>document.write(new Date().getFullYear())</script> Jacquelyn Marcella. All Rights Reserved.
</p>
</div>
</div>
</footer>
<div class="progress-bar"></div>
<!-- Scripts -->
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.5/ScrollTrigger.min.js"></script>
<script src="js/portfolio.min.js" type="text/javascript"></script>
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Person",
"name": "Jacquelyn Marcella",
"url": "https://www.jacquelynmarcella.com",
"image": "https://www.jacquelynmarcella.com/img/jacquelyn-headshot.png",
"sameAs": "https://www.linkedin.com/in/jmarcella/",
"jobTitle": "Senior Front End Web Engineer II",
"worksFor": {
"@type": "Organization",
"name": "Smartsheet"
}
}
</script>
</body>
</html>