1
mirror of https://github.com/jakejarvis/jarv.is.git synced 2025-10-30 03:56:01 -04:00

static header and footer were being re-rendered on every route change

This commit is contained in:
2022-01-06 19:58:07 -05:00
parent 66a244a9c1
commit 17375ef876
19 changed files with 2515 additions and 2572 deletions

View File

@@ -1,5 +0,0 @@
.container {
max-width: 865px;
margin: 0 auto;
display: block;
}

View File

@@ -1,26 +0,0 @@
import { NextSeo } from "next-seo";
import styles from "./Container.module.scss";
type Props = {
title?: string;
description?: string;
children: unknown;
};
const Container = ({ title, description, children }: Props) => {
return (
<>
<NextSeo
title={title}
description={description}
openGraph={{
title: title,
}}
/>
<div className={styles.container}>{children}</div>
</>
);
};
export default Container;

View File

@@ -5,6 +5,12 @@
background-color: var(--background-inner); background-color: var(--background-inner);
} }
.container {
max-width: 865px;
margin: 0 auto;
display: block;
}
@media screen and (max-width: 768px) { @media screen and (max-width: 768px) {
.main { .main {
padding: 1.25em; padding: 1.25em;

View File

@@ -1,13 +1,26 @@
import Header from "./page-header/Header"; import { NextSeo } from "next-seo";
import Footer from "./page-footer/Footer";
import styles from "./Layout.module.scss"; import styles from "./Layout.module.scss";
const Layout = ({ children }) => ( type Props = {
title?: string;
description?: string;
children: unknown;
};
const Layout = ({ title, description, children }: Props) => (
<> <>
<Header /> <NextSeo
<main className={styles.main}>{children}</main> title={title}
<Footer /> description={description}
openGraph={{
title: title,
}}
/>
<main className={styles.main}>
<div className={styles.container}>{children}</div>
</main>
</> </>
); );

View File

@@ -9,7 +9,10 @@ const ThemeToggle = ({ className = "" }) => {
// avoid hydration mismatch: // avoid hydration mismatch:
// https://github.com/pacocoursey/next-themes#avoid-hydration-mismatch // https://github.com/pacocoursey/next-themes#avoid-hydration-mismatch
useEffect(() => setMounted(true), []); useEffect(() => setMounted(true), []);
if (!mounted) return null; if (!mounted) {
// always return one of the bulbs just so there are never flashing layout shifts
return <BulbOffIcon className={`icon ${className}`} />;
}
return ( return (
<button <button

View File

@@ -3,6 +3,8 @@ import { useRouter } from "next/router";
import { ThemeProvider } from "next-themes"; import { ThemeProvider } from "next-themes";
import { DefaultSeo, SocialProfileJsonLd } from "next-seo"; import { DefaultSeo, SocialProfileJsonLd } from "next-seo";
import * as Fathom from "fathom-client"; import * as Fathom from "fathom-client";
import Header from "../components/page-header/Header";
import Footer from "../components/page-footer/Footer";
import * as config from "../lib/config"; import * as config from "../lib/config";
import type { AppProps } from "next/app"; import type { AppProps } from "next/app";
@@ -182,7 +184,9 @@ const App = ({ Component, pageProps }: AppProps) => {
/> />
<ThemeProvider> <ThemeProvider>
<Header />
<Component {...pageProps} /> <Component {...pageProps} />
<Footer />
</ThemeProvider> </ThemeProvider>
</> </>
); );

View File

@@ -1,5 +1,4 @@
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import Content from "../components/Content"; import Content from "../components/Content";
import PageTitle from "../components/page/PageTitle"; import PageTitle from "../components/page/PageTitle";
import Video from "../components/video/Video"; import Video from "../components/video/Video";
@@ -8,8 +7,7 @@ import { TapeIcon } from "../components/icons";
import thumbnail from "../public/static/images/birthday/thumb.png"; import thumbnail from "../public/static/images/birthday/thumb.png";
const Birthday = () => ( const Birthday = () => (
<Layout> <Layout
<Container
title="🎉 Cranky Birthday Boy on VHS Tape 📼" title="🎉 Cranky Birthday Boy on VHS Tape 📼"
description="The origin of my hatred for the Happy Birthday song." description="The origin of my hatred for the Happy Birthday song."
> >
@@ -40,7 +38,6 @@ const Birthday = () => (
controls={true} controls={true}
/> />
</Content> </Content>
</Container>
</Layout> </Layout>
); );

View File

@@ -1,6 +1,5 @@
import Image from "next/image"; import Image from "next/image";
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import Content from "../components/Content"; import Content from "../components/Content";
import PageTitle from "../components/page/PageTitle"; import PageTitle from "../components/page/PageTitle";
import { BotIcon } from "../components/icons"; import { BotIcon } from "../components/icons";
@@ -8,8 +7,7 @@ import { BotIcon } from "../components/icons";
import cliImg from "../public/static/images/cli/screenshot.png"; import cliImg from "../public/static/images/cli/screenshot.png";
const CLI = () => ( const CLI = () => (
<Layout> <Layout title="CLI" description="AKA, the most useless Node module ever published, in history, by anyone, ever.">
<Container title="CLI" description="AKA, the most useless Node module ever published, in history, by anyone, ever.">
<PageTitle <PageTitle
title={ title={
<> <>
@@ -84,7 +82,6 @@ const CLI = () => (
</a> </a>
</p> </p>
</Content> </Content>
</Container>
</Layout> </Layout>
); );

View File

@@ -1,12 +1,10 @@
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import PageTitle from "../components/page/PageTitle"; import PageTitle from "../components/page/PageTitle";
import ContactForm from "../components/contact/ContactForm"; import ContactForm from "../components/contact/ContactForm";
import { MailIcon, LockIcon } from "../components/icons"; import { MailIcon, LockIcon } from "../components/icons";
const Contact = () => ( const Contact = () => (
<Layout> <Layout title="Contact Me">
<Container title="Contact Me">
<PageTitle <PageTitle
title={ title={
<> <>
@@ -52,7 +50,6 @@ const Contact = () => (
white-space: normal; white-space: normal;
} }
`}</style> `}</style>
</Container>
</Layout> </Layout>
); );

View File

@@ -1,5 +1,4 @@
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import Content from "../components/Content"; import Content from "../components/Content";
import PageTitle from "../components/page/PageTitle"; import PageTitle from "../components/page/PageTitle";
import Video from "../components/video/Video"; import Video from "../components/video/Video";
@@ -7,8 +6,7 @@ import Video from "../components/video/Video";
import thumbnail from "../public/static/images/hillary/thumb.png"; import thumbnail from "../public/static/images/hillary/thumb.png";
const Hillary = () => ( const Hillary = () => (
<Layout> <Layout
<Container
title="My Brief Apperance in Hillary Clinton's DNC Video" title="My Brief Apperance in Hillary Clinton's DNC Video"
description="My brief apperance in one of Hillary Clinton's 2016 DNC convention videos on substance abuse." description="My brief apperance in one of Hillary Clinton's 2016 DNC convention videos on substance abuse."
> >
@@ -70,7 +68,6 @@ const Hillary = () => (
} }
`}</style> `}</style>
</Content> </Content>
</Container>
</Layout> </Layout>
); );

View File

@@ -2,7 +2,6 @@ import Link from "next/link";
import isAbsoluteUrl from "is-absolute-url"; import isAbsoluteUrl from "is-absolute-url";
import { colord } from "colord"; import { colord } from "colord";
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import { WaveIcon, LockIcon } from "../components/icons"; import { WaveIcon, LockIcon } from "../components/icons";
type ColorLinkProps = { type ColorLinkProps = {
@@ -42,7 +41,6 @@ const ColorLink = ({ href, title, lightColor, darkColor, external = false, child
const Index = () => ( const Index = () => (
<Layout> <Layout>
<Container>
<h1> <h1>
Hi there! I'm Jake.{" "} Hi there! I'm Jake.{" "}
<span className="wave"> <span className="wave">
@@ -378,7 +376,6 @@ const Index = () => (
} }
} }
`}</style> `}</style>
</Container>
</Layout> </Layout>
); );

View File

@@ -1,5 +1,4 @@
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import Content from "../components/Content"; import Content from "../components/Content";
import PageTitle from "../components/page/PageTitle"; import PageTitle from "../components/page/PageTitle";
import Video from "../components/video/Video"; import Video from "../components/video/Video";
@@ -8,8 +7,7 @@ import thumbnail from "../public/static/images/leo/thumb.png";
const Leo = () => ( const Leo = () => (
<> <>
<Layout> <Layout
<Container
title='Facebook App on "The Lab with Leo Laporte"' title='Facebook App on "The Lab with Leo Laporte"'
description="Powncer app featured in Leo Laporte's TechTV show." description="Powncer app featured in Leo Laporte's TechTV show."
> >
@@ -71,7 +69,6 @@ const Leo = () => (
} }
`}</style> `}</style>
</Content> </Content>
</Container>
</Layout> </Layout>
</> </>
); );

View File

@@ -1,12 +1,10 @@
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import Content from "../components/Content"; import Content from "../components/Content";
import PageTitle from "../components/page/PageTitle"; import PageTitle from "../components/page/PageTitle";
import { LicenseIcon } from "../components/icons"; import { LicenseIcon } from "../components/icons";
const License = () => ( const License = () => (
<Layout> <Layout title="License">
<Container title="License">
<PageTitle <PageTitle
title={ title={
<> <>
@@ -68,28 +66,28 @@ const License = () => (
legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other
relationship. Creative Commons makes its licenses and related information available on an "as-is" basis. relationship. Creative Commons makes its licenses and related information available on an "as-is" basis.
Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and
conditions, or any related information. Creative Commons disclaims all liability for damages resulting conditions, or any related information. Creative Commons disclaims all liability for damages resulting from
from their use to the fullest extent possible. their use to the fullest extent possible.
</em> </em>
</p> </p>
</blockquote> </blockquote>
<h3>Using Creative Commons Public Licenses</h3> <h3>Using Creative Commons Public Licenses</h3>
<p> <p>
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights
holders may use to share original works of authorship and other material subject to copyright and certain holders may use to share original works of authorship and other material subject to copyright and certain other
other rights specified in the public license below. The following considerations are for informational rights specified in the public license below. The following considerations are for informational purposes only,
purposes only, are not exhaustive, and do not form part of our licenses. are not exhaustive, and do not form part of our licenses.
</p> </p>
<ul> <ul>
<li> <li>
<p> <p>
<strong>Considerations for licensors:</strong> Our public licenses are intended for use by those <strong>Considerations for licensors:</strong> Our public licenses are intended for use by those authorized
authorized to give the public permission to use material in ways otherwise restricted by copyright and to give the public permission to use material in ways otherwise restricted by copyright and certain other
certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the
conditions of the license they choose before applying it. Licensors should also secure all rights license they choose before applying it. Licensors should also secure all rights necessary before applying
necessary before applying our licenses so that the public can reuse the material as expected. Licensors our licenses so that the public can reuse the material as expected. Licensors should clearly mark any
should clearly mark any material not subject to the license. This includes other CC-licensed material, or material not subject to the license. This includes other CC-licensed material, or material used under an
material used under an exception or limitation to copyright.{" "} exception or limitation to copyright.{" "}
<a <a
href="https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors" href="https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors"
target="_blank" target="_blank"
@@ -104,12 +102,12 @@ const License = () => (
<p> <p>
<strong>Considerations for the public:</strong> By using one of our public licenses, a licensor grants the <strong>Considerations for the public:</strong> By using one of our public licenses, a licensor grants the
public permission to use the licensed material under specified terms and conditions. If the licensor's public permission to use the licensed material under specified terms and conditions. If the licensor's
permission is not necessary for any reasonfor example, because of any applicable exception or limitation permission is not necessary for any reasonfor example, because of any applicable exception or limitation to
to copyrightthen that use is not regulated by the license. Our licenses grant only permissions under copyrightthen that use is not regulated by the license. Our licenses grant only permissions under copyright
copyright and certain other rights that a licensor has authority to grant. Use of the licensed material and certain other rights that a licensor has authority to grant. Use of the licensed material may still be
may still be restricted for other reasons, including because others have copyright or other rights in the restricted for other reasons, including because others have copyright or other rights in the material. A
material. A licensor may make special requests, such as asking that all changes be marked or described. licensor may make special requests, such as asking that all changes be marked or described. Although not
Although not required by our licenses, you are encouraged to respect those requests where reasonable.{" "} required by our licenses, you are encouraged to respect those requests where reasonable.{" "}
<a <a
href="https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees" href="https://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees"
target="_blank" target="_blank"
@@ -123,19 +121,18 @@ const License = () => (
</ul> </ul>
<h3>Licensed Rights</h3> <h3>Licensed Rights</h3>
<p> <p>
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions
conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this
extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your
consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits
consideration of benefits the Licensor receives from making the Licensed Material available under these terms the Licensor receives from making the Licensed Material available under these terms and conditions.
and conditions.
</p> </p>
<h3>Section 1 Definitions.</h3> <h3>Section 1 Definitions.</h3>
<p> <p>
a. <strong>Adapted Material</strong> means material subject to Copyright and Similar Rights that is derived a. <strong>Adapted Material</strong> means material subject to Copyright and Similar Rights that is derived from
from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged,
transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held
held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work,
performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in
timed relation with a moving image. timed relation with a moving image.
</p> </p>
@@ -159,13 +156,13 @@ const License = () => (
limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
</p> </p>
<p> <p>
f. <strong>Licensed Material</strong> means the artistic or literary work, database, or other material to f. <strong>Licensed Material</strong> means the artistic or literary work, database, or other material to which
which the Licensor applied this Public License. the Licensor applied this Public License.
</p> </p>
<p> <p>
g. <strong>Licensed Rights</strong> means the rights granted to You subject to the terms and conditions of g. <strong>Licensed Rights</strong> means the rights granted to You subject to the terms and conditions of this
this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed
Licensed Material and that the Licensor has authority to license. Material and that the Licensor has authority to license.
</p> </p>
<p> <p>
h. <strong>Licensor</strong> means the individual(s) or entity(ies) granting rights under this Public License. h. <strong>Licensor</strong> means the individual(s) or entity(ies) granting rights under this Public License.
@@ -178,12 +175,12 @@ const License = () => (
</p> </p>
<p> <p>
j. <strong>Sui Generis Database Rights</strong> means rights other than copyright resulting from Directive j. <strong>Sui Generis Database Rights</strong> means rights other than copyright resulting from Directive
96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as
as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
</p> </p>
<p> <p>
k. <strong>You</strong> means the individual or entity exercising the Licensed Rights under this Public k. <strong>You</strong> means the individual or entity exercising the Licensed Rights under this Public License.{" "}
License. <strong>Your</strong> has a corresponding meaning. <strong>Your</strong> has a corresponding meaning.
</p> </p>
<h3>Section 2 Scope.</h3> <h3>Section 2 Scope.</h3>
<p> <p>
@@ -216,13 +213,13 @@ const License = () => (
</li> </li>
<li> <li>
<p> <p>
<strong>Media and formats; technical modifications allowed.</strong> The Licensor authorizes You to <strong>Media and formats; technical modifications allowed.</strong> The Licensor authorizes You to exercise
exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical
technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to
authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, forbid You from making technical modifications necessary to exercise the Licensed Rights, including
including technical modifications necessary to circumvent Effective Technological Measures. For purposes technical modifications necessary to circumvent Effective Technological Measures. For purposes of this
of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted
Adapted Material. Material.
</p> </p>
</li> </li>
<li> <li>
@@ -236,16 +233,16 @@ const License = () => (
</p> </p>
<p> <p>
B. <strong>No downstream restrictions.</strong> You may not offer or impose any additional or different B. <strong>No downstream restrictions.</strong> You may not offer or impose any additional or different
terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so
so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
</p> </p>
</li> </li>
<li> <li>
<p> <p>
<strong>No endorsement.</strong> Nothing in this Public License constitutes or may be construed as <strong>No endorsement.</strong> Nothing in this Public License constitutes or may be construed as
permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or
or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution
attribution as provided in Section 3(a)(1)(A)(i). as provided in Section 3(a)(1)(A)(i).
</p> </p>
</li> </li>
</ol> </ol>
@@ -258,10 +255,10 @@ const License = () => (
<ol> <ol>
<li> <li>
<p> <p>
Moral rights, such as the right of integrity, are not licensed under this Public License, nor are Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity,
publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives
waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow
allow You to exercise the Licensed Rights, but not otherwise. You to exercise the Licensed Rights, but not otherwise.
</p> </p>
</li> </li>
<li> <li>
@@ -269,10 +266,10 @@ const License = () => (
</li> </li>
<li> <li>
<p> <p>
To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the
the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory
statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such
collect such royalties. royalties.
</p> </p>
</li> </li>
</ol> </ol>
@@ -301,8 +298,8 @@ const License = () => (
and and
</p> </p>
<p> <p>
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI
URI or hyperlink to, this Public License. or hyperlink to, this Public License.
</p> </p>
</li> </li>
<li> <li>
@@ -330,17 +327,17 @@ const License = () => (
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
</p> </p>
<p> <p>
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all
all or a substantial portion of the contents of the database; or a substantial portion of the contents of the database;
</p> </p>
<p> <p>
b. if You include all or a substantial portion of the database contents in a database in which You have Sui b. if You include all or a substantial portion of the database contents in a database in which You have Sui
Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual
individual contents) is Adapted Material; and contents) is Adapted Material; and
</p> </p>
<p> <p>
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents
contents of the database. of the database.
</p> </p>
<p> <p>
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public
@@ -353,20 +350,20 @@ const License = () => (
Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the
Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning
the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation,
warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or
or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where
Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
</strong> </strong>
</p> </p>
<p> <p>
b.{" "} b.{" "}
<strong> <strong>
To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without
without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive,
punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the
of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses,
expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply
not apply to You. to You.
</strong> </strong>
</p> </p>
<p> <p>
@@ -402,8 +399,8 @@ const License = () => (
<p>d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.</p> <p>d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.</p>
<h3>Section 7 Other Terms and Conditions.</h3> <h3>Section 7 Other Terms and Conditions.</h3>
<p> <p>
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless
unless expressly agreed. expressly agreed.
</p> </p>
<p> <p>
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are
@@ -433,8 +430,8 @@ const License = () => (
<blockquote> <blockquote>
<p> <p>
Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply 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 one of its public licenses to material it publishes and in those instances will be considered the "Licensor."
"Licensor." The text of the Creative Commons public licenses is dedicated to the public domain under the{" "} The text of the Creative Commons public licenses is dedicated to the public domain under the{" "}
<a <a
href="https://creativecommons.org/publicdomain/zero/1.0/legalcode" href="https://creativecommons.org/publicdomain/zero/1.0/legalcode"
target="_blank" target="_blank"
@@ -442,16 +439,16 @@ const License = () => (
> >
<em>CC0 Public Domain Dedication</em> <em>CC0 Public Domain Dedication</em>
</a> </a>
. Except for the limited purpose of indicating that material is shared under a Creative Commons public . Except for the limited purpose of indicating that material is shared under a Creative Commons public license
license or as otherwise permitted by the Creative Commons policies published at{" "} or as otherwise permitted by the Creative Commons policies published at{" "}
<a href="https://creativecommons.org/policies" target="_blank" rel="noopener noreferrer"> <a href="https://creativecommons.org/policies" target="_blank" rel="noopener noreferrer">
creativecommons.org/policies creativecommons.org/policies
</a> </a>
, Creative Commons does not authorize the use of the trademark "Creative Commons" or any other trademark or , 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 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 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 agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part
part of the public licenses. of the public licenses.
</p> </p>
<p> <p>
Creative Commons may be contacted at{" "} Creative Commons may be contacted at{" "}
@@ -462,7 +459,6 @@ const License = () => (
</p> </p>
</blockquote> </blockquote>
</Content> </Content>
</Container>
</Layout> </Layout>
); );

View File

@@ -2,7 +2,6 @@ import { MDXRemote } from "next-mdx-remote";
import { serialize } from "next-mdx-remote/serialize"; import { serialize } from "next-mdx-remote/serialize";
import { NextSeo, ArticleJsonLd } from "next-seo"; import { NextSeo, ArticleJsonLd } from "next-seo";
import Layout from "../../components/Layout"; import Layout from "../../components/Layout";
import Container from "../../components/Container";
import Content from "../../components/Content"; import Content from "../../components/Content";
import Meta from "../../components/notes/Meta"; import Meta from "../../components/notes/Meta";
import mdxComponents from "../../components/mdxComponents"; import mdxComponents from "../../components/mdxComponents";
@@ -55,14 +54,12 @@ const Note = ({ frontMatter, source }) => (
/> />
<Layout> <Layout>
<Container>
<Meta {...frontMatter} /> <Meta {...frontMatter} />
<Content> <Content>
<div className="markdown"> <div className="markdown">
<MDXRemote {...source} components={mdxComponents} /> <MDXRemote {...source} components={mdxComponents} />
</div> </div>
</Content> </Content>
</Container>
</Layout> </Layout>
</> </>
); );

View File

@@ -1,15 +1,12 @@
import { format } from "date-fns"; import { format } from "date-fns";
import Layout from "../../components/Layout"; import Layout from "../../components/Layout";
import Container from "../../components/Container";
import List from "../../components/notes/List"; import List from "../../components/notes/List";
import { getAllNotes } from "../../lib/parse-notes"; import { getAllNotes } from "../../lib/parse-notes";
import type { GetStaticProps } from "next"; import type { GetStaticProps } from "next";
const Notes = ({ notesByYear }) => ( const Notes = ({ notesByYear }) => (
<Layout> <Layout title="Notes" description="Recent posts by Jake Jarvis.">
<Container title="Notes" description="Recent posts by Jake Jarvis.">
<List notesByYear={notesByYear} /> <List notesByYear={notesByYear} />
</Container>
</Layout> </Layout>
); );

View File

@@ -2,7 +2,6 @@
import Image from "next/image"; import Image from "next/image";
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import Content from "../components/Content"; import Content from "../components/Content";
import PageTitle from "../components/page/PageTitle"; import PageTitle from "../components/page/PageTitle";
import { FloppyIcon, SirenIcon } from "../components/icons"; import { FloppyIcon, SirenIcon } from "../components/icons";
@@ -23,8 +22,7 @@ import img_2018_04 from "../public/static/images/previously/2018_04.png";
const Previously = () => ( const Previously = () => (
<> <>
<Layout> <Layout
<Container
title="Previously on..." title="Previously on..."
description="An incredibly embarrassing and somewhat painful down of this site's memory lane..." description="An incredibly embarrassing and somewhat painful down of this site's memory lane..."
> >
@@ -199,7 +197,6 @@ const Previously = () => (
</figcaption> </figcaption>
</figure> </figure>
</Content> </Content>
</Container>
</Layout> </Layout>
<style jsx global>{` <style jsx global>{`
body { body {

View File

@@ -1,7 +1,6 @@
import Image from "next/image"; import Image from "next/image";
import Link from "next/link"; import Link from "next/link";
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import Content from "../components/Content"; import Content from "../components/Content";
import PageTitle from "../components/page/PageTitle"; import PageTitle from "../components/page/PageTitle";
import { PrivacyIcon } from "../components/icons"; import { PrivacyIcon } from "../components/icons";
@@ -9,8 +8,7 @@ import { PrivacyIcon } from "../components/icons";
import faunaImg from "../public/static/images/privacy/fauna_hits.png"; import faunaImg from "../public/static/images/privacy/fauna_hits.png";
const Privacy = () => ( const Privacy = () => (
<Layout> <Layout title="Privacy">
<Container title="Privacy">
<PageTitle <PageTitle
title={ title={
<> <>
@@ -213,7 +211,6 @@ const Privacy = () => (
, for what it's worth. (A few cents, probably... 💰) , for what it's worth. (A few cents, probably... 💰)
</p> </p>
</Content> </Content>
</Container>
</Layout> </Layout>
); );

View File

@@ -1,14 +1,12 @@
import { graphql } from "@octokit/graphql"; import { graphql } from "@octokit/graphql";
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import PageTitle from "../components/page/PageTitle"; import PageTitle from "../components/page/PageTitle";
import RepoCard from "../components/projects/RepoCard"; import RepoCard from "../components/projects/RepoCard";
import { ProjectsIcon } from "../components/icons"; import { ProjectsIcon } from "../components/icons";
import type { GetStaticProps } from "next"; import type { GetStaticProps } from "next";
const Projects = ({ repos }) => ( const Projects = ({ repos }) => (
<Layout> <Layout title="Projects">
<Container title="Projects">
<PageTitle <PageTitle
title={ title={
<> <>
@@ -52,7 +50,6 @@ const Projects = ({ repos }) => (
} }
`}</style> `}</style>
</p> </p>
</Container>
</Layout> </Layout>
); );

View File

@@ -1,7 +1,6 @@
import Image from "next/image"; import Image from "next/image";
import Link from "next/link"; import Link from "next/link";
import Layout from "../components/Layout"; import Layout from "../components/Layout";
import Container from "../components/Container";
import Content from "../components/Content"; import Content from "../components/Content";
import PageTitle from "../components/page/PageTitle"; import PageTitle from "../components/page/PageTitle";
import { LaptopIcon } from "../components/icons"; import { LaptopIcon } from "../components/icons";
@@ -9,8 +8,7 @@ import { LaptopIcon } from "../components/icons";
import desktopImg from "../public/static/images/uses/bigsur.png"; import desktopImg from "../public/static/images/uses/bigsur.png";
const Uses = () => ( const Uses = () => (
<Layout> <Layout title="/uses" description="Things I use daily.">
<Container title="/uses" description="Things I use daily.">
<PageTitle <PageTitle
title={ title={
<> <>
@@ -191,11 +189,7 @@ const Uses = () => (
</a> </a>
<ul> <ul>
<li> <li>
<a <a href="https://github.com/zsh-users/zsh-autosuggestions" target="_blank" rel="noopener noreferrer">
href="https://github.com/zsh-users/zsh-autosuggestions"
target="_blank"
rel="noopener noreferrer"
>
zsh-autosuggestions zsh-autosuggestions
</a> </a>
</li> </li>
@@ -417,11 +411,7 @@ const Uses = () => (
<ul> <ul>
<li> <li>
Switched from VMware Fusion when Parallels beat them to the punch with{" "} Switched from VMware Fusion when Parallels beat them to the punch with{" "}
<a <a href="https://www.parallels.com/blogs/parallels-desktop-m1/" target="_blank" rel="noopener noreferrer">
href="https://www.parallels.com/blogs/parallels-desktop-m1/"
target="_blank"
rel="noopener noreferrer"
>
M1 support M1 support
</a> </a>
. .
@@ -434,8 +424,8 @@ const Uses = () => (
</a> </a>
<ul> <ul>
<li> <li>
For connecting to remote servers and my <a href="#home">"homelab"</a> without exposing ports to the For connecting to remote servers and my <a href="#home">"homelab"</a> without exposing ports to the world.
world. Highly recommended! Highly recommended!
</li> </li>
</ul> </ul>
</li> </li>
@@ -451,11 +441,7 @@ const Uses = () => (
<ul> <ul>
<li> <li>
Still on the $20/month{" "} Still on the $20/month{" "}
<a <a href="https://www.adobe.com/creativecloud/buy/students.html" target="_blank" rel="noopener noreferrer">
href="https://www.adobe.com/creativecloud/buy/students.html"
target="_blank"
rel="noopener noreferrer"
>
Student Plan Student Plan
</a> </a>
, somehow. 🤫 Will need to re-evaulate once I'm kicked off; it's hard to justify spending almost 3x , somehow. 🤫 Will need to re-evaulate once I'm kicked off; it's hard to justify spending almost 3x
@@ -1084,7 +1070,6 @@ const Uses = () => (
</li> </li>
</ul> </ul>
</Content> </Content>
</Container>
</Layout> </Layout>
); );