mirror of
https://github.com/jakejarvis/jarv.is.git
synced 2025-10-28 02:15:47 -04:00
custom <Link /> wrapper around next/link
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { NextSeo } from "next-seo";
|
||||
import Content from "../components/Content/Content";
|
||||
import PageTitle from "../components/PageTitle/PageTitle";
|
||||
import Link from "../components/Link/Link";
|
||||
import Image from "../components/Image/Image";
|
||||
import Blockquote from "../components/Blockquote/Blockquote";
|
||||
import CodeBlock from "../components/CodeBlock/CodeBlock";
|
||||
@@ -23,20 +24,12 @@ const CLI = () => (
|
||||
<Content>
|
||||
<Blockquote>
|
||||
<p>
|
||||
The{" "}
|
||||
<a href="https://jarv.is/" target="_blank" rel="noopener noreferrer">
|
||||
Jake Jarvis
|
||||
</a>{" "}
|
||||
CLI (aka the most useless Node module ever published, in history, by anyone, ever).
|
||||
The <Link href="https://jarv.is/">Jake Jarvis</Link> CLI (aka the most useless Node module ever published, in
|
||||
history, by anyone, ever).
|
||||
</p>
|
||||
</Blockquote>
|
||||
|
||||
<a
|
||||
className="no-underline"
|
||||
href="https://www.npmjs.com/package/@jakejarvis/cli"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<a href="https://www.npmjs.com/package/@jakejarvis/cli" target="_blank" rel="noopener noreferrer">
|
||||
<Image src={cliImg} alt="Terminal Screenshot" priority />
|
||||
</a>
|
||||
|
||||
@@ -46,48 +39,32 @@ const CLI = () => (
|
||||
<H2>Inspired by</H2>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://github.com/sindresorhus/sindresorhus-cli" target="_blank" rel="noopener noreferrer">
|
||||
@sindresorhus/sindresorhus-cli
|
||||
</a>
|
||||
<Link href="https://github.com/sindresorhus/sindresorhus-cli">@sindresorhus/sindresorhus-cli</Link>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://github.com/yg/ygcodes" target="_blank" rel="noopener noreferrer">
|
||||
@yg/ygcodes
|
||||
</a>
|
||||
<Link href="https://github.com/yg/ygcodes">@yg/ygcodes</Link>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<H2>Built with</H2>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://github.com/vadimdemedes/ink" target="_blank" rel="noopener noreferrer">
|
||||
ink
|
||||
</a>{" "}
|
||||
- React for interactive command-line apps
|
||||
<Link href="https://github.com/vadimdemedes/ink">ink</Link> - React for interactive command-line apps
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://github.com/sindresorhus/meow" target="_blank" rel="noopener noreferrer">
|
||||
meow
|
||||
</a>{" "}
|
||||
- CLI helper
|
||||
<Link href="https://github.com/sindresorhus/meow">meow</Link> - CLI helper
|
||||
</li>
|
||||
</ul>
|
||||
<p>
|
||||
<a href="https://github.com/jakejarvis/jakejarvis/tree/main/cli" target="_blank" rel="noreferrer">
|
||||
<Link href="https://github.com/jakejarvis/jakejarvis/tree/main/cli" target="_blank" rel="noreferrer">
|
||||
View source on GitHub.
|
||||
</a>
|
||||
</Link>
|
||||
</p>
|
||||
|
||||
<H2>License</H2>
|
||||
<p>
|
||||
MIT ©{" "}
|
||||
<a href="https://jarv.is/" target="_blank" rel="noopener noreferrer">
|
||||
Jake Jarvis
|
||||
</a>
|
||||
,{" "}
|
||||
<a href="https://sindresorhus.com" target="_blank" rel="noopener noreferrer">
|
||||
Sindre Sorhus
|
||||
</a>
|
||||
MIT © <Link href="https://jarv.is/">Jake Jarvis</Link>,{" "}
|
||||
<Link href="https://sindresorhus.com">Sindre Sorhus</Link>
|
||||
</p>
|
||||
</Content>
|
||||
</>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { NextSeo } from "next-seo";
|
||||
import Content from "../components/Content/Content";
|
||||
import PageTitle from "../components/PageTitle/PageTitle";
|
||||
import Link from "../components/Link/Link";
|
||||
import ContactForm from "../components/ContactForm/ContactForm";
|
||||
|
||||
const Contact = () => (
|
||||
@@ -18,21 +19,15 @@ const Contact = () => (
|
||||
<div className="wrapper">
|
||||
<p>
|
||||
Fill out this quick form and I'll get back to you as soon as I can! You can also{" "}
|
||||
<a href="mailto:jake@jarv.is">email me directly</a>, send me a{" "}
|
||||
<a
|
||||
href="https://twitter.com/messages/compose?recipient_id=229769022"
|
||||
target="_blank"
|
||||
rel="noopener nofollow noreferrer"
|
||||
>
|
||||
direct message on Twitter
|
||||
</a>
|
||||
, or <a href="sms:+1-617-917-3737">text me</a>.
|
||||
<Link href="mailto:jake@jarv.is">email me directly</Link>, send me a{" "}
|
||||
<Link href="https://twitter.com/messages/compose?recipient_id=229769022">direct message on Twitter</Link>, or{" "}
|
||||
<Link href="sms:+1-617-917-3737">text me</Link>.
|
||||
</p>
|
||||
<p>
|
||||
🔐 You can grab my public key here:{" "}
|
||||
<a href="/pubkey.asc" title="My Public PGP Key" target="_blank" rel="pgpkey authn noopener">
|
||||
<Link href="/pubkey.asc" title="My Public PGP Key" rel="pgpkey authn noopener" forceNewWindow>
|
||||
<code className="pubkey">6BF3 79D3 6F67 1480 2B0C 9CF2 51E6 9A39</code>
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { NextSeo } from "next-seo";
|
||||
import Content from "../components/Content/Content";
|
||||
import PageTitle from "../components/PageTitle/PageTitle";
|
||||
import Link from "../components/Link/Link";
|
||||
import Video from "../components/Video/Video";
|
||||
|
||||
import thumbnail from "../public/static/images/hillary/thumb.png";
|
||||
@@ -26,17 +27,17 @@ const Hillary = () => (
|
||||
|
||||
<p className="copyright">
|
||||
Video is property of{" "}
|
||||
<a href="https://www.hillaryclinton.com/" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://www.hillaryclinton.com/" style={{ fontWeight: 700 }}>
|
||||
Hillary for America
|
||||
</a>
|
||||
</Link>
|
||||
, the{" "}
|
||||
<a href="https://democrats.org/" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://democrats.org/" style={{ fontWeight: 700 }}>
|
||||
Democratic National Committee
|
||||
</a>
|
||||
</Link>
|
||||
, and{" "}
|
||||
<a href="https://cnnpressroom.blogs.cnn.com/" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://cnnpressroom.blogs.cnn.com/" style={{ fontWeight: 700 }}>
|
||||
CNN / WarnerMedia
|
||||
</a>
|
||||
</Link>
|
||||
. © 2016.
|
||||
</p>
|
||||
</Content>
|
||||
@@ -49,10 +50,6 @@ const Hillary = () => (
|
||||
margin: 1.25em 1em 0.5em;
|
||||
color: var(--medium-light);
|
||||
}
|
||||
|
||||
.copyright a {
|
||||
font-weight: 700;
|
||||
}
|
||||
`}</style>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -4,7 +4,7 @@ import ColorfulLink from "../components/ColorfulLink/ColorfulLink";
|
||||
const Index = () => (
|
||||
<>
|
||||
<Content>
|
||||
<div className="home">
|
||||
<div>
|
||||
<h1>
|
||||
Hi there! I'm Jake. <span className="wave">👋</span>
|
||||
</h1>
|
||||
@@ -16,7 +16,6 @@ const Index = () => (
|
||||
title='"Boston Accent Trailer - Late Night with Seth Meyers" on YouTube'
|
||||
lightColor="#fb4d42"
|
||||
darkColor="#ff5146"
|
||||
external
|
||||
>
|
||||
Boston
|
||||
</ColorfulLink>
|
||||
@@ -30,7 +29,6 @@ const Index = () => (
|
||||
title='"The Brutal Lifecycle of JavaScript Frameworks" by Ian Allen'
|
||||
lightColor="#1091b3"
|
||||
darkColor="#6fcbe3"
|
||||
external
|
||||
>
|
||||
modern JS frameworks
|
||||
</ColorfulLink>{" "}
|
||||
@@ -40,18 +38,11 @@ const Index = () => (
|
||||
title="The best JS framework in the world by Eric Wastl"
|
||||
lightColor="#f48024"
|
||||
darkColor="#e18431"
|
||||
external
|
||||
>
|
||||
vanilla JavaScript
|
||||
</ColorfulLink>{" "}
|
||||
to make nifty{" "}
|
||||
<ColorfulLink
|
||||
href="https://jamstack.wtf/"
|
||||
title="WTF is JAMstack?"
|
||||
lightColor="#04a699"
|
||||
darkColor="#08bbac"
|
||||
external
|
||||
>
|
||||
<ColorfulLink href="https://jamstack.wtf/" title="WTF is JAMstack?" lightColor="#04a699" darkColor="#08bbac">
|
||||
JAMstack sites
|
||||
</ColorfulLink>{" "}
|
||||
with dynamic{" "}
|
||||
@@ -60,7 +51,6 @@ const Index = () => (
|
||||
title="Node.js Official Website"
|
||||
lightColor="#6fbc4e"
|
||||
darkColor="#84d95f"
|
||||
external
|
||||
>
|
||||
Node.js
|
||||
</ColorfulLink>{" "}
|
||||
@@ -70,7 +60,6 @@ const Index = () => (
|
||||
title='"PHP in 2020" by Brent Roose'
|
||||
lightColor="#8892bf"
|
||||
darkColor="#a4afe3"
|
||||
external
|
||||
>
|
||||
PHP
|
||||
</ColorfulLink>
|
||||
@@ -80,7 +69,6 @@ const Index = () => (
|
||||
title="Ruby Official Website"
|
||||
lightColor="#d34135"
|
||||
darkColor="#f95a4d"
|
||||
external
|
||||
>
|
||||
Ruby
|
||||
</ColorfulLink>
|
||||
@@ -90,7 +78,6 @@ const Index = () => (
|
||||
title="Golang Official Website"
|
||||
lightColor="#00acd7"
|
||||
darkColor="#2ad1fb"
|
||||
external
|
||||
>
|
||||
Go
|
||||
</ColorfulLink>{" "}
|
||||
@@ -104,7 +91,6 @@ const Index = () => (
|
||||
title="jakejarvis/awesome-shodan-queries on GitHub"
|
||||
lightColor="#00b81a"
|
||||
darkColor="#57f06d"
|
||||
external
|
||||
>
|
||||
application security
|
||||
</ColorfulLink>
|
||||
@@ -114,7 +100,6 @@ const Index = () => (
|
||||
title='"What is serverless computing?" on Cloudflare'
|
||||
lightColor="#0098ec"
|
||||
darkColor="#43b9fb"
|
||||
external
|
||||
>
|
||||
serverless stacks
|
||||
</ColorfulLink>
|
||||
@@ -124,7 +109,6 @@ const Index = () => (
|
||||
title='"Automation" on xkcd'
|
||||
lightColor="#ff6200"
|
||||
darkColor="#f46c16"
|
||||
external
|
||||
>
|
||||
DevOps automation
|
||||
</ColorfulLink>
|
||||
@@ -171,7 +155,6 @@ const Index = () => (
|
||||
title='"Student designs iPhone JoeyTracker app" on The Tufts Daily'
|
||||
lightColor="#ff1b1b"
|
||||
darkColor="#f06060"
|
||||
external
|
||||
>
|
||||
have
|
||||
</ColorfulLink>{" "}
|
||||
@@ -188,7 +171,6 @@ const Index = () => (
|
||||
title='"The Facebook Effect" by David Kirkpatrick (Google Books)'
|
||||
lightColor="#f2b702"
|
||||
darkColor="#ffcc2e"
|
||||
external
|
||||
>
|
||||
featured
|
||||
</ColorfulLink>{" "}
|
||||
@@ -197,7 +179,6 @@ const Index = () => (
|
||||
title='"The new Facebook is on a roll" on CNN Money'
|
||||
lightColor="#5ebd3e"
|
||||
darkColor="#78df55"
|
||||
external
|
||||
>
|
||||
by
|
||||
</ColorfulLink>{" "}
|
||||
@@ -206,7 +187,6 @@ const Index = () => (
|
||||
title='"Middio: A YouTube Scraper for Major Label Music Videos" on Wired'
|
||||
lightColor="#009cdf"
|
||||
darkColor="#29bfff"
|
||||
external
|
||||
>
|
||||
various
|
||||
</ColorfulLink>{" "}
|
||||
@@ -215,7 +195,6 @@ const Index = () => (
|
||||
title='"Fresh Faces in Tech: 10 Kid Entrepreneurs to Watch" on Gigaom'
|
||||
lightColor="#3e49bb"
|
||||
darkColor="#7b87ff"
|
||||
external
|
||||
>
|
||||
media
|
||||
</ColorfulLink>{" "}
|
||||
@@ -224,7 +203,6 @@ const Index = () => (
|
||||
title='"Your Next Client? The CEO's Son" on Advertising Age'
|
||||
lightColor="#973999"
|
||||
darkColor="#db60dd"
|
||||
external
|
||||
>
|
||||
outlets
|
||||
</ColorfulLink>
|
||||
@@ -238,7 +216,6 @@ const Index = () => (
|
||||
title="Jake Jarvis on GitHub"
|
||||
lightColor="#8d4eff"
|
||||
darkColor="#a379f0"
|
||||
external
|
||||
>
|
||||
GitHub
|
||||
</ColorfulLink>{" "}
|
||||
@@ -248,7 +225,6 @@ const Index = () => (
|
||||
title="Jake Jarvis on LinkedIn"
|
||||
lightColor="#0073b1"
|
||||
darkColor="#3b9dd2"
|
||||
external
|
||||
>
|
||||
LinkedIn
|
||||
</ColorfulLink>
|
||||
@@ -258,12 +234,13 @@ const Index = () => (
|
||||
</ColorfulLink>{" "}
|
||||
<sup className="monospace pgp_key">
|
||||
<ColorfulLink
|
||||
className="no-underline"
|
||||
href="/pubkey.asc"
|
||||
rel="pgpkey authn noopener"
|
||||
title="My Public Key"
|
||||
lightColor="#757575"
|
||||
darkColor="#959595"
|
||||
external
|
||||
style={{ background: "none" }}
|
||||
forceNewWindow
|
||||
>
|
||||
🔐 2B0C 9CF2 51E6 9A39
|
||||
</ColorfulLink>
|
||||
@@ -274,7 +251,6 @@ const Index = () => (
|
||||
title="Jake Jarvis on Twitter"
|
||||
lightColor="#00acee"
|
||||
darkColor="#3bc9ff"
|
||||
external
|
||||
>
|
||||
Twitter
|
||||
</ColorfulLink>
|
||||
@@ -293,32 +269,32 @@ const Index = () => (
|
||||
</Content>
|
||||
|
||||
<style jsx>{`
|
||||
.home {
|
||||
div {
|
||||
font-size: 1.1em;
|
||||
line-height: 1;
|
||||
}
|
||||
.home h1 {
|
||||
h1 {
|
||||
margin: 0 0 0.5em -0.03em;
|
||||
font-size: 1.8em;
|
||||
font-weight: 500;
|
||||
letter-spacing: -0.01em;
|
||||
}
|
||||
.home h2 {
|
||||
h2 {
|
||||
margin: 0.5em 0 0.5em -0.03em;
|
||||
font-size: 1.35em;
|
||||
font-weight: 400;
|
||||
letter-spacing: -0.016em;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.home p {
|
||||
p {
|
||||
margin: 0.85em 0;
|
||||
letter-spacing: -0.004em;
|
||||
line-height: 1.7;
|
||||
}
|
||||
.home p:last-of-type {
|
||||
p:last-of-type {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.home .wave {
|
||||
.wave {
|
||||
display: inline-block;
|
||||
margin-left: 0.1em;
|
||||
font-size: 1.2em;
|
||||
@@ -327,18 +303,15 @@ const Index = () => (
|
||||
transform-origin: 65% 80%;
|
||||
will-change: transform;
|
||||
}
|
||||
.home .pgp_key {
|
||||
.pgp_key {
|
||||
margin: 0 0.15em;
|
||||
font-size: 0.65em;
|
||||
word-spacing: -0.3em;
|
||||
}
|
||||
.home .pgp_key :global(a) {
|
||||
background: none !important;
|
||||
}
|
||||
.home .quiet {
|
||||
.quiet {
|
||||
color: var(--medium-light);
|
||||
}
|
||||
.home .birthday :global(a:hover) {
|
||||
.birthday :global(a:hover) {
|
||||
/* magic wand cursor easter egg */
|
||||
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,
|
||||
@@ -346,17 +319,18 @@ const Index = () => (
|
||||
}
|
||||
|
||||
@media screen and (max-width: 768px) {
|
||||
.home h1 {
|
||||
h1 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.home h2 {
|
||||
h2 {
|
||||
font-size: 1.2em;
|
||||
}
|
||||
.home p {
|
||||
p {
|
||||
font-size: 0.925em;
|
||||
}
|
||||
}
|
||||
|
||||
/* https://jarv.is/notes/css-waving-hand-emoji/ */
|
||||
@keyframes wave {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { NextSeo } from "next-seo";
|
||||
import Content from "../components/Content/Content";
|
||||
import PageTitle from "../components/PageTitle/PageTitle";
|
||||
import Link from "../components/Link/Link";
|
||||
import Video from "../components/Video/Video";
|
||||
|
||||
import thumbnail from "../public/static/images/leo/thumb.png";
|
||||
@@ -27,17 +28,13 @@ const Leo = () => (
|
||||
|
||||
<p className="copyright">
|
||||
Video is property of{" "}
|
||||
<a
|
||||
href="https://web.archive.org/web/20070511004304/http://www.g4techtv.ca/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Link href="https://web.archive.org/web/20070511004304/http://www.g4techtv.ca/" style={{ fontWeight: 700 }}>
|
||||
G4techTV Canada
|
||||
</a>{" "}
|
||||
</Link>{" "}
|
||||
&{" "}
|
||||
<a href="https://leolaporte.com/" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://leolaporte.com/" style={{ fontWeight: 700 }}>
|
||||
Leo Laporte
|
||||
</a>
|
||||
</Link>
|
||||
. © 2007 G4 Media, Inc.
|
||||
</p>
|
||||
</Content>
|
||||
@@ -50,10 +47,6 @@ const Leo = () => (
|
||||
margin: 1.25em 1em 0.5em;
|
||||
color: var(--medium-light);
|
||||
}
|
||||
|
||||
.copyright a {
|
||||
font-weight: 700;
|
||||
}
|
||||
`}</style>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { NextSeo } from "next-seo";
|
||||
import Content from "../components/Content/Content";
|
||||
import PageTitle from "../components/PageTitle/PageTitle";
|
||||
import Link from "../components/Link/Link";
|
||||
import HorizontalRule from "../components/HorizontalRule/HorizontalRule";
|
||||
import Blockquote from "../components/Blockquote/Blockquote";
|
||||
import { H2, H3 } from "../components/Heading/Heading";
|
||||
@@ -19,18 +20,14 @@ const License = () => (
|
||||
<Content>
|
||||
<p>
|
||||
Unless otherwise noted, content on this website is published under the{" "}
|
||||
<a href="https://creativecommons.org/licenses/by/4.0/" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://creativecommons.org/licenses/by/4.0/">
|
||||
<strong>Creative Commons Attribution 4.0 International Public License</strong>
|
||||
</a>{" "}
|
||||
</Link>{" "}
|
||||
(CC-BY-4.0), which means that you can copy, redistribute, remix, transform, and build upon the content for any
|
||||
purpose as long as you give appropriate credit (such as a hyperlink to the original URL).
|
||||
</p>
|
||||
<p>
|
||||
The{" "}
|
||||
<a href="https://creativecommons.org/licenses/by/4.0/legalcode" target="_blank" rel="noopener noreferrer">
|
||||
full license
|
||||
</a>{" "}
|
||||
is re-printed below.
|
||||
The <Link href="https://creativecommons.org/licenses/by/4.0/legalcode">full license</Link> is re-printed below.
|
||||
</p>
|
||||
|
||||
<HorizontalRule />
|
||||
@@ -39,7 +36,6 @@ const License = () => (
|
||||
|
||||
<p style={{ textAlign: "center", lineHeight: 0 }}>
|
||||
<a
|
||||
className="no-underline"
|
||||
href="https://creativecommons.org/licenses/by/4.0/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
@@ -98,13 +94,9 @@ const License = () => (
|
||||
our licenses so that the public can reuse the material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-licensed material, or material used under an
|
||||
exception or limitation to copyright.{" "}
|
||||
<a
|
||||
href="https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Link href="https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors">
|
||||
More considerations for licensors
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
</li>
|
||||
@@ -118,13 +110,9 @@ const License = () => (
|
||||
restricted for other reasons, including because others have copyright or other rights in the material. A
|
||||
licensor may make special requests, such as asking that all changes be marked or described. Although not
|
||||
required by our licenses, you are encouraged to respect those requests where reasonable.{" "}
|
||||
<a
|
||||
href="https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Link href="https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees">
|
||||
More considerations for the public
|
||||
</a>
|
||||
</Link>
|
||||
.
|
||||
</p>
|
||||
</li>
|
||||
@@ -461,30 +449,20 @@ const License = () => (
|
||||
Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply
|
||||
one of its public licenses to material it publishes and in those instances will be considered the "Licensor."
|
||||
The text of the Creative Commons public licenses is dedicated to the public domain under the{" "}
|
||||
<a
|
||||
href="https://creativecommons.org/publicdomain/zero/1.0/legalcode"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Link href="https://creativecommons.org/publicdomain/zero/1.0/legalcode">
|
||||
<em>CC0 Public Domain Dedication</em>
|
||||
</a>
|
||||
</Link>
|
||||
. Except for the limited purpose of indicating that material is shared under a Creative Commons public license
|
||||
or as otherwise permitted by the Creative Commons policies published at{" "}
|
||||
<a href="https://creativecommons.org/policies" target="_blank" rel="noopener noreferrer">
|
||||
creativecommons.org/policies
|
||||
</a>
|
||||
, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or
|
||||
logo of Creative Commons without its prior written consent including, without limitation, in connection with
|
||||
any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or
|
||||
agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part
|
||||
of the public licenses.
|
||||
<Link href="https://creativecommons.org/policies">creativecommons.org/policies</Link>, Creative Commons does
|
||||
not authorize the use of the trademark "Creative Commons" or any other trademark or logo of Creative Commons
|
||||
without its prior written consent including, without limitation, in connection with any unauthorized
|
||||
modifications to any of its public licenses or any other arrangements, understandings, or agreements
|
||||
concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
</p>
|
||||
<p>
|
||||
Creative Commons may be contacted at{" "}
|
||||
<a href="https://creativecommons.org/" target="_blank" rel="noopener noreferrer">
|
||||
creativecommons.org
|
||||
</a>
|
||||
.
|
||||
Creative Commons may be contacted at <Link href="https://creativecommons.org/">creativecommons.org</Link>.
|
||||
</p>
|
||||
</Blockquote>
|
||||
</Content>
|
||||
|
||||
@@ -56,6 +56,7 @@ const Note = ({ frontMatter, source }: NoteType) => {
|
||||
<NoteTitle slug={frontMatter.slug} htmlTitle={frontMatter.htmlTitle} />
|
||||
|
||||
<Content>
|
||||
{/* @ts-ignore */}
|
||||
<MDXRemote {...source} components={{ ...mdxComponents }} />
|
||||
</Content>
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import Link from "next/link";
|
||||
import { NextSeo } from "next-seo";
|
||||
import Content from "../components/Content/Content";
|
||||
import PageTitle from "../components/PageTitle/PageTitle";
|
||||
import Link from "../components/Link/Link";
|
||||
import Figure from "../components/Figure/Figure";
|
||||
import IFrame from "../components/IFrame/IFrame";
|
||||
import HorizontalRule from "../components/HorizontalRule/HorizontalRule";
|
||||
@@ -40,9 +40,13 @@ const Previously = () => (
|
||||
<Content>
|
||||
<Figure src={img_wayback} alt="Timeline of this website's past." priority>
|
||||
...the{" "}
|
||||
<a href="https://web.archive.org/web/20010501000000*/jakejarvis.com" target="_blank" rel="noopener noreferrer">
|
||||
<Link
|
||||
href="https://web.archive.org/web/20010501000000*/jakejarvis.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Cringey Chronicles™
|
||||
</a>{" "}
|
||||
</Link>{" "}
|
||||
of this website's past.
|
||||
</Figure>
|
||||
|
||||
@@ -55,13 +59,11 @@ const Previously = () => (
|
||||
</code>
|
||||
...{" "}
|
||||
<Link href="/y2k/" prefetch={false}>
|
||||
<a>
|
||||
Click for the{" "}
|
||||
<strong>
|
||||
<em>FULL</em>
|
||||
</strong>{" "}
|
||||
experience anyway.
|
||||
</a>
|
||||
Click for the{" "}
|
||||
<strong>
|
||||
<em>FULL</em>
|
||||
</strong>{" "}
|
||||
experience anyway.
|
||||
</Link>
|
||||
</p>
|
||||
|
||||
@@ -73,9 +75,9 @@ const Previously = () => (
|
||||
/>
|
||||
<p className="iframe_caption">
|
||||
November 2001 (
|
||||
<a href="https://github.com/jakejarvis/my-first-website" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://github.com/jakejarvis/my-first-website" target="_blank" rel="noopener noreferrer">
|
||||
archived source
|
||||
</a>
|
||||
</Link>
|
||||
)
|
||||
</p>
|
||||
|
||||
@@ -123,9 +125,9 @@ const Previously = () => (
|
||||
|
||||
<Figure src={img_2012_09} alt="September 2012">
|
||||
September 2012 (
|
||||
<a href="https://github.com/jakejarvis/jarv.is/tree/v1" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://github.com/jakejarvis/jarv.is/tree/v1" target="_blank" rel="noopener noreferrer">
|
||||
archived source
|
||||
</a>
|
||||
</Link>
|
||||
)
|
||||
</Figure>
|
||||
|
||||
@@ -133,9 +135,9 @@ const Previously = () => (
|
||||
|
||||
<Figure src={img_2018_04} alt="April 2018">
|
||||
April 2018 (
|
||||
<a href="https://github.com/jakejarvis/jarv.is/tree/v2" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://github.com/jakejarvis/jarv.is/tree/v2" target="_blank" rel="noopener noreferrer">
|
||||
archived source
|
||||
</a>
|
||||
</Link>
|
||||
)
|
||||
</Figure>
|
||||
|
||||
@@ -143,9 +145,9 @@ const Previously = () => (
|
||||
|
||||
<Figure src={img_2020_03} alt="March 2020">
|
||||
March 2020 (
|
||||
<a href="https://github.com/jakejarvis/jarv.is/tree/v3" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://github.com/jakejarvis/jarv.is/tree/v3" target="_blank" rel="noopener noreferrer">
|
||||
archived source
|
||||
</a>
|
||||
</Link>
|
||||
)
|
||||
</Figure>
|
||||
</Content>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import Link from "next/link";
|
||||
import { NextSeo } from "next-seo";
|
||||
import Content from "../components/Content/Content";
|
||||
import PageTitle from "../components/PageTitle/PageTitle";
|
||||
import Link from "../components/Link/Link";
|
||||
import Image from "../components/Image/Image";
|
||||
import IFrame from "../components/IFrame/IFrame";
|
||||
import { H2 } from "../components/Heading/Heading";
|
||||
@@ -27,33 +27,23 @@ const Privacy = () => (
|
||||
|
||||
<p>
|
||||
Pages and first-party assets on this website are served by{" "}
|
||||
<a href="https://vercel.com/" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://vercel.com/">
|
||||
<strong>▲ Vercel</strong>
|
||||
</a>
|
||||
. Refer to their{" "}
|
||||
<a href="https://vercel.com/legal/privacy-policy" target="_blank" rel="noopener noreferrer">
|
||||
privacy policy
|
||||
</a>{" "}
|
||||
for more information.
|
||||
</Link>
|
||||
. Refer to their <Link href="https://vercel.com/legal/privacy-policy">privacy policy</Link> for more
|
||||
information.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For a likely excessive level of privacy and security, this website is also mirrored on the{" "}
|
||||
<a href="https://www.torproject.org/" target="_blank" rel="noopener noreferrer">
|
||||
🧅 Tor network
|
||||
</a>{" "}
|
||||
at:
|
||||
<Link href="https://www.torproject.org/">🧅 Tor network</Link> at:
|
||||
</p>
|
||||
|
||||
<Blockquote>
|
||||
<p>
|
||||
<a
|
||||
href="http://jarvis2i2vp4j4tbxjogsnqdemnte5xhzyi7hziiyzxwge3hzmh57zad.onion"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Link href="http://jarvis2i2vp4j4tbxjogsnqdemnte5xhzyi7hziiyzxwge3hzmh57zad.onion">
|
||||
<strong>jarvis2i2vp4j4tbxjogsnqdemnte5xhzyi7hziiyzxwge3hzmh57zad.onion</strong>
|
||||
</a>
|
||||
</Link>
|
||||
</p>
|
||||
</Blockquote>
|
||||
|
||||
@@ -61,53 +51,29 @@ const Privacy = () => (
|
||||
|
||||
<p>
|
||||
A very simple hit counter on each blog post tallies an aggregate number of pageviews (i.e.{" "}
|
||||
<code>hits = hits + 1</code>) in a{" "}
|
||||
<a href="https://fauna.com/" target="_blank" rel="noopener noreferrer">
|
||||
Fauna
|
||||
</a>{" "}
|
||||
database. Individual views and identifying (or non-identifying) details are{" "}
|
||||
<strong>never stored or logged</strong>.
|
||||
<code>hits = hits + 1</code>) in a <Link href="https://fauna.com/">Fauna</Link> database. Individual views and
|
||||
identifying (or non-identifying) details are <strong>never stored or logged</strong>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The{" "}
|
||||
<a
|
||||
href="https://github.com/jakejarvis/jarv.is/blob/main/pages/api/hits.ts"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
serverless function
|
||||
</a>{" "}
|
||||
The <Link href="https://github.com/jakejarvis/jarv.is/blob/main/pages/api/hits.ts">serverless function</Link>{" "}
|
||||
and{" "}
|
||||
<a
|
||||
href="https://github.com/jakejarvis/jarv.is/blob/main/components/HitCounter/HitCounter.tsx"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Link href="https://github.com/jakejarvis/jarv.is/blob/main/components/HitCounter/HitCounter.tsx">
|
||||
client script
|
||||
</a>{" "}
|
||||
are open source, and{" "}
|
||||
<a href="https://github.com/jakejarvis/website-stats" target="_blank" rel="noopener noreferrer">
|
||||
snapshots of the database
|
||||
</a>{" "}
|
||||
</Link>{" "}
|
||||
are open source, and <Link href="https://github.com/jakejarvis/website-stats">snapshots of the database</Link>{" "}
|
||||
are public.
|
||||
</p>
|
||||
|
||||
<Image src={faunaImg} alt="The entire database schema." />
|
||||
|
||||
<p>
|
||||
<a href="https://usefathom.com/ref/ZEYG0O" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://usefathom.com/ref/ZEYG0O">
|
||||
<strong>Fathom Analytics</strong>
|
||||
</a>
|
||||
, a <em>very</em>{" "}
|
||||
<a href="https://usefathom.com/privacy-focused-web-analytics" target="_blank" rel="noopener noreferrer">
|
||||
privacy-focused
|
||||
</a>{" "}
|
||||
</Link>
|
||||
, a <em>very</em> <Link href="https://usefathom.com/privacy-focused-web-analytics">privacy-focused</Link>{" "}
|
||||
service, is also used to gain insights into referrers, search terms, etc.{" "}
|
||||
<strong>without collecting anything identifiable about you</strong>. (My{" "}
|
||||
<a href="/stats/" target="_blank" rel="noopener noreferrer">
|
||||
dashboard
|
||||
</a>{" "}
|
||||
<strong>without collecting anything identifiable about you</strong>. (My <Link href="/stats/">dashboard</Link>{" "}
|
||||
is completely public, too!)
|
||||
</p>
|
||||
|
||||
@@ -127,43 +93,25 @@ const Privacy = () => (
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<a href="https://blog.codepen.io/documentation/privacy/" target="_blank" rel="noopener noreferrer">
|
||||
CodePen
|
||||
</a>
|
||||
<Link href="https://blog.codepen.io/documentation/privacy/">CodePen</Link>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://www.facebook.com/policy.php" target="_blank" rel="noopener noreferrer">
|
||||
Facebook
|
||||
</a>
|
||||
<Link href="https://www.facebook.com/policy.php">Facebook</Link>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
href="https://docs.github.com/en/github/site-policy/github-privacy-statement"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
GitHub
|
||||
</a>
|
||||
<Link href="https://docs.github.com/en/github/site-policy/github-privacy-statement">GitHub</Link>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://soundcloud.com/pages/privacy" target="_blank" rel="noopener noreferrer">
|
||||
SoundCloud
|
||||
</a>
|
||||
<Link href="https://soundcloud.com/pages/privacy">SoundCloud</Link>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://twitter.com/en/privacy" target="_blank" rel="noopener noreferrer">
|
||||
Twitter
|
||||
</a>
|
||||
<Link href="https://twitter.com/en/privacy">Twitter</Link>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://vimeo.com/privacy" target="_blank" rel="noopener noreferrer">
|
||||
Vimeo
|
||||
</a>
|
||||
<Link href="https://vimeo.com/privacy">Vimeo</Link>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://policies.google.com/privacy" target="_blank" rel="noopener noreferrer">
|
||||
YouTube
|
||||
</a>
|
||||
<Link href="https://policies.google.com/privacy">YouTube</Link>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -171,51 +119,27 @@ const Privacy = () => (
|
||||
|
||||
<p>
|
||||
Using{" "}
|
||||
<a href="https://www.hcaptcha.com/" target="_blank" rel="noopener noreferrer">
|
||||
<Link href="https://www.hcaptcha.com/">
|
||||
<strong>hCaptcha</strong>
|
||||
</a>{" "}
|
||||
to fight bot spam on the{" "}
|
||||
<Link href="/contact/" prefetch={false}>
|
||||
<a>contact form</a>
|
||||
</Link>{" "}
|
||||
was an easy choice over seemingly unavoidable alternatives like{" "}
|
||||
<a href="https://developers.google.com/recaptcha/" target="_blank" rel="noopener noreferrer">
|
||||
reCAPTCHA
|
||||
</a>
|
||||
.
|
||||
to fight bot spam on the <Link href="/contact/">contact form</Link> was an easy choice over seemingly
|
||||
unavoidable alternatives like <Link href="https://developers.google.com/recaptcha/">reCAPTCHA</Link>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
You can refer to hCaptcha's{" "}
|
||||
<a href="https://www.hcaptcha.com/privacy" target="_blank" rel="noopener noreferrer">
|
||||
privacy policy
|
||||
</a>{" "}
|
||||
and{" "}
|
||||
<a href="https://www.hcaptcha.com/terms" target="_blank" rel="noopener noreferrer">
|
||||
terms of service
|
||||
</a>{" "}
|
||||
for more details. While some information is sent to the hCaptcha API about your behavior{" "}
|
||||
<strong>(on the contact page only)</strong>, at least you won't be helping a certain internet conglomerate{" "}
|
||||
<a
|
||||
href="https://blog.cloudflare.com/moving-from-recaptcha-to-hcaptcha/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
train their self-driving cars
|
||||
</a>
|
||||
You can refer to hCaptcha's <Link href="https://www.hcaptcha.com/privacy">privacy policy</Link> and{" "}
|
||||
<Link href="https://www.hcaptcha.com/terms">terms of service</Link> for more details. While some information is
|
||||
sent to the hCaptcha API about your behavior <strong>(on the contact page only)</strong>, at least you won't be
|
||||
helping a certain internet conglomerate{" "}
|
||||
<Link href="https://blog.cloudflare.com/moving-from-recaptcha-to-hcaptcha/">train their self-driving cars</Link>
|
||||
. 🚗
|
||||
</p>
|
||||
|
||||
<p>
|
||||
I also enabled the setting to donate 100% of my{" "}
|
||||
<a href="https://humanprotocol.org/?lng=en-US" target="_blank" rel="noopener noreferrer">
|
||||
HMT token
|
||||
</a>{" "}
|
||||
earnings to the{" "}
|
||||
<a href="https://wikimediafoundation.org/" target="_blank" rel="noopener noreferrer">
|
||||
Wikimedia Foundation
|
||||
</a>
|
||||
, for what it's worth. (A few cents, probably... 💰)
|
||||
<Link href="https://humanprotocol.org/?lng=en-US">HMT token</Link> earnings to the{" "}
|
||||
<Link href="https://wikimediafoundation.org/">Wikimedia Foundation</Link>, for what it's worth. (A few cents,
|
||||
probably... 💰)
|
||||
</p>
|
||||
</Content>
|
||||
</>
|
||||
|
||||
@@ -2,6 +2,7 @@ import { graphql } from "@octokit/graphql";
|
||||
import { NextSeo } from "next-seo";
|
||||
import Content from "../components/Content/Content";
|
||||
import PageTitle from "../components/PageTitle/PageTitle";
|
||||
import Link from "../components/Link/Link";
|
||||
import RepositoryCard from "../components/RepositoryCard/RepositoryCard";
|
||||
import type { GetStaticProps } from "next";
|
||||
import type { RepoType } from "../types";
|
||||
@@ -31,9 +32,7 @@ const Projects = ({ repos }: Props) => (
|
||||
</div>
|
||||
|
||||
<p className="view_more">
|
||||
<a href="https://github.com/jakejarvis?tab=repositories" target="_blank" rel="noopener noreferrer">
|
||||
View more on GitHub...
|
||||
</a>
|
||||
<Link href="https://github.com/jakejarvis?tab=repositories">View more on GitHub...</Link>
|
||||
</p>
|
||||
</Content>
|
||||
|
||||
@@ -57,6 +56,8 @@ const Projects = ({ repos }: Props) => (
|
||||
.view_more {
|
||||
text-align: center;
|
||||
margin-bottom: 0;
|
||||
font-size: 1.1em;
|
||||
font-weight: 500;
|
||||
}
|
||||
`}</style>
|
||||
</>
|
||||
|
||||
796
pages/uses.tsx
796
pages/uses.tsx
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user