[
  {
    "path": ".eslintrc.json",
    "content": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n\n.env\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Sean Boult\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# vercel.lol\n[![image](https://github.com/Hacksore/vercel.lol/assets/996134/5f371fd5-3f9c-4f7d-8d4b-52b32b783678)](https://vercel.lol/)\n"
  },
  {
    "path": "next.config.js",
    "content": "import toolbarPlugin from \"@vercel/toolbar/plugins/next\";\n/** @type {import('next').NextConfig} */\nconst nextConfig = {};\n\nconst withVercelToolbar = toolbarPlugin();\n\nexport default withVercelToolbar(nextConfig);\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"vercel.lol\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\",\n    \"lint\": \"next lint\"\n  },\n  \"dependencies\": {\n    \"@vercel/analytics\": \"^1.3.1\",\n    \"@vercel/flags\": \"^2.5.0\",\n    \"@vercel/toolbar\": \"^0.1.15\",\n    \"geist\": \"^1.3.0\",\n    \"lucide-react\": \"^0.390.0\",\n    \"next\": \"14.2.3\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"20.3.2\",\n    \"@types/react\": \"18.2.14\",\n    \"@types/react-dom\": \"18.2.6\",\n    \"autoprefixer\": \"10.4.14\",\n    \"eslint\": \"8.43.0\",\n    \"eslint-config-next\": \"13.4.7\",\n    \"postcss\": \"8.4.24\",\n    \"react\": \"18.2.0\",\n    \"react-dom\": \"18.2.0\",\n    \"tailwindcss\": \"3.4.4\",\n    \"typescript\": \"5.1.6\"\n  }\n}\n"
  },
  {
    "path": "postcss.config.js",
    "content": "const config = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "src/app/.well-known/vercel/flags/route.ts",
    "content": "import { NextResponse, type NextRequest } from \"next/server\";\nimport { verifyAccess, type ApiData } from \"@vercel/flags\";\n\nexport async function GET(request: NextRequest) {\n  const access = await verifyAccess(request.headers.get('Authorization'));\n  if (!access) return NextResponse.json(null, { status: 401 });\n \n  return NextResponse.json<ApiData>({\n    definitions: {\n      exampleFlag: {\n        description: \"test flag\",\n        options: [\n          { value: false, label: \"Off\" },\n          { value: true, label: \"On\" },\n        ],\n      },\n    },\n  });\n}\n"
  },
  {
    "path": "src/app/api/stars/route.ts",
    "content": "import { NextResponse } from \"next/server\";\n\nexport async function GET() {\n  const githubData = await fetch(\n    \"https://api.github.com/repos/hacksore/vercel.lol\",\n    {\n      headers: {\n        Authorization: `Bearer ${process.env.GITHUB_TOKEN}`,\n      },\n      next: { revalidate: 3600 },\n    },\n  )\n    .then((response) => response.json())\n    .catch((error) => {\n      console.error(\"Error:\", error);\n    });\n\n  return NextResponse.json({\n    stars: githubData.stargazers_count,\n    lastUpdate: githubData.updated_at,\n  });\n}\n"
  },
  {
    "path": "src/app/getFlags.ts",
    "content": "import { FlagOverridesType, decrypt } from '@vercel/flags';\nimport { type NextRequest } from 'next/server';\nimport { cookies } from 'next/headers';\n \nexport async function getFlags(request: NextRequest) {\n  const overrideCookie = cookies().get('vercel-flag-overrides')?.value;\n  const overrides = overrideCookie\n    ? await decrypt<FlagOverridesType>(overrideCookie)\n    : {};\n \n  const flags = {\n    exampleFlag: overrides?.exampleFlag ?? false,\n  };\n \n  return flags;\n}\n"
  },
  {
    "path": "src/app/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 255, 255, 255;\n  --background-start-rgb: 0, 0, 0;\n  --background-end-rgb: 0, 0, 0;\n}\n\nbody {\n  color: rgb(var(--foreground-rgb));\n  background: linear-gradient(to bottom,\n      transparent,\n      rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb));\n}\n\n@keyframes spin {\n  50% {\n    scale: 2;\n  }\n}\n\n#cursorthing {\n  transition: all 0.1s;\n  animation: spin 5s ease-in-out infinite;\n}\n\n::-moz-selection {\n  /* Code for Firefox */\n  color: white;\n  background: #f81ce5;\n}\n\n::selection {\n  color: white;\n  background: #f81ce5;\n}\n\n#t1wrap::before {\n  content: \"▲\";\n  position: absolute;\n  opacity: 0.95;\n  z-index: -1;\n  inset: 0;\n}\n\n#t2wrap::before {\n  content: \"The\";\n  position: absolute;\n  opacity: 0.95;\n  z-index: -1;\n  inset: 0;\n}\n\n#t3wrap::before {\n  content: \"Triangle\";\n  position: absolute;\n  opacity: 0.95;\n  z-index: -1;\n  inset: 0;\n}\n\n#t4wrap::before {\n  content: \"Company\";\n  position: absolute;\n  opacity: 0.95;\n  z-index: -1;\n  inset: 0;\n}\n"
  },
  {
    "path": "src/app/layout.tsx",
    "content": "import { Metadata } from \"next\";\nimport { GeistSans } from \"geist/font/sans\";\nimport { Analytics } from \"@vercel/analytics/react\";\n\nimport \"./globals.css\";\n\nexport async function generateMetadata(): Promise<Metadata> {\n  const description = \"▲ The triangle company\";\n  const title = \"vercel.lol\";\n  return {\n    title,\n    description,\n    openGraph: {\n      images: [\"https://vercel.lol/real-og.png\"],\n      description,\n      title,\n      type: \"website\",\n    },\n    twitter: {\n      images: [\"https://vercel.lol/real-og.png\"],\n      title,\n      description,\n      card: \"summary_large_image\",\n    },\n  };\n}\n\nexport default function RootLayout({\n  children,\n}: {\n  children: React.ReactNode;\n}) {\n  return (\n    <html lang=\"en\">\n      <head>\n        <meta name=\"vercel-toolbar-position\" content=\"bottom right\" />\n      </head>\n      <body className={GeistSans.className}>\n        {children}\n        <Analytics />\n      </body>\n    </html>\n  );\n}\n"
  },
  {
    "path": "src/app/main-client.tsx",
    "content": "\"use client\";\n\nimport { Canvas } from \"../components/canvas\";\nimport { VercelToolbar } from \"@vercel/toolbar/next\";\nimport { FlagValues } from \"@vercel/flags/react\";\nimport TheHub from \"./thehub\";\n\nexport default function Main() {\n  return (\n    <div>\n      <a\n        href=\"https://discord.gg/2c2uBmMnbt\"\n        className=\"group w-full z-50 pt-8 fixed h-10 flex font-bold items-center justify-center\"\n      >\n        <div className=\"pr-2 ml-auto\">🚀</div>\n        <div className=\"group-hover:underline text-white text-balance sm:w-auto w-[24ch] text-center sm:text-base text-sm\">\n          vercel.lol just announced $420 million in series deez VC funding\n        </div>\n        <div className=\"pl-2 mr-auto\">🚀</div>\n      </a>\n      <TheHub />\n      <h1 className=\"fixed opacity-90 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 font-bold text-6xl md:text-8xl text-center\">\n        <div id=\"t1wrap\" className=\"relative pb-3\">\n          <span\n            id=\"t1\"\n            className=\"duration-300 opacity-0 bg-clip-text text-transparent bg-gradient-to-r from-[#00FFFF] to-[#0088FF]\"\n          >\n            <a href=\"https://vercel.com\">▲</a>\n          </span>\n        </div>\n        <div id=\"t2wrap\" className=\"relative\">\n          <span\n            id=\"t2\"\n            className=\"duration-300 opacity-0 bg-clip-text text-transparent bg-gradient-to-r from-[#4444FF] to-[#0088FF]\"\n          >\n            The\n          </span>\n        </div>\n        <div id=\"t3wrap\" className=\"relative tracking-tighter\">\n          <span\n            id=\"t3\"\n            className=\"duration-300 opacity-0 bg-clip-text text-transparent bg-gradient-to-r from-[#4444FF] to-[#FF00FF]\"\n          >\n            Triangle\n          </span>\n        </div>\n        {/* T4 Stack */}\n        <div id=\"t4wrap\" className=\"relative tracking-wide\">\n          <span\n            id=\"t4\"\n            className=\"duration-300 opacity-0 bg-clip-text text-transparent bg-gradient-to-r from-[#FFCC00] to-[#FF2222]\"\n          >\n            Company\n          </span>\n        </div>\n        <div\n          id=\"subtitle\"\n          className=\"rounded-full bg-white bg-opacity-80 font-normal max-w-max mx-auto mt-8 text-sm md:text-xl p-[1px] md:p-[1.5px]\"\n        >\n          <div className=\"px-3 py-1 rounded-full bg-black bg-opacity-60 duration-300 text-white\">\n            We sell triangles.\n          </div>\n        </div>\n      </h1>\n      <Canvas />\n      <div className=\"group\">\n        <span className=\"fixed left-1/2 -translate-x-1/2 bottom-16 text-neutral-600 flex items-center gap-2\">\n          <a\n            target=\"_blank\"\n            className=\"text-neutral-600 text-sm duration-300 hover:text-white hover:underline\"\n            href=\"https://github.com/Hacksore/vercel.lol\"\n          >\n            Sauce\n          </a>\n          <div className=\"text-xs\">|</div>\n          <a\n            target=\"_blank\"\n            className=\"text-neutral-600 text-sm duration-300 hover:text-white hover:underline\"\n            href=\"https://github.com/sponsors/PickleNik\"\n          >\n            Buy a Triangle\n          </a>\n        </span>\n        <span className=\"fixed whitespace-nowrap bottom-24 left-1/2 -translate-x-1/2 text-neutral-600 text-sm flex items-center gap-1\">\n          Made with\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width=\"24\"\n            height=\"24\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            strokeWidth=\"2\"\n            className=\"h-3.5 w-3.5 group-hover:text-red-500 group-hover:scale-110 ease-[cubic-bezier(0.175,0.885,0.32,2.275)] duration-300 fill-current lucide lucide-heart\"\n          >\n            <path d=\"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z\" />\n          </svg>\n          by\n          <a\n            target=\"_blank\"\n            className=\"text-neutral-600 text-sm duration-300 hover:text-white hover:underline\"\n            href=\"https://x.com/PickleNik0864\"\n          >\n            PickleNik\n          </a>\n          and\n          <a\n            target=\"_blank\"\n            className=\"text-neutral-600 text-sm duration-300 hover:text-white hover:underline\"\n            href=\"https://x.com/Hacksore\"\n          >\n            Hacksore\n          </a>\n        </span>\n      </div>\n      <VercelToolbar />\n      <span className=\"fixed bottom-8 left-1/2 -translate-x-1/2 text-neutral-600 text-sm\">\n        © 2069 <span className=\"-mr-[3px]\">▼</span>ercel.lol\n      </span>\n      <div>\n        {/* Some other content */}\n        <FlagValues values={{ exampleFlag: true }} />\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "src/app/page.tsx",
    "content": "import Main from \"./main-client\";\n\nexport default async function Home() {\n\n  return <Main />\n}\n"
  },
  {
    "path": "src/app/thehub/index.tsx",
    "content": "import { ChevronRight, Star } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\n\nexport const revalidate = 3600;\n\nexport default function TheHub() {\n  let formatter = Intl.NumberFormat(\"en\", { notation: \"compact\" });\n\n  const [starCount, setStarCount] = useState(0);\n\n  useEffect(() => {\n    fetch(\"/api/stars\")\n      .then((response) => response.json())\n      .then((res) => {\n        setStarCount(res.stars);\n      })\n      .catch((error) => {\n        console.error(\"Error:\", error);\n      });\n  }, []);\n\n  return (\n    <a\n      target=\"_blank\"\n      rel=\"noreferrer noopener\"\n      href=\"https://github.com/hacksore/vercel.lol\"\n      className=\"group fixed gap-2 w-fit items-center flex top-20 left-1/2 -translate-x-1/2 group border hover:no-underline border-white/10 backdrop-saturate-200 backdrop-blur-xl bg-black/30 rounded-full p-2 pr-3 pl-2 mx-auto text-white duration-300 hover:border-neutral-500/30 overflow-hidden text-xs sm:text-sm xl:text-base\"\n    >\n      <div\n        id=\"star-bg\"\n        className=\"absolute -z-10 left-1/2 top-1/2 -translate-y-1/2 -translate-x-1/2 scale-500 group-hover:scale-100 opacity-0  group-hover:opacity-100 duration-300 ease-out h-24 w-24 rounded-full bg-white blur-3xl\"\n      ></div>\n      <div\n        id=\"star-count\"\n        className={`flex gap-1 items-center ${starCount ? \"px-2\" : \"px-1.5\"\n          } py-0.5 mr-0.5 duration-300 bg-black text-black rounded-full font-bold`}\n      >\n        <>\n          <Star className=\"lucide-star w-3 h-3 fill-current\" />\n          {formatter.format(starCount)}\n        </>\n      </div>\n      <span className=\"duration-300 whitespace-nowrap grayscale group-hover:grayscale-0 text-white\">\n        Star us on the hub\n      </span>\n      <ChevronRight className=\"lucide-chevron-right w-4 h-4 duration-300 group-hover:translate-x-0.5\" />\n    </a>\n  );\n}\n"
  },
  {
    "path": "src/components/canvas/index.tsx",
    "content": "\"use client\";\n\nimport React from \"react\";\nimport { useEffect } from \"react\";\n\n// TODO: because refs were too hard we use globals\nlet x = 0;\nlet y = 0;\nlet dx = 1;\nlet dy = 1;\n\n// I am sorry for this\nlet viewportHeight = 0;\nlet viewportWidth = 0;\nlet currentColorId = 0;\n\nconst PUCK_SPEED = 0.8;\n\n// NOTE: these 4 colours match gradients in page.tsx\nconst COLORS = [\"#00FFFF\", \"#4444FF\", \"#FF00FF\", \"#FF8800\"];\nlet currentT = 1;\n\nexport function Canvas() {\n  // bg blob\n  const blobRef = React.useRef<HTMLDivElement | null>(null);\n  // subtitle\n  const h3Ref = React.useRef<HTMLDivElement | null>(null);\n  // star bg\n  const starbgRef = React.useRef<HTMLDivElement | null>(null);\n  const starcountRef = React.useRef<HTMLDivElement | null>(null);\n\n  // T4 title stack\n  const t1Ref = React.useRef<HTMLDivElement | null>(null);\n  const t2Ref = React.useRef<HTMLDivElement | null>(null);\n  const t3Ref = React.useRef<HTMLDivElement | null>(null);\n  const t4Ref = React.useRef<HTMLDivElement | null>(null);\n\n  const canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n  const ctxRef = React.useRef<CanvasRenderingContext2D | null>(null);\n\n  const TRIANGLE_HEIGHT = 64;\n  const TRIANGLE_WIDTH = 72;\n  const SQUARE_SIZE = 64;\n\n  useEffect(() => {\n    if (typeof window === \"undefined\") {\n      return;\n    }\n    const blob = document.getElementById(\"cursorthing\") as HTMLDivElement;\n    blobRef.current = blob;\n\n    const h3 = document.getElementById(\"subtitle\") as HTMLDivElement;\n    h3Ref.current = h3;\n    const starbg = document.getElementById(\"star-bg\") as HTMLDivElement;\n    const starcount = document.getElementById(\"star-count\") as HTMLDivElement;\n    starbgRef.current = starbg;\n    starcountRef.current = starcount;\n\n    const t1 = document.getElementById(\"t1\") as HTMLDivElement;\n    t1Ref.current = t1;\n    const t2 = document.getElementById(\"t2\") as HTMLDivElement;\n    t2Ref.current = t2;\n    const t3 = document.getElementById(\"t3\") as HTMLDivElement;\n    t3Ref.current = t3;\n    const t4 = document.getElementById(\"t4\") as HTMLDivElement;\n    t4Ref.current = t4;\n\n    const canvas = document.getElementById(\"canvas\") as HTMLCanvasElement;\n    canvasRef.current = canvas;\n\n    const ctx = canvas.getContext(\"2d\");\n    ctxRef.current = ctx;\n\n    window.requestAnimationFrame(render);\n\n    // get size of the viewport\n    window.addEventListener(\"resize\", () => {\n      // set canvas size to match\n      canvas.width = window.innerWidth;\n      canvas.height = window.innerHeight;\n\n      viewportHeight = window.innerHeight;\n      viewportWidth = window.innerWidth;\n    });\n\n    window.addEventListener(\"mousemove\", (e) => {\n      blob.style.translate = `${e.clientX - blob.clientWidth / 2}px ${\n        e.clientY - blob.clientHeight / 2\n      }px`;\n    });\n\n    viewportHeight = window.innerHeight;\n    viewportWidth = window.innerWidth;\n\n    // set canvas size to match\n    canvas.width = innerWidth;\n    canvas.height = innerHeight;\n  }, []);\n\n  const render = () => {\n    const ctx = ctxRef.current;\n    if (!ctx) {\n      return;\n    }\n\n    if (!canvasRef.current) {\n      return;\n    }\n\n    ctx.clearRect(0, 0, viewportWidth, viewportHeight);\n\n    // Check if it's April 1st\n    const today = new Date();\n    const isAprilFools = today.getMonth() === 3 && today.getDate() === 1;\n\n    if (y + TRIANGLE_HEIGHT >= canvasRef.current.height || y < 0) {\n      currentColorId === COLORS.length - 1\n        ? (currentColorId = 0)\n        : currentColorId++;\n      currentT === 4 ? (currentT = 1) : currentT++;\n      dy *= -1;\n    }\n\n    // Reverse direction if hitting the canvas boundaries\n    if (x + TRIANGLE_WIDTH >= canvasRef.current.width || x < 0) {\n      currentColorId === COLORS.length - 1\n        ? (currentColorId = 0)\n        : currentColorId++;\n      currentT === 4 ? (currentT = 1) : currentT++;\n      dx *= -1;\n    }\n\n    // Update the position\n    x += dx * PUCK_SPEED;\n    y += dy * PUCK_SPEED;\n\n    // draw a solid shape based on the date\n    ctx.fillStyle = COLORS[currentColorId];\n\n    // change blob bg\n    const blob = blobRef.current;\n    if (blob) {\n      blob.style.background = COLORS[currentColorId];\n    }\n    const h3 = h3Ref.current;\n    if (h3) {\n      h3.style.background = COLORS[currentColorId];\n      h3.style.boxShadow = `0 0 3rem -0.25rem ${COLORS[currentColorId]}`;\n    }\n    const starbg = starbgRef.current;\n    if (starbg) {\n      starbg.style.background = COLORS[currentColorId];\n    }\n\n    const starcount = starcountRef.current;\n    if (starcount) {\n      starcount.style.background = COLORS[currentColorId];\n    }\n\n    const t1 = t1Ref.current as HTMLElement;\n    const t2 = t2Ref.current as HTMLElement;\n    const t3 = t3Ref.current as HTMLElement;\n    const t4 = t4Ref.current as HTMLElement;\n\n    if (currentT === 1) {\n      t1.style.opacity = \"1\";\n      t4.style.opacity = \"0\";\n      if (isAprilFools) t1.textContent = \"■\"; // Change triangle to square UTF8 char\n    }\n    if (currentT === 2) {\n      t1.style.opacity = \"0\";\n      t2.style.opacity = \"1\";\n    }\n    if (currentT === 3) {\n      t2.style.opacity = \"0\";\n      t3.style.opacity = \"1\";\n    }\n    if (currentT === 4) {\n      t3.style.opacity = \"0\";\n      t4.style.opacity = \"1\";\n      if (isAprilFools) t4.textContent = \"■\"; // Ensure all triangle UTF8 characters are changed to square\n    }\n\n    if (isAprilFools) {\n      // draw a square\n      ctx.fillRect(x, y, SQUARE_SIZE, SQUARE_SIZE);\n    } else {\n      // draw a triangle with the tip pointing up\n      ctx.beginPath();\n      ctx.moveTo(x + TRIANGLE_WIDTH / 2, y);\n      ctx.lineTo(x + TRIANGLE_WIDTH, y + TRIANGLE_HEIGHT);\n      ctx.lineTo(x, y + TRIANGLE_HEIGHT);\n      ctx.fill();\n    }\n\n    window.requestAnimationFrame(render);\n  };\n\n  return (\n    <>\n      <div\n        id=\"cursorthing\"\n        className=\"transform-gpu pointer-events-none w-64 h-64 fixed opacity-50 blur-[10rem] z-10 rounded-full\"\n      />\n      <canvas\n        id=\"canvas\"\n        style={{ background: \"#000\" }}\n        width=\"100%\"\n        height=\"100%\"\n      />\n    </>\n  );\n}\n"
  },
  {
    "path": "tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    './src/pages/**/*.{js,ts,jsx,tsx,mdx}',\n    './src/components/**/*.{js,ts,jsx,tsx,mdx}',\n    './src/app/**/*.{js,ts,jsx,tsx,mdx}',\n  ],\n  theme: {\n    extend: {\n      backgroundImage: {\n        'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',\n        'gradient-conic':\n          'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',\n      },\n    },\n  },\n  plugins: [],\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"noEmit\": true,\n    \"esModuleInterop\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"jsx\": \"preserve\",\n    \"incremental\": true,\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    }\n  },\n  \"include\": [\"next-env.d.ts\", \"**/*.ts\", \"**/*.tsx\", \".next/types/**/*.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  }
]