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
[](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"]
}
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
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[](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.