mirror of
https://github.com/jakejarvis/jarv.is.git
synced 2025-04-25 17:55:23 -04:00
restore image captions in markdown with a "clever" (messy) css hack
This commit is contained in:
parent
3388da2d50
commit
b626955731
@ -8,5 +8,5 @@ pnpm-lock.yaml
|
||||
.vercel/
|
||||
|
||||
# other
|
||||
public/
|
||||
.devcontainer/devcontainer.json
|
||||
public/.well-known/
|
||||
|
@ -19,6 +19,7 @@ import styles from "./page.module.css";
|
||||
export const dynamicParams = false;
|
||||
|
||||
// https://nextjs.org/docs/app/building-your-application/rendering/partial-prerendering#using-partial-prerendering
|
||||
// eslint-disable-next-line camelcase
|
||||
export const experimental_ppr = true;
|
||||
|
||||
export const generateStaticParams = async () => {
|
||||
|
58
app/page.tsx
58
app/page.tsx
@ -55,11 +55,46 @@ const Page = () => {
|
||||
</h2>
|
||||
|
||||
<p>
|
||||
I specialize in{" "}
|
||||
I specialize in using{" "}
|
||||
<Link
|
||||
href="https://www.typescriptlang.org/"
|
||||
title="TypeScript Official Website"
|
||||
lightColor="#235a97"
|
||||
darkColor="#59a8ff"
|
||||
>
|
||||
TypeScript
|
||||
</Link>
|
||||
,{" "}
|
||||
<Link href="https://reactjs.org/" title="React Official Website" lightColor="#1091b3" darkColor="#6fcbe3">
|
||||
React
|
||||
</Link>
|
||||
, and{" "}
|
||||
<Link href="https://nextjs.org/" title="Next.js Official Website" lightColor="#5e7693" darkColor="#a8b9c0">
|
||||
Next.js
|
||||
</Link>{" "}
|
||||
and{" "}
|
||||
to make lightweight{" "}
|
||||
<Link
|
||||
href="https://jamstack.org/glossary/jamstack/"
|
||||
title="Jamstack Glossary"
|
||||
lightColor="#04a699"
|
||||
darkColor="#08bbac"
|
||||
>
|
||||
Jamstack sites
|
||||
</Link>{" "}
|
||||
with dynamic and powerful{" "}
|
||||
<Link href="https://nodejs.org/en/" title="Node.js Official Website" lightColor="#6fbc4e" darkColor="#84d95f">
|
||||
Node
|
||||
</Link>{" "}
|
||||
backends. But I still know my way around{" "}
|
||||
<Link
|
||||
href="https://www.jetbrains.com/lp/php-25/"
|
||||
title="25 Years of PHP History"
|
||||
lightColor="#8892bf"
|
||||
darkColor="#a4afe3"
|
||||
>
|
||||
less buzzwordy
|
||||
</Link>{" "}
|
||||
stacks (and{" "}
|
||||
<Link
|
||||
href="https://timkadlec.com/remembers/2020-04-21-the-cost-of-javascript-frameworks/"
|
||||
title='"The Cost of Javascript Frameworks" by Tim Kadlec'
|
||||
@ -67,25 +102,8 @@ const Page = () => {
|
||||
darkColor="#e18431"
|
||||
>
|
||||
vanilla JavaScript
|
||||
</Link>{" "}
|
||||
to make nifty{" "}
|
||||
<Link href="https://jamstack.wtf/" title="WTF is Jamstack?" lightColor="#04a699" darkColor="#08bbac">
|
||||
Jamstack sites
|
||||
</Link>{" "}
|
||||
with dynamic{" "}
|
||||
<Link href="https://nodejs.org/en/" title="Node.js Official Website" lightColor="#6fbc4e" darkColor="#84d95f">
|
||||
Node.js
|
||||
</Link>{" "}
|
||||
services. But I still know my way around less buzzwordy stacks like{" "}
|
||||
<Link
|
||||
href="https://www.jetbrains.com/lp/php-25/"
|
||||
title="25 Years of PHP History"
|
||||
lightColor="#8892bf"
|
||||
darkColor="#a4afe3"
|
||||
>
|
||||
LAMP
|
||||
</Link>
|
||||
, too.
|
||||
), too.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
150
app/previously/page.mdx
Normal file
150
app/previously/page.mdx
Normal file
@ -0,0 +1,150 @@
|
||||
import PageTitle from "../../components/PageTitle";
|
||||
import { addMetadata } from "../../lib/helpers/metadata";
|
||||
|
||||
import { ComicNeue } from "../../lib/styles/fonts";
|
||||
|
||||
export const metadata = addMetadata({
|
||||
title: "Previously on...",
|
||||
description: "An incredibly embarrassing and somewhat painful trip down this site's memory lane...",
|
||||
alternates: {
|
||||
canonical: "/previously",
|
||||
},
|
||||
});
|
||||
|
||||
export const PageStyles = () => (
|
||||
<style
|
||||
// this is really, really dumb idea but f*ck it we'll do it live
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: `
|
||||
body {
|
||||
cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAZklEQVR4AWIAgn/uBT6A9uoAAwAQiIJo97/0Rgy0ANoJH8MPeEgtqwPQEACqCoQHAKECQKgAECoAhAoAoQJAqAAQxh1oPQfcW3kJpxHtL1AAHAwEwwdYiH8BIEgBTBRAAAEEEEAAG7mRt30hEhoLAAAAAElFTkSuQmCC") 2 1, auto;
|
||||
}
|
||||
a {
|
||||
cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAgMAAAAOFJJnAAAACVBMVEVHcEwAAAD///8W1S+BAAAAAXRSTlMAQObYZgAAAEdJREFUeAFjoAVghTGkHIhghMAYmQEwxlIYYxlYlSiQMQEsELUKyli1ahWYwQZjMGIwGLKQGA4QA1EYEP0rGVAZrKGhSF4BAHw/HsVwshytAAAAAElFTkSuQmCC") 16 12, auto;
|
||||
}
|
||||
main {
|
||||
font-family: ${ComicNeue.style.fontFamily}, var(--fonts-sans) !important;
|
||||
font-weight: 700 !important;
|
||||
font-size: 1em !important;
|
||||
text-align: center;
|
||||
}
|
||||
main iframe + p em {
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin-top: -0.4em;
|
||||
font-style: normal;
|
||||
font-size: 0.95em;
|
||||
line-height: 1.5;
|
||||
color: var(--colors-medium);
|
||||
}
|
||||
`.trim(),
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
export const WindowsLogo = () => (
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="currentColor"
|
||||
stroke="currentColor"
|
||||
strokeWidth="0"
|
||||
viewBox="0 0 24 24"
|
||||
height="1.2em"
|
||||
width="1.2em"
|
||||
style={{
|
||||
display: "inline",
|
||||
width: "1.2em",
|
||||
height: "1.2em",
|
||||
verticalAlign: "-0.15em",
|
||||
marginRight: "0.1em",
|
||||
}}
|
||||
>
|
||||
<path d="M5.712 1.596l-.756.068-.238.55.734-.017zm1.39.927l-.978.137-.326.807.96-.12.345-.824zM4.89 3.535l-.72.05-.24.567.721-.017zm3.724.309l-1.287.068-.394.96 1.27-.052zm1.87.566l-1.579.069-.566 1.357 1.596-.088.548-1.338zm-4.188.037l-.977.153-.343.806.976-.12zm6.144.668l-1.87.135-.637 1.527 1.87-.154zm2.925.219c-.11 0-.222 0-.334.002l-.767 1.85c1.394-.03 2.52.089 3.373.38l-1.748 4.201c-.955-.304-2.082-.444-3.36-.394l-.54 1.305a8.762 8.762 0 0 1 3.365.396l-1.663 4.014c-1.257-.27-2.382-.395-3.387-.344l-.782 1.887c3.363-.446 6.348.822 9.009 3.773L24 9.23c-2.325-2.575-5.2-3.88-8.637-3.896zm-.644.002l-2.024.12-.687 1.68 2.025-.19zm-10.603.05l-.719.036-.224.566h.703l.24-.601zm3.69.397l-1.287.069-.395.959 1.27-.05zM5.54 6.3l-.994.154-.344.807.98-.121zm4.137.066l-1.58.069L7.53 7.77l1.596-.085.55-1.32zm1.955.688l-1.87.135-.636 1.527 1.887-.154zm2.282.19l-2.01.136-.7 1.682 2.04-.19.67-1.63zm-10.57.066l-.739.035-.238.564h.72l.257-.6zm3.705.293l-1.303.085-.394.96 1.287-.034zm11.839.255a6.718 6.718 0 0 1 2.777 1.717l-1.75 4.237c-.617-.584-1.15-.961-1.611-1.149l-1.201-.498zM4.733 8.22l-.976.154-.344.807.961-.12.36-.841zm4.186 0l-1.594.052-.549 1.354L8.37 9.54zm1.957.668L8.99 9.04l-.619 1.508 1.87-.135.636-1.527zm2.247.275l-2.007.12-.703 1.665 2.042-.156zM2.52 9.267l-.718.033-.24.549.718-.016zm3.725.273l-1.289.07-.41.96 1.287-.03.412-1zm1.87.6l-1.596.05-.55 1.356 1.598-.084.547-1.322zm-4.186.037l-.979.136-.324.805.96-.119zm6.14.633l-1.87.154-.653 1.527 1.906-.154zm2.267.275l-2.026.12-.686 1.663 2.025-.172zm-10.569.031l-.739.037-.238.565.72-.016zm3.673.362l-1.289.068-.41.978 1.305-.05zm-2.285.533l-.976.154-.326.805.96-.12.342-.84zm4.153.07l-1.596.066-.565 1.356 1.612-.084zm1.957.666l-1.889.154-.617 1.526 1.886-.15zm2.28.223l-2.025.12-.685 1.665 2.041-.172.67-1.613zm-10.584.05l-.738.053L0 13.64l.72-.02.24-.6zm3.705.31l-1.285.07-.395.976 1.287-.05.393-.997zm11.923.07c1.08.29 2.024.821 2.814 1.613l-1.715 4.183c-.892-.754-1.82-1.32-2.814-1.664l1.715-4.133zm-10.036.515L4.956 14l-.549 1.32 1.578-.066.567-1.338zm-4.184.014l-.996.156-.309.79.961-.106zm6.14.67l-1.904.154-.617 1.527 1.89-.154.632-1.527zm2.231.324l-2.025.123-.686 1.682 2.026-.174zm-6.863.328l-1.3.068-.397.98 1.285-.054zm1.871.584l-1.578.068-.566 1.334 1.595-.064zm1.953.701l-1.867.137-.635 1.51 1.87-.137zm2.23.31l-2.005.122-.703 1.68 2.04-.19.67-1.61z" />
|
||||
</svg>
|
||||
);
|
||||
|
||||
<PageStyles />
|
||||
|
||||
<PageTitle canonical="/previously">Previously</PageTitle>
|
||||
|
||||

|
||||
_Previously on the [Cringey Chronicles™](https://web.archive.org/web/20010501000000*/jakejarvis.com) of this website's past..._
|
||||
|
||||
---
|
||||
|
||||
🚨 Trigger warning: excessive marquees, animated GIFs, Comic Sans, popups, <code style={{ fontWeight: "normal", fontSize: "0.9em" }}>color: <span style={{ color: "#32cd32" }}>limegreen</span></code> ahead...
|
||||
|
||||
[<WindowsLogo /> Click here for the _full_ experience anyway.](/y2k)
|
||||
|
||||
<iframe
|
||||
src="https://jakejarvis.github.io/my-first-website/"
|
||||
title="My Terrible, Horrible, No Good, Very Bad First Website"
|
||||
style={{ height: "500px", width: "100%", marginBottom: "-0.4em" }}
|
||||
/>
|
||||
_[November 2001](https://jakejarvis.github.io/my-first-website/) ([view
|
||||
source](https://github.com/jakejarvis/my-first-website))_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_February 2002_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_October 2002_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_August 2003_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_November 2004_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_April 2006_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_May 2006_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_January 2007_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_April 2007_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_May 2007_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_July 2009_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_[September 2012](https://focused-knuth-7bc10d.netlify.app/) ([view source](https://github.com/jakejarvis/jarv.is/tree/v1))_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_[April 2018](https://hungry-mayer-40e790.netlify.app/) ([view source](https://github.com/jakejarvis/jarv.is/tree/v2))_
|
||||
|
||||
---
|
||||
|
||||

|
||||
_[March 2020](https://quiet-truffle-92842d.netlify.app/) ([view source](https://github.com/jakejarvis/jarv.is-hugo))_
|
@ -1,43 +0,0 @@
|
||||
.wackyWrapper {
|
||||
font-weight: 700;
|
||||
font-size: 1.15em;
|
||||
}
|
||||
|
||||
body:has(.wackyWrapper) {
|
||||
/* classic windows 9x cursor easter egg */
|
||||
cursor:
|
||||
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAZklEQVR4AWIAgn/uBT6A9uoAAwAQiIJo97/0Rgy0ANoJH8MPeEgtqwPQEACqCoQHAKECQKgAECoAhAoAoQJAqAAQxh1oPQfcW3kJpxHtL1AAHAwEwwdYiH8BIEgBTBRAAAEEEEAAG7mRt30hEhoLAAAAAElFTkSuQmCC")
|
||||
2 1,
|
||||
auto;
|
||||
}
|
||||
|
||||
body:has(.wackyWrapper) a {
|
||||
/* windows 9x hand cursor */
|
||||
cursor:
|
||||
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAgMAAAAOFJJnAAAACVBMVEVHcEwAAAD///8W1S+BAAAAAXRSTlMAQObYZgAAAEdJREFUeAFjoAVghTGkHIhghMAYmQEwxlIYYxlYlSiQMQEsELUKyli1ahWYwQZjMGIwGLKQGA4QA1EYEP0rGVAZrKGhSF4BAHw/HsVwshytAAAAAElFTkSuQmCC")
|
||||
16 12,
|
||||
auto;
|
||||
}
|
||||
|
||||
.iframe {
|
||||
width: 100%;
|
||||
display: block;
|
||||
margin: 0.6em 0;
|
||||
border: 2px solid var(--colors-kinda-light);
|
||||
}
|
||||
|
||||
.screenshot,
|
||||
.divider {
|
||||
margin: 1em auto;
|
||||
}
|
||||
|
||||
.screenshot figcaption {
|
||||
font-size: 0.9em;
|
||||
line-height: 1.5;
|
||||
text-align: center;
|
||||
color: var(--colors-medium);
|
||||
}
|
||||
|
||||
.screenshot:last-of-type {
|
||||
margin-bottom: 0;
|
||||
}
|
@ -1,184 +0,0 @@
|
||||
import PageTitle from "../../components/PageTitle";
|
||||
import Link from "../../components/Link";
|
||||
import Figure from "../../components/Figure";
|
||||
import HorizontalRule from "../../components/HorizontalRule";
|
||||
import { addMetadata } from "../../lib/helpers/metadata";
|
||||
|
||||
import { ComicNeue } from "../../lib/styles/fonts";
|
||||
import styles from "./page.module.css";
|
||||
|
||||
import img_wayback from "./images/wayback.png";
|
||||
import img_2002_02 from "./images/2002_02.png";
|
||||
import img_2002_10 from "./images/2002_10.png";
|
||||
import img_2003_08 from "./images/2003_08.png";
|
||||
import img_2004_11 from "./images/2004_11.png";
|
||||
import img_2006_04 from "./images/2006_04.png";
|
||||
import img_2006_05 from "./images/2006_05.png";
|
||||
import img_2007_01 from "./images/2007_01.png";
|
||||
import img_2007_04 from "./images/2007_04.png";
|
||||
import img_2007_05 from "./images/2007_05.png";
|
||||
import img_2009_07 from "./images/2009_07.png";
|
||||
import img_2012_09 from "./images/2012_09.png";
|
||||
import img_2018_04 from "./images/2018_04.png";
|
||||
import img_2020_03 from "./images/2020_03.png";
|
||||
|
||||
export const metadata = addMetadata({
|
||||
title: "Previously on...",
|
||||
description: "An incredibly embarrassing and somewhat painful trip down this site's memory lane...",
|
||||
alternates: {
|
||||
canonical: "/previously",
|
||||
},
|
||||
});
|
||||
|
||||
const Page = () => {
|
||||
return (
|
||||
<div
|
||||
className={styles.wackyWrapper}
|
||||
style={{
|
||||
fontFamily: `${ComicNeue.style.fontFamily}, var(--fonts-sans)`,
|
||||
}}
|
||||
>
|
||||
<PageTitle canonical="/previously">Previously</PageTitle>
|
||||
|
||||
<Figure src={img_wayback} alt="Timeline of this website's past." priority className={styles.screenshot}>
|
||||
...the <Link href="https://web.archive.org/web/20010501000000*/jakejarvis.com">Cringey Chronicles™</Link>{" "}
|
||||
of this website’s past.
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<p style={{ textAlign: "center", margin: "0.5em 0" }}>
|
||||
🚨 Trigger warning: excessive marquees, animated GIFs, Comic Sans, popups,{" "}
|
||||
<code
|
||||
style={{
|
||||
fontSize: "0.9em",
|
||||
fontWeight: 400,
|
||||
}}
|
||||
>
|
||||
color: <span style={{ color: "#32cd32" }}>limegreen</span>
|
||||
</code>{" "}
|
||||
ahead...
|
||||
</p>
|
||||
|
||||
<p style={{ textAlign: "center", fontSize: "0.95em", margin: "0.5em 0" }}>
|
||||
<Link href="/y2k">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
fill="currentColor"
|
||||
stroke="currentColor"
|
||||
strokeWidth="0"
|
||||
viewBox="0 0 24 24"
|
||||
height="1.2em"
|
||||
width="1.2em"
|
||||
style={{
|
||||
display: "inline",
|
||||
width: "1.2em",
|
||||
height: "1.2em",
|
||||
verticalAlign: "-0.15em",
|
||||
marginRight: "0.1em",
|
||||
}}
|
||||
>
|
||||
<path d="M5.712 1.596l-.756.068-.238.55.734-.017zm1.39.927l-.978.137-.326.807.96-.12.345-.824zM4.89 3.535l-.72.05-.24.567.721-.017zm3.724.309l-1.287.068-.394.96 1.27-.052zm1.87.566l-1.579.069-.566 1.357 1.596-.088.548-1.338zm-4.188.037l-.977.153-.343.806.976-.12zm6.144.668l-1.87.135-.637 1.527 1.87-.154zm2.925.219c-.11 0-.222 0-.334.002l-.767 1.85c1.394-.03 2.52.089 3.373.38l-1.748 4.201c-.955-.304-2.082-.444-3.36-.394l-.54 1.305a8.762 8.762 0 0 1 3.365.396l-1.663 4.014c-1.257-.27-2.382-.395-3.387-.344l-.782 1.887c3.363-.446 6.348.822 9.009 3.773L24 9.23c-2.325-2.575-5.2-3.88-8.637-3.896zm-.644.002l-2.024.12-.687 1.68 2.025-.19zm-10.603.05l-.719.036-.224.566h.703l.24-.601zm3.69.397l-1.287.069-.395.959 1.27-.05zM5.54 6.3l-.994.154-.344.807.98-.121zm4.137.066l-1.58.069L7.53 7.77l1.596-.085.55-1.32zm1.955.688l-1.87.135-.636 1.527 1.887-.154zm2.282.19l-2.01.136-.7 1.682 2.04-.19.67-1.63zm-10.57.066l-.739.035-.238.564h.72l.257-.6zm3.705.293l-1.303.085-.394.96 1.287-.034zm11.839.255a6.718 6.718 0 0 1 2.777 1.717l-1.75 4.237c-.617-.584-1.15-.961-1.611-1.149l-1.201-.498zM4.733 8.22l-.976.154-.344.807.961-.12.36-.841zm4.186 0l-1.594.052-.549 1.354L8.37 9.54zm1.957.668L8.99 9.04l-.619 1.508 1.87-.135.636-1.527zm2.247.275l-2.007.12-.703 1.665 2.042-.156zM2.52 9.267l-.718.033-.24.549.718-.016zm3.725.273l-1.289.07-.41.96 1.287-.03.412-1zm1.87.6l-1.596.05-.55 1.356 1.598-.084.547-1.322zm-4.186.037l-.979.136-.324.805.96-.119zm6.14.633l-1.87.154-.653 1.527 1.906-.154zm2.267.275l-2.026.12-.686 1.663 2.025-.172zm-10.569.031l-.739.037-.238.565.72-.016zm3.673.362l-1.289.068-.41.978 1.305-.05zm-2.285.533l-.976.154-.326.805.96-.12.342-.84zm4.153.07l-1.596.066-.565 1.356 1.612-.084zm1.957.666l-1.889.154-.617 1.526 1.886-.15zm2.28.223l-2.025.12-.685 1.665 2.041-.172.67-1.613zm-10.584.05l-.738.053L0 13.64l.72-.02.24-.6zm3.705.31l-1.285.07-.395.976 1.287-.05.393-.997zm11.923.07c1.08.29 2.024.821 2.814 1.613l-1.715 4.183c-.892-.754-1.82-1.32-2.814-1.664l1.715-4.133zm-10.036.515L4.956 14l-.549 1.32 1.578-.066.567-1.338zm-4.184.014l-.996.156-.309.79.961-.106zm6.14.67l-1.904.154-.617 1.527 1.89-.154.632-1.527zm2.231.324l-2.025.123-.686 1.682 2.026-.174zm-6.863.328l-1.3.068-.397.98 1.285-.054zm1.871.584l-1.578.068-.566 1.334 1.595-.064zm1.953.701l-1.867.137-.635 1.51 1.87-.137zm2.23.31l-2.005.122-.703 1.68 2.04-.19.67-1.61z" />
|
||||
</svg>{" "}
|
||||
Click here for the <em>full</em> experience anyway.
|
||||
</Link>
|
||||
</p>
|
||||
|
||||
<figure className={styles.screenshot}>
|
||||
<iframe
|
||||
src="https://jakejarvis.github.io/my-first-website/"
|
||||
title="My Terrible, Horrible, No Good, Very Bad First Website"
|
||||
className={styles.iframe}
|
||||
style={{ height: "500px" }}
|
||||
/>
|
||||
<figcaption>
|
||||
<Link href="https://jakejarvis.github.io/my-first-website/">November 2001</Link> (
|
||||
<Link href="https://github.com/jakejarvis/my-first-website">view source</Link>)
|
||||
</figcaption>
|
||||
</figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2002_02} className={styles.screenshot}>
|
||||
February 2002
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2002_10} className={styles.screenshot}>
|
||||
October 2002
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2003_08} className={styles.screenshot}>
|
||||
August 2003
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2004_11} className={styles.screenshot}>
|
||||
November 2004
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2006_04} className={styles.screenshot}>
|
||||
April 2006
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2006_05} className={styles.screenshot}>
|
||||
May 2006
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2007_01} className={styles.screenshot}>
|
||||
January 2007
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2007_04} className={styles.screenshot}>
|
||||
April 2007
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2007_05} className={styles.screenshot}>
|
||||
May 2007
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2009_07} className={styles.screenshot}>
|
||||
July 2009
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2012_09} alt="September 2012" className={styles.screenshot}>
|
||||
<Link href="https://focused-knuth-7bc10d.netlify.app/">September 2012</Link> (
|
||||
<Link href="https://github.com/jakejarvis/jarv.is/tree/v1">view source</Link>)
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2018_04} alt="April 2018" className={styles.screenshot}>
|
||||
<Link href="https://hungry-mayer-40e790.netlify.app/">April 2018</Link> (
|
||||
<Link href="https://github.com/jakejarvis/jarv.is/tree/v2">view source</Link>)
|
||||
</Figure>
|
||||
|
||||
<HorizontalRule className={styles.divider} />
|
||||
|
||||
<Figure src={img_2020_03} alt="March 2020" className={styles.screenshot}>
|
||||
<Link href="https://quiet-truffle-92842d.netlify.app/">March 2020</Link> (
|
||||
<Link href="https://github.com/jakejarvis/jarv.is-hugo">view source</Link>)
|
||||
</Figure>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default Page;
|
@ -1,11 +0,0 @@
|
||||
.figure {
|
||||
margin: 1em auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.caption {
|
||||
font-size: 0.9em;
|
||||
line-height: 1.5;
|
||||
color: var(--colors-medium);
|
||||
margin-top: -0.4em;
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
import innerText from "react-innertext";
|
||||
import clsx from "clsx";
|
||||
import Image from "../Image";
|
||||
import type { PropsWithChildren, ComponentPropsWithoutRef } from "react";
|
||||
|
||||
import styles from "./Figure.module.css";
|
||||
|
||||
export type FigureProps = Omit<ComponentPropsWithoutRef<typeof Image>, "alt"> &
|
||||
PropsWithChildren<{
|
||||
alt?: string; // becomes optional -- pulled from plaintext-ified caption if missing
|
||||
}>;
|
||||
|
||||
const Figure = ({ children, alt, className, ...imageProps }: FigureProps) => {
|
||||
return (
|
||||
<figure className={clsx(styles.figure, className)}>
|
||||
<Image alt={alt || innerText(children)} {...imageProps} />
|
||||
<figcaption className={styles.caption}>{children}</figcaption>
|
||||
</figure>
|
||||
);
|
||||
};
|
||||
|
||||
export default Figure;
|
@ -1,2 +0,0 @@
|
||||
export * from "./Figure";
|
||||
export { default } from "./Figure";
|
@ -4,3 +4,14 @@
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/* weird hack to enable image captions in markdown */
|
||||
.image + em {
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin-top: -0.4em;
|
||||
font-style: normal;
|
||||
font-size: 0.95em;
|
||||
line-height: 1.5;
|
||||
color: var(--colors-medium);
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
.link {
|
||||
display: inline-block;
|
||||
color: var(--colors-medium-dark) !important;
|
||||
padding: 0.6em;
|
||||
padding: 0.6em !important;
|
||||
}
|
||||
|
||||
/* indicate active page/section */
|
||||
|
@ -3,6 +3,7 @@
|
||||
margin-bottom: 0.6em;
|
||||
font-size: 2em;
|
||||
font-weight: 500;
|
||||
text-align: left;
|
||||
text-transform: lowercase;
|
||||
}
|
||||
|
||||
|
@ -35,7 +35,6 @@ export default [
|
||||
{
|
||||
files: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
|
||||
rules: {
|
||||
camelcase: "off",
|
||||
"@typescript-eslint/ban-ts-comment": "off",
|
||||
"@typescript-eslint/no-explicit-any": "warn",
|
||||
"react-compiler/react-compiler": "error",
|
||||
|
@ -3,9 +3,9 @@ export const siteName = "Jake Jarvis";
|
||||
export const siteLocale = "en-US";
|
||||
export const timeZone = "America/New_York"; // https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
|
||||
export const onionDomain = "jarvis2i2vp4j4tbxjogsnqdemnte5xhzyi7hziiyzxwge3hzmh57zad.onion";
|
||||
export const shortDescription = "Front-End Web Developer in Boston, MA";
|
||||
export const shortDescription = "Frontend Web Developer in Boston, MA";
|
||||
export const longDescription =
|
||||
"Hi there! I'm a frontend web developer based in Boston, Massachusetts specializing in the JAMstack, modern JavaScript frameworks, and progressive web apps.";
|
||||
"Hi there! I'm a frontend web developer based in Boston, Massachusetts specializing in TypeScript, React, Next.js, and other JavaScript frameworks.";
|
||||
export const license = "Creative Commons Attribution 4.0 International";
|
||||
export const licenseAbbr = "CC-BY-4.0";
|
||||
export const licenseUrl = "https://creativecommons.org/licenses/by/4.0/";
|
||||
|
@ -7,7 +7,6 @@ import Blockquote from "./components/Blockquote";
|
||||
import HorizontalRule from "./components/HorizontalRule";
|
||||
import * as Heading from "./components/Heading";
|
||||
import * as List from "./components/List";
|
||||
import Figure from "./components/Figure";
|
||||
import Video from "./components/Video";
|
||||
import Tweet from "./components/Tweet";
|
||||
import YouTube from "./components/YouTube";
|
||||
@ -34,8 +33,7 @@ export const useMDXComponents = (components: MDXComponents): MDXComponents => {
|
||||
ol: List.OrderedList,
|
||||
li: List.ListItem,
|
||||
|
||||
// html components with custom props:
|
||||
Figure,
|
||||
// html components with a slight twist:
|
||||
Video,
|
||||
|
||||
// third-party embeds:
|
||||
|
@ -28,11 +28,12 @@ const nextConfig: NextConfig = {
|
||||
],
|
||||
},
|
||||
experimental: {
|
||||
reactCompiler: true, // https://react.dev/learn/react-compiler
|
||||
ppr: "incremental", // https://nextjs.org/docs/app/building-your-application/rendering/partial-prerendering#using-partial-prerendering
|
||||
serverActions: {
|
||||
allowedOrigins: ["jarv.is", "jarvis2i2vp4j4tbxjogsnqdemnte5xhzyi7hziiyzxwge3hzmh57zad.onion"],
|
||||
},
|
||||
reactCompiler: true, // https://react.dev/learn/react-compiler
|
||||
ppr: "incremental", // https://nextjs.org/docs/app/building-your-application/rendering/partial-prerendering#using-partial-prerendering
|
||||
serverSourceMaps: true,
|
||||
},
|
||||
eslint: {
|
||||
// https://nextjs.org/docs/basic-features/eslint#linting-custom-directories-and-files
|
||||
|
@ -62,18 +62,19 @@ Defenders of the BERN app have pointed out that the information used is already
|
||||
There were even unverified claims that [BERN was leaking voter ID numbers](https://info.idagent.com/blog/bern-app-exposes-150m-voter-records), which are the same as one's driver's license ID numbers in some states, through JSON responses in the first few days after its release. There don't be appear to be strict rate limits on calls to the API either, potentially inviting malicious actors from around the world — wink wink — to scrape personal data on tens of millions of Americans en masse.
|
||||
|
||||

|
||||
_BERN's API response in Chrome DevTools_
|
||||
|
||||
Others have noted that web-based organizing tools like BERN have been used by campaigns at all levels since President Obama's well-oiled, futuristic machine in 2007. This is also true, and I'm a big fan of the trend they started.
|
||||
|
||||
But the latter category of databases — like [NationBuilder](https://nationbuilder.com/) and, more notably, [NGP VAN's VoteBuilder](https://act.ngpvan.com/votebuilder) software based on the Obama campaign's inventions and now used by almost all Democratic campaigns across the United States — are secured and strictly guarded. Volunteer accounts need to be created and approved by paid campaign organizers and are locked down to provide the bare minimum amount of information necessary for one to canvass or phone bank a shortlist of voters. Every single click is also recorded in a [detailed log](/static/bernie-sanders-bern-app-data/sanders-campaign-audit.pdf) down to the millisecond. (This is how [Bernie's organizers got busted](https://time.com/4155185/bernie-sanders-hillary-clinton-data/) snooping around Hillary's VoteBuilder data last cycle, by the way.)
|
||||
|
||||

|
||||

|
||||
_[NGP VAN's audit of the Sanders campaign's VoteBuilder activity](/static/bernie-sanders-bern-app-data/sanders-campaign-audit.pdf)_
|
||||
|
||||
BERN is taking this to an unprecedented level. Allowing anybody on the internet to sign up and add others' personal information to the campaign's database without their knowledge is troubling, especially when you consider the gamified "points" system they've added as an incentive to report as much information on as many people as possible.
|
||||
|
||||

|
||||

|
||||
_[BERN discussion on /r/SandersForPresident thread](https://www.reddit.com/r/SandersForPresident/comments/bi15la/new_get_the_official_bernie_sanders_2020_app_bern/elxi85m/)_
|
||||
|
||||
In addition to the points system, it was revealed in the webinar mentioned above that the campaign is planning on giving out shiny rewards based on how many friends one adds, setting expectations at 50+ contacts to reach the "Bernie Super Bundler" tier — whatever that means.
|
||||
|
||||
|
@ -16,6 +16,7 @@ image: ./email.png
|
||||
I've been a loyal Dropbox user since its inception as a [Y Combinator startup](https://www.ycombinator.com/apply/dropbox/) ten years ago. Having a folder on all of my devices that instantly synchronized with each other was a game-changer for me, and I grew dependent on it more and more as they gave out free storage like candy — 48 GB for having a Samsung Chromebook, 1 GB for "Posting \<3 to Twitter," and so on — until I needed to upgrade to Dropbox Pro. But this month I canceled my Pro subscription after a few too many strikes.
|
||||
|
||||

|
||||
_Deleting 401,907 files from Dropbox... 😬_
|
||||
|
||||
## Five strikes, you're out...
|
||||
|
||||
|
@ -18,8 +18,8 @@ A **subdomain takeover** occurs when a subdomain (like _example_.jarv.is) points
|
||||
|
||||
Not only are takeovers a fun way to dip your toes into [penetration testing](https://www.cloudflare.com/learning/security/glossary/what-is-penetration-testing/), but they can also be incredibly lucrative thanks to [bug bounty programs](https://en.wikipedia.org/wiki/Bug_bounty_program) on services like [HackerOne](https://hackerone.com/hacktivity?order_direction=DESC&order_field=popular&filter=type%3Aall&querystring=subdomain%20takeover) and [Bugcrowd](https://bugcrowd.com/programs), where corporations pay pentesters for their discoveries.
|
||||
|
||||

|
||||

|
||||
_[Huge rewards for subdomain takeovers on HackerOne!](https://hackerone.com/hacktivity?querystring=subdomain%20takeover)_
|
||||
|
||||
For a deep dive on the implications of takeovers, which can be a pretty serious vector of attack for malicious actors to obtain information from users of the targeted company, [Patrik Hudak](https://twitter.com/0xpatrik) wrote a [great post here](https://0xpatrik.com/subdomain-takeover/). Definitely take some time to skim through it and come back here when you're ready to hunt for a potential takeover yourself.
|
||||
|
||||
|
@ -20,6 +20,7 @@ Since being accepted into the beta for [GitHub Actions](https://github.com/featu
|
||||
My favorite so far is my [Lighthouse Audit action](https://github.com/jakejarvis/lighthouse-action), which spins up a headless Google Chrome instance in an Ubuntu container and runs [Google's Lighthouse tool](https://developers.google.com/web/tools/lighthouse), which scores webpages on performance, accessibility, SEO, etc. and provides actual suggestions to improve them. It's a perfect example of the power of combining containers with Git workflows.
|
||||
|
||||

|
||||
_The results of a Lighthouse audit on this website, after running tests in a headless Google Chrome._
|
||||
|
||||
It's also been a fantastic avenue to dip my feet into the collaborative nature of GitHub and the open-source community. I've made some small apps in the past but these are the first projects where I'm regularly receiving new issues to help out with and impressive pull requests to merge. It's a great feeling!
|
||||
|
||||
|
@ -15,6 +15,7 @@ image: ./apocalypse.png
|
||||
---
|
||||
|
||||

|
||||
_**The Cloud-pocalypse:** Coming soon(er than you think) to a server near you._
|
||||
|
||||
Last month, the founder of [a small startup](https://raisup.com/) got quite a bit of [attention on Twitter](https://twitter.com/w3Nicolas/status/1134529316904153089) (and [Hacker News](https://news.ycombinator.com/item?id=20064169)) when he called out [DigitalOcean](https://www.digitalocean.com/) who, in his words, "killed" his company. Long story short: DigitalOcean's automated abuse system flagged the startup's account after they spun up about ten powerful droplets for some CPU-intensive jobs and deleted them shortly after — which is literally **the biggest selling point** of a "servers by the hour" company like DigitalOcean, by the way — and, after replying to the support ticket, an unsympathetic customer support agent [declined to reactivate](https://twitter.com/w3Nicolas/status/1134529372172509184) the account without explanation. [Nicolas](https://twitter.com/w3Nicolas) had no way of even accessing his data, turning the inconvenient but trivial task of migrating servers into a potentially fatal situation for his company.
|
||||
|
||||
|
@ -14,6 +14,7 @@ image: ./screen-shot-2018-12-07-at-2-04-04-pm.png
|
||||
---
|
||||
|
||||

|
||||
_`df -dh` = WTF_
|
||||
|
||||
**[VMware Workstation](https://www.vmware.com/products/workstation-pro.html)** and **[Fusion](https://www.vmware.com/products/fusion.html)** normally work hard to minimize the size of virtual hard disks for optimizing the amount of storage needed on your host machine . On Windows virtual machines, [VMware has a "clean up" function](https://docs.vmware.com/en/VMware-Fusion/11/com.vmware.fusion.using.doc/GUID-6BB29187-F47F-41D1-AD92-1754036DACD9.html), which detects newly unused space and makes the size of the virtual hard disk smaller accordingly. You'll notice that even if you create a virtual machine with a capacity of 60 GB, for example, the actual size of the VMDK file will dynamically resize to fit the usage of the guest operating system. 60 GB is simply the maximum amount of storage allowed; if your guest operating system and its files amount to 20 GB, the VMDK file will simply be 20 GB.
|
||||
|
||||
|
@ -16,6 +16,7 @@ noComments: true
|
||||
---
|
||||
|
||||

|
||||
_ [Hillary for New Hampshire](https://medium.com/@HillaryForNH) Winter Fellows with [Hillary Clinton](https://medium.com/@HillaryClinton) in Derry, NH ([February 3, 2016](https://www.flickr.com/photos/hillaryclinton/24707394571/))_
|
||||
|
||||
## Keeping in mind the big picture...
|
||||
|
||||
@ -28,6 +29,7 @@ My goal here isn't to convince every Bernie believer to jump ship and support he
|
||||
After working for months as a fellow on Hillary's campaign in New Hampshire leading up to the first primary in the country, I could feed you all the standard campaign talking points in my sleep: After graduating from Yale Law she went to work at the [Children's Defense Fund](https://www.childrensdefense.org/), not a high-paying New York law firm. She [went undercover](https://www.nytimes.com/2015/12/28/us/politics/how-hillary-clinton-went-undercover-to-examine-race-in-education.html?_r=0) in Alabama to investigate discrimination in public schools. She [got juveniles out of adult prisons](https://www.huffingtonpost.com/entry/huffpost-criminal-justice-survey-democratics_us_56bb85eae4b0b40245c5038b). She [gave 8 million children healthcare](https://www.hillaryclinton.com/briefing/factsheets/2015/12/23/hillary-clintons-lifelong-fight-for-quality-affordable-health-care-for-all-americans/). But there's just one thing that, for some reason, is hard for people to believe: at her core she is a good, caring, and loving person who has had only selfless intentions her entire life. I promise you.
|
||||
|
||||

|
||||
_The best birthday gift. 🎉_
|
||||
|
||||
I had the incredible chance to meet Hillary the weekend before the New Hampshire primary. Her motorcade plowed through a quiet suburb in Manchester around noon and she hopped out to go knock on the doors of some lucky families. As neighbors started coming out of their houses to shake her hand, I couldn't restrain myself from at least trying to get close and wave hello. (By the way, it's amazing how casual the people in New Hampshire are about meeting presidential candidates.)
|
||||
|
||||
|
@ -26,6 +26,7 @@ Hopefully we can all look back at our first projects and be proud of how far we'
|
||||
---
|
||||
|
||||

|
||||
_[Jake's Bulletin Board](https://github.com/jakejarvis/jbb)_
|
||||
|
||||
Aside from my [first HTML creation](https://jakejarvis.github.io/my-first-website/) (circa 2001), my first real coding project was in 2003: a PHP 4 masterpiece creatively titled **Jake's Bulletin Board**. I've published the [source code in full on GitHub](https://github.com/jakejarvis/jbb) for your viewing pleasure and highlighted the best/worst parts below.
|
||||
|
||||
@ -155,9 +156,12 @@ while ($topic = mysql_fetch_object($result30)) {
|
||||
The installation "wizard" (that's the joke, I presume...) ([sql_submit.php](https://github.com/jakejarvis/jbb/blob/87b606797414b2fe563af85e269566fc5e076cc5/setup/sql_submit.php))
|
||||
|
||||

|
||||
_JBB Installation Wizard_
|
||||
|
||||
And finally, JBB's actual interface... or literally as much of it as I could get to function in 2019. ([index.php](https://github.com/jakejarvis/jbb/blob/87b606797414b2fe563af85e269566fc5e076cc5/index.php))
|
||||
|
||||

|
||||
_JBB Homepage_
|
||||
|
||||

|
||||
_JBB Post_
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 603 KiB |
@ -11,6 +11,7 @@ image: ./obama-laughing.jpg
|
||||
---
|
||||
|
||||

|
||||
_President Barack H. Obama, probably ranking some of these 404 pages._
|
||||
|
||||
Ever since [President Obama injected technology](https://arstechnica.com/information-technology/2012/11/built-to-win-deep-inside-obamas-campaign-tech/) into presidential politics in a historic way, one of the few bright spots of the incredibly long and exhausting race for me has been inspecting each candidate's campaign website. They end up revealing a great deal about how much each of them is willing to invest in the internet, and how young and innovative (and potentially funny) the staff members they attract are.
|
||||
|
||||
@ -26,7 +27,15 @@ I'm a _huge_ sucker for Kate McKinnon's spot-on impression of Warren on Saturday
|
||||
|
||||
Although the designer who selected this GIF likely had _thousands_ of choices when searching "[Bernie finger wagging GIF](https://www.google.com/search?q=Bernie+finger+wagging+GIF&tbm=isch&tbs=itp:animated)," the text beside it is well-written and funny — even though we both know putting a page at [berniesanders.com/zxcliaosid](https://berniesanders.com/zxcliaosid/) probably won't be a top priority of a President Sanders.
|
||||
|
||||

|
||||
<Video
|
||||
src={[
|
||||
"https://bcm6wnmyyzj1p5ls.public.blob.vercel-storage.com/videos/presidential-candidates-404-pages/sanders-2sIwomxG5hOZHATR5FyuydOOhMJlSU.webm",
|
||||
"https://bcm6wnmyyzj1p5ls.public.blob.vercel-storage.com/videos/presidential-candidates-404-pages/sanders-zBvLCRqdH6oKkntUYYq4GsvFmnU1V9.mp4",
|
||||
]}
|
||||
crossOrigin="anonymous"
|
||||
autoplay
|
||||
responsive={false}
|
||||
/>
|
||||
|
||||
## 3. Joe Biden — [joebiden.com](https://joebiden.com/asdfasdf404)
|
||||
|
||||
@ -38,13 +47,29 @@ Uncle Joe has a nice and simple 404 page. I like it, along with the Ray-Bans and
|
||||
|
||||
A ballsy move, considering Beto's infamous [DUI arrest](https://www.politifact.com/texas/statements/2019/mar/14/club-growth/beto-orourke-arrested-dwi-flee-scene/) in the '90s — but still a clever ask for a donation and a great use of a GIF, even if it's left over from his Senate campaign.
|
||||
|
||||

|
||||
<Video
|
||||
src={[
|
||||
"https://bcm6wnmyyzj1p5ls.public.blob.vercel-storage.com/videos/presidential-candidates-404-pages/orourke-Gb6r4nH8kQQMiMCSQWqzPBlUKYvXrE.webm",
|
||||
"https://bcm6wnmyyzj1p5ls.public.blob.vercel-storage.com/videos/presidential-candidates-404-pages/orourke-hDco7RvlKxwNU8FI0PoanLhUX2ws7f.mp4",
|
||||
]}
|
||||
crossOrigin="anonymous"
|
||||
autoplay
|
||||
responsive={false}
|
||||
/>
|
||||
|
||||
## 5. Kamala Harris — [kamalaharris.org](https://kamalaharris.org/asdfasdf404)
|
||||
|
||||
Another clean and simple page with a top-notch GIF. It injected some emotion into visiting [kamalaharris.com/alskdjf](https://kamalaharris.com/alskdjf).
|
||||
|
||||

|
||||
<Video
|
||||
src={[
|
||||
"https://bcm6wnmyyzj1p5ls.public.blob.vercel-storage.com/videos/presidential-candidates-404-pages/harris-B8WK3WNG68JrOm5aKOWFpGJbbWg22W.webm",
|
||||
"https://bcm6wnmyyzj1p5ls.public.blob.vercel-storage.com/videos/presidential-candidates-404-pages/harris-0Kk60PH5LXfMANg9yStHK0WFx9V1LB.mp4",
|
||||
]}
|
||||
crossOrigin="anonymous"
|
||||
autoplay
|
||||
responsive={false}
|
||||
/>
|
||||
|
||||
## 6. Pete Buttigeg — [peteforamerica.com](https://peteforamerica.com/asdfasdf404/)
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 2.0 MiB |
Binary file not shown.
Before Width: | Height: | Size: 819 KiB |
@ -14,6 +14,7 @@ image: ./security-headers.png
|
||||
---
|
||||
|
||||

|
||||
_An [A+ security grade](https://securityheaders.com/?q=jarv.is&followRedirects=on) for this website!_
|
||||
|
||||
In 2019, it's becoming more and more important to harden websites via HTTP response headers, which all modern browsers parse and enforce. Multiple standards have been introduced over the past few years to protect users from various attack vectors, including `Content-Security-Policy` for injection protection, `Strict-Transport-Security` for HTTPS enforcement, `X-XSS-Protection` for cross-site scripting prevention, `X-Content-Type-Options` to enforce correct MIME types, `Referrer-Policy` to limit information sent with external links, [and many, many more](https://www.netsparker.com/whitepaper-http-security-headers/).
|
||||
|
||||
|
@ -17,6 +17,7 @@ image: ./shodan.png
|
||||
Over time, I've collected an assortment of interesting, funny, and depressing search queries to plug into [Shodan](https://www.shodan.io/), the ([literal](https://www.vice.com/en_uk/article/9bvxmd/shodan-exposes-the-dark-side-of-the-net)) internet search engine. Some return facepalm-inducing results, while others return serious and/or ancient vulnerabilities in the wild.
|
||||
|
||||

|
||||
_[**Most search filters require a Shodan account.**](https://account.shodan.io/register)_
|
||||
|
||||
You can assume these queries only return unsecured/open instances when possible. For your own legal benefit, do not attempt to login (even with default passwords) if they aren't! Narrow down results by adding filters like `country:US` or `org:"Harvard University"` or `hostname:"nasa.gov"` to the end.
|
||||
|
||||
@ -198,6 +199,7 @@ Secured by default, thankfully, but these 1,700+ machines still [have no busines
|
||||
[Shodan Images](https://images.shodan.io/) is a great supplementary tool to browse screenshots, by the way! [🔎 →](https://images.shodan.io/?query=%22authentication+disabled%22+%21screenshot.label%3Ablank)
|
||||
|
||||

|
||||
_The first result right now. 😞_
|
||||
|
||||
### Windows RDP [🔎 →](https://www.shodan.io/search?query=%22%5Cx03%5Cx00%5Cx00%5Cx0b%5Cx06%5Cxd0%5Cx00%5Cx00%5Cx124%5Cx00%22)
|
||||
|
||||
|
@ -14,9 +14,10 @@ image: ./screenshot.png
|
||||
|
||||
A few months ago, I stumbled upon [my first website ever](https://jakejarvis.github.io/my-first-website/) on an old floppy disk. Despite the instant cringing, I [uploaded it](https://github.com/jakejarvis/my-first-website) to GitHub, [collected other iterations](/previously/), and made an [#awesome-list](https://github.com/jakejarvis/awesome-first-code) of others who were brave and/or shameless enough to do the same. But why not take that ~~one~~ 1,000 steps further?
|
||||
|
||||
Introducing the [**Y2K Sandbox**](/y2k/) — with fully-featured, fully-isolated, on-demand [**Windows Millennium Edition®**](https://www.youtube.com/watch?v=CaNDeyYP98A) virtual machines, simply to experience my first website in its natural Internet Explorer 5 habitat. And maybe play some [3D Pinball: Space Cadet](https://en.wikipedia.org/wiki/Full_Tilt!_Pinball#3D_Pinball_for_Windows_%E2%80%93_Space_Cadet). Oh, and [Microsoft Bob](https://en.wikipedia.org/wiki/Microsoft_Bob) is there too if you want to say hello and catch up. 🤓
|
||||
Introducing the [**Y2K Sandbox**](/y2k) — with fully-featured, fully-isolated, on-demand [**Windows Millennium Edition®**](https://www.youtube.com/watch?v=CaNDeyYP98A) virtual machines, simply to experience my first website in its natural Internet Explorer 5 habitat. And maybe play some [3D Pinball: Space Cadet](https://en.wikipedia.org/wiki/Full_Tilt!_Pinball#3D_Pinball_for_Windows_%E2%80%93_Space_Cadet). Oh, and [Microsoft Bob](https://en.wikipedia.org/wiki/Microsoft_Bob) is there too if you want to say hello and catch up. 🤓
|
||||
|
||||

|
||||
_[**Play in the Y2K Sandbox, at your own risk.**](/y2k)_
|
||||
|
||||
The backend is powered by [**QEMU**](https://www.qemu.org/) (as a Pentium III emulator) inside isolated **Docker** containers, [**websocketd**](https://github.com/joewalnes/websocketd) (an **_awesome_** lightweight WebSockets server written in Go), and [**Cloudflare Tunnels**](https://www.cloudflare.com/products/tunnel/) (for some protection), all tied together with some [Ruby code](https://github.com/jakejarvis/y2k/blob/main/container/bin/boot.rb) and [shell scripts](https://github.com/jakejarvis/y2k/tree/main/host). ~~I'll push the backend scripts up to GitHub once I have a chance to untangle the spaghetti code. 🍝~~
|
||||
|
||||
@ -27,6 +28,7 @@ The frontend is _much_ simpler with [a few lines of JavaScript](https://github.c
|
||||
I must give credit to both [charlie.bz](https://charlie.bz/) and [benjojo.co.uk](https://benjojo.co.uk/), similar websites I was enamored with when they were posted on Hacker News a few years ago. Think we'll see some websites like these with Windows 29 in a decade?
|
||||
|
||||

|
||||
_**@microsoft** Please don't sue me._
|
||||
|
||||
Feel free to [open an issue on GitHub](https://github.com/jakejarvis/y2k/issues) if you run into connection glitches or have any nostalgic inspiration for software you think would be cool to install persistently on the OS image. I certainly can't help with any actual Windows Me crashes, though — it was beyond help a long, long time ago. Like, [the day it came out](https://books.google.com/books?id=Jbft8HXJZwQC&lpg=PP1&pg=PA76#v=onepage&q&f=false). But it will always have a soft spot in my heart.
|
||||
|
||||
|
16
package.json
16
package.json
@ -22,9 +22,9 @@
|
||||
"@giscus/react": "^3.1.0",
|
||||
"@mdx-js/loader": "^3.1.0",
|
||||
"@mdx-js/react": "^3.1.0",
|
||||
"@next/bundle-analyzer": "15.3.0-canary.14",
|
||||
"@next/mdx": "15.3.0-canary.14",
|
||||
"@next/third-parties": "15.3.0-canary.14",
|
||||
"@next/bundle-analyzer": "15.3.0-canary.15",
|
||||
"@next/mdx": "15.3.0-canary.15",
|
||||
"@next/third-parties": "15.3.0-canary.15",
|
||||
"@octokit/graphql": "^8.2.1",
|
||||
"@octokit/graphql-schema": "^15.26.0",
|
||||
"@prisma/client": "^6.5.0",
|
||||
@ -38,15 +38,15 @@
|
||||
"html-entities": "^2.5.2",
|
||||
"lucide-react": "0.483.0",
|
||||
"modern-normalize": "^3.0.1",
|
||||
"next": "15.3.0-canary.14",
|
||||
"next": "15.3.0-canary.15",
|
||||
"obj-str": "^1.1.0",
|
||||
"polished": "^4.3.1",
|
||||
"prop-types": "^15.8.1",
|
||||
"react": "19.0.0-beta-26f2496093-20240514",
|
||||
"react-dom": "19.0.0-beta-26f2496093-20240514",
|
||||
"react": "19.0.0",
|
||||
"react-dom": "19.0.0",
|
||||
"react-error-boundary": "^5.0.0",
|
||||
"react-innertext": "^1.1.5",
|
||||
"react-is": "19.0.0-beta-26f2496093-20240514",
|
||||
"react-is": "19.0.0",
|
||||
"react-textarea-autosize": "^8.5.8",
|
||||
"react-turnstile": "^1.1.4",
|
||||
"react-tweet": "^3.2.2",
|
||||
@ -81,7 +81,7 @@
|
||||
"babel-plugin-react-compiler": "19.0.0-beta-3229e95-20250315",
|
||||
"cross-env": "^7.0.3",
|
||||
"eslint": "^9.22.0",
|
||||
"eslint-config-next": "15.3.0-canary.14",
|
||||
"eslint-config-next": "15.3.0-canary.15",
|
||||
"eslint-config-prettier": "^10.1.1",
|
||||
"eslint-plugin-css-modules": "^2.12.0",
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
|
290
pnpm-lock.yaml
generated
290
pnpm-lock.yaml
generated
@ -13,22 +13,22 @@ importers:
|
||||
version: 0.9.2
|
||||
'@giscus/react':
|
||||
specifier: ^3.1.0
|
||||
version: 3.1.0(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)
|
||||
version: 3.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
'@mdx-js/loader':
|
||||
specifier: ^3.1.0
|
||||
version: 3.1.0(acorn@8.14.1)
|
||||
'@mdx-js/react':
|
||||
specifier: ^3.1.0
|
||||
version: 3.1.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514)
|
||||
version: 3.1.0(@types/react@19.0.12)(react@19.0.0)
|
||||
'@next/bundle-analyzer':
|
||||
specifier: 15.3.0-canary.14
|
||||
version: 15.3.0-canary.14
|
||||
specifier: 15.3.0-canary.15
|
||||
version: 15.3.0-canary.15
|
||||
'@next/mdx':
|
||||
specifier: 15.3.0-canary.14
|
||||
version: 15.3.0-canary.14(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514))
|
||||
specifier: 15.3.0-canary.15
|
||||
version: 15.3.0-canary.15(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.12)(react@19.0.0))
|
||||
'@next/third-parties':
|
||||
specifier: 15.3.0-canary.14
|
||||
version: 15.3.0-canary.14(next@15.3.0-canary.14(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)
|
||||
specifier: 15.3.0-canary.15
|
||||
version: 15.3.0-canary.15(next@15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
|
||||
'@octokit/graphql':
|
||||
specifier: ^8.2.1
|
||||
version: 8.2.1
|
||||
@ -58,19 +58,19 @@ importers:
|
||||
version: 4.2.2
|
||||
geist:
|
||||
specifier: ^1.3.1
|
||||
version: 1.3.1(next@15.3.0-canary.14(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514))
|
||||
version: 1.3.1(next@15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))
|
||||
html-entities:
|
||||
specifier: ^2.5.2
|
||||
version: 2.5.2
|
||||
lucide-react:
|
||||
specifier: 0.483.0
|
||||
version: 0.483.0(react@19.0.0-beta-26f2496093-20240514)
|
||||
version: 0.483.0(react@19.0.0)
|
||||
modern-normalize:
|
||||
specifier: ^3.0.1
|
||||
version: 3.0.1
|
||||
next:
|
||||
specifier: 15.3.0-canary.14
|
||||
version: 15.3.0-canary.14(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)
|
||||
specifier: 15.3.0-canary.15
|
||||
version: 15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
obj-str:
|
||||
specifier: ^1.1.0
|
||||
version: 1.1.0
|
||||
@ -81,29 +81,29 @@ importers:
|
||||
specifier: ^15.8.1
|
||||
version: 15.8.1
|
||||
react:
|
||||
specifier: 19.0.0-beta-26f2496093-20240514
|
||||
version: 19.0.0-beta-26f2496093-20240514
|
||||
specifier: 19.0.0
|
||||
version: 19.0.0
|
||||
react-dom:
|
||||
specifier: 19.0.0-beta-26f2496093-20240514
|
||||
version: 19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514)
|
||||
specifier: 19.0.0
|
||||
version: 19.0.0(react@19.0.0)
|
||||
react-error-boundary:
|
||||
specifier: ^5.0.0
|
||||
version: 5.0.0(react@19.0.0-beta-26f2496093-20240514)
|
||||
version: 5.0.0(react@19.0.0)
|
||||
react-innertext:
|
||||
specifier: ^1.1.5
|
||||
version: 1.1.5(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514)
|
||||
version: 1.1.5(@types/react@19.0.12)(react@19.0.0)
|
||||
react-is:
|
||||
specifier: 19.0.0-beta-26f2496093-20240514
|
||||
version: 19.0.0-beta-26f2496093-20240514
|
||||
specifier: 19.0.0
|
||||
version: 19.0.0
|
||||
react-textarea-autosize:
|
||||
specifier: ^8.5.8
|
||||
version: 8.5.8(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514)
|
||||
version: 8.5.8(@types/react@19.0.12)(react@19.0.0)
|
||||
react-turnstile:
|
||||
specifier: ^1.1.4
|
||||
version: 1.1.4(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)
|
||||
version: 1.1.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
react-tweet:
|
||||
specifier: ^3.2.2
|
||||
version: 3.2.2(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)
|
||||
version: 3.2.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
rehype-mdx-import-media:
|
||||
specifier: ^1.2.0
|
||||
version: 1.2.0
|
||||
@ -142,7 +142,7 @@ importers:
|
||||
version: 3.0.2
|
||||
resend:
|
||||
specifier: ^4.1.2
|
||||
version: 4.1.2(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)
|
||||
version: 4.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
shiki:
|
||||
specifier: ^3.2.1
|
||||
version: 3.2.1
|
||||
@ -193,8 +193,8 @@ importers:
|
||||
specifier: ^9.22.0
|
||||
version: 9.22.0
|
||||
eslint-config-next:
|
||||
specifier: 15.3.0-canary.14
|
||||
version: 15.3.0-canary.14(eslint@9.22.0)(typescript@5.8.2)
|
||||
specifier: 15.3.0-canary.15
|
||||
version: 15.3.0-canary.15(eslint@9.22.0)(typescript@5.8.2)
|
||||
eslint-config-prettier:
|
||||
specifier: ^10.1.1
|
||||
version: 10.1.1(eslint@9.22.0)
|
||||
@ -786,17 +786,17 @@ packages:
|
||||
'@napi-rs/wasm-runtime@0.2.7':
|
||||
resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==}
|
||||
|
||||
'@next/bundle-analyzer@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-wv8IHGLJqReEo29TA4WJTM2Y7lnXbi6e+uc7gAoGedBxsQvp6w64S42xEeO6FwxA2SrVtyeKQYCNOInoQSy55g==}
|
||||
'@next/bundle-analyzer@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-/4XswHLT9RHMeVVfvp/9uIlglQ/feUM/ySkkBax85NJ4I1EPqwWA940dEvdTeOkFh0MBrdKJwDFZ0bUdrypgRA==}
|
||||
|
||||
'@next/env@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-wYQx9YYFuPUNtQP839fW7bPPMb7KF1q0DFO9COqsy441OyiXHyVs0BnsnhULSVpSs3FSsfRglPXFpxkVxQiq2w==}
|
||||
'@next/env@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-4++Yw9LviRI1jQwA64heWPnu6JZFXit+w4H6RhPO09eiXvGFvM3sQw0nGP3KK8sDe8HS7MnHXewu5VH4q5kq6Q==}
|
||||
|
||||
'@next/eslint-plugin-next@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-HnsmgLET9Gy2dEzscTIQvpX0EdOZ/v/XDusv2UdCGp/mxTZn0FFox41gtQVyWtfi9qhKtazrrcXl+gas/XbFwQ==}
|
||||
'@next/eslint-plugin-next@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-tHaX/opETDZtowfbeozhJ15ZQ4ZW2hmqziS1TpCTjlaoaRMV2O3BXa7xxfqPQXRXkSjeHvSQxteoAT6Ww+R1RQ==}
|
||||
|
||||
'@next/mdx@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-LzdnjV9sYOaH4YEwgVGcYorXD8uVzmnbpLEfLinAhpVul0D4I7njnB9sbjpL5cTZziqxzayhZud9IBvGXu7usg==}
|
||||
'@next/mdx@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-8FnEWwPQKqeONbhGGofB7X0hUgiDXn3nqyp1CTghg6Q7AWRq77RqsSXKQZbzS/v+rmHKRRn34i/yIvetIqxsTA==}
|
||||
peerDependencies:
|
||||
'@mdx-js/loader': '>=0.15.0'
|
||||
'@mdx-js/react': '>=0.15.0'
|
||||
@ -806,56 +806,56 @@ packages:
|
||||
'@mdx-js/react':
|
||||
optional: true
|
||||
|
||||
'@next/swc-darwin-arm64@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-23MqQNFQ1ljHZ6+onzltjDEmNXgMoXdTIOMnxpOdE4p8F45ODU2g+k0Vl4ypPwAfgqd8Ni6aI9jG7RJfubvkrg==}
|
||||
'@next/swc-darwin-arm64@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-2XwY4L2KFE17AKUXZyyTBifxuqUWRtUhk2IUsjZ9XjLhS/oZ2QGoZid3Hp0CFxKD7/7QU7ent4cK5CuIcY7HYQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@next/swc-darwin-x64@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-qFIbXnnjKqo3J5H3DhIMupmuxsf2nbwC+Kex42VVss9aCMn0Ap7zwZd/J54RIgC/gZJtP0KCqUY663xa0m/lBQ==}
|
||||
'@next/swc-darwin-x64@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-GIxcQTVlfql+yF+5y6VZJzHas7Kco/uVOgWvXj2+c0K8TLZndYgF8klg4sYX7bNj0vv7oEdrnCksNm4ijdkrvw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@next/swc-linux-arm64-gnu@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-rpC12NgJ29z8iU4s6yl6AYsMcAiuDuzMljkTnAyUuRg/ehhlDoNMseidTldAofsnbp+K0NRNDujRHc+fgjeRAA==}
|
||||
'@next/swc-linux-arm64-gnu@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-B//o+BQt0riRo6VVRpWLKy8I+dCHIhopmNpUBi6VqHlDeLaLd+TSDbuiPIs0q804bvX+aFltARlRQsnQ8cUiIg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@next/swc-linux-arm64-musl@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-I1+JUYW3R9pWP2taLJABCaYXG6RybDHv8K1La9/7RGDRciPNu3RukjoFGL4/1SbzqjgIg/rkBuN4/mJ6XwwquA==}
|
||||
'@next/swc-linux-arm64-musl@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-826hx95qA3JO84owyCjkGu+qBc2kqSqlxK3NxYHHwwbVlgBedN+jsW1u/5zKBiJ/W+sTbci2HQPF+F2Fk5JVGg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@next/swc-linux-x64-gnu@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-JiqCXhIQdMnUa+Mc3G7Ed3r9AqnLlzKO2XcGgmm/zmAzIIxU3EVn0mD830B+h4zhq9FyQDKmvj9ZZkKRVfc26w==}
|
||||
'@next/swc-linux-x64-gnu@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-iuprGTpx9ejqat7NywfTeBqX4ilyM1ZiChVFCUvtVXgXFl4npeVjdko28Cp4DqXsaid/AX+SUFwOSUaGmx0oFA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@next/swc-linux-x64-musl@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-M+4zHSgqBXTAYgZAJ0w07pYYA5Q2dALC4QBY+YWdugBRSQEIOq2xKo3WlxTbIpij5xTrL54uJZI8UBFYuHbecQ==}
|
||||
'@next/swc-linux-x64-musl@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-bysxd/stxsk2zS/wNBpRyX9gsutXTKR+WYWJqO+SWedb6Fexn76pUuTgz/UM42Una3K9bUA4B8O5hQYqmAWJbQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@next/swc-win32-arm64-msvc@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-2Jf9KI75uiRZtm27Sm3xn6xdosskabFpoZCI2q64r2ufuBx+gTgr5qZ6kIxcw9Oe/2atkWrjGXpdHNfJAxEXlA==}
|
||||
'@next/swc-win32-arm64-msvc@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-5I7jL1aFTSwTnitdYn/dMTnrmnZSI41vvKcg4qcQwotRv/H4Ro9+qSISSqXAEimvGwTDUA9d0CN4RkvLsxJriA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@next/swc-win32-x64-msvc@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-driLBL2CcZpXNdRbiLklaDOVvTmRCMhFEkJyQNK7EYhEKLH6QNaifi/NSyQrLRDhv9yfLLbVvDy7DlRiFBfWLQ==}
|
||||
'@next/swc-win32-x64-msvc@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-t4gUHjefzDlevhPTk1/1s7fi4GiVXAgnF4/FhNQHND1eLLXoj5s8Uud2WLdifDprqSClRi6J3TASLf1fuwWXtA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@next/third-parties@15.3.0-canary.14':
|
||||
resolution: {integrity: sha512-XO/GPIAquOEkyk//RaJJP3eOwfsWEv2vljAYPjuxMBYWZTBRLfjET8uHfs0wABiLe+XeV8yIPUf8DbKmKuh8RQ==}
|
||||
'@next/third-parties@15.3.0-canary.15':
|
||||
resolution: {integrity: sha512-uVfpOd58wKgsTRsEPnQnJflciSbNzBxn5Hr5WBnEs56fsBYQEUtx4hBVVfx9sSd+f2rzVeEXXfdXXDkxuBi3SA==}
|
||||
peerDependencies:
|
||||
next: ^13.0.0 || ^14.0.0 || ^15.0.0
|
||||
react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0
|
||||
@ -1703,8 +1703,8 @@ packages:
|
||||
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
eslint-config-next@15.3.0-canary.14:
|
||||
resolution: {integrity: sha512-rI2Hmkn23XrdSa4ioWctDufo/KWu7Nx5e8RPcrfu0IDZ/I7dUmAMvzWHqNavyqnOS9GwqXg2Vkfhq50JKD2BJQ==}
|
||||
eslint-config-next@15.3.0-canary.15:
|
||||
resolution: {integrity: sha512-nDZaWC8fCFp8mvVJStc4Ptdv2NotWLnONnn5FJr20razli4CgBH7gtjAdtwNCnqa1bBhz885ji8VMnSgA54yjA==}
|
||||
peerDependencies:
|
||||
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
|
||||
typescript: '>=3.3.1'
|
||||
@ -2811,8 +2811,8 @@ packages:
|
||||
natural-compare@1.4.0:
|
||||
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
||||
|
||||
next@15.3.0-canary.14:
|
||||
resolution: {integrity: sha512-YYn3Ucr7pbuvIB7iLHhhMiZ+HoDFe8ekgT7ZDuEyhPJVqodoVq2kd1VKWMNHBukNqe7HDz29SOYj/H/RA4OEGQ==}
|
||||
next@15.3.0-canary.15:
|
||||
resolution: {integrity: sha512-3RZoMEmMw93FdUSQbfgiYyNKorUDMp6OhAt8HJT2PMA/60goljOlYfEbBUukIJslGadJn5lTGvyLuCFjNDNJYQ==}
|
||||
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@ -3106,10 +3106,10 @@ packages:
|
||||
queue-microtask@1.2.3:
|
||||
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||
|
||||
react-dom@19.0.0-beta-26f2496093-20240514:
|
||||
resolution: {integrity: sha512-UvQ+K1l3DFQ34LDgfFSNuUGi9EC+yfE9tS6MdpNTd5fx7qC7KLfepfC/KpxWMQZ7JfE3axD4ZO6H4cBSpAZpqw==}
|
||||
react-dom@19.0.0:
|
||||
resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==}
|
||||
peerDependencies:
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react: ^19.0.0
|
||||
|
||||
react-error-boundary@5.0.0:
|
||||
resolution: {integrity: sha512-tnjAxG+IkpLephNcePNA7v6F/QpWLH8He65+DmedchDwg162JZqx4NmbXj0mlAYVVEd81OW7aFhmbsScYfiAFQ==}
|
||||
@ -3125,8 +3125,8 @@ packages:
|
||||
react-is@16.13.1:
|
||||
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
|
||||
|
||||
react-is@19.0.0-beta-26f2496093-20240514:
|
||||
resolution: {integrity: sha512-w5VsWOdq06F29cxg6oQy+GcGbLEd7gFOkkN9BLHWNnPIUuIo86/rGYbReTdnx5PxkHggTiFGZI+9Zy2nbRyAkQ==}
|
||||
react-is@19.0.0:
|
||||
resolution: {integrity: sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==}
|
||||
|
||||
react-promise-suspense@0.3.4:
|
||||
resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==}
|
||||
@ -3149,8 +3149,8 @@ packages:
|
||||
react: ^18.0.0 || ^19.0.0
|
||||
react-dom: ^18.0.0 || ^19.0.0
|
||||
|
||||
react@19.0.0-beta-26f2496093-20240514:
|
||||
resolution: {integrity: sha512-ZsU/WjNZ6GfzMWsq2DcGjElpV9it8JmETHm9mAJuOJNhuJcWJxt8ltCJabONFRpDFq1A/DP0d0KFj9CTJVM4VA==}
|
||||
react@19.0.0:
|
||||
resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
read-package-json-fast@3.0.2:
|
||||
@ -3328,8 +3328,8 @@ packages:
|
||||
sax@1.4.1:
|
||||
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
|
||||
|
||||
scheduler@0.25.0-beta-26f2496093-20240514:
|
||||
resolution: {integrity: sha512-vDwOytLHFnA3SW2B1lNcbO+/qKVyLCX+KLpm+tRGNDsXpyxzRgkIaYGWmX+S70AJGchUHCtuqQ50GFeFgDbXUw==}
|
||||
scheduler@0.25.0:
|
||||
resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
|
||||
|
||||
schema-dts@1.1.5:
|
||||
resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==}
|
||||
@ -4206,11 +4206,11 @@ snapshots:
|
||||
'@eslint/core': 0.12.0
|
||||
levn: 0.4.1
|
||||
|
||||
'@giscus/react@3.1.0(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)':
|
||||
'@giscus/react@3.1.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
|
||||
dependencies:
|
||||
giscus: 1.6.0
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react-dom: 19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514)
|
||||
react: 19.0.0
|
||||
react-dom: 19.0.0(react@19.0.0)
|
||||
|
||||
'@humanfs/core@0.19.1': {}
|
||||
|
||||
@ -4378,11 +4378,11 @@ snapshots:
|
||||
- acorn
|
||||
- supports-color
|
||||
|
||||
'@mdx-js/react@3.1.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514)':
|
||||
'@mdx-js/react@3.1.0(@types/react@19.0.12)(react@19.0.0)':
|
||||
dependencies:
|
||||
'@types/mdx': 2.0.13
|
||||
'@types/react': 19.0.12
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react: 19.0.0
|
||||
|
||||
'@napi-rs/wasm-runtime@0.2.7':
|
||||
dependencies:
|
||||
@ -4391,54 +4391,54 @@ snapshots:
|
||||
'@tybys/wasm-util': 0.9.0
|
||||
optional: true
|
||||
|
||||
'@next/bundle-analyzer@15.3.0-canary.14':
|
||||
'@next/bundle-analyzer@15.3.0-canary.15':
|
||||
dependencies:
|
||||
webpack-bundle-analyzer: 4.10.1
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- utf-8-validate
|
||||
|
||||
'@next/env@15.3.0-canary.14': {}
|
||||
'@next/env@15.3.0-canary.15': {}
|
||||
|
||||
'@next/eslint-plugin-next@15.3.0-canary.14':
|
||||
'@next/eslint-plugin-next@15.3.0-canary.15':
|
||||
dependencies:
|
||||
fast-glob: 3.3.1
|
||||
|
||||
'@next/mdx@15.3.0-canary.14(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514))':
|
||||
'@next/mdx@15.3.0-canary.15(@mdx-js/loader@3.1.0(acorn@8.14.1))(@mdx-js/react@3.1.0(@types/react@19.0.12)(react@19.0.0))':
|
||||
dependencies:
|
||||
source-map: 0.7.4
|
||||
optionalDependencies:
|
||||
'@mdx-js/loader': 3.1.0(acorn@8.14.1)
|
||||
'@mdx-js/react': 3.1.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514)
|
||||
'@mdx-js/react': 3.1.0(@types/react@19.0.12)(react@19.0.0)
|
||||
|
||||
'@next/swc-darwin-arm64@15.3.0-canary.14':
|
||||
'@next/swc-darwin-arm64@15.3.0-canary.15':
|
||||
optional: true
|
||||
|
||||
'@next/swc-darwin-x64@15.3.0-canary.14':
|
||||
'@next/swc-darwin-x64@15.3.0-canary.15':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-arm64-gnu@15.3.0-canary.14':
|
||||
'@next/swc-linux-arm64-gnu@15.3.0-canary.15':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-arm64-musl@15.3.0-canary.14':
|
||||
'@next/swc-linux-arm64-musl@15.3.0-canary.15':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-x64-gnu@15.3.0-canary.14':
|
||||
'@next/swc-linux-x64-gnu@15.3.0-canary.15':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-x64-musl@15.3.0-canary.14':
|
||||
'@next/swc-linux-x64-musl@15.3.0-canary.15':
|
||||
optional: true
|
||||
|
||||
'@next/swc-win32-arm64-msvc@15.3.0-canary.14':
|
||||
'@next/swc-win32-arm64-msvc@15.3.0-canary.15':
|
||||
optional: true
|
||||
|
||||
'@next/swc-win32-x64-msvc@15.3.0-canary.14':
|
||||
'@next/swc-win32-x64-msvc@15.3.0-canary.15':
|
||||
optional: true
|
||||
|
||||
'@next/third-parties@15.3.0-canary.14(next@15.3.0-canary.14(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)':
|
||||
'@next/third-parties@15.3.0-canary.15(next@15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
|
||||
dependencies:
|
||||
next: 15.3.0-canary.14(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
next: 15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
react: 19.0.0
|
||||
third-party-capital: 1.0.20
|
||||
|
||||
'@nodelib/fs.scandir@2.1.5':
|
||||
@ -4583,12 +4583,12 @@ snapshots:
|
||||
dependencies:
|
||||
'@prisma/debug': 6.5.0
|
||||
|
||||
'@react-email/render@1.0.1(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)':
|
||||
'@react-email/render@1.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
|
||||
dependencies:
|
||||
html-to-text: 9.0.5
|
||||
js-beautify: 1.15.4
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react-dom: 19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514)
|
||||
react: 19.0.0
|
||||
react-dom: 19.0.0(react@19.0.0)
|
||||
react-promise-suspense: 0.3.4
|
||||
|
||||
'@rtsao/scc@1.1.0': {}
|
||||
@ -5421,9 +5421,9 @@ snapshots:
|
||||
|
||||
escape-string-regexp@5.0.0: {}
|
||||
|
||||
eslint-config-next@15.3.0-canary.14(eslint@9.22.0)(typescript@5.8.2):
|
||||
eslint-config-next@15.3.0-canary.15(eslint@9.22.0)(typescript@5.8.2):
|
||||
dependencies:
|
||||
'@next/eslint-plugin-next': 15.3.0-canary.14
|
||||
'@next/eslint-plugin-next': 15.3.0-canary.15
|
||||
'@rushstack/eslint-patch': 1.11.0
|
||||
'@typescript-eslint/eslint-plugin': 8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.22.0)(typescript@5.8.2))(eslint@9.22.0)(typescript@5.8.2)
|
||||
'@typescript-eslint/parser': 8.27.0(eslint@9.22.0)(typescript@5.8.2)
|
||||
@ -5848,9 +5848,9 @@ snapshots:
|
||||
|
||||
functions-have-names@1.2.3: {}
|
||||
|
||||
geist@1.3.1(next@15.3.0-canary.14(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)):
|
||||
geist@1.3.1(next@15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)):
|
||||
dependencies:
|
||||
next: 15.3.0-canary.14(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)
|
||||
next: 15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
|
||||
gensync@1.0.0-beta.2: {}
|
||||
|
||||
@ -6490,9 +6490,9 @@ snapshots:
|
||||
dependencies:
|
||||
yallist: 3.1.1
|
||||
|
||||
lucide-react@0.483.0(react@19.0.0-beta-26f2496093-20240514):
|
||||
lucide-react@0.483.0(react@19.0.0):
|
||||
dependencies:
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react: 19.0.0
|
||||
|
||||
markdown-extensions@2.0.0: {}
|
||||
|
||||
@ -6997,26 +6997,26 @@ snapshots:
|
||||
|
||||
natural-compare@1.4.0: {}
|
||||
|
||||
next@15.3.0-canary.14(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514):
|
||||
next@15.3.0-canary.15(@babel/core@7.26.10)(babel-plugin-react-compiler@19.0.0-beta-3229e95-20250315)(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
|
||||
dependencies:
|
||||
'@next/env': 15.3.0-canary.14
|
||||
'@next/env': 15.3.0-canary.15
|
||||
'@swc/counter': 0.1.3
|
||||
'@swc/helpers': 0.5.15
|
||||
busboy: 1.6.0
|
||||
caniuse-lite: 1.0.30001706
|
||||
postcss: 8.4.31
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react-dom: 19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514)
|
||||
styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.0.0-beta-26f2496093-20240514)
|
||||
react: 19.0.0
|
||||
react-dom: 19.0.0(react@19.0.0)
|
||||
styled-jsx: 5.1.6(@babel/core@7.26.10)(react@19.0.0)
|
||||
optionalDependencies:
|
||||
'@next/swc-darwin-arm64': 15.3.0-canary.14
|
||||
'@next/swc-darwin-x64': 15.3.0-canary.14
|
||||
'@next/swc-linux-arm64-gnu': 15.3.0-canary.14
|
||||
'@next/swc-linux-arm64-musl': 15.3.0-canary.14
|
||||
'@next/swc-linux-x64-gnu': 15.3.0-canary.14
|
||||
'@next/swc-linux-x64-musl': 15.3.0-canary.14
|
||||
'@next/swc-win32-arm64-msvc': 15.3.0-canary.14
|
||||
'@next/swc-win32-x64-msvc': 15.3.0-canary.14
|
||||
'@next/swc-darwin-arm64': 15.3.0-canary.15
|
||||
'@next/swc-darwin-x64': 15.3.0-canary.15
|
||||
'@next/swc-linux-arm64-gnu': 15.3.0-canary.15
|
||||
'@next/swc-linux-arm64-musl': 15.3.0-canary.15
|
||||
'@next/swc-linux-x64-gnu': 15.3.0-canary.15
|
||||
'@next/swc-linux-x64-musl': 15.3.0-canary.15
|
||||
'@next/swc-win32-arm64-msvc': 15.3.0-canary.15
|
||||
'@next/swc-win32-x64-msvc': 15.3.0-canary.15
|
||||
babel-plugin-react-compiler: 19.0.0-beta-3229e95-20250315
|
||||
sharp: 0.33.5
|
||||
transitivePeerDependencies:
|
||||
@ -7304,52 +7304,52 @@ snapshots:
|
||||
|
||||
queue-microtask@1.2.3: {}
|
||||
|
||||
react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514):
|
||||
react-dom@19.0.0(react@19.0.0):
|
||||
dependencies:
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
scheduler: 0.25.0-beta-26f2496093-20240514
|
||||
react: 19.0.0
|
||||
scheduler: 0.25.0
|
||||
|
||||
react-error-boundary@5.0.0(react@19.0.0-beta-26f2496093-20240514):
|
||||
react-error-boundary@5.0.0(react@19.0.0):
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react: 19.0.0
|
||||
|
||||
react-innertext@1.1.5(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514):
|
||||
react-innertext@1.1.5(@types/react@19.0.12)(react@19.0.0):
|
||||
dependencies:
|
||||
'@types/react': 19.0.12
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react: 19.0.0
|
||||
|
||||
react-is@16.13.1: {}
|
||||
|
||||
react-is@19.0.0-beta-26f2496093-20240514: {}
|
||||
react-is@19.0.0: {}
|
||||
|
||||
react-promise-suspense@0.3.4:
|
||||
dependencies:
|
||||
fast-deep-equal: 2.0.1
|
||||
|
||||
react-textarea-autosize@8.5.8(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514):
|
||||
react-textarea-autosize@8.5.8(@types/react@19.0.12)(react@19.0.0):
|
||||
dependencies:
|
||||
'@babel/runtime': 7.26.10
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
use-composed-ref: 1.4.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514)
|
||||
use-latest: 1.3.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514)
|
||||
react: 19.0.0
|
||||
use-composed-ref: 1.4.0(@types/react@19.0.12)(react@19.0.0)
|
||||
use-latest: 1.3.0(@types/react@19.0.12)(react@19.0.0)
|
||||
transitivePeerDependencies:
|
||||
- '@types/react'
|
||||
|
||||
react-turnstile@1.1.4(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514):
|
||||
react-turnstile@1.1.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
|
||||
dependencies:
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react-dom: 19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514)
|
||||
react: 19.0.0
|
||||
react-dom: 19.0.0(react@19.0.0)
|
||||
|
||||
react-tweet@3.2.2(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514):
|
||||
react-tweet@3.2.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
|
||||
dependencies:
|
||||
'@swc/helpers': 0.5.15
|
||||
clsx: 2.1.1
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react-dom: 19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514)
|
||||
swr: 2.3.3(react@19.0.0-beta-26f2496093-20240514)
|
||||
react: 19.0.0
|
||||
react-dom: 19.0.0(react@19.0.0)
|
||||
swr: 2.3.3(react@19.0.0)
|
||||
|
||||
react@19.0.0-beta-26f2496093-20240514: {}
|
||||
react@19.0.0: {}
|
||||
|
||||
read-package-json-fast@3.0.2:
|
||||
dependencies:
|
||||
@ -7552,9 +7552,9 @@ snapshots:
|
||||
|
||||
require-from-string@2.0.2: {}
|
||||
|
||||
resend@4.1.2(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514):
|
||||
resend@4.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
|
||||
dependencies:
|
||||
'@react-email/render': 1.0.1(react-dom@19.0.0-beta-26f2496093-20240514(react@19.0.0-beta-26f2496093-20240514))(react@19.0.0-beta-26f2496093-20240514)
|
||||
'@react-email/render': 1.0.1(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
|
||||
transitivePeerDependencies:
|
||||
- react
|
||||
- react-dom
|
||||
@ -7658,7 +7658,7 @@ snapshots:
|
||||
|
||||
sax@1.4.1: {}
|
||||
|
||||
scheduler@0.25.0-beta-26f2496093-20240514: {}
|
||||
scheduler@0.25.0: {}
|
||||
|
||||
schema-dts@1.1.5: {}
|
||||
|
||||
@ -7928,10 +7928,10 @@ snapshots:
|
||||
dependencies:
|
||||
inline-style-parser: 0.2.4
|
||||
|
||||
styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.0.0-beta-26f2496093-20240514):
|
||||
styled-jsx@5.1.6(@babel/core@7.26.10)(react@19.0.0):
|
||||
dependencies:
|
||||
client-only: 0.0.1
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react: 19.0.0
|
||||
optionalDependencies:
|
||||
'@babel/core': 7.26.10
|
||||
|
||||
@ -8022,11 +8022,11 @@ snapshots:
|
||||
|
||||
svg-tags@1.0.0: {}
|
||||
|
||||
swr@2.3.3(react@19.0.0-beta-26f2496093-20240514):
|
||||
swr@2.3.3(react@19.0.0):
|
||||
dependencies:
|
||||
dequal: 2.0.3
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
use-sync-external-store: 1.4.0(react@19.0.0-beta-26f2496093-20240514)
|
||||
react: 19.0.0
|
||||
use-sync-external-store: 1.4.0(react@19.0.0)
|
||||
|
||||
synckit@0.9.2:
|
||||
dependencies:
|
||||
@ -8216,28 +8216,28 @@ snapshots:
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
|
||||
use-composed-ref@1.4.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514):
|
||||
use-composed-ref@1.4.0(@types/react@19.0.12)(react@19.0.0):
|
||||
dependencies:
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react: 19.0.0
|
||||
optionalDependencies:
|
||||
'@types/react': 19.0.12
|
||||
|
||||
use-isomorphic-layout-effect@1.2.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514):
|
||||
use-isomorphic-layout-effect@1.2.0(@types/react@19.0.12)(react@19.0.0):
|
||||
dependencies:
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react: 19.0.0
|
||||
optionalDependencies:
|
||||
'@types/react': 19.0.12
|
||||
|
||||
use-latest@1.3.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514):
|
||||
use-latest@1.3.0(@types/react@19.0.12)(react@19.0.0):
|
||||
dependencies:
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
use-isomorphic-layout-effect: 1.2.0(@types/react@19.0.12)(react@19.0.0-beta-26f2496093-20240514)
|
||||
react: 19.0.0
|
||||
use-isomorphic-layout-effect: 1.2.0(@types/react@19.0.12)(react@19.0.0)
|
||||
optionalDependencies:
|
||||
'@types/react': 19.0.12
|
||||
|
||||
use-sync-external-store@1.4.0(react@19.0.0-beta-26f2496093-20240514):
|
||||
use-sync-external-store@1.4.0(react@19.0.0):
|
||||
dependencies:
|
||||
react: 19.0.0-beta-26f2496093-20240514
|
||||
react: 19.0.0
|
||||
|
||||
util-deprecate@1.0.2: {}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user