Full Code of Hacksore/vercel.lol for AI

main 81bda9a6b72f cached
18 files
19.6 KB
6.1k tokens
11 symbols
1 requests
Download .txt
Repository: Hacksore/vercel.lol
Branch: main
Commit: 81bda9a6b72f
Files: 18
Total size: 19.6 KB

Directory structure:
gitextract_1yjhmk_8/

├── .eslintrc.json
├── .gitignore
├── LICENSE
├── README.md
├── next.config.js
├── package.json
├── postcss.config.js
├── src/
│   ├── app/
│   │   ├── .well-known/
│   │   │   └── vercel/
│   │   │       └── flags/
│   │   │           └── route.ts
│   │   ├── api/
│   │   │   └── stars/
│   │   │       └── route.ts
│   │   ├── getFlags.ts
│   │   ├── globals.css
│   │   ├── layout.tsx
│   │   ├── main-client.tsx
│   │   ├── page.tsx
│   │   └── thehub/
│   │       └── index.tsx
│   └── components/
│       └── canvas/
│           └── index.tsx
├── tailwind.config.js
└── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .eslintrc.json
================================================
{
  "extends": "next/core-web-vitals"
}


================================================
FILE: .gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env*.local

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts

.env


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2023 Sean Boult

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# vercel.lol
[![image](https://github.com/Hacksore/vercel.lol/assets/996134/5f371fd5-3f9c-4f7d-8d4b-52b32b783678)](https://vercel.lol/)


================================================
FILE: next.config.js
================================================
import toolbarPlugin from "@vercel/toolbar/plugins/next";
/** @type {import('next').NextConfig} */
const nextConfig = {};

const withVercelToolbar = toolbarPlugin();

export default withVercelToolbar(nextConfig);


================================================
FILE: package.json
================================================
{
  "name": "vercel.lol",
  "version": "0.1.0",
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
  },
  "dependencies": {
    "@vercel/analytics": "^1.3.1",
    "@vercel/flags": "^2.5.0",
    "@vercel/toolbar": "^0.1.15",
    "geist": "^1.3.0",
    "lucide-react": "^0.390.0",
    "next": "14.2.3"
  },
  "devDependencies": {
    "@types/node": "20.3.2",
    "@types/react": "18.2.14",
    "@types/react-dom": "18.2.6",
    "autoprefixer": "10.4.14",
    "eslint": "8.43.0",
    "eslint-config-next": "13.4.7",
    "postcss": "8.4.24",
    "react": "18.2.0",
    "react-dom": "18.2.0",
    "tailwindcss": "3.4.4",
    "typescript": "5.1.6"
  }
}


================================================
FILE: postcss.config.js
================================================
const config = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
};

export default config;


================================================
FILE: src/app/.well-known/vercel/flags/route.ts
================================================
import { NextResponse, type NextRequest } from "next/server";
import { verifyAccess, type ApiData } from "@vercel/flags";

export async function GET(request: NextRequest) {
  const access = await verifyAccess(request.headers.get('Authorization'));
  if (!access) return NextResponse.json(null, { status: 401 });
 
  return NextResponse.json<ApiData>({
    definitions: {
      exampleFlag: {
        description: "test flag",
        options: [
          { value: false, label: "Off" },
          { value: true, label: "On" },
        ],
      },
    },
  });
}


================================================
FILE: src/app/api/stars/route.ts
================================================
import { NextResponse } from "next/server";

export async function GET() {
  const githubData = await fetch(
    "https://api.github.com/repos/hacksore/vercel.lol",
    {
      headers: {
        Authorization: `Bearer ${process.env.GITHUB_TOKEN}`,
      },
      next: { revalidate: 3600 },
    },
  )
    .then((response) => response.json())
    .catch((error) => {
      console.error("Error:", error);
    });

  return NextResponse.json({
    stars: githubData.stargazers_count,
    lastUpdate: githubData.updated_at,
  });
}


================================================
FILE: src/app/getFlags.ts
================================================
import { FlagOverridesType, decrypt } from '@vercel/flags';
import { type NextRequest } from 'next/server';
import { cookies } from 'next/headers';
 
export async function getFlags(request: NextRequest) {
  const overrideCookie = cookies().get('vercel-flag-overrides')?.value;
  const overrides = overrideCookie
    ? await decrypt<FlagOverridesType>(overrideCookie)
    : {};
 
  const flags = {
    exampleFlag: overrides?.exampleFlag ?? false,
  };
 
  return flags;
}


================================================
FILE: src/app/globals.css
================================================
@tailwind base;
@tailwind components;
@tailwind utilities;

:root {
  --foreground-rgb: 255, 255, 255;
  --background-start-rgb: 0, 0, 0;
  --background-end-rgb: 0, 0, 0;
}

body {
  color: rgb(var(--foreground-rgb));
  background: linear-gradient(to bottom,
      transparent,
      rgb(var(--background-end-rgb))) rgb(var(--background-start-rgb));
}

@keyframes spin {
  50% {
    scale: 2;
  }
}

#cursorthing {
  transition: all 0.1s;
  animation: spin 5s ease-in-out infinite;
}

::-moz-selection {
  /* Code for Firefox */
  color: white;
  background: #f81ce5;
}

::selection {
  color: white;
  background: #f81ce5;
}

#t1wrap::before {
  content: "▲";
  position: absolute;
  opacity: 0.95;
  z-index: -1;
  inset: 0;
}

#t2wrap::before {
  content: "The";
  position: absolute;
  opacity: 0.95;
  z-index: -1;
  inset: 0;
}

#t3wrap::before {
  content: "Triangle";
  position: absolute;
  opacity: 0.95;
  z-index: -1;
  inset: 0;
}

#t4wrap::before {
  content: "Company";
  position: absolute;
  opacity: 0.95;
  z-index: -1;
  inset: 0;
}


================================================
FILE: src/app/layout.tsx
================================================
import { Metadata } from "next";
import { GeistSans } from "geist/font/sans";
import { Analytics } from "@vercel/analytics/react";

import "./globals.css";

export async function generateMetadata(): Promise<Metadata> {
  const description = "▲ The triangle company";
  const title = "vercel.lol";
  return {
    title,
    description,
    openGraph: {
      images: ["https://vercel.lol/real-og.png"],
      description,
      title,
      type: "website",
    },
    twitter: {
      images: ["https://vercel.lol/real-og.png"],
      title,
      description,
      card: "summary_large_image",
    },
  };
}

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html lang="en">
      <head>
        <meta name="vercel-toolbar-position" content="bottom right" />
      </head>
      <body className={GeistSans.className}>
        {children}
        <Analytics />
      </body>
    </html>
  );
}


================================================
FILE: src/app/main-client.tsx
================================================
"use client";

import { Canvas } from "../components/canvas";
import { VercelToolbar } from "@vercel/toolbar/next";
import { FlagValues } from "@vercel/flags/react";
import TheHub from "./thehub";

export default function Main() {
  return (
    <div>
      <a
        href="https://discord.gg/2c2uBmMnbt"
        className="group w-full z-50 pt-8 fixed h-10 flex font-bold items-center justify-center"
      >
        <div className="pr-2 ml-auto">🚀</div>
        <div className="group-hover:underline text-white text-balance sm:w-auto w-[24ch] text-center sm:text-base text-sm">
          vercel.lol just announced $420 million in series deez VC funding
        </div>
        <div className="pl-2 mr-auto">🚀</div>
      </a>
      <TheHub />
      <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">
        <div id="t1wrap" className="relative pb-3">
          <span
            id="t1"
            className="duration-300 opacity-0 bg-clip-text text-transparent bg-gradient-to-r from-[#00FFFF] to-[#0088FF]"
          >
            <a href="https://vercel.com">▲</a>
          </span>
        </div>
        <div id="t2wrap" className="relative">
          <span
            id="t2"
            className="duration-300 opacity-0 bg-clip-text text-transparent bg-gradient-to-r from-[#4444FF] to-[#0088FF]"
          >
            The
          </span>
        </div>
        <div id="t3wrap" className="relative tracking-tighter">
          <span
            id="t3"
            className="duration-300 opacity-0 bg-clip-text text-transparent bg-gradient-to-r from-[#4444FF] to-[#FF00FF]"
          >
            Triangle
          </span>
        </div>
        {/* T4 Stack */}
        <div id="t4wrap" className="relative tracking-wide">
          <span
            id="t4"
            className="duration-300 opacity-0 bg-clip-text text-transparent bg-gradient-to-r from-[#FFCC00] to-[#FF2222]"
          >
            Company
          </span>
        </div>
        <div
          id="subtitle"
          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]"
        >
          <div className="px-3 py-1 rounded-full bg-black bg-opacity-60 duration-300 text-white">
            We sell triangles.
          </div>
        </div>
      </h1>
      <Canvas />
      <div className="group">
        <span className="fixed left-1/2 -translate-x-1/2 bottom-16 text-neutral-600 flex items-center gap-2">
          <a
            target="_blank"
            className="text-neutral-600 text-sm duration-300 hover:text-white hover:underline"
            href="https://github.com/Hacksore/vercel.lol"
          >
            Sauce
          </a>
          <div className="text-xs">|</div>
          <a
            target="_blank"
            className="text-neutral-600 text-sm duration-300 hover:text-white hover:underline"
            href="https://github.com/sponsors/PickleNik"
          >
            Buy a Triangle
          </a>
        </span>
        <span className="fixed whitespace-nowrap bottom-24 left-1/2 -translate-x-1/2 text-neutral-600 text-sm flex items-center gap-1">
          Made with
          <svg
            xmlns="http://www.w3.org/2000/svg"
            width="24"
            height="24"
            viewBox="0 0 24 24"
            fill="none"
            stroke="currentColor"
            strokeWidth="2"
            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"
          >
            <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" />
          </svg>
          by
          <a
            target="_blank"
            className="text-neutral-600 text-sm duration-300 hover:text-white hover:underline"
            href="https://x.com/PickleNik0864"
          >
            PickleNik
          </a>
          and
          <a
            target="_blank"
            className="text-neutral-600 text-sm duration-300 hover:text-white hover:underline"
            href="https://x.com/Hacksore"
          >
            Hacksore
          </a>
        </span>
      </div>
      <VercelToolbar />
      <span className="fixed bottom-8 left-1/2 -translate-x-1/2 text-neutral-600 text-sm">
        © 2069 <span className="-mr-[3px]">▼</span>ercel.lol
      </span>
      <div>
        {/* Some other content */}
        <FlagValues values={{ exampleFlag: true }} />
      </div>
    </div>
  );
}


================================================
FILE: src/app/page.tsx
================================================
import Main from "./main-client";

export default async function Home() {

  return <Main />
}


================================================
FILE: src/app/thehub/index.tsx
================================================
import { ChevronRight, Star } from "lucide-react";
import { useEffect, useState } from "react";

export const revalidate = 3600;

export default function TheHub() {
  let formatter = Intl.NumberFormat("en", { notation: "compact" });

  const [starCount, setStarCount] = useState(0);

  useEffect(() => {
    fetch("/api/stars")
      .then((response) => response.json())
      .then((res) => {
        setStarCount(res.stars);
      })
      .catch((error) => {
        console.error("Error:", error);
      });
  }, []);

  return (
    <a
      target="_blank"
      rel="noreferrer noopener"
      href="https://github.com/hacksore/vercel.lol"
      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"
    >
      <div
        id="star-bg"
        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"
      ></div>
      <div
        id="star-count"
        className={`flex gap-1 items-center ${starCount ? "px-2" : "px-1.5"
          } py-0.5 mr-0.5 duration-300 bg-black text-black rounded-full font-bold`}
      >
        <>
          <Star className="lucide-star w-3 h-3 fill-current" />
          {formatter.format(starCount)}
        </>
      </div>
      <span className="duration-300 whitespace-nowrap grayscale group-hover:grayscale-0 text-white">
        Star us on the hub
      </span>
      <ChevronRight className="lucide-chevron-right w-4 h-4 duration-300 group-hover:translate-x-0.5" />
    </a>
  );
}


================================================
FILE: src/components/canvas/index.tsx
================================================
"use client";

import React from "react";
import { useEffect } from "react";

// TODO: because refs were too hard we use globals
let x = 0;
let y = 0;
let dx = 1;
let dy = 1;

// I am sorry for this
let viewportHeight = 0;
let viewportWidth = 0;
let currentColorId = 0;

const PUCK_SPEED = 0.8;

// NOTE: these 4 colours match gradients in page.tsx
const COLORS = ["#00FFFF", "#4444FF", "#FF00FF", "#FF8800"];
let currentT = 1;

export function Canvas() {
  // bg blob
  const blobRef = React.useRef<HTMLDivElement | null>(null);
  // subtitle
  const h3Ref = React.useRef<HTMLDivElement | null>(null);
  // star bg
  const starbgRef = React.useRef<HTMLDivElement | null>(null);
  const starcountRef = React.useRef<HTMLDivElement | null>(null);

  // T4 title stack
  const t1Ref = React.useRef<HTMLDivElement | null>(null);
  const t2Ref = React.useRef<HTMLDivElement | null>(null);
  const t3Ref = React.useRef<HTMLDivElement | null>(null);
  const t4Ref = React.useRef<HTMLDivElement | null>(null);

  const canvasRef = React.useRef<HTMLCanvasElement | null>(null);
  const ctxRef = React.useRef<CanvasRenderingContext2D | null>(null);

  const TRIANGLE_HEIGHT = 64;
  const TRIANGLE_WIDTH = 72;
  const SQUARE_SIZE = 64;

  useEffect(() => {
    if (typeof window === "undefined") {
      return;
    }
    const blob = document.getElementById("cursorthing") as HTMLDivElement;
    blobRef.current = blob;

    const h3 = document.getElementById("subtitle") as HTMLDivElement;
    h3Ref.current = h3;
    const starbg = document.getElementById("star-bg") as HTMLDivElement;
    const starcount = document.getElementById("star-count") as HTMLDivElement;
    starbgRef.current = starbg;
    starcountRef.current = starcount;

    const t1 = document.getElementById("t1") as HTMLDivElement;
    t1Ref.current = t1;
    const t2 = document.getElementById("t2") as HTMLDivElement;
    t2Ref.current = t2;
    const t3 = document.getElementById("t3") as HTMLDivElement;
    t3Ref.current = t3;
    const t4 = document.getElementById("t4") as HTMLDivElement;
    t4Ref.current = t4;

    const canvas = document.getElementById("canvas") as HTMLCanvasElement;
    canvasRef.current = canvas;

    const ctx = canvas.getContext("2d");
    ctxRef.current = ctx;

    window.requestAnimationFrame(render);

    // get size of the viewport
    window.addEventListener("resize", () => {
      // set canvas size to match
      canvas.width = window.innerWidth;
      canvas.height = window.innerHeight;

      viewportHeight = window.innerHeight;
      viewportWidth = window.innerWidth;
    });

    window.addEventListener("mousemove", (e) => {
      blob.style.translate = `${e.clientX - blob.clientWidth / 2}px ${
        e.clientY - blob.clientHeight / 2
      }px`;
    });

    viewportHeight = window.innerHeight;
    viewportWidth = window.innerWidth;

    // set canvas size to match
    canvas.width = innerWidth;
    canvas.height = innerHeight;
  }, []);

  const render = () => {
    const ctx = ctxRef.current;
    if (!ctx) {
      return;
    }

    if (!canvasRef.current) {
      return;
    }

    ctx.clearRect(0, 0, viewportWidth, viewportHeight);

    // Check if it's April 1st
    const today = new Date();
    const isAprilFools = today.getMonth() === 3 && today.getDate() === 1;

    if (y + TRIANGLE_HEIGHT >= canvasRef.current.height || y < 0) {
      currentColorId === COLORS.length - 1
        ? (currentColorId = 0)
        : currentColorId++;
      currentT === 4 ? (currentT = 1) : currentT++;
      dy *= -1;
    }

    // Reverse direction if hitting the canvas boundaries
    if (x + TRIANGLE_WIDTH >= canvasRef.current.width || x < 0) {
      currentColorId === COLORS.length - 1
        ? (currentColorId = 0)
        : currentColorId++;
      currentT === 4 ? (currentT = 1) : currentT++;
      dx *= -1;
    }

    // Update the position
    x += dx * PUCK_SPEED;
    y += dy * PUCK_SPEED;

    // draw a solid shape based on the date
    ctx.fillStyle = COLORS[currentColorId];

    // change blob bg
    const blob = blobRef.current;
    if (blob) {
      blob.style.background = COLORS[currentColorId];
    }
    const h3 = h3Ref.current;
    if (h3) {
      h3.style.background = COLORS[currentColorId];
      h3.style.boxShadow = `0 0 3rem -0.25rem ${COLORS[currentColorId]}`;
    }
    const starbg = starbgRef.current;
    if (starbg) {
      starbg.style.background = COLORS[currentColorId];
    }

    const starcount = starcountRef.current;
    if (starcount) {
      starcount.style.background = COLORS[currentColorId];
    }

    const t1 = t1Ref.current as HTMLElement;
    const t2 = t2Ref.current as HTMLElement;
    const t3 = t3Ref.current as HTMLElement;
    const t4 = t4Ref.current as HTMLElement;

    if (currentT === 1) {
      t1.style.opacity = "1";
      t4.style.opacity = "0";
      if (isAprilFools) t1.textContent = "■"; // Change triangle to square UTF8 char
    }
    if (currentT === 2) {
      t1.style.opacity = "0";
      t2.style.opacity = "1";
    }
    if (currentT === 3) {
      t2.style.opacity = "0";
      t3.style.opacity = "1";
    }
    if (currentT === 4) {
      t3.style.opacity = "0";
      t4.style.opacity = "1";
      if (isAprilFools) t4.textContent = "■"; // Ensure all triangle UTF8 characters are changed to square
    }

    if (isAprilFools) {
      // draw a square
      ctx.fillRect(x, y, SQUARE_SIZE, SQUARE_SIZE);
    } else {
      // draw a triangle with the tip pointing up
      ctx.beginPath();
      ctx.moveTo(x + TRIANGLE_WIDTH / 2, y);
      ctx.lineTo(x + TRIANGLE_WIDTH, y + TRIANGLE_HEIGHT);
      ctx.lineTo(x, y + TRIANGLE_HEIGHT);
      ctx.fill();
    }

    window.requestAnimationFrame(render);
  };

  return (
    <>
      <div
        id="cursorthing"
        className="transform-gpu pointer-events-none w-64 h-64 fixed opacity-50 blur-[10rem] z-10 rounded-full"
      />
      <canvas
        id="canvas"
        style={{ background: "#000" }}
        width="100%"
        height="100%"
      />
    </>
  );
}


================================================
FILE: tailwind.config.js
================================================
/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    './src/pages/**/*.{js,ts,jsx,tsx,mdx}',
    './src/components/**/*.{js,ts,jsx,tsx,mdx}',
    './src/app/**/*.{js,ts,jsx,tsx,mdx}',
  ],
  theme: {
    extend: {
      backgroundImage: {
        'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
        'gradient-conic':
          'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
      },
    },
  },
  plugins: [],
}


================================================
FILE: tsconfig.json
================================================
{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "incremental": true,
    "plugins": [
      {
        "name": "next"
      }
    ],
    "paths": {
      "@/*": ["./src/*"]
    }
  },
  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
  "exclude": ["node_modules"]
}
Download .txt
gitextract_1yjhmk_8/

├── .eslintrc.json
├── .gitignore
├── LICENSE
├── README.md
├── next.config.js
├── package.json
├── postcss.config.js
├── src/
│   ├── app/
│   │   ├── .well-known/
│   │   │   └── vercel/
│   │   │       └── flags/
│   │   │           └── route.ts
│   │   ├── api/
│   │   │   └── stars/
│   │   │       └── route.ts
│   │   ├── getFlags.ts
│   │   ├── globals.css
│   │   ├── layout.tsx
│   │   ├── main-client.tsx
│   │   ├── page.tsx
│   │   └── thehub/
│   │       └── index.tsx
│   └── components/
│       └── canvas/
│           └── index.tsx
├── tailwind.config.js
└── tsconfig.json
Download .txt
SYMBOL INDEX (11 symbols across 8 files)

FILE: src/app/.well-known/vercel/flags/route.ts
  function GET (line 4) | async function GET(request: NextRequest) {

FILE: src/app/api/stars/route.ts
  function GET (line 3) | async function GET() {

FILE: src/app/getFlags.ts
  function getFlags (line 5) | async function getFlags(request: NextRequest) {

FILE: src/app/layout.tsx
  function generateMetadata (line 7) | async function generateMetadata(): Promise<Metadata> {
  function RootLayout (line 28) | function RootLayout({

FILE: src/app/main-client.tsx
  function Main (line 8) | function Main() {

FILE: src/app/page.tsx
  function Home (line 3) | async function Home() {

FILE: src/app/thehub/index.tsx
  function TheHub (line 6) | function TheHub() {

FILE: src/components/canvas/index.tsx
  constant PUCK_SPEED (line 17) | const PUCK_SPEED = 0.8;
  constant COLORS (line 20) | const COLORS = ["#00FFFF", "#4444FF", "#FF00FF", "#FF8800"];
  function Canvas (line 23) | function Canvas() {
Condensed preview — 18 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (22K chars).
[
  {
    "path": ".eslintrc.json",
    "chars": 40,
    "preview": "{\n  \"extends\": \"next/core-web-vitals\"\n}\n"
  },
  {
    "path": ".gitignore",
    "chars": 374,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
  },
  {
    "path": "LICENSE",
    "chars": 1067,
    "preview": "MIT License\n\nCopyright (c) 2023 Sean Boult\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "README.md",
    "chars": 136,
    "preview": "# vercel.lol\n[![image](https://github.com/Hacksore/vercel.lol/assets/996134/5f371fd5-3f9c-4f7d-8d4b-52b32b783678)](https"
  },
  {
    "path": "next.config.js",
    "chars": 213,
    "preview": "import toolbarPlugin from \"@vercel/toolbar/plugins/next\";\n/** @type {import('next').NextConfig} */\nconst nextConfig = {}"
  },
  {
    "path": "package.json",
    "chars": 752,
    "preview": "{\n  \"name\": \"vercel.lol\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"next d"
  },
  {
    "path": "postcss.config.js",
    "chars": 105,
    "preview": "const config = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n\nexport default config;\n"
  },
  {
    "path": "src/app/.well-known/vercel/flags/route.ts",
    "chars": 562,
    "preview": "import { NextResponse, type NextRequest } from \"next/server\";\nimport { verifyAccess, type ApiData } from \"@vercel/flags\""
  },
  {
    "path": "src/app/api/stars/route.ts",
    "chars": 531,
    "preview": "import { NextResponse } from \"next/server\";\n\nexport async function GET() {\n  const githubData = await fetch(\n    \"https:"
  },
  {
    "path": "src/app/getFlags.ts",
    "chars": 472,
    "preview": "import { FlagOverridesType, decrypt } from '@vercel/flags';\nimport { type NextRequest } from 'next/server';\nimport { coo"
  },
  {
    "path": "src/app/globals.css",
    "chars": 1053,
    "preview": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n:root {\n  --foreground-rgb: 255, 255, 255;\n  --background-st"
  },
  {
    "path": "src/app/layout.tsx",
    "chars": 949,
    "preview": "import { Metadata } from \"next\";\nimport { GeistSans } from \"geist/font/sans\";\nimport { Analytics } from \"@vercel/analyti"
  },
  {
    "path": "src/app/main-client.tsx",
    "chars": 4682,
    "preview": "\"use client\";\n\nimport { Canvas } from \"../components/canvas\";\nimport { VercelToolbar } from \"@vercel/toolbar/next\";\nimpo"
  },
  {
    "path": "src/app/page.tsx",
    "chars": 95,
    "preview": "import Main from \"./main-client\";\n\nexport default async function Home() {\n\n  return <Main />\n}\n"
  },
  {
    "path": "src/app/thehub/index.tsx",
    "chars": 1848,
    "preview": "import { ChevronRight, Star } from \"lucide-react\";\nimport { useEffect, useState } from \"react\";\n\nexport const revalidate"
  },
  {
    "path": "src/components/canvas/index.tsx",
    "chars": 6032,
    "preview": "\"use client\";\n\nimport React from \"react\";\nimport { useEffect } from \"react\";\n\n// TODO: because refs were too hard we use"
  },
  {
    "path": "tailwind.config.js",
    "chars": 480,
    "preview": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    './src/pages/**/*.{js,ts,jsx,tsx,mdx}',\n"
  },
  {
    "path": "tsconfig.json",
    "chars": 642,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"allowJs\": true,\n    \"sk"
  }
]

About this extraction

This page contains the full source code of the Hacksore/vercel.lol GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 18 files (19.6 KB), approximately 6.1k tokens, and a symbol index with 11 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!