1
mirror of https://github.com/jakejarvis/jarv.is.git synced 2025-04-26 09:05:22 -04:00

remove prisma accelerate extension

This commit is contained in:
Jake Jarvis 2025-02-14 17:26:11 -05:00
parent 5926713b9a
commit c1ed417003
Signed by: jake
SSH Key Fingerprint: SHA256:nCkvAjYA6XaSPUqc4TfbBQTpzr8Xj7ritg/sGInCdkc
9 changed files with 96 additions and 112 deletions

View File

@ -5,7 +5,7 @@
[![Licensed under CC-BY-4.0](https://img.shields.io/badge/license-CC--BY--4.0-fb7828?logo=creative-commons&logoColor=white)](LICENSE) [![Licensed under CC-BY-4.0](https://img.shields.io/badge/license-CC--BY--4.0-fb7828?logo=creative-commons&logoColor=white)](LICENSE)
[![GitHub repo size](https://img.shields.io/github/repo-size/jakejarvis/jarv.is?color=009cdf&label=repo%20size&logo=git&logoColor=white)](https://github.com/jakejarvis/jarv.is) [![GitHub repo size](https://img.shields.io/github/repo-size/jakejarvis/jarv.is?color=009cdf&label=repo%20size&logo=git&logoColor=white)](https://github.com/jakejarvis/jarv.is)
My humble abode on the World Wide Web, created and deployed using [Next.js](https://nextjs.org/), [Vercel](https://vercel.com/), [Prisma Postgres](https://www.prisma.io/postgres), [and more](https://jarv.is/humans.txt). My humble abode on the World Wide Web, created and deployed using [Next.js](https://nextjs.org/), [Vercel](https://vercel.com/), [Neon Postgres](https://neon.tech/), [Prisma](https://www.prisma.io/postgres), [and more](https://jarv.is/humans.txt).
I keep an ongoing list of [post ideas](https://github.com/jakejarvis/jarv.is/issues/1) and [coding to-dos](https://github.com/jakejarvis/jarv.is/issues/714) as issues in this repo. Outside contributions, improvements, and/or corrections are welcome too! I keep an ongoing list of [post ideas](https://github.com/jakejarvis/jarv.is/issues/1) and [coding to-dos](https://github.com/jakejarvis/jarv.is/issues/714) as issues in this repo. Outside contributions, improvements, and/or corrections are welcome too!

View File

@ -1,6 +1,6 @@
"use client"; "use client";
import { useState, useActionState } from "react"; import { useActionState } from "react";
import TextareaAutosize from "react-textarea-autosize"; import TextareaAutosize from "react-textarea-autosize";
import Turnstile from "react-turnstile"; import Turnstile from "react-turnstile";
import clsx from "clsx"; import clsx from "clsx";
@ -18,7 +18,6 @@ const ContactForm = () => {
Partial<{ success: boolean; message: string; payload: FormData }>, Partial<{ success: boolean; message: string; payload: FormData }>,
FormData FormData
>(sendMessage, {}); >(sendMessage, {});
const [turnstileToken, setTurnstileToken] = useState<string>("");
return ( return (
<form action={formAction}> <form action={formAction}>
@ -81,13 +80,11 @@ const ContactForm = () => {
<Turnstile <Turnstile
sitekey={process.env.NEXT_PUBLIC_TURNSTILE_SITE_KEY || "1x00000000000000000000AA"} sitekey={process.env.NEXT_PUBLIC_TURNSTILE_SITE_KEY || "1x00000000000000000000AA"}
onVerify={(token) => setTurnstileToken(token)}
style={{ margin: "1em 0" }} style={{ margin: "1em 0" }}
theme={activeTheme === "dark" ? activeTheme : "light"} theme={activeTheme === "dark" ? activeTheme : "light"}
fixedSize
/> />
<input type="hidden" name="cf-turnstile-response" value={turnstileToken} />
<div className={styles.actionRow}> <div className={styles.actionRow}>
{!formState.success && ( {!formState.success && (
<button type="submit" disabled={pending} className={styles.submitButton}> <button type="submit" disabled={pending} className={styles.submitButton}>

View File

@ -55,9 +55,8 @@ export default function Page() {
<p> <p>
A very simple hit counter on each blog post tallies an aggregate number of pageviews (i.e.{" "} A very simple hit counter on each blog post tallies an aggregate number of pageviews (i.e.{" "}
<CodeInline>hits = hits + 1</CodeInline>) in a{" "} <CodeInline>hits = hits + 1</CodeInline>) in a <Link href="https://neon.tech/">Neon Postgres</Link> database.
<Link href="https://www.prisma.io/postgres">Prisma Postgres</Link> database. Individual views and identifying Individual views and identifying (or non-identifying) details are <strong>never stored or logged</strong>.
(or non-identifying) details are <strong>never stored or logged</strong>.
</p> </p>
<p> <p>

View File

@ -1,12 +1,17 @@
import { PrismaClient } from "@prisma/client/edge"; import { PrismaClient } from "@prisma/client";
import { withAccelerate } from "@prisma/extension-accelerate";
// creating PrismaClient here prevents next.js from starting too many concurrent prisma instances and exhausting the // creating PrismaClient here prevents next.js from starting too many concurrent prisma instances and exhausting the
// number of connection pools available (especially when hot reloading from `next dev`). // number of connection pools available (especially when hot reloading from `next dev`).
// https://www.prisma.io/docs/guides/other/troubleshooting-orm/help-articles/nextjs-prisma-client-dev-practices // https://www.prisma.io/docs/guides/other/troubleshooting-orm/help-articles/nextjs-prisma-client-dev-practices
const globalForPrisma = global as unknown as { prisma: PrismaClient }; const prismaClientSingleton = () => {
return new PrismaClient();
};
export const prisma = globalForPrisma.prisma || new PrismaClient().$extends(withAccelerate()); declare const globalThis: {
prismaGlobal: ReturnType<typeof prismaClientSingleton>;
} & typeof global;
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma; export const prisma = globalThis.prismaGlobal ?? prismaClientSingleton();
if (process.env.NODE_ENV !== "production") globalThis.prismaGlobal = prisma;

View File

@ -22,9 +22,7 @@ image: "/static/images/notes/github-rename-master/github-default.png"
In the midst of this year's long-overdue support of the [**Black Lives Matter**](https://blacklivesmatters.carrd.co/) movement and calls to action in the US and around the world, a [new spotlight](https://mail.gnome.org/archives/desktop-devel-list/2019-May/msg00066.html) has been placed on unchecked invocations of racially charged language in the computer science world, no matter how big or small — like the long-standing and, until recently, widely accepted terms ["master" and "slave"](https://tools.ietf.org/id/draft-knodel-terminology-00.html#master-slave) as an oppressive metaphor for ownership/importance. In the midst of this year's long-overdue support of the [**Black Lives Matter**](https://blacklivesmatters.carrd.co/) movement and calls to action in the US and around the world, a [new spotlight](https://mail.gnome.org/archives/desktop-devel-list/2019-May/msg00066.html) has been placed on unchecked invocations of racially charged language in the computer science world, no matter how big or small — like the long-standing and, until recently, widely accepted terms ["master" and "slave"](https://tools.ietf.org/id/draft-knodel-terminology-00.html#master-slave) as an oppressive metaphor for ownership/importance.
When somebody pointed out the negative connotations of Git projects being created with a branch named `master` by default, and the possibility of this making minorities feel even more unwelcome in an industry already [lacking diversity](https://www.informationisbeautiful.net/visualizations/diversity-in-tech/), GitHub CEO [Nat Friedman](https://github.com/nat) quietly [announced a plan](https://twitter.com/natfriedman/status/1271253144442253312) to change this on Twitter (ignore the replies for your sanity): When somebody pointed out the negative connotations of Git projects being created with a branch named `master` by default, and the possibility of this making minorities feel even more unwelcome in an industry already [lacking diversity](https://www.informationisbeautiful.net/visualizations/diversity-in-tech/), GitHub CEO [Nat Friedman](https://github.com/nat) quietly [announced a plan](https://twitter.com/natfriedman/status/1271253144442253312) to change this on Twitter (ignore the replies for your sanity).
<Tweet id="1271253144442253312" />
I think many people misunderstood this tweet to mean GitHub will forcefully rename the `master` branch of all existing projects, which would break _millions_ of programmers' workflows. If anything, it's more likely a name such as `main` will replace `master` as **the default when creating a new repository**, but that change hasn't been made yet. [GitLab is also discussing](https://gitlab.com/gitlab-org/gitlab/-/issues/221164) a similar switch to `main` as the default name. (Ideally, these changes would be made in tandem with the actual Git codebase, too. [~~But this doesn't seem likely.~~](https://lore.kernel.org/git/CAOAHyQwyXC1Z3v7BZAC+Bq6JBaM7FvBenA-1fcqeDV==apdWDg@mail.gmail.com/t/)) I think many people misunderstood this tweet to mean GitHub will forcefully rename the `master` branch of all existing projects, which would break _millions_ of programmers' workflows. If anything, it's more likely a name such as `main` will replace `master` as **the default when creating a new repository**, but that change hasn't been made yet. [GitLab is also discussing](https://gitlab.com/gitlab-org/gitlab/-/issues/221164) a similar switch to `main` as the default name. (Ideally, these changes would be made in tandem with the actual Git codebase, too. [~~But this doesn't seem likely.~~](https://lore.kernel.org/git/CAOAHyQwyXC1Z3v7BZAC+Bq6JBaM7FvBenA-1fcqeDV==apdWDg@mail.gmail.com/t/))

View File

@ -23,8 +23,6 @@ image: "/static/images/notes/how-to-backup-linux-server/apocalypse.png"
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. 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.
<Tweet id="1134529316904153089" />
Predictably, there were [a](https://twitter.com/kolaente/status/1134897543643615238) [lot](https://twitter.com/hwkfr/status/1135164281731911681) [of](https://twitter.com/joestarstuff/status/1135406188114276352) [Monday](https://twitter.com/FearbySoftware/status/1134717875351052288)-[morning](https://twitter.com/mkozak/status/1134557954785587200) [quarterbacks](https://twitter.com/MichMich/status/1134547174447026181) who weighed in, scolding him for not having backups ([he did](https://twitter.com/w3Nicolas/status/1134529374676500482), but they were also stored on DigitalOcean) and not paying a boatload of non-existent money for expensive load balancers pointing to multiple cloud providers. Hindsight is always 20/20, of course, but if we're talking about a small side project that exploded into a full-fledged startup with Fortune 500 clients seemingly overnight, I _completely_ understand Nicolas' thought process. _"Let's just take advantage of cloud computing's #1 selling point: press a few buttons to make our servers [harder, better, faster, stronger](https://www.youtube.com/watch?v=x84m3YyO2oU) and get back to coding!"_ Predictably, there were [a](https://twitter.com/kolaente/status/1134897543643615238) [lot](https://twitter.com/hwkfr/status/1135164281731911681) [of](https://twitter.com/joestarstuff/status/1135406188114276352) [Monday](https://twitter.com/FearbySoftware/status/1134717875351052288)-[morning](https://twitter.com/mkozak/status/1134557954785587200) [quarterbacks](https://twitter.com/MichMich/status/1134547174447026181) who weighed in, scolding him for not having backups ([he did](https://twitter.com/w3Nicolas/status/1134529374676500482), but they were also stored on DigitalOcean) and not paying a boatload of non-existent money for expensive load balancers pointing to multiple cloud providers. Hindsight is always 20/20, of course, but if we're talking about a small side project that exploded into a full-fledged startup with Fortune 500 clients seemingly overnight, I _completely_ understand Nicolas' thought process. _"Let's just take advantage of cloud computing's #1 selling point: press a few buttons to make our servers [harder, better, faster, stronger](https://www.youtube.com/watch?v=x84m3YyO2oU) and get back to coding!"_
Most of the popular one-click server providers (including [DigitalOcean](https://www.digitalocean.com/docs/images/backups/overview/), as well as [Linode](https://www.linode.com/backups), [Vultr](https://www.vultr.com/docs/vps-automatic-backups), and [OVH](https://www.ovh.com/world/vps/backup-vps.xml)) provide their own backup offerings for an additional monthly cost (usually proportional to your plan). But as Nicolas learned the hard way, any amount of backups are just more eggs in the same basket if everything is under one account with one credit card on one provider. Most of the popular one-click server providers (including [DigitalOcean](https://www.digitalocean.com/docs/images/backups/overview/), as well as [Linode](https://www.linode.com/backups), [Vultr](https://www.vultr.com/docs/vps-automatic-backups), and [OVH](https://www.ovh.com/world/vps/backup-vps.xml)) provide their own backup offerings for an additional monthly cost (usually proportional to your plan). But as Nicolas learned the hard way, any amount of backups are just more eggs in the same basket if everything is under one account with one credit card on one provider.

View File

@ -17,16 +17,15 @@
"start": "next start", "start": "next start",
"lint": "next lint --no-cache", "lint": "next lint --no-cache",
"typecheck": "tsc", "typecheck": "tsc",
"postinstall": "prisma generate --no-engine" "postinstall": "prisma generate"
}, },
"dependencies": { "dependencies": {
"@giscus/react": "^3.1.0", "@giscus/react": "^3.1.0",
"@mdx-js/mdx": "^3.1.0", "@mdx-js/mdx": "^3.1.0",
"@next/bundle-analyzer": "15.2.0-canary.55", "@next/bundle-analyzer": "15.2.0-canary.60",
"@octokit/graphql": "^8.2.0", "@octokit/graphql": "^8.2.0",
"@octokit/graphql-schema": "^15.25.0", "@octokit/graphql-schema": "^15.25.0",
"@prisma/client": "^6.3.1", "@prisma/client": "^6.3.1",
"@prisma/extension-accelerate": "^1.2.1",
"@react-spring/web": "^9.7.5", "@react-spring/web": "^9.7.5",
"@vercel/analytics": "^1.5.0", "@vercel/analytics": "^1.5.0",
"clsx": "^2.1.1", "clsx": "^2.1.1",
@ -37,7 +36,7 @@
"feed": "^4.2.2", "feed": "^4.2.2",
"gray-matter": "^4.0.3", "gray-matter": "^4.0.3",
"modern-normalize": "^3.0.1", "modern-normalize": "^3.0.1",
"next": "15.2.0-canary.55", "next": "15.2.0-canary.60",
"obj-str": "^1.1.0", "obj-str": "^1.1.0",
"p-map": "^7.0.3", "p-map": "^7.0.3",
"p-memoize": "^7.1.1", "p-memoize": "^7.1.1",
@ -70,19 +69,19 @@
"@eslint/js": "^9.20.0", "@eslint/js": "^9.20.0",
"@jakejarvis/eslint-config": "~4.0.7", "@jakejarvis/eslint-config": "~4.0.7",
"@types/comma-number": "^2.1.2", "@types/comma-number": "^2.1.2",
"@types/node": "^22.13.1", "@types/node": "^22.13.4",
"@types/prop-types": "^15.7.14", "@types/prop-types": "^15.7.14",
"@types/react": "^19.0.8", "@types/react": "^19.0.8",
"@types/react-dom": "^19.0.3", "@types/react-dom": "^19.0.3",
"@types/react-is": "^19.0.0", "@types/react-is": "^19.0.0",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"eslint": "~9.20.1", "eslint": "~9.20.1",
"eslint-config-next": "15.2.0-canary.55", "eslint-config-next": "15.2.0-canary.60",
"eslint-config-prettier": "~10.0.1", "eslint-config-prettier": "~10.0.1",
"eslint-plugin-mdx": "~3.1.5", "eslint-plugin-mdx": "~3.1.5",
"eslint-plugin-prettier": "~5.2.3", "eslint-plugin-prettier": "~5.2.3",
"lint-staged": "^15.4.3", "lint-staged": "^15.4.3",
"prettier": "^3.5.0", "prettier": "^3.5.1",
"prisma": "^6.3.1", "prisma": "^6.3.1",
"schema-dts": "^1.1.2", "schema-dts": "^1.1.2",
"simple-git-hooks": "^2.11.1", "simple-git-hooks": "^2.11.1",

159
pnpm-lock.yaml generated
View File

@ -15,8 +15,8 @@ importers:
specifier: ^3.1.0 specifier: ^3.1.0
version: 3.1.0(acorn@8.14.0) version: 3.1.0(acorn@8.14.0)
'@next/bundle-analyzer': '@next/bundle-analyzer':
specifier: 15.2.0-canary.55 specifier: 15.2.0-canary.60
version: 15.2.0-canary.55 version: 15.2.0-canary.60
'@octokit/graphql': '@octokit/graphql':
specifier: ^8.2.0 specifier: ^8.2.0
version: 8.2.0 version: 8.2.0
@ -26,15 +26,12 @@ importers:
'@prisma/client': '@prisma/client':
specifier: ^6.3.1 specifier: ^6.3.1
version: 6.3.1(prisma@6.3.1(typescript@5.7.3))(typescript@5.7.3) version: 6.3.1(prisma@6.3.1(typescript@5.7.3))(typescript@5.7.3)
'@prisma/extension-accelerate':
specifier: ^1.2.1
version: 1.2.1(@prisma/client@6.3.1(prisma@6.3.1(typescript@5.7.3))(typescript@5.7.3))
'@react-spring/web': '@react-spring/web':
specifier: ^9.7.5 specifier: ^9.7.5
version: 9.7.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0) version: 9.7.5(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@vercel/analytics': '@vercel/analytics':
specifier: ^1.5.0 specifier: ^1.5.0
version: 1.5.0(next@15.2.0-canary.55(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0) version: 1.5.0(next@15.2.0-canary.60(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)
clsx: clsx:
specifier: ^2.1.1 specifier: ^2.1.1
version: 2.1.1 version: 2.1.1
@ -60,8 +57,8 @@ importers:
specifier: ^3.0.1 specifier: ^3.0.1
version: 3.0.1 version: 3.0.1
next: next:
specifier: 15.2.0-canary.55 specifier: 15.2.0-canary.60
version: 15.2.0-canary.55(react-dom@19.0.0(react@19.0.0))(react@19.0.0) version: 15.2.0-canary.60(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
obj-str: obj-str:
specifier: ^1.1.0 specifier: ^1.1.0
version: 1.1.0 version: 1.1.0
@ -154,8 +151,8 @@ importers:
specifier: ^2.1.2 specifier: ^2.1.2
version: 2.1.2 version: 2.1.2
'@types/node': '@types/node':
specifier: ^22.13.1 specifier: ^22.13.4
version: 22.13.1 version: 22.13.4
'@types/prop-types': '@types/prop-types':
specifier: ^15.7.14 specifier: ^15.7.14
version: 15.7.14 version: 15.7.14
@ -175,8 +172,8 @@ importers:
specifier: ~9.20.1 specifier: ~9.20.1
version: 9.20.1 version: 9.20.1
eslint-config-next: eslint-config-next:
specifier: 15.2.0-canary.55 specifier: 15.2.0-canary.60
version: 15.2.0-canary.55(eslint@9.20.1)(typescript@5.7.3) version: 15.2.0-canary.60(eslint@9.20.1)(typescript@5.7.3)
eslint-config-prettier: eslint-config-prettier:
specifier: ~10.0.1 specifier: ~10.0.1
version: 10.0.1(eslint@9.20.1) version: 10.0.1(eslint@9.20.1)
@ -185,13 +182,13 @@ importers:
version: 3.1.5(eslint@9.20.1) version: 3.1.5(eslint@9.20.1)
eslint-plugin-prettier: eslint-plugin-prettier:
specifier: ~5.2.3 specifier: ~5.2.3
version: 5.2.3(eslint-config-prettier@10.0.1(eslint@9.20.1))(eslint@9.20.1)(prettier@3.5.0) version: 5.2.3(eslint-config-prettier@10.0.1(eslint@9.20.1))(eslint@9.20.1)(prettier@3.5.1)
lint-staged: lint-staged:
specifier: ^15.4.3 specifier: ^15.4.3
version: 15.4.3 version: 15.4.3
prettier: prettier:
specifier: ^3.5.0 specifier: ^3.5.1
version: 3.5.0 version: 3.5.1
prisma: prisma:
specifier: ^6.3.1 specifier: ^6.3.1
version: 6.3.1(typescript@5.7.3) version: 6.3.1(typescript@5.7.3)
@ -417,59 +414,59 @@ packages:
'@mdx-js/mdx@3.1.0': '@mdx-js/mdx@3.1.0':
resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==}
'@next/bundle-analyzer@15.2.0-canary.55': '@next/bundle-analyzer@15.2.0-canary.60':
resolution: {integrity: sha512-ixINswKCBDvZIXhvwARm5vuNBXc7RhpqH0G0KRD2FdnRB8fwD8oLSpKk38dTJZKmbJlvGf96u1z6yXacwV9Itw==} resolution: {integrity: sha512-IOO1T0mw6azVGVJr8F8eCAoWJJEMXHMKaTwHQYenbrLP9FIz3NacPlCnn0DEuWkrllODlwvzLDsyC21SeA0dGA==}
'@next/env@15.2.0-canary.55': '@next/env@15.2.0-canary.60':
resolution: {integrity: sha512-CCMedxKMrTaUZ/Qnm3naiZSjHFkt/E1P6qrziD5UdlP0AP4bXG5ZHIe3lL5kh835RqxrPdnwWcf4ASBwqw5g6g==} resolution: {integrity: sha512-wjzZEUQZE4RonCMXpa7duk25sl/A/2lNxQRfLwDlZYlCrSmiruP9IClUbEpBoNA4VQnCe6hmr7mlmPHDq4kEhw==}
'@next/eslint-plugin-next@15.2.0-canary.55': '@next/eslint-plugin-next@15.2.0-canary.60':
resolution: {integrity: sha512-LRJtzkaPXBaQ7EMhRD24gVpKl/5SIWsVDXy4kPCsXv0A5lYJtoaZMOZO+voHCP1f+fcccjYi+oSefKkX9ewzQw==} resolution: {integrity: sha512-AYnfYsrpjZvWGUTppRHq2jZ5dCfF2ZGFya9MjKRWQU90SD/AXhRrrTTB27GBMNMbZyHqCJAMy3pz5XnbPEx7yA==}
'@next/swc-darwin-arm64@15.2.0-canary.55': '@next/swc-darwin-arm64@15.2.0-canary.60':
resolution: {integrity: sha512-Jaf+faeCCfsxhnOB5DOYzwf660m0UXZpMNqj09UgxLGExyUxTS7Bukv2ITMf4BA/oI2fpbkiZmYA4F6mUN25jQ==} resolution: {integrity: sha512-I4F8vbXSD8Ol8Q50D9kGj5i8VtQHZQdgUky5m/B45QoqMXPw4b1SX3YDSCDCmqRObqCiwX9M+rCBuM6DEHGuZA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@next/swc-darwin-x64@15.2.0-canary.55': '@next/swc-darwin-x64@15.2.0-canary.60':
resolution: {integrity: sha512-2+cBRMpeEqyUN1du6ghAU2buA9mdP+drJQM/xLvQzlAE1hw0yNIdlhe570xGeHQflHNZS5Tcr0VB1oVSIjg/ug==} resolution: {integrity: sha512-9YkZusMfLtWu+ln0Bmh9pc+wHQ0Wpm9WwA7fzzYOP7B4hnDDU2MLqaNbc4SQmU/KM3uwwhjPXzEVanMGrlG21Q==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@next/swc-linux-arm64-gnu@15.2.0-canary.55': '@next/swc-linux-arm64-gnu@15.2.0-canary.60':
resolution: {integrity: sha512-XPLjaydGU+5t8ibhav3ZBA2Jji45eTLnzG6/WbV1Who6M8NdfXMOh0/LPwb4gYabH66SH94gvCXEBSaPW/IFBQ==} resolution: {integrity: sha512-2D15ue4bt9LDSKjmC8/vyvsmqRzFR6iMtI8W4zEKFDUIyPM3Zrn0WgLemHiRV3RqhZ1FGH7EX2h1061ltzoDcQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-arm64-musl@15.2.0-canary.55': '@next/swc-linux-arm64-musl@15.2.0-canary.60':
resolution: {integrity: sha512-k8jxvFqZnfnMcgwONu9x9mDk2xDGVL8zKnN8Xy2iMz6diaseT7MmWdM2GLrUNYRtB6k/2nATR9YFg6OiUt2DJg==} resolution: {integrity: sha512-7Mp2uwMKE6G2R9Qiv5QMtvf8lvNzqof6Me/IIS5wtPGNCRvHAXLz0MXRLwNFNwWkt6GTbmvxHjdiA6/ARcjhYg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-x64-gnu@15.2.0-canary.55': '@next/swc-linux-x64-gnu@15.2.0-canary.60':
resolution: {integrity: sha512-lN9RXp0dg2sFwpgu8WbYg4Q4b86M2G6kTGuGWXu3Ki1ArUyT0+iowc7Vp0YNe+V3i3FXWyCknkpFDyQH1a/3KQ==} resolution: {integrity: sha512-CfhUOt8vLPjr1FYy5k5LTyGKW6U9Zry+E/ff8kdNQya3lLM2kDRqrQLiHLsNgoJnHgL0koiR/NpLwjl6T6R7uQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-linux-x64-musl@15.2.0-canary.55': '@next/swc-linux-x64-musl@15.2.0-canary.60':
resolution: {integrity: sha512-4W/Q8oaHhPe6fGyvEmoTc57SDY06U5YHJRmb7NIv00tspUY2UvAXvjcozIgKIUaZnRqPdwq97IoYpSoeNuZnxw==} resolution: {integrity: sha512-iAztK4vsML8Gl0gFb00ZZxwdD61b5gf+XiuYsv2xVFahlpnsDSyMw49jyQnavriXBhD2HYHTPv42lenqR+44Ow==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-win32-arm64-msvc@15.2.0-canary.55': '@next/swc-win32-arm64-msvc@15.2.0-canary.60':
resolution: {integrity: sha512-38lyBUaGt9g9B+o6uz9MFx+IbPf5re7BsHAHftHAP/dnMXGgKD5Ulof8mFD9M4LPxQOwFCOmwGPj9lFSLrGr3w==} resolution: {integrity: sha512-KQ96QpGOXN6Q4yXlnFEFTich7W8DcfgZ3E98/wfTUtD0vhy7M72tDOQ39iB7HiGmVb2dQfxxh5L2yEV4zLYRZw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@next/swc-win32-x64-msvc@15.2.0-canary.55': '@next/swc-win32-x64-msvc@15.2.0-canary.60':
resolution: {integrity: sha512-16vNWCVoVaQWMESt9cjvvqyN1VzWaao++smeEYIM6bCfghGuyU3mj+Cwfwo8Fx4at2yoVmBvRfKrfJgzXyJfFQ==} resolution: {integrity: sha512-FqZvRY6yY3acLyyR1Ixsv7C1GowFAt969kd7of3PGlCspVJwWstEn7fDe7h3QX9eLtO3TN+dF73Yqs5N+CVkUQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -574,12 +571,6 @@ packages:
'@prisma/engines@6.3.1': '@prisma/engines@6.3.1':
resolution: {integrity: sha512-sXdqEVLyGAJ5/iUoG/Ea5AdHMN71m6PzMBWRQnLmhhOejzqAaEr8rUd623ql6OJpED4s/U4vIn4dg1qkF7vGag==} resolution: {integrity: sha512-sXdqEVLyGAJ5/iUoG/Ea5AdHMN71m6PzMBWRQnLmhhOejzqAaEr8rUd623ql6OJpED4s/U4vIn4dg1qkF7vGag==}
'@prisma/extension-accelerate@1.2.1':
resolution: {integrity: sha512-QicnMeyqL226ilT3vvRsFAqPeIdqHGKR4c25CoK5zZ1tNIv8egfgpD1gCKqOGmfAz0pIKQnMuJU3eNg9KItC7A==}
engines: {node: '>=16'}
peerDependencies:
'@prisma/client': '>=4.16.1'
'@prisma/fetch-engine@6.3.1': '@prisma/fetch-engine@6.3.1':
resolution: {integrity: sha512-HOf/0umOgt+/S2xtZze+FHKoxpVg4YpVxROr6g2YG09VsI3Ipyb+rGvD6QGbCqkq5NTWAAZoOGNL+oy7t+IhaQ==} resolution: {integrity: sha512-HOf/0umOgt+/S2xtZze+FHKoxpVg4YpVxROr6g2YG09VsI3Ipyb+rGvD6QGbCqkq5NTWAAZoOGNL+oy7t+IhaQ==}
@ -683,8 +674,8 @@ packages:
'@types/nlcst@2.0.3': '@types/nlcst@2.0.3':
resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
'@types/node@22.13.1': '@types/node@22.13.4':
resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==}
'@types/prismjs@1.26.5': '@types/prismjs@1.26.5':
resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==}
@ -1236,8 +1227,8 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'} engines: {node: '>=12'}
eslint-config-next@15.2.0-canary.55: eslint-config-next@15.2.0-canary.60:
resolution: {integrity: sha512-aF0hAgg4zm7jyhZkabQ3VK5CN+IryKnMektYFk+sjYT4SAlvcL8hxEheB8xwH1g/BZSH/fRNWICIFBxQ0rXggg==} resolution: {integrity: sha512-d+FaZAvFWN4HMmerEqikyJFolQn218Y46cf96mcLpWrW06K8CVk/JouSZMrIWNZtOwr3quXajd6t0Juq9tdDtA==}
peerDependencies: peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
typescript: '>=3.3.1' typescript: '>=3.3.1'
@ -2258,8 +2249,8 @@ packages:
natural-compare@1.4.0: natural-compare@1.4.0:
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
next@15.2.0-canary.55: next@15.2.0-canary.60:
resolution: {integrity: sha512-GVEKe9+czju8c4GoR1AIGydbCEz5ZvC/nQFbRV7p9sBJkzx75Ivx16bz32hjX+qGiQTtgPJIPe02xSbw1tclDA==} resolution: {integrity: sha512-q0I7P1atwnNsG6aiq1Mol//gOFAj2EtvCw5UpL7Vo+N3XJ6ogepCKMWOmJP1UGXs6m53GTPQOdyzEtabMtmaTg==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -2475,8 +2466,8 @@ packages:
resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
prettier@3.5.0: prettier@3.5.1:
resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} resolution: {integrity: sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==}
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
@ -3430,41 +3421,41 @@ snapshots:
- acorn - acorn
- supports-color - supports-color
'@next/bundle-analyzer@15.2.0-canary.55': '@next/bundle-analyzer@15.2.0-canary.60':
dependencies: dependencies:
webpack-bundle-analyzer: 4.10.1 webpack-bundle-analyzer: 4.10.1
transitivePeerDependencies: transitivePeerDependencies:
- bufferutil - bufferutil
- utf-8-validate - utf-8-validate
'@next/env@15.2.0-canary.55': {} '@next/env@15.2.0-canary.60': {}
'@next/eslint-plugin-next@15.2.0-canary.55': '@next/eslint-plugin-next@15.2.0-canary.60':
dependencies: dependencies:
fast-glob: 3.3.1 fast-glob: 3.3.1
'@next/swc-darwin-arm64@15.2.0-canary.55': '@next/swc-darwin-arm64@15.2.0-canary.60':
optional: true optional: true
'@next/swc-darwin-x64@15.2.0-canary.55': '@next/swc-darwin-x64@15.2.0-canary.60':
optional: true optional: true
'@next/swc-linux-arm64-gnu@15.2.0-canary.55': '@next/swc-linux-arm64-gnu@15.2.0-canary.60':
optional: true optional: true
'@next/swc-linux-arm64-musl@15.2.0-canary.55': '@next/swc-linux-arm64-musl@15.2.0-canary.60':
optional: true optional: true
'@next/swc-linux-x64-gnu@15.2.0-canary.55': '@next/swc-linux-x64-gnu@15.2.0-canary.60':
optional: true optional: true
'@next/swc-linux-x64-musl@15.2.0-canary.55': '@next/swc-linux-x64-musl@15.2.0-canary.60':
optional: true optional: true
'@next/swc-win32-arm64-msvc@15.2.0-canary.55': '@next/swc-win32-arm64-msvc@15.2.0-canary.60':
optional: true optional: true
'@next/swc-win32-x64-msvc@15.2.0-canary.55': '@next/swc-win32-x64-msvc@15.2.0-canary.60':
optional: true optional: true
'@nodelib/fs.scandir@2.1.5': '@nodelib/fs.scandir@2.1.5':
@ -3592,10 +3583,6 @@ snapshots:
'@prisma/fetch-engine': 6.3.1 '@prisma/fetch-engine': 6.3.1
'@prisma/get-platform': 6.3.1 '@prisma/get-platform': 6.3.1
'@prisma/extension-accelerate@1.2.1(@prisma/client@6.3.1(prisma@6.3.1(typescript@5.7.3))(typescript@5.7.3))':
dependencies:
'@prisma/client': 6.3.1(prisma@6.3.1(typescript@5.7.3))(typescript@5.7.3)
'@prisma/fetch-engine@6.3.1': '@prisma/fetch-engine@6.3.1':
dependencies: dependencies:
'@prisma/debug': 6.3.1 '@prisma/debug': 6.3.1
@ -3669,7 +3656,7 @@ snapshots:
'@types/concat-stream@2.0.3': '@types/concat-stream@2.0.3':
dependencies: dependencies:
'@types/node': 22.13.1 '@types/node': 22.13.4
'@types/debug@4.1.12': '@types/debug@4.1.12':
dependencies: dependencies:
@ -3711,7 +3698,7 @@ snapshots:
dependencies: dependencies:
'@types/unist': 3.0.3 '@types/unist': 3.0.3
'@types/node@22.13.1': '@types/node@22.13.4':
dependencies: dependencies:
undici-types: 6.20.0 undici-types: 6.20.0
@ -3818,9 +3805,9 @@ snapshots:
'@ungap/structured-clone@1.3.0': {} '@ungap/structured-clone@1.3.0': {}
'@vercel/analytics@1.5.0(next@15.2.0-canary.55(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)': '@vercel/analytics@1.5.0(next@15.2.0-canary.60(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)':
optionalDependencies: optionalDependencies:
next: 15.2.0-canary.55(react-dom@19.0.0(react@19.0.0))(react@19.0.0) next: 15.2.0-canary.60(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
react: 19.0.0 react: 19.0.0
abbrev@2.0.0: {} abbrev@2.0.0: {}
@ -4329,9 +4316,9 @@ snapshots:
escape-string-regexp@5.0.0: {} escape-string-regexp@5.0.0: {}
eslint-config-next@15.2.0-canary.55(eslint@9.20.1)(typescript@5.7.3): eslint-config-next@15.2.0-canary.60(eslint@9.20.1)(typescript@5.7.3):
dependencies: dependencies:
'@next/eslint-plugin-next': 15.2.0-canary.55 '@next/eslint-plugin-next': 15.2.0-canary.60
'@rushstack/eslint-patch': 1.10.5 '@rushstack/eslint-patch': 1.10.5
'@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(typescript@5.7.3) '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(typescript@5.7.3)
'@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3)
@ -4479,10 +4466,10 @@ snapshots:
- bluebird - bluebird
- supports-color - supports-color
eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.0.1(eslint@9.20.1))(eslint@9.20.1)(prettier@3.5.0): eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.0.1(eslint@9.20.1))(eslint@9.20.1)(prettier@3.5.1):
dependencies: dependencies:
eslint: 9.20.1 eslint: 9.20.1
prettier: 3.5.0 prettier: 3.5.1
prettier-linter-helpers: 1.0.0 prettier-linter-helpers: 1.0.0
synckit: 0.9.2 synckit: 0.9.2
optionalDependencies: optionalDependencies:
@ -5831,9 +5818,9 @@ snapshots:
natural-compare@1.4.0: {} natural-compare@1.4.0: {}
next@15.2.0-canary.55(react-dom@19.0.0(react@19.0.0))(react@19.0.0): next@15.2.0-canary.60(react-dom@19.0.0(react@19.0.0))(react@19.0.0):
dependencies: dependencies:
'@next/env': 15.2.0-canary.55 '@next/env': 15.2.0-canary.60
'@swc/counter': 0.1.3 '@swc/counter': 0.1.3
'@swc/helpers': 0.5.15 '@swc/helpers': 0.5.15
busboy: 1.6.0 busboy: 1.6.0
@ -5843,14 +5830,14 @@ snapshots:
react-dom: 19.0.0(react@19.0.0) react-dom: 19.0.0(react@19.0.0)
styled-jsx: 5.1.6(react@19.0.0) styled-jsx: 5.1.6(react@19.0.0)
optionalDependencies: optionalDependencies:
'@next/swc-darwin-arm64': 15.2.0-canary.55 '@next/swc-darwin-arm64': 15.2.0-canary.60
'@next/swc-darwin-x64': 15.2.0-canary.55 '@next/swc-darwin-x64': 15.2.0-canary.60
'@next/swc-linux-arm64-gnu': 15.2.0-canary.55 '@next/swc-linux-arm64-gnu': 15.2.0-canary.60
'@next/swc-linux-arm64-musl': 15.2.0-canary.55 '@next/swc-linux-arm64-musl': 15.2.0-canary.60
'@next/swc-linux-x64-gnu': 15.2.0-canary.55 '@next/swc-linux-x64-gnu': 15.2.0-canary.60
'@next/swc-linux-x64-musl': 15.2.0-canary.55 '@next/swc-linux-x64-musl': 15.2.0-canary.60
'@next/swc-win32-arm64-msvc': 15.2.0-canary.55 '@next/swc-win32-arm64-msvc': 15.2.0-canary.60
'@next/swc-win32-x64-msvc': 15.2.0-canary.55 '@next/swc-win32-x64-msvc': 15.2.0-canary.60
sharp: 0.33.5 sharp: 0.33.5
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
@ -6078,7 +6065,7 @@ snapshots:
dependencies: dependencies:
fast-diff: 1.3.0 fast-diff: 1.3.0
prettier@3.5.0: {} prettier@3.5.1: {}
prisma@6.3.1(typescript@5.7.3): prisma@6.3.1(typescript@5.7.3):
dependencies: dependencies:
@ -6790,7 +6777,7 @@ snapshots:
'@types/concat-stream': 2.0.3 '@types/concat-stream': 2.0.3
'@types/debug': 4.1.12 '@types/debug': 4.1.12
'@types/is-empty': 1.2.3 '@types/is-empty': 1.2.3
'@types/node': 22.13.1 '@types/node': 22.13.4
'@types/unist': 3.0.3 '@types/unist': 3.0.3
concat-stream: 2.0.0 concat-stream: 2.0.0
debug: 4.4.0 debug: 4.4.0

View File

@ -30,6 +30,7 @@
- Next.js - Next.js
- Vercel - Vercel
- Neon Postgres
- Prisma - Prisma
- Giscus - Giscus
- Resend - Resend