diff --git a/.gitignore b/.gitignore index 946fa740..c46fc764 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ yarn-error.log* .pnpm-debug.log* # local env files +.env .env*.local # vercel @@ -35,4 +36,4 @@ yarn-error.log* *.tsbuildinfo next-env.d.ts -.contentlayer \ No newline at end of file +.contentlayer diff --git a/README.md b/README.md index 67d854f5..f423806f 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,29 @@
-

chronark.com

+

bonafe.org

-My personal website, built with [Next.js](https://nextjs.org/), [Tailwind CSS](https://tailwindcss.com/), [Upstash](https://upstash.com?ref=chronark.com), [Contentlayer](https://www.contentlayer.dev/) and deployed to [Vercel](https://vercel.com/). +My personal website, built with [Next.js](https://nextjs.org/), [Tailwind CSS](https://tailwindcss.com/), [Upstash](https://upstash.com?ref=bonafe.org), [Contentlayer](https://www.contentlayer.dev/) and deployed to [Vercel](https://vercel.com/).
-
- [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/upstash/clone?demo-title=Next.js%20Portfolio%20with%20Pageview%20Counter&demo-description=Portfolio%20site%20with%20pageview%20counter%2C%20built%20with%20Next.js%2013%20App%20Router%2C%20Contentlayer%2C%20and%20Upstash%20Redis.&demo-url=https%3A%2F%2Fchronark.com%2F&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F1DA8n5a6WaP9p1FXf9LmUY%2Fc6264fa2732355787bf657df92dda8a1%2FCleanShot_2023-04-17_at_14.17.37.png&project-name=Next.js%20Portfolio%20with%20Pageview%20Counter&repository-name=nextjs-portfolio-pageview-counter&repository-url=https%3A%2F%2Fgithub.com%2Fchronark%2Fchronark.com&from=templates&integration-ids=oac_V3R1GIpkoJorr6fqyiwdhl17) ## Running Locally - ```sh-session -git clone https://github.com/chronark/chronark.com.git -cd chronark.com +git clone https://github.com/LucasBonafe/bonafe.org.git +cd bonafe.org ``` - -Create a `.env` file similar to [`.env.example`](https://github.com/chronark/chronark.com/blob/main/.env.example). +Create a `.env` file similar to [`.env.example`](https://github.com/LucasBonafe/bonafe.org/blob/main/.env.example). Then install dependencies and run the development server: + ```sh-session pnpm install pnpm dev ``` - ## Cloning / Forking Please remove all of my personal information (projects, images, etc.) before deploying your own version of this site. diff --git a/app/components/analytics.tsx b/app/components/analytics.tsx index aa7fa989..356d581a 100644 --- a/app/components/analytics.tsx +++ b/app/components/analytics.tsx @@ -1,5 +1,4 @@ -"use client"; - +'use client'; export function Analytics() { const token = process.env.NEXT_PUBLIC_BEAM_TOKEN; if (!token) { diff --git a/app/components/card.tsx b/app/components/card.tsx index 8dc85744..5537709f 100644 --- a/app/components/card.tsx +++ b/app/components/card.tsx @@ -1,34 +1,34 @@ -"use client"; +'use client'; import { - motion, - useMotionTemplate, - useMotionValue, - useSpring, -} from "framer-motion"; + motion, + useMotionTemplate, + useMotionValue, + useSpring, +} from 'framer-motion'; +import {MouseEventHandler, PropsWithChildren} from 'react'; -import { MouseEventHandler, PropsWithChildren } from "react"; -export const Card: React.FC = ({ children }) => { - const mouseX = useSpring(0, { stiffness: 500, damping: 100 }); - const mouseY = useSpring(0, { stiffness: 500, damping: 100 }); +export const Card: React.FC = ({children}) => { + const mouseX = useSpring(0, {stiffness: 500, damping: 100}); + const mouseY = useSpring(0, {stiffness: 500, damping: 100}); - function onMouseMove({ currentTarget, clientX, clientY }: any) { - const { left, top } = currentTarget.getBoundingClientRect(); + function onMouseMove({currentTarget, clientX, clientY}: any) { + const {left, top} = currentTarget.getBoundingClientRect(); mouseX.set(clientX - left); mouseY.set(clientY - top); } const maskImage = useMotionTemplate`radial-gradient(240px at ${mouseX}px ${mouseY}px, white, transparent)`; - const style = { maskImage, WebkitMaskImage: maskImage }; + const style = {maskImage, WebkitMaskImage: maskImage}; return (
= ({ children }) => { style={style} />
- {children}
); diff --git a/app/components/mdx.tsx b/app/components/mdx.tsx index 26098a09..4c03ed5a 100644 --- a/app/components/mdx.tsx +++ b/app/components/mdx.tsx @@ -78,13 +78,13 @@ const components = { /> ), ul: ({ className, ...props }) => ( -
    +
      ), ol: ({ className, ...props }) => ( -
        +
          ), li: ({ className, ...props }) => ( -
        1. +
        2. ), blockquote: ({ className, ...props }) => (
          ), hr: ({ ...props }) => ( -
          +
          ), table: ({ className, ...props }: React.HTMLAttributes) => (
          - +
          ), tr: ({ className, ...props }: React.HTMLAttributes) => ( @@ -172,7 +172,7 @@ export function Mdx({ code }: MdxProps) { return (
          - +
          ); } diff --git a/app/components/nav.tsx b/app/components/nav.tsx index 29b3e98f..35878236 100644 --- a/app/components/nav.tsx +++ b/app/components/nav.tsx @@ -46,7 +46,7 @@ export const Navigation: React.FC = () => { href="/" className="duration-200 text-zinc-300 hover:text-zinc-100" > - + diff --git a/app/components/particles.tsx b/app/components/particles.tsx index 419dc263..4e36ab72 100644 --- a/app/components/particles.tsx +++ b/app/components/particles.tsx @@ -228,7 +228,7 @@ export default function Particles({ return ( ); } diff --git a/app/contact/page.tsx b/app/contact/page.tsx index e487d6ee..6c020829 100644 --- a/app/contact/page.tsx +++ b/app/contact/page.tsx @@ -1,63 +1,58 @@ -"use client"; -import { Github, Mail, Twitter } from "lucide-react"; -import Link from "next/link"; -import { Navigation } from "../components/nav"; -import { Card } from "../components/card"; +'use client'; +import {Github, Linkedin, Mail} from 'lucide-react'; +import Link from 'next/link'; +import {Card} from '../components/card'; + const socials = [ - { - icon: , - href: "https://twitter.com/chronark_", - label: "Twitter", - handle: "@chronark_", - }, - { - icon: , - href: "mailto:dev@chronark.com", - label: "Email", - handle: "dev@chronark.com", - }, - { - icon: , - href: "https://github.com/chronark", - label: "Github", - handle: "chronark", - }, + { + icon: , + href: "https://www.linkedin.com/in/lucas-bonafe/", + label: "LinkedIn", + handle: "in/lucas-bonafe", + }, + { + icon: , + href: "mailto:lucas@bonafe.org", + label: "E-mail", + handle: "lucas@bonafe.org", + }, + { + icon: , + href: "https://github.com/LucasBonafe", + label: "GitHub", + handle: "LucasBonafe", + }, ]; -export default function Example() { - return ( -
          - -
          -
          - {socials.map((s) => ( - - - - ))} -
          -
          -
          - ); +export default function Contact() { + return ( +
          + {socials.map((s) => ( + + + + ))} +
          + ); } diff --git a/app/layout.tsx b/app/layout.tsx index f6582ed4..21bb6c04 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,24 +1,27 @@ -import "../global.css"; -import { Inter } from "@next/font/google"; -import LocalFont from "@next/font/local"; -import { Metadata } from "next"; -import { Analytics } from "./components/analytics"; +import {Analytics} from '@vercel/analytics/react'; +import {SpeedInsights} from '@vercel/speed-insights/next'; +import {Metadata} from 'next'; +import {Inter} from 'next/font/google'; +import LocalFont from 'next/font/local'; +import '../global.css'; +// import {Analytics} from './components/analytics'; + export const metadata: Metadata = { title: { - default: "chronark.com", - template: "%s | chronark.com", + default: "Bonafé.org", + template: "%s | bonafe.org", }, - description: "Co-founder of unkey.dev and founder of planetfall.io", + description: "Software Engineer | Full Stack Developer | Pentester | Blockchain Analyst | DevOps | Cloud Architect", openGraph: { - title: "chronark.com", + title: "bonafe.org", description: - "Co-founder of unkey.dev and founder of planetfall.io", - url: "https://chronark.com", - siteName: "chronark.com", + "Software Engineer | Full Stack Developer | Pentester | Blockchain Analyst | DevOps | Cloud Architect", + url: "https://bonafe.org", + siteName: "bonafe.org", images: [ { - url: "https://chronark.com/og.png", + url: "https://bonafe.org/bonafe.png", width: 1920, height: 1080, }, @@ -38,7 +41,7 @@ export const metadata: Metadata = { }, }, twitter: { - title: "Chronark", + title: "bonafe_org", card: "summary_large_image", }, icons: { @@ -63,13 +66,11 @@ export default function RootLayout({ return ( - - + {children} + + ); diff --git a/app/page.tsx b/app/page.tsx index 64d35a1e..b97c8601 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,10 +1,12 @@ -import Link from "next/link"; -import React from "react"; -import Particles from "./components/particles"; +'use client'; +// import Link from 'next/link'; +import Particles from './components/particles'; +import Contact from './contact/page'; + const navigation = [ - { name: "Projects", href: "/projects" }, - { name: "Contact", href: "/contact" }, + // {name: 'Projects', href: '/projects'}, + // {name: 'Contact', href: '/contact'}, ]; export default function Home() { @@ -12,7 +14,7 @@ export default function Home() {
          @@ -29,11 +31,12 @@ export default function Home() { quantity={100} />

          - chronark + Lucas Bonafé

          -
          + + {/*

          I'm building{" "} to solve API authentication and authorization for developers.

          -
          +
          */} +
          {Contact()}
          ); - } diff --git a/app/projects/[slug]/header.tsx b/app/projects/[slug]/header.tsx index bab697aa..78007c84 100644 --- a/app/projects/[slug]/header.tsx +++ b/app/projects/[slug]/header.tsx @@ -62,7 +62,7 @@ export const Header: React.FC = ({ project, views }) => { : "text-zinc-600 hover:text-zinc-900" } `} > - {" "} + {" "} {Intl.NumberFormat("en-US", { notation: "compact" }).format( views, )} @@ -95,7 +95,7 @@ export const Header: React.FC = ({ project, views }) => { : "text-zinc-600 hover:text-zinc-900" } `} > - +
          diff --git a/app/projects/[slug]/page.tsx b/app/projects/[slug]/page.tsx index d3e49bbf..58a8a626 100644 --- a/app/projects/[slug]/page.tsx +++ b/app/projects/[slug]/page.tsx @@ -37,11 +37,11 @@ export default async function PostPage({ params }: Props) { return (
          -
          - +
          +
          - +
          ); diff --git a/app/projects/article.tsx b/app/projects/article.tsx index ae11ce5e..daf24070 100644 --- a/app/projects/article.tsx +++ b/app/projects/article.tsx @@ -24,7 +24,7 @@ export const Article: React.FC = ({ project, views }) => { )} - {" "} + {" "} {Intl.NumberFormat("en-US", { notation: "compact" }).format(views)} diff --git a/app/projects/page.tsx b/app/projects/page.tsx index 90f81381..1ad34e74 100644 --- a/app/projects/page.tsx +++ b/app/projects/page.tsx @@ -39,7 +39,7 @@ export default async function ProjectsPage() { return (
          - +

          @@ -49,7 +49,7 @@ export default async function ProjectsPage() { Some of the projects are from work and some are on my own time.

          -
          +
          @@ -68,7 +68,7 @@ export default async function ProjectsPage() { )}
          - {" "} + {" "} {Intl.NumberFormat("en-US", { notation: "compact" }).format( views[featured.slug] ?? 0, )} @@ -96,12 +96,12 @@ export default async function ProjectsPage() {
          {[top2, top3].map((project) => ( -
          +
          ))}
          -
          +
          @@ -109,7 +109,7 @@ export default async function ProjectsPage() { .filter((_, i) => i % 3 === 0) .map((project) => ( -
          +
          ))}
          @@ -118,7 +118,7 @@ export default async function ProjectsPage() { .filter((_, i) => i % 3 === 1) .map((project) => ( -
          +
          ))}
          @@ -127,7 +127,7 @@ export default async function ProjectsPage() { .filter((_, i) => i % 3 === 2) .map((project) => ( -
          +
          ))}
          diff --git a/content/projects/access.mdx b/content/projects/access.mdx index e29f22c0..7895bb36 100644 --- a/content/projects/access.mdx +++ b/content/projects/access.mdx @@ -4,8 +4,8 @@ description: A minimal library for access control. It is designed to be used tog repository: chronark/access date: "2022-11-13" published: true - --- + A minimal library for access control. It is designed to be used together with opaque access tokens by providing a simple interface to define roles with different access permissions and verifying requests to resources. - Fully typed @@ -73,4 +73,4 @@ const res = recovered.authorize({"team", ["read"]}); // res.success => boolean // res.error => string | undefined provides a reason for failure -``` \ No newline at end of file +``` diff --git a/content/projects/bonafe.org.mdx b/content/projects/bonafe.org.mdx new file mode 100644 index 00000000..57064594 --- /dev/null +++ b/content/projects/bonafe.org.mdx @@ -0,0 +1,10 @@ +--- +title: bonafe.org +description: The website you're looking at +repository: LucasBonafe/bonafe.org +url: https://bonafe.org +date: 2024-01-18 +published: true +--- + +Minimalist open-source portfolio. diff --git a/content/projects/chronark.com.mdx b/content/projects/chronark.com.mdx deleted file mode 100644 index 68443688..00000000 --- a/content/projects/chronark.com.mdx +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: chronark.com -description: The website you're looking at -repository: chronark/chronark.com -url: https://chronark.com -date: 2023-03-28 -published: true ---- - - -Like so many others, I just wanted a place to collect some projects I worked on. Maybe I'll add a blog, maybe I won't. I'm not sure yet. - -If you like the design, check out the Repository on GitHub. - diff --git a/content/projects/highstorm.mdx b/content/projects/highstorm.mdx index 59ec1706..e8990913 100644 --- a/content/projects/highstorm.mdx +++ b/content/projects/highstorm.mdx @@ -5,11 +5,10 @@ date: "2023-05-01" url: https://highstorm.app published: true repository: "chronark/highstorm" - --- - [![](https://highstorm.app/og.png)](https://highstorm.app) + [![](https://highstorm.app/og.png)](https://highstorm.app) Reduce the noise in your Slack workspace by consolidating all your event data into one place, filtering alerts by relevance, and customizing your alert settings to suit your needs. @@ -23,4 +22,4 @@ Keep your Slack workspace focused on what's important Customize your alert settings to suit your unique needs ###### Clear Overview -Get a clear overview of all your alerts in one place \ No newline at end of file +Get a clear overview of all your alerts in one place diff --git a/content/projects/planetfall.mdx b/content/projects/planetfall.mdx index 4803173c..1758ddc6 100644 --- a/content/projects/planetfall.mdx +++ b/content/projects/planetfall.mdx @@ -4,12 +4,9 @@ description: I'm building a SAAS providing global latency monitoring for your AP date: "2023-04-01" url: https://planetfall.io published: true - --- - [![](/planetfall.png)](https://planetfall.io) -Planetfall is a SaaS platform that provides global latency monitoring and synthetic monitoring for APIs. With over 60 regions to monitor from, customers can gain insights into the true performance of their API by checking latency from around the world. +Planetfall is a SaaS platform that provides global latency monitoring and synthetic monitoring for APIs. With over 60 regions to monitor from, customers can gain insights into the true performance of their API by checking latency from around the world. Planetfall offers custom timeouts, threshold notifications, and real-time alerts for potential performance issues. Additionally, customers can create custom status pages to share with their customers, which can display availability and latency for every region. Planetfall offers a free tier that includes 100k checks per month and scales as customers grow. Overall, Planetfall helps customers stay in control of their API's performance, improve communication with their customers, and build trust. - diff --git a/content/projects/qstash.mdx b/content/projects/qstash.mdx index 01bc6f0e..5b15af6f 100644 --- a/content/projects/qstash.mdx +++ b/content/projects/qstash.mdx @@ -4,7 +4,6 @@ description: QStash is a fully managed serverless queue and messaging service de date: "2022-07-18" url: https://upstash.com/qstash published: true - --- QStash is an HTTP based messaging and scheduling solution for the serverless and edge runtimes. diff --git a/content/projects/terraform-provider-vercel.mdx b/content/projects/terraform-provider-vercel.mdx index 267c145d..f0f69257 100644 --- a/content/projects/terraform-provider-vercel.mdx +++ b/content/projects/terraform-provider-vercel.mdx @@ -7,9 +7,7 @@ url: https://registry.terraform.io/providers/chronark/vercel/latest published: true --- - - -Back in the day when Vercel didn't have an official Terraform provider, I wrote one. +Back in the day when Vercel didn't have an official Terraform provider, I wrote one. I needed to manage my Vercel projects and especially sync environment variables from different cloud providers. Terraform was great to provision some postgres databases on digital ocean, but there was no way to sync the credentials with Vercel. @@ -36,11 +34,11 @@ resource "vercel_project" "my_project" { } ``` -It was a fun project and I learned a lot about Terraform and Vercel's API. +It was a fun project and I learned a lot about Terraform and Vercel's API. It gave me the opportunity to contribute to the Terraform ecosystem and my appreciation for the work that the Terraform team does is immense. There have been quite a few individuals and teams that have used this provider and I am happy that it has been useful to you. -Now that Vercel have stepped in, I have decided to [deprecate](https://twitter.com/chronark_/status/1517759708983177218) this one on April 23rd 2022. +Now that Vercel have stepped in, I have decided to [deprecate](https://twitter.com/chronark_/status/1517759708983177218) this one on April 23rd 2022. -Please use the [official provider](https://registry.terraform.io/providers/vercel/vercel/latest) instead. \ No newline at end of file +Please use the [official provider](https://registry.terraform.io/providers/vercel/vercel/latest) instead. diff --git a/content/projects/unkey.mdx b/content/projects/unkey.mdx index 229b5c79..c451b388 100644 --- a/content/projects/unkey.mdx +++ b/content/projects/unkey.mdx @@ -7,7 +7,6 @@ published: true repository: chronark/unkey --- - [![](https://unkey.dev/images/landing/app.png)](https://unkey.dev) Unkey is an open source API Key management solution. It allows you to create, manage and validate API Keys for your users. It’s built with security and speed in mind. diff --git a/content/projects/upstash-cli.mdx b/content/projects/upstash-cli.mdx index d21850a1..def8e5a0 100644 --- a/content/projects/upstash-cli.mdx +++ b/content/projects/upstash-cli.mdx @@ -4,7 +4,6 @@ description: A CLI to provision and manage Upstash resources, including Redis an date: "2022-05-16" repository: upstash/cli published: true - --- diff --git a/content/projects/upstash-core-analytics.mdx b/content/projects/upstash-core-analytics.mdx index 966d891f..b602e833 100644 --- a/content/projects/upstash-core-analytics.mdx +++ b/content/projects/upstash-core-analytics.mdx @@ -5,7 +5,6 @@ date: "2023-02-13" url: https://console.upstash.com/ratelimit repository: upstash/core-analytics published: true - --- diff --git a/content/projects/upstash-edge-flags.mdx b/content/projects/upstash-edge-flags.mdx index 71e4a761..d387c821 100644 --- a/content/projects/upstash-edge-flags.mdx +++ b/content/projects/upstash-edge-flags.mdx @@ -5,7 +5,6 @@ date: "2022-12-12" url: https://upstash.com/blog/edge-flags-beta repository: upstash/edge-flags published: true - --- diff --git a/content/projects/upstash-kafka.mdx b/content/projects/upstash-kafka.mdx index 36df4b1b..d3aefc77 100644 --- a/content/projects/upstash-kafka.mdx +++ b/content/projects/upstash-kafka.mdx @@ -5,7 +5,6 @@ date: "2022-01-08" url: https://upstash.com/kafka repository: upstash/upstash-kafka published: true - --- diff --git a/content/projects/upstash-qstash-sdk.mdx b/content/projects/upstash-qstash-sdk.mdx index 3d3e24a8..ec38067b 100644 --- a/content/projects/upstash-qstash-sdk.mdx +++ b/content/projects/upstash-qstash-sdk.mdx @@ -7,7 +7,6 @@ repository: upstash/sdk-qstash-ts published: true --- - @upstash/qstash is the official client and consumer for [QStash](https://chronark.com/projects/qstash). QStash is the message broker between your serverless apps. You send an HTTP diff --git a/content/projects/upstash-ratelimit-analytics.mdx b/content/projects/upstash-ratelimit-analytics.mdx index ec3e0c91..308f1a39 100644 --- a/content/projects/upstash-ratelimit-analytics.mdx +++ b/content/projects/upstash-ratelimit-analytics.mdx @@ -4,7 +4,6 @@ description: Near realtime analytics for your ratelimits. Integrated into the @u repository: upstash/ratelimit" url: https://console.upstash.com/ratelimit published: true - --- TODO: diff --git a/content/projects/upstash-ratelimit.mdx b/content/projects/upstash-ratelimit.mdx index 7063084a..e56b617d 100644 --- a/content/projects/upstash-ratelimit.mdx +++ b/content/projects/upstash-ratelimit.mdx @@ -5,7 +5,6 @@ date: "2022-06-06" url: https://upstash.com/blog/upstash-ratelimit repository: upstash/ratelimit published: true - --- In today's digital age, serverless computing has become increasingly popular due to its scalability and cost-efficiency. One of the challenges of serverless computing is to manage resources efficiently, and one critical aspect of this is rate limiting. Rate limiting is a technique that limits the number of requests a client can make to a server over a given period. This technique can prevent abuse, improve performance, and reduce costs. One npm package that helps implement rate limiting for serverless applications is @upstash/ratelimit, built on top of Upstash Redis. diff --git a/content/projects/upstash-react-ui.mdx b/content/projects/upstash-react-ui.mdx index b00e31ba..913a3e5a 100644 --- a/content/projects/upstash-react-ui.mdx +++ b/content/projects/upstash-react-ui.mdx @@ -5,7 +5,6 @@ date: "2023-02-05" url: https://upstash.com repository: upstash/react-ui published: true - --- diff --git a/content/projects/upstash-redis.mdx b/content/projects/upstash-redis.mdx index 95216f65..696289f5 100644 --- a/content/projects/upstash-redis.mdx +++ b/content/projects/upstash-redis.mdx @@ -5,7 +5,6 @@ date: "2022-03-14" url: https://upstash.com/redis repository: upstash/upstash-redis published: true - --- Upstash is a cloud-based service provider that offers a Redis-compatible service. In addition to that, we have also created an npm package called `@upstash/redis`. This package provides a strongly typed Redis client that uses HTTP instead of TCP to communicate with the database, making it perfect for serverless and edge runtimes. diff --git a/content/projects/zod-bird.mdx b/content/projects/zod-bird.mdx index 3d378985..d666b4ba 100644 --- a/content/projects/zod-bird.mdx +++ b/content/projects/zod-bird.mdx @@ -4,7 +4,6 @@ description: Zodbird is an e2e typed tinybird.co client library for typescript, repository: chronark/zod-bird date: "2023-05-21" published: true - --- - typesafe diff --git a/package.json b/package.json index 7c3d0f93..1b1eccf4 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,19 @@ { - "name": "chronark.com", + "name": "bonafe.org", "version": "0.1.0", "private": true, "scripts": { "dev": "next dev", + "dev:turbo": "next dev --turbo", "build": "next build", "start": "next start", "fmt": "pnpm rome check . --apply-unsafe && pnpm rome format . --write" }, "dependencies": { - "@next/font": "^13.5.4", "@next/mdx": "^13.5.4", "@upstash/redis": "^1.23.3", + "@vercel/analytics": "^1.1.2", + "@vercel/speed-insights": "^1.0.7", "contentlayer": "^0.3.4", "framer-motion": "^10.16.4", "lucide-react": "^0.284.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4da812c1..0bcbf32d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,15 +14,18 @@ overrides: '@opentelemetry/semantic-conventions': 1.13.0 dependencies: - '@next/font': - specifier: ^13.5.4 - version: 13.5.4 '@next/mdx': specifier: ^13.5.4 version: 13.5.4 '@upstash/redis': specifier: ^1.23.3 version: 1.23.3 + '@vercel/analytics': + specifier: ^1.1.2 + version: 1.1.2 + '@vercel/speed-insights': + specifier: ^1.0.7 + version: 1.0.7(next@13.5.4)(react@18.2.0) contentlayer: specifier: ^0.3.4 version: 0.3.4(esbuild@0.19.4)(markdown-wasm@1.2.0) @@ -259,10 +262,10 @@ packages: resolution: {integrity: sha512-47gAg0O2pW5Jlo86jfzjdkwL5a7Bzb+Kj5WTmdu4CxYRfWn9ytKjuuYIfsNDW8neuhdKzn+P5wCddgEh0glYyQ==} peerDependencies: '@effect-ts/core': ^0.60.2 - '@opentelemetry/api': ^1.4.0 - '@opentelemetry/core': ^1.13.0 - '@opentelemetry/exporter-trace-otlp-grpc': ^0.39.0 - '@opentelemetry/sdk-trace-base': ^1.13.0 + '@opentelemetry/api': 1.4.1 + '@opentelemetry/core': 1.13.0 + '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1 + '@opentelemetry/sdk-trace-base': 1.13.0 dependencies: '@effect-ts/core': 0.60.5 '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.4.1)(@opentelemetry/core@1.13.0)(@opentelemetry/sdk-trace-base@1.13.0) @@ -276,10 +279,10 @@ packages: resolution: {integrity: sha512-a2sF0ylmn8xOJs8fNeT/spJ1gUcsksAJCALxo9WOfuTCMtTwMVtVhCKEPEeQoL7wFqU+JgPkVdP91+FJ/Rkeow==} peerDependencies: '@effect-ts/core': ^0.60.2 - '@opentelemetry/api': ^1.4.0 - '@opentelemetry/core': ^1.13.0 - '@opentelemetry/sdk-trace-base': ^1.13.0 - '@opentelemetry/sdk-trace-node': ^1.13.0 + '@opentelemetry/api': 1.4.1 + '@opentelemetry/core': 1.13.0 + '@opentelemetry/sdk-trace-base': 1.13.0 + '@opentelemetry/sdk-trace-node': 1.13.0 dependencies: '@effect-ts/core': 0.60.5 '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.4.1)(@opentelemetry/core@1.13.0)(@opentelemetry/sdk-trace-base@1.13.0) @@ -293,9 +296,9 @@ packages: resolution: {integrity: sha512-AmZJHl7t0+Peh7Yb2+hqn6r9+rd9/UfeA4AMV9h0YGTdOyouyFfD3wzWlxnAUzAQ4Lrod4kC7Noruret4EpqpA==} peerDependencies: '@effect-ts/core': ^0.60.2 - '@opentelemetry/api': ^1.4.0 - '@opentelemetry/core': ^1.13.0 - '@opentelemetry/sdk-trace-base': ^1.13.0 + '@opentelemetry/api': 1.4.1 + '@opentelemetry/core': 1.13.0 + '@opentelemetry/sdk-trace-base': 1.13.0 dependencies: '@effect-ts/core': 0.60.5 '@opentelemetry/api': 1.4.1 @@ -317,6 +320,7 @@ packages: /@emotion/memoize@0.7.4: resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + requiresBuild: true dev: false optional: true @@ -634,10 +638,6 @@ packages: resolution: {integrity: sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==} dev: false - /@next/font@13.5.4: - resolution: {integrity: sha512-rOMki1/9BP9N93RZABiiF0EidMGgyCvNVSKvLLAnMkVh/IYk4Z827+NRuxCyRQCeT3vv/AeCiP5SFPAP10SPrQ==} - dev: false - /@next/mdx@13.5.4: resolution: {integrity: sha512-WYdWeDZUvX9h0BnjDtwyFy2We4ko8ox5EuglN27rCoYz1xj8fQ8KAn7reZgXwT2RX2hxUOl4eTNbXBfsrw7Gew==} peerDependencies: @@ -766,7 +766,7 @@ packages: resolution: {integrity: sha512-pS5fU4lrRjOIPZQqA2V1SUM9QUFXbO+8flubAiy6ntLjnAjJJUdRFOUOxK6v86ZHI2p2S8A0vD0BTu95FZYvjA==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': 1.4.1 dependencies: '@opentelemetry/api': 1.4.1 dev: false @@ -775,7 +775,7 @@ packages: resolution: {integrity: sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': 1.4.1 dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/semantic-conventions': 1.13.0 @@ -785,7 +785,7 @@ packages: resolution: {integrity: sha512-l5RhLKx6U+yuLhMrtgavTDthX50E1mZM3/SSySC7OPZiArFHV/b/9x9jxAzrOgIQUDxyj4N0V9aLKSA2t7Qzxg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': ^1.0.0 + '@opentelemetry/api': 1.4.1 dependencies: '@grpc/grpc-js': 1.9.5 '@opentelemetry/api': 1.4.1 @@ -800,7 +800,7 @@ packages: resolution: {integrity: sha512-Pv5X8fbi6jD/RJBePyn7MnCSuE6MbPB6dl+7YYBWJ5RcMGYMwvLXjd4h2jWsPV2TSUg38H/RoSP0aXvQ06Y7iw==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': ^1.0.0 + '@opentelemetry/api': 1.4.1 dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) @@ -810,7 +810,7 @@ packages: resolution: {integrity: sha512-u3ErFRQqQFKjjIMuwLWxz/tLPYInfmiAmSy//fGSCzCh2ZdJgqQjMOAxBgqFtCF2xFL+OmMhyuC2ThMzceGRWA==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': ^1.0.0 + '@opentelemetry/api': 1.4.1 dependencies: '@grpc/grpc-js': 1.9.5 '@opentelemetry/api': 1.4.1 @@ -823,7 +823,7 @@ packages: resolution: {integrity: sha512-0hgVnXXz5efI382B/24NxD4b6Zxlh7nxCdJkxkdmQMbn0yRiwoq/ZT+QG8eUL6JNzsBAV1WJlF5aJNsL8skHvw==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.5.0' + '@opentelemetry/api': 1.4.1 dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/api-logs': 0.39.1 @@ -838,7 +838,7 @@ packages: resolution: {integrity: sha512-HOo91EI4UbuG8xQVLFziTzrcIn0MJQhy8m9jorh8aonb94jFVFi3CFNIiAnIGOabmnshJLOABxpYXsiPB8Xnzg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': 1.4.1 dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) @@ -848,7 +848,7 @@ packages: resolution: {integrity: sha512-IV9TO+u1Jzm9mUDAD3gyXf89eyvgEJUY1t+GB5QmS4wjVeWrSMUtD0JjH3yG9SNqkrQOqOGJq7YUSSetW+Lf5Q==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': 1.4.1 dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) @@ -858,7 +858,7 @@ packages: resolution: {integrity: sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': 1.4.1 dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) @@ -869,7 +869,7 @@ packages: resolution: {integrity: sha512-/gmgKfZ1ZVFporKuwsewqIyvaUIGpv76JZ7lBpHQQPb37IMpaXO6pdqFI4ebHAWfNIm3akMyhmdtzivcgF3lgw==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.5.0' + '@opentelemetry/api': 1.4.1 '@opentelemetry/api-logs': '>=0.38.0' dependencies: '@opentelemetry/api': 1.4.1 @@ -882,7 +882,7 @@ packages: resolution: {integrity: sha512-MOjZX6AnSOqLliCcZUrb+DQKjAWXBiGeICGbHAGe5w0BB18PJIeIo995lO5JSaFfHpmUMgJButTPfJJD27W3Vg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.5.0' + '@opentelemetry/api': 1.4.1 dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) @@ -894,7 +894,7 @@ packages: resolution: {integrity: sha512-moTiQtc0uPR1hQLt6gLDJH9IIkeBhgRb71OKjNHZPE1VF45fHtD6nBDi5J/DkTHTwYP5X3kBJLa3xN7ub6J4eg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': 1.4.1 dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.4.1) @@ -906,7 +906,7 @@ packages: resolution: {integrity: sha512-FXA85lXKTsnbOflA/TBuBf2pmhD3c8uDjNjG0YqK+ap8UayfALmfJhf+aG1yBOUHevCY0JXJ4/xtbXExxpsMog==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.5.0' + '@opentelemetry/api': 1.4.1 dependencies: '@opentelemetry/api': 1.4.1 '@opentelemetry/context-async-hooks': 1.13.0(@opentelemetry/api@1.4.1) @@ -1142,6 +1142,40 @@ packages: - encoding dev: false + /@vercel/analytics@1.1.2: + resolution: {integrity: sha512-CodhkLCQ/EHzjX8k+Qg+OzTBY0UadykrcfolfSOJVZZY/ZJM5nbhztm9KdbYvMfqKlasAr1+OYy0ThZnDA/MYA==} + dependencies: + server-only: 0.0.1 + dev: false + + /@vercel/speed-insights@1.0.7(next@13.5.4)(react@18.2.0): + resolution: {integrity: sha512-1XYZO/OlrAco8QPoXXIOPoMrj0O+slB9k6poRo1drQJ+DWTbdUUT18Mtm4ybA8KMj4mGEMEgbw0BKR/yq/VPhA==} + requiresBuild: true + peerDependencies: + '@sveltejs/kit': ^1 || ^2 + next: '>= 13' + react: ^18 || ^19 + svelte: ^4 + vue: ^3 + vue-router: ^4 + peerDependenciesMeta: + '@sveltejs/kit': + optional: true + next: + optional: true + react: + optional: true + svelte: + optional: true + vue: + optional: true + vue-router: + optional: true + dependencies: + next: 13.5.4(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + dev: false + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2707,7 +2741,7 @@ packages: engines: {node: '>=16.14.0'} hasBin: true peerDependencies: - '@opentelemetry/api': ^1.1.0 + '@opentelemetry/api': 1.4.1 react: ^18.2.0 react-dom: ^18.2.0 sass: ^1.3.0 @@ -3194,6 +3228,10 @@ packages: lru-cache: 6.0.0 dev: false + /server-only@0.0.1: + resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + dev: false + /shiki@0.14.5: resolution: {integrity: sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==} dependencies: diff --git a/public/favicon.png b/public/favicon.png index f0e7722a..776b4239 100644 Binary files a/public/favicon.png and b/public/favicon.png differ diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 00000000..fd7a98b1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + diff --git a/public/og.png b/public/og.png deleted file mode 100644 index 31f83a56..00000000 Binary files a/public/og.png and /dev/null differ