- 扫描 ID:
- c547af1f-a6f2-4af2-8bfe-80b5633e127a已完成
- 提交的 URL:
- https://jarv.is/
- 报告完成时间:
链接 · 找到 18 个
从页面中识别出的传出链接
链接 | 文本 |
---|---|
https://www.youtube-nocookie.com/embed/rLwbzGyC6t4?hl=en&fs=1&showinfo=1&rel=0&iv_load_policy=3 | Boston |
https://reactjs.org/ | React |
https://timkadlec.com/remembers/2020-04-21-the-cost-of-javascript-frameworks/ | vanilla JavaScript |
https://jamstack.wtf/ | Jamstack sites |
https://nodejs.org/en/ | Node.js |
https://www.jetbrains.com/lp/php-25/ | LAMP |
https://bugcrowd.com/jakejarvis | application security |
https://www.cloudflare.com/learning/serverless/what-is-serverless/ | serverless stacks |
https://github.com/jakejarvis?tab=repositories&q=github-actions&type=source&language=&sort=stargazers | DevOps automation |
https://tuftsdaily.com/news/2012/04/06/student-designs-iphone-joeytracker-app/ | been |
JavaScript 变量 · 找到 16 个
在页面窗口对象上加载的全局 JavaScript 变量是在函数外部声明的变量,可以从当前范围内的代码中的任何位置访问
名称 | 类型 |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
webpackChunk_N_E | object |
__next_set_public_path__ | function |
next | object |
__NEXT_DATA__ | object |
__SSG_MANIFEST_CB | function |
__NEXT_P | object |
_N_E | object |
控制台日志消息 · 找到 0 条
记录到 Web 控制台的消息
HTML
页面的原始 HTML 正文
<!DOCTYPE html><html lang="en-US" class="t-lcODYe" style="color-scheme: light;"><head><meta charset="utf-8" data-next-head=""><title data-next-head="">Jake Jarvis – Front-End Web Developer in Boston, MA</title><meta name="robots" content="index,follow" data-next-head=""><meta name="description" content="Hi there! I'm a frontend web developer based in Boston, Massachusetts specializing in the JAMstack, modern JavaScript frameworks, and progressive web apps." data-next-head=""><meta name="twitter:card" content="summary" data-next-head=""><meta name="twitter:site" content="@jakejarvis" data-next-head=""><meta name="twitter:creator" content="@jakejarvis" data-next-head=""><meta property="og:title" content="Jake Jarvis – Front-End Web Developer in Boston, MA" data-next-head=""><meta property="og:description" content="Hi there! I'm a frontend web developer based in Boston, Massachusetts specializing in the JAMstack, modern JavaScript frameworks, and progressive web apps." data-next-head=""><meta property="og:url" content="https://jarv.is/" data-next-head=""><meta property="og:type" content="website" data-next-head=""><meta property="og:image" content="https://jarv.is/_next/static/media/me.e5fd4429.jpg" data-next-head=""><meta property="og:image:alt" content="Jake Jarvis – Front-End Web Developer in Boston, MA" data-next-head=""><meta property="og:locale" content="en_US" data-next-head=""><meta property="og:site_name" content="Jake Jarvis" data-next-head=""><link rel="canonical" href="https://jarv.is/" data-next-head=""><meta name="viewport" content="width=device-width, initial-scale=1" data-next-head=""><meta name="author" content="Jake Jarvis" data-next-head=""><meta name="google-site-verification" content="qQhmLTwjNWYgQ7W42nSTq63xIrTch13X_11mmxBE9zk" data-next-head=""><meta name="msvalidate.01" content="164551986DA47F7F6FC0D21A93FFFCA6" data-next-head=""><link rel="icon" href="/_next/static/media/favicon.a0dbc989.ico" sizes="any" data-next-head=""><link rel="icon" href="/_next/static/media/favicon.23bed15d.png" type="image/png" data-next-head=""><link rel="apple-touch-icon" href="/_next/static/media/apple-touch-icon.91ee4c16.png" sizes="180x180" data-next-head=""><link rel="manifest" href="/site.webmanifest" data-next-head=""><link rel="alternate" href="/feed.xml" type="application/rss+xml" title="Jake Jarvis (RSS)" data-next-head=""><link rel="alternate" href="/feed.atom" type="application/atom+xml" title="Jake Jarvis (Atom)" data-next-head=""><link rel="humans" href="/humans.txt" data-next-head=""><link rel="pgpkey" href="/pubkey.asc" type="application/pgp-keys" data-next-head=""><script type="application/ld+json" data-next-head="">{"@context":"https://schema.org","@type":"Person","name":"Jake Jarvis","url":"https://jarv.is/","sameAs":["https://jarv.is/","https://github.com/jakejarvis","https://keybase.io/jakejarvis","https://twitter.com/jakejarvis","https://medium.com/@jakejarvis","https://www.linkedin.com/in/jakejarvis/","https://www.facebook.com/jakejarvis","https://www.instagram.com/jakejarvis/","https://fediverse.jarv.is/@jake"]}</script><link rel="preload" as="image" imagesrcset="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Fselfie.7d009bf4.jpg&w=96&q=60 1x, /_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Fselfie.7d009bf4.jpg&w=256&q=60 2x" data-next-head=""><style id="stitches">--sxs{--sxs:0 t-lcODYe t-kvkHIy}@media{:root,.t-lcODYe{--fonts-sans:'Geist', system-ui, sans-serif;--fonts-mono:'Geist Mono', ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;--colors-backgroundInner:#ffffff;--colors-backgroundOuter:#fcfcfc;--colors-backgroundHeader:rgba(252,252,252,0.7);--colors-text:#202020;--colors-mediumDark:#515151;--colors-medium:#5e5e5e;--colors-mediumLight:#757575;--colors-light:#d2d2d2;--colors-kindaLight:#e3e3e3;--colors-superLight:#f4f4f4;--colors-superDuperLight:#fbfbfb;--colors-link:#0e6dc2;--colors-linkUnderline:rgba(14,109,194,0.4);--colors-success:#44a248;--colors-error:#ff1b1b;--colors-warning:#f78200;--colors-codeText:#313131;--colors-codeBackground:#fdfdfd;--colors-codeComment:#656e77;--colors-codeKeyword:#029cb9;--colors-codeAttribute:#70a800;--colors-codeNamespace:#f92672;--colors-codeLiteral:#ae81ff;--colors-codePunctuation:#111111;--colors-codeVariable:#d88200;--colors-codeAddition:#44a248;--colors-codeDeletion:#ff1b1b;--sizes-maxLayoutWidth:865px;--radii-corner:0.6rem;--transitions-fade:0.25s ease;--transitions-linkHover:0.2s ease-in-out}.t-kvkHIy{--colors-backgroundInner:#1e1e1e;--colors-backgroundOuter:#252525;--colors-backgroundHeader:rgba(37,37,37,0.85);--colors-text:#f1f1f1;--colors-mediumDark:#d7d7d7;--colors-medium:#b1b1b1;--colors-mediumLight:#959595;--colors-light:#646464;--colors-kindaLight:#535353;--colors-superLight:#272727;--colors-superDuperLight:#1f1f1f;--colors-link:#88c7ff;--colors-linkUnderline:rgba(136,199,255,0.4);--colors-success:#78df55;--colors-error:#ff5151;--colors-warning:#f2b702;--colors-codeText:#e4e4e4;--colors-codeBackground:#212121;--colors-codeComment:#929292;--colors-codeKeyword:#3b9dd2;--colors-codeAttribute:#78df55;--colors-codeNamespace:#f95757;--colors-codeLiteral:#d588fb;--colors-codePunctuation:#cccccc;--colors-codeVariable:#fd992a;--colors-codeAddition:#78df55;--colors-codeDeletion:#ff5151}}--sxs{--sxs:1 k-gGcuSd k-kkkVcT kRAfLo cWnTPW}@media{@keyframes k-gGcuSd{0%{transform:scale(1)}2%{transform:scale(1.25)}4%{transform:scale(1)}6%{transform:scale(1.2)}8%{transform:scale(1)}100%{transform:scale(1)}}@keyframes k-kkkVcT{0%{transform:rotate(0deg)}5%{transform:rotate(14deg)}10%{transform:rotate(-8deg)}15%{transform:rotate(14deg)}20%{transform:rotate(-4deg)}25%{transform:rotate(10deg)}30%{transform:rotate(0deg)}100%{transform:rotate(0deg)}}*,::before,::after{box-sizing:border-box}html{line-height:1.15;tab-size:4;-webkit-text-size-adjust:100%}body{margin:0}hr{height:0;color:inherit}abbr[title]{text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp,pre{font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}button,[type='button'],[type='reset'],[type='submit']{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}summary{display:list-item}[type='search']{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}html{font-family:var(--fonts-sans)}body{background-color:var(--colors-backgroundInner);transition:background var(--transitions-fade)}code,kbd,samp,pre{font-family:var(--fonts-mono)}}--sxs{--sxs:2 c-ijetuc c-hRZPRE c-bpIbAA c-coWCMU c-jZTOcW c-cIJLdn c-ircnMg c-dUvoov c-kBuSEt c-cRUDQG c-isrdta c-fFxUcP c-jhvBPD c-hEBfGi c-iFqlrM c-fVopks c-bADEBd c-fanidY c-iktAiM c-ktKSxF c-jfIUze c-gsXNnN c-kPrkqU c-gkUhtZ c-hPxEjz c-ftWGVj c-wXJaY c-fyCuZI c-gZskWx c-egFTxJ c-cXBWxM c-frCoBg c-bPNjhd c-jtLgmk c-eQZpKm c-jGlSdI c-geQyBr c-cyKpGk c-PJLV c-eHLywy c-jEFzux c-fcKlyh c-eFRhLn c-nnJtK c-fqQGzg c-seBUO c-eFGshj c-jnKxow c-gHhLQ c-itFlCw c-evRCPi c-fokRaO c-NAiAP c-kYFqNh c-gZAmmx c-fJbaBZ}@media{.c-ijetuc{border:0;clip:rect(0 0 0 0);height:1px;width:1px;margin:-1px;padding:0;overflow:hidden;position:absolute}.c-ijetuc:focus{padding:1rem;position:fixed;top:10px;left:10px;z-index:99999;width:auto;height:auto;clip:auto;background:var(--colors-superDuperLight);color:var(--colors-link);border:2px solid var(--colors-kindaLight);border-radius:var(--radii-corner);text-decoration:underline}.c-hRZPRE{display:flex;flex-direction:column;min-height:100vh}.c-coWCMU{width:100%;height:4.5em;padding:0.7em 1.5em;border-bottom:1px solid var(--colors-kindaLight);background-color:var(--colors-backgroundHeader);transition:background var(--transitions-fade), border var(--transitions-fade);z-index:9999;-webkit-backdrop-filter:saturate(180%) blur(5px);backdrop-filter:saturate(180%) blur(5px)}@media (max-width: 768px){.c-coWCMU{padding:0.75em 1.25em;height:5.9em}}.c-jZTOcW{display:flex;align-items:center;justify-content:space-between;width:100%;max-width:var(--sizes-maxLayoutWidth);margin:0 auto}.c-kBuSEt{height:auto;max-width:100%;border-radius:var(--radii-corner)}.c-dUvoov{width:50px;height:50px;border:1px solid var(--colors-light);border-radius:50%}@media (max-width: 768px){.c-dUvoov{width:70px;height:70px;border-width:2px}}.c-cRUDQG{margin:0 0.6em;font-size:1.15em;font-weight:500;letter-spacing:0.02em;line-height:1}@media (max-width: 768px){.c-cRUDQG{display:none}}.c-ircnMg{color:var(--colors-link);text-decoration:none}.c-cIJLdn{display:inline-flex;flex-shrink:0;align-items:center;color:var(--colors-mediumDark)}.c-cIJLdn:hover,.c-cIJLdn:focus-visible{color:var(--colors-link)}@media (max-width: 768px){.c-cIJLdn:hover .c-dUvoov,.c-cIJLdn:focus-visible .c-dUvoov{border-color:var(--colors-linkUnderline)}}.c-fFxUcP{display:inline-flex;padding:0;margin:0}@media (max-width: 768px){.c-fFxUcP{width:100%;justify-content:space-between;margin-left:1em}}@media (max-width: 380px){.c-fFxUcP{margin-left:1.4em}}.c-jhvBPD{display:inline-block;margin-left:1em;list-style:none}@media (max-width: 768px){.c-jhvBPD{margin-left:0}}@media (max-width: 380px){.c-jhvBPD:first-of-type{display:none}}.c-iFqlrM{display:inline;width:1.25em;height:1.25em;vertical-align:-0.3em}@media (max-width: 768px){.c-iFqlrM{width:1.8em;height:1.8em}}.c-fVopks{font-size:0.925em;font-weight:500;letter-spacing:0.025em;margin-left:0.7em}@media (max-width: 768px){.c-fVopks{display:none}}.c-hEBfGi{display:inline-block;color:var(--colors-mediumDark);padding:0.6em}.c-bADEBd{border:0;padding:0.6em;margin-right:-0.6em;background:none;cursor:pointer;color:var(--colors-mediumDark)}.c-bADEBd:hover,.c-bADEBd:focus-visible{color:var(--colors-warning)}@media (max-width: 768px){.c-isrdta{max-width:325px}}@media (max-width: 380px){.c-isrdta{max-width:225px}}.c-bpIbAA{position:sticky;top:0}.c-fanidY{width:100%;padding:1.5em}.c-iktAiM{max-width:var(--sizes-maxLayoutWidth);margin:0 auto;display:block}.c-ktKSxF{margin-top:0;margin-bottom:0.6em;font-size:1.7em;font-weight:600;text-align:center}@media (max-width: 768px){.c-ktKSxF{font-size:1.8em}}.c-jfIUze{font-size:0.9em;line-height:1.7;color:var(--colors-text)}@media (max-width: 768px){.c-jfIUze{font-size:0.925em;line-height:1.85}}.c-gsXNnN{margin-left:0;padding-left:1.25em;border-left:0.25em solid var(--colors-link);color:var(--colors-mediumDark)}.c-kPrkqU{display:block;line-height:0;margin:1em auto;text-align:center}.c-gkUhtZ{margin-top:1em;margin-bottom:0.5em;line-height:1.5;scroll-margin-top:5.5rem}@media (max-width: 768px){.c-gkUhtZ{scroll-margin-top:6.5rem}}.c-gkUhtZ:hover .c-hPxEjz,.c-gkUhtZ .c-hPxEjz:focus-visible{opacity:1}.c-hPxEjz{margin:0 0.4em;padding:0 0.2em;color:var(--colors-medium);opacity:0}.c-hPxEjz:hover,.c-hPxEjz:focus-visible{color:var(--colors-link)}@media (max-width: 768px){.c-hPxEjz{margin:0 0.2em;padding:0 0.4em;opacity:1}}.c-ftWGVj{position:relative;width:100%;margin:1em auto;color:var(--colors-codeText)}.c-ftWGVj .c-egFTxJ{display:block;overflow-x:auto;padding:1em;font-size:0.9em;tab-size:2}.c-ftWGVj .c-egFTxJ .line-number::before{display:inline-block;width:1.5em;margin-right:1.5em;text-align:right;color:var(--colors-codeComment);content:attr(line);font-variant-numeric:tabular-nums;-webkit-user-select:none;user-select:none}.c-ftWGVj .c-egFTxJ .code-line:first-of-type{margin-right:3em}.c-fyCuZI{line-height:1;cursor:pointer}.c-gZskWx{width:1.25em;height:1.25em;vertical-align:-0.3em}.c-wXJaY{position:absolute;top:0;right:0;padding:0.65em;background-color:var(--colors-backgroundInner);border:1px solid var(--colors-kindaLight);border-top-right-radius:var(--radii-corner);border-bottom-left-radius:var(--radii-corner);transition:background var(--transitions-fade), border var(--transitions-fade)}.c-egFTxJ{background-color:var(--colors-codeBackground);border:1px solid var(--colors-kindaLight);border-radius:var(--radii-corner);transition:background var(--transitions-fade), border var(--transitions-fade)}.c-cXBWxM{margin-left:1.5em;padding-left:0}.c-frCoBg{padding-left:0.25em}.c-jtLgmk{width:100%;padding:1.25em 1.5em;border-top:1px solid var(--colors-kindaLight);background-color:var(--colors-backgroundOuter);color:var(--colors-mediumDark);transition:background var(--transitions-fade), border var(--transitions-fade)}@media (max-width: 768px){.c-jtLgmk{padding:1em 1.25em}}.c-eQZpKm{display:flex;width:100%;max-width:var(--sizes-maxLayoutWidth);margin:0 auto;justify-content:space-between;font-size:0.8em;line-height:2.3}@media (max-width: 768px){.c-eQZpKm{display:block}}.c-jGlSdI{color:var(--colors-mediumDark)}.c-geQyBr{display:inline-block;color:var(--colors-error)}@media (prefers-reduced-motion: no-preference){.c-geQyBr{animation:k-gGcuSd 10s ease 7.5s infinite;will-change:transform}}.c-cyKpGk{display:inline;width:1.25em;height:1.25em;vertical-align:-0.25em;margin:0 0.075em}.c-bPNjhd{flex:1}.c-eHLywy{text-align:center;font-size:0.9em;line-height:1.8;margin:1.25em 1em 0 1em;color:var(--colors-mediumLight)}.c-jEFzux{margin:0 0 0.5em -1px;font-size:1.75em;font-weight:500;line-height:1.1;color:var(--colors-text)}@media (max-width: 768px){.c-jEFzux{font-size:1.6em}}.c-fcKlyh{display:inline-block;margin-left:0.1em;font-size:1.2em}@media (prefers-reduced-motion: no-preference){.c-fcKlyh{animation:k-kkkVcT 5s ease 1s infinite;transform-origin:65% 80%;will-change:transform}}.c-eFRhLn{margin:0.5em 0 0.5em -1px;font-size:1.2em;font-weight:400;line-height:1.4;color:var(--colors-text)}@media (max-width: 768px){.c-eFRhLn{font-size:1.25em}}.c-nnJtK{margin:0.85em 0;font-size:0.95em;line-height:1.7;color:var(--colors-text)}.c-nnJtK:last-of-type{margin-bottom:0}@media (max-width: 768px){.c-nnJtK{font-size:0.925em;line-height:1.825}}.c-fqQGzg{color:var(--colors-mediumLight)}.c-seBUO{margin:0 0.1em;font-size:0.6em}.c-eFGshj{vertical-align:-0.25em;stroke-width:0.5}.c-jnKxow{margin:0 0.15em;letter-spacing:0.075em;word-spacing:-0.4em}.c-gHhLQ{margin:1.5em auto;height:0.175em;border:0;background-color:var(--colors-light)}.c-evRCPi{margin:1em auto;text-align:center}.c-fokRaO{font-size:0.9em;line-height:1.5;color:var(--colors-medium);margin-top:-0.4em}.c-itFlCw{margin:1em auto}.c-itFlCw figcaption{font-size:0.9em;line-height:1.5;color:var(--colors-medium)}.c-NAiAP{margin:1em auto}.c-kYFqNh{padding:0.175em 0.3em;font-size:0.925em;page-break-inside:avoid}.c-gZAmmx{display:inline;width:1.2em;height:1.2em;vertical-align:-0.15em;margin-right:0.1em;fill:currentColor}.c-fJbaBZ{width:100%;display:block;margin:1em auto;border:2px solid var(--colors-kindaLight);border-radius:var(--radii-corner)}}--sxs{--sxs:3 c-hEBfGi-coRMrW-current-false c-ircnMg-hAOWUE-underline-true c-gkUhtZ-fnfLEp-divider-true c-fyCuZI-kPtprH-copied-false c-PJLV-gaLeFu-responsive-true c-hEBfGi-bQvbla-current-true}@media{.c-hEBfGi-coRMrW-current-false:hover,.c-hEBfGi-coRMrW-current-false:focus-visible{margin-bottom:-0.2em;border-bottom:0.2em solid var(--colors-kindaLight)}.c-ircnMg-hAOWUE-underline-true{---underlineColor:var(--colors-linkUnderline);background-image:linear-gradient(var(---underlineColor), var(---underlineColor));background-position:0% 100%;background-repeat:no-repeat;background-size:0% 2px;padding-bottom:3px}@media (prefers-reduced-motion: no-preference){.c-ircnMg-hAOWUE-underline-true{transition:background-size var(--transitions-linkHover)}}.c-ircnMg-hAOWUE-underline-true:hover,.c-ircnMg-hAOWUE-underline-true:focus-visible{background-size:100% 2px}.c-gkUhtZ-fnfLEp-divider-true{padding-bottom:0.25em;border-bottom:1px solid var(--colors-kindaLight)}.c-fyCuZI-kPtprH-copied-false{color:var(--colors-mediumDark)}.c-fyCuZI-kPtprH-copied-false:hover,.c-fyCuZI-kPtprH-copied-false:focus-visible{color:var(--colors-link)}.c-PJLV-gaLeFu-responsive-true{position:relative;padding-top:56.25%}.c-PJLV-gaLeFu-responsive-true .c-dDwIrI{position:absolute;top:0;left:0}.c-hEBfGi-bQvbla-current-true{margin-bottom:-0.2em;border-bottom:0.2em solid var(--colors-linkUnderline)}}--sxs{--sxs:6 c-ircnMg-ikeOPau-css c-ircnMg-iiuedIb-css c-cyKpGk-icdQTrv-css c-jGlSdI-idZakdZ-css c-jGlSdI-ibAObXr-css c-ircnMg-iePtfAL-css c-ircnMg-ifvHAvo-css c-ircnMg-ijclXSS-css c-ircnMg-ihqdIAg-css c-ircnMg-icEYBVz-css c-ircnMg-iexeSXv-css c-ircnMg-ikjCEeE-css c-ircnMg-icntmzu-css c-ircnMg-ielVfZD-css c-ircnMg-igdXYXS-css c-ircnMg-ifJgGVE-css c-ircnMg-ibOQcxc-css c-ircnMg-ikLHafA-css c-ircnMg-idKLjvk-css c-ircnMg-igEtxlK-css c-ircnMg-ieVykbU-css c-ircnMg-ihwXdCv-css c-ircnMg-iliIVnW-css c-ircnMg-ijCeZWw-css c-ircnMg-iiWVCgu-css c-ircnMg-ilomHgQ-css c-ircnMg-idrgdLL-css c-ircnMg-ihcvCov-css c-ircnMg-ifCrDDv-css c-ircnMg-ihJVCXK-css c-ircnMg-igiFVUv-css c-hRZPRE-idJQjtl-css c-egFTxJ-inkYLS-css c-ircnMg-ijzDybH-css c-fJbaBZ-igsyqVh-css c-itFlCw-igKRIQW-css c-gsXNnN-ibfJDaD-css}@media{.c-ircnMg-ikeOPau-css{color:var(--colors-text)}.c-ircnMg-iiuedIb-css{line-height:1}.c-cyKpGk-icdQTrv-css{stroke-width:2}.c-jGlSdI-idZakdZ-css:hover,.c-jGlSdI-idZakdZ-css:focus-visible{color:var(--colors-medium)}.c-jGlSdI-ibAObXr-css{padding-bottom:2px;border-bottom:1px solid var(--colors-light)}.c-jGlSdI-ibAObXr-css:hover,.c-jGlSdI-ibAObXr-css:focus-visible{border-color:var(--colors-kindaLight)}.c-ircnMg-iePtfAL-css{font-weight:700}.c-ircnMg-ifvHAvo-css{color:#fb4d42;---underlineColor:rgba(251,77,66,0.4)}.t-kvkHIy .c-ircnMg-ifvHAvo-css{color:#ff5146;---underlineColor:rgba(255,81,70,0.4)}.c-ircnMg-ijclXSS-css{color:#1091b3;---underlineColor:rgba(16,145,179,0.4)}.t-kvkHIy .c-ircnMg-ijclXSS-css{color:#6fcbe3;---underlineColor:rgba(111,203,227,0.4)}.c-ircnMg-ihqdIAg-css{color:#f48024;---underlineColor:rgba(244,128,36,0.4)}.t-kvkHIy .c-ircnMg-ihqdIAg-css{color:#e18431;---underlineColor:rgba(225,132,49,0.4)}.c-ircnMg-icEYBVz-css{color:#04a699;---underlineColor:rgba(4,166,153,0.4)}.t-kvkHIy .c-ircnMg-icEYBVz-css{color:#08bbac;---underlineColor:rgba(8,187,172,0.4)}.c-ircnMg-iexeSXv-css{color:#6fbc4e;---underlineColor:rgba(111,188,78,0.4)}.t-kvkHIy .c-ircnMg-iexeSXv-css{color:#84d95f;---underlineColor:rgba(132,217,95,0.4)}.c-ircnMg-ikjCEeE-css{color:#8892bf;---underlineColor:rgba(136,146,191,0.4)}.t-kvkHIy .c-ircnMg-ikjCEeE-css{color:#a4afe3;---underlineColor:rgba(164,175,227,0.4)}.c-ircnMg-icntmzu-css{color:#00b81a;---underlineColor:rgba(0,184,26,0.4)}.t-kvkHIy .c-ircnMg-icntmzu-css{color:#57f06d;---underlineColor:rgba(87,240,109,0.4)}.c-ircnMg-ielVfZD-css{color:#0098ec;---underlineColor:rgba(0,152,236,0.4)}.t-kvkHIy .c-ircnMg-ielVfZD-css{color:#43b9fb;---underlineColor:rgba(67,185,251,0.4)}.c-ircnMg-igdXYXS-css{color:#ff6200;---underlineColor:rgba(255,98,0,0.4)}.t-kvkHIy .c-ircnMg-igdXYXS-css{color:#f46c16;---underlineColor:rgba(244,108,22,0.4)}.c-ircnMg-ifJgGVE-css{color:#4169e1;---underlineColor:rgba(65,105,225,0.4)}.t-kvkHIy .c-ircnMg-ifJgGVE-css{color:#8ca9ff;---underlineColor:rgba(140,169,255,0.4)}.c-ircnMg-ibOQcxc-css{color:#9932cc;---underlineColor:rgba(153,50,204,0.4)}.t-kvkHIy .c-ircnMg-ibOQcxc-css{color:#d588fb;---underlineColor:rgba(213,136,251,0.4)}.c-ircnMg-ikLHafA-css{color:#e40088;---underlineColor:rgba(228,0,136,0.4)}.t-kvkHIy .c-ircnMg-ikLHafA-css{color:#fd40b1;---underlineColor:rgba(253,64,177,0.4)}.c-ircnMg-ikLHafA-css:hover{cursor:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='30' style='font-size:24px'><text y='50%' transform='rotate(-70 0 0) translate(-20, 6)'>🪄</text></svg>") 5 5, auto}.c-ircnMg-idKLjvk-css{color:#ff1b1b;---underlineColor:rgba(255,27,27,0.4)}.t-kvkHIy .c-ircnMg-idKLjvk-css{color:#f06060;---underlineColor:rgba(240,96,96,0.4)}.c-ircnMg-igEtxlK-css{color:#f78200;---underlineColor:rgba(247,130,0,0.4)}.t-kvkHIy .c-ircnMg-igEtxlK-css{color:#fd992a;---underlineColor:rgba(253,153,42,0.4)}.c-ircnMg-ieVykbU-css{color:#f2b702;---underlineColor:rgba(242,183,2,0.4)}.t-kvkHIy .c-ircnMg-ieVykbU-css{color:#ffcc2e;---underlineColor:rgba(255,204,46,0.4)}.c-ircnMg-ihwXdCv-css{color:#5ebd3e;---underlineColor:rgba(94,189,62,0.4)}.t-kvkHIy .c-ircnMg-ihwXdCv-css{color:#78df55;---underlineColor:rgba(120,223,85,0.4)}.c-ircnMg-iliIVnW-css{color:#009cdf;---underlineColor:rgba(0,156,223,0.4)}.t-kvkHIy .c-ircnMg-iliIVnW-css{color:#29bfff;---underlineColor:rgba(41,191,255,0.4)}.c-ircnMg-ijCeZWw-css{color:#3e49bb;---underlineColor:rgba(62,73,187,0.4)}.t-kvkHIy .c-ircnMg-ijCeZWw-css{color:#7b87ff;---underlineColor:rgba(123,135,255,0.4)}.c-ircnMg-iiWVCgu-css{color:#973999;---underlineColor:rgba(151,57,153,0.4)}.t-kvkHIy .c-ircnMg-iiWVCgu-css{color:#db60dd;---underlineColor:rgba(219,96,221,0.4)}.c-ircnMg-ilomHgQ-css{color:#8d4eff;---underlineColor:rgba(141,78,255,0.4)}.t-kvkHIy .c-ircnMg-ilomHgQ-css{color:#a379f0;---underlineColor:rgba(163,121,240,0.4)}.c-ircnMg-idrgdLL-css{color:#0073b1;---underlineColor:rgba(0,115,177,0.4)}.t-kvkHIy .c-ircnMg-idrgdLL-css{color:#3b9dd2;---underlineColor:rgba(59,157,210,0.4)}.c-ircnMg-ihcvCov-css{color:#de0c0c;---underlineColor:rgba(222,12,12,0.4)}.t-kvkHIy .c-ircnMg-ihcvCov-css{color:#ff5050;---underlineColor:rgba(255,80,80,0.4)}.c-ircnMg-ifCrDDv-css{color:#757575;---underlineColor:rgba(117,117,117,0.4)}.t-kvkHIy .c-ircnMg-ifCrDDv-css{color:#959595;---underlineColor:rgba(149,149,149,0.4)}.c-ircnMg-ihJVCXK-css{color:#6d6eff;---underlineColor:rgba(109,110,255,0.4)}.t-kvkHIy .c-ircnMg-ihJVCXK-css{color:#7b87ff;---underlineColor:rgba(123,135,255,0.4)}.c-ircnMg-igiFVUv-css{color:#6fcc01;---underlineColor:rgba(111,204,1,0.4)}.t-kvkHIy .c-ircnMg-igiFVUv-css{color:#8edb34;---underlineColor:rgba(142,219,52,0.4)}.c-hRZPRE-idJQjtl-css{font-family:'Comic Neue', 'Comic Sans MS', 'Comic Sans', 'Geist', system-ui, sans-serif;font-weight:700;cursor:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAZklEQVR4AWIAgn/uBT6A9uoAAwAQiIJo97/0Rgy0ANoJH8MPeEgtqwPQEACqCoQHAKECQKgAECoAhAoAoQJAqAAQxh1oPQfcW3kJpxHtL1AAHAwEwwdYiH8BIEgBTBRAAAEEEEAAG7mRt30hEhoLAAAAAElFTkSuQmCC") 2 1, auto}.c-hRZPRE-idJQjtl-css a:hover,.c-hRZPRE-idJQjtl-css button{cursor:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAgMAAAAOFJJnAAAACVBMVEVHcEwAAAD///8W1S+BAAAAAXRSTlMAQObYZgAAAEdJREFUeAFjoAVghTGkHIhghMAYmQEwxlIYYxlYlSiQMQEsELUKyli1ahWYwQZjMGIwGLKQGA4QA1EYEP0rGVAZrKGhSF4BAHw/HsVwshytAAAAAElFTkSuQmCC") 16 12, auto}.c-hRZPRE-idJQjtl-css em{font-style:revert !important}.c-hRZPRE-idJQjtl-css header > nav > a:first-of-type > span:last-of-type{font-size:1.4em;font-weight:700}.c-hRZPRE-idJQjtl-css header > nav > ul > li > a > span{font-size:1.1em;font-weight:700;line-height:1.1}.c-hRZPRE-idJQjtl-css main > div > div{font-size:1.1em;text-align:center}.c-hRZPRE-idJQjtl-css footer > div{font-size:0.95em}.c-egFTxJ-inkYLS-css{font-size:0.8em;font-weight:400}.c-ircnMg-ijzDybH-css{font-size:0.95em}.c-fJbaBZ-igsyqVh-css{height:500px;max-width:100%;margin:0.6em 0}.c-itFlCw-igKRIQW-css{margin-bottom:0}.c-gsXNnN-ibfJDaD-css{overflow-wrap:break-word}}</style><link rel="preload" href="/_next/static/media/93f479601ee12b01.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font=""><link rel="preload" href="/_next/static/media/569ce4b8f30dc480.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font=""><script id="restore-theme" data-nscript="beforeInteractive">(function(){try{var e=document.documentElement,t=e.classList,a=["t-lcODYe","t-kvkHIy"],o="undefined"!=typeof Storage?window.localStorage.getItem("theme"):null,c=(o&&"dark"===o)??window.matchMedia("(prefers-color-scheme: dark)").matches?1:0;t.remove(...a),t.add(a[c]||""),e.style.colorScheme=1==c?"dark":"light"}catch(e){}})()</script><link rel="preload" href="/_next/static/css/0d4345bc1f7a4d11.css" as="style"><link rel="stylesheet" href="/_next/static/css/0d4345bc1f7a4d11.css" data-n-g=""><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-e2b3edf940b52bd2.js" defer=""></script><script src="/_next/static/chunks/framework-01c21befc8fbca17.js" defer=""></script><script src="/_next/static/chunks/main-0276bebfb4129619.js" defer=""></script><script src="/_next/static/chunks/pages/_app-0169c2cc263aa3d1.js" defer=""></script><script src="/_next/static/chunks/pages/index-f688945cb1fda8d9.js" defer=""></script><script src="/_next/static/2JW6LkNDukf4nRc2F8FMh/_buildManifest.js" defer=""></script><script src="/_next/static/2JW6LkNDukf4nRc2F8FMh/_ssgManifest.js" defer=""></script><script src="/_vercel/insights/script.js" defer="" data-sdkn="@vercel/analytics/react" data-sdkv="1.4.1"></script></head><body><div id="__next"><a href="#skip-nav" tabindex="0" class="c-ijetuc">Skip to content</a><div class="c-hRZPRE"><header class="c-coWCMU c-bpIbAA"><nav class="c-jZTOcW"><a rel="author" title="Jake Jarvis" class="c-ircnMg c-cIJLdn" href="/"><img alt="Photo of Jake Jarvis" width="70" height="70" decoding="async" data-nimg="1" class="c-kBuSEt c-dUvoov" style="color:transparent" srcset="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Fselfie.7d009bf4.jpg&w=96&q=60 1x, /_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Fselfie.7d009bf4.jpg&w=256&q=60 2x" src="/_next/image/?url=%2F_next%2Fstatic%2Fmedia%2Fselfie.7d009bf4.jpg&w=256&q=60"><span class="c-cRUDQG">Jake Jarvis</span></a><ul class="c-fFxUcP c-isrdta"><li class="c-jhvBPD"><a class="c-ircnMg c-hEBfGi c-hEBfGi-bQvbla-current-true" title="Home" aria-label="Home" href="/"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="c-iFqlrM" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg><span class="c-fVopks">Home</span></a></li><li class="c-jhvBPD"><a class="c-ircnMg c-hEBfGi c-hEBfGi-coRMrW-current-false" title="Notes" aria-label="Notes" href="/notes/"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="c-iFqlrM" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M12 20h9"></path><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"></path></svg><span class="c-fVopks">Notes</span></a></li><li class="c-jhvBPD"><a class="c-ircnMg c-hEBfGi c-hEBfGi-coRMrW-current-false" title="Projects" aria-label="Projects" href="/projects/"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="c-iFqlrM" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg><span class="c-fVopks">Projects</span></a></li><li class="c-jhvBPD"><a class="c-ircnMg c-hEBfGi c-hEBfGi-coRMrW-current-false" title="Contact" aria-label="Contact" href="/contact/"><svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="c-iFqlrM" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg><span class="c-fVopks">Contact</span></a></li><li class="c-jhvBPD"><button title="Toggle Dark Mode" aria-label="Toggle Dark Mode" class="c-bADEBd"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="c-iFqlrM" aria-hidden="true" style="transform: rotate(90deg);"><mask id="mask-:R36b9m:"><rect x="0" y="0" width="100%" height="100%" fill="white"></rect><circle r="9" fill="black" style="cx: 100%; cy: 0%;"></circle></mask><circle cx="12" cy="12" fill="currentColor" mask="url(#mask-:R36b9m:)" style="r: 5px;"></circle><g stroke="currentColor" style="opacity: 1;"><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></g></svg></button></li></ul></nav></header><main class="c-fanidY"><div id="skip-nav"></div><div class="c-iktAiM"><h1 class="c-jEFzux">Hi there! I'm Jake. <span class="c-fcKlyh">👋</span></h1><h2 class="c-eFRhLn">I'm a frontend web developer based in the<!-- --> <a target="_blank" rel="noopener noreferrer" title=""Boston Accent Trailer - Late Night with Seth Meyers" on YouTube" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ifvHAvo-css" href="https://www.youtube-nocookie.com/embed/rLwbzGyC6t4?hl=en&fs=1&showinfo=1&rel=0&iv_load_policy=3">Boston</a> <!-- -->area.</h2><p class="c-nnJtK">I specialize in<!-- --> <a target="_blank" rel="noopener noreferrer" title="React Official Website" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ijclXSS-css" href="https://reactjs.org/">React</a> <!-- -->and<!-- --> <a target="_blank" rel="noopener noreferrer" title=""The Cost of Javascript Frameworks" by Tim Kadlec" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ihqdIAg-css" href="https://timkadlec.com/remembers/2020-04-21-the-cost-of-javascript-frameworks/">vanilla JavaScript</a> <!-- -->to make nifty<!-- --> <a target="_blank" rel="noopener noreferrer" title="WTF is Jamstack?" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-icEYBVz-css" href="https://jamstack.wtf/">Jamstack sites</a> <!-- -->with dynamic<!-- --> <a target="_blank" rel="noopener noreferrer" title="Node.js Official Website" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-iexeSXv-css" href="https://nodejs.org/en/">Node.js</a> <!-- -->services. But I still know my way around less buzzwordy stacks like<!-- --> <a target="_blank" rel="noopener noreferrer" title="25 Years of PHP History" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ikjCEeE-css" href="https://www.jetbrains.com/lp/php-25/">LAMP</a>, too.</p><p class="c-nnJtK">Whenever possible, I also apply my experience in<!-- --> <a target="_blank" rel="noopener noreferrer" title="Jake Jarvis on Bugcrowd" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-icntmzu-css" href="https://bugcrowd.com/jakejarvis">application security</a>,<!-- --> <a target="_blank" rel="noopener noreferrer" title=""What is serverless computing?" on Cloudflare" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ielVfZD-css" href="https://www.cloudflare.com/learning/serverless/what-is-serverless/">serverless stacks</a>, and<!-- --> <a target="_blank" rel="noopener noreferrer" title="My repositories tagged with "github-actions" on GitHub" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-igdXYXS-css" href="https://github.com/jakejarvis?tab=repositories&q=github-actions&type=source&language=&sort=stargazers">DevOps automation</a>.</p><p class="c-nnJtK">I fell in love with<!-- --> <a title="My Terrible, Horrible, No Good, Very Bad First Websites" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ifJgGVE-css" href="/previously/">frontend web design</a> <!-- -->and<!-- --> <a title="Jake's Bulletin Board, circa 2003" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ibOQcxc-css" href="/notes/my-first-code/">backend programming</a> <!-- -->when my only source of income was<!-- --> <a title="🎉 Cranky Birthday Boy on VHS Tape 📼" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ikLHafA-css" href="/birthday/">the Tooth Fairy</a>. <span class="c-fqQGzg">I've improved a bit since then, I think? 🤷</span></p><p class="c-nnJtK">Over the years, some of my side projects<!-- --> <a title="Powncer segment on The Lab with Leo Laporte (G4techTV)" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-idKLjvk-css" href="/leo/">have</a> <a target="_blank" rel="noopener noreferrer" title=""Student designs iPhone JoeyTracker app" on The Tufts Daily" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-igEtxlK-css" href="https://tuftsdaily.com/news/2012/04/06/student-designs-iphone-joeytracker-app/">been</a> <a target="_blank" rel="noopener noreferrer" title=""The Facebook Effect" by David Kirkpatrick (Google Books)" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ieVykbU-css" href="https://www.google.com/books/edition/The_Facebook_Effect/RRUkLhyGZVgC?hl=en&gbpv=1&dq=%22jake%20jarvis%22&pg=PA226&printsec=frontcover&bsq=%22jake%20jarvis%22">featured</a> <a target="_blank" rel="noopener noreferrer" title=""The new Facebook is on a roll" on CNN Money" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ihwXdCv-css" href="https://money.cnn.com/2007/06/01/technology/facebookplatform.fortune/index.htm">by</a> <a target="_blank" rel="noopener noreferrer" title=""Middio: A YouTube Scraper for Major Label Music Videos" on Wired" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-iliIVnW-css" href="https://www.wired.com/2007/04/our-web-servers/">various</a> <a target="_blank" rel="noopener noreferrer" title=""Fresh Faces in Tech: 10 Kid Entrepreneurs to Watch" on Gigaom" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ijCeZWw-css" href="https://gigaom.com/2009/10/06/fresh-faces-in-tech-10-kid-entrepreneurs-to-watch/6/">media</a> <a target="_blank" rel="noopener noreferrer" title=""Your Next Client? The CEO's Son" on Advertising Age" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-iiWVCgu-css" href="https://adage.com/article/small-agency-diary/client-ceo-s-son/116723/">outlets</a>.</p><p class="c-nnJtK">You can find my work on<!-- --> <a target="_blank" rel="me noopener noreferrer" title="Jake Jarvis on GitHub" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ilomHgQ-css" href="https://github.com/jakejarvis">GitHub</a> <!-- -->and<!-- --> <a target="_blank" rel="me noopener noreferrer" title="Jake Jarvis on LinkedIn" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-idrgdLL-css" href="https://www.linkedin.com/in/jakejarvis/">LinkedIn</a>. I'm always available to connect over<!-- --> <a title="Send an email" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ihcvCov-css" href="/contact/">email</a> <sup class="c-seBUO"><a target="_blank" rel="pgpkey authn noopener" title="My Public Key" class="c-ircnMg c-ircnMg-ifCrDDv-css" href="/pubkey.asc"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="c-eFGshj" height="1.25em" width="1.25em" xmlns="http://www.w3.org/2000/svg"><path d="M6 9V7.25C6 3.845 8.503 1 12 1s6 2.845 6 6.25V9h.5a2.5 2.5 0 0 1 2.5 2.5v8a2.5 2.5 0 0 1-2.5 2.5h-13A2.5 2.5 0 0 1 3 19.5v-8A2.5 2.5 0 0 1 5.5 9Zm-1.5 2.5v8a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1v-8a1 1 0 0 0-1-1h-13a1 1 0 0 0-1 1Zm3-4.25V9h9V7.25c0-2.67-1.922-4.75-4.5-4.75-2.578 0-4.5 2.08-4.5 4.75Z"></path></svg> <code class="c-jnKxow">2B0C 9CF2 51E6 9A39</code></a></sup>,<!-- --> <a target="_blank" rel="me noopener noreferrer" title="Jake Jarvis on Mastodon" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-ihJVCXK-css" href="https://fediverse.jarv.is/@jake">Mastodon</a>, or<!-- --> <a target="_blank" rel="noopener noreferrer" title="Send SMS to +1 (617) 917-3737" class="c-ircnMg c-ircnMg-hAOWUE-underline-true c-ircnMg-igiFVUv-css" href="sms:+1-617-917-3737">SMS</a> <!-- -->as well!</p></div></main><footer class="c-jtLgmk c-bPNjhd"><div class="c-eQZpKm"><div>Content<!-- --> <a title="Creative Commons Attribution 4.0 International" class="c-ircnMg c-jGlSdI" href="/license/">licensed under <!-- -->CC-BY-4.0</a>,<!-- --> <a title="Previously on..." class="c-ircnMg c-jGlSdI" href="/previously/">2001</a> <!-- -->– <!-- -->2024<!-- -->.</div><div>Made with<!-- --> <span title="Love" class="c-geQyBr"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" class="c-cyKpGk c-cyKpGk-icdQTrv-css" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M14 20.408c-.492.308-.903.546-1.192.709-.153.086-.308.17-.463.252h-.002a.75.75 0 0 1-.686 0 16.709 16.709 0 0 1-.465-.252 31.147 31.147 0 0 1-4.803-3.34C3.8 15.572 1 12.331 1 8.513 1 5.052 3.829 2.5 6.736 2.5 9.03 2.5 10.881 3.726 12 5.605 13.12 3.726 14.97 2.5 17.264 2.5 20.17 2.5 23 5.052 23 8.514c0 3.818-2.801 7.06-5.389 9.262A31.146 31.146 0 0 1 14 20.408Z"></path></svg></span> <!-- -->and<!-- --> <a target="_blank" rel="noopener noreferrer" title="Powered by Next.js" aria-label="Next.js" class="c-ircnMg c-jGlSdI c-jGlSdI-idZakdZ-css" href="https://nextjs.org/"><svg stroke="currentColor" fill="currentColor" stroke-width="0" role="img" viewBox="0 0 24 24" class="c-cyKpGk" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M18.665 21.978C16.758 23.255 14.465 24 12 24 5.377 24 0 18.623 0 12S5.377 0 12 0s12 5.377 12 12c0 3.583-1.574 6.801-4.067 9.001L9.219 7.2H7.2v9.596h1.615V9.251l9.85 12.727Zm-3.332-8.533 1.6 2.061V7.2h-1.6v6.245Z"></path></svg></a>.<!-- --> <a target="_blank" rel="noopener noreferrer" title="View Source on GitHub" class="c-ircnMg c-jGlSdI c-jGlSdI-ibAObXr-css" href="https://github.com/jakejarvis/jarv.is">View source.</a></div></div></footer></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"2JW6LkNDukf4nRc2F8FMh","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script><next-route-announcer><p aria-live="assertive" id="__next-route-announcer__" role="alert" style="border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; top: 0px; width: 1px; white-space: nowrap; overflow-wrap: normal;"></p></next-route-announcer></body></html>