diff --git a/apps/khix/next.config.js b/apps/khix/next.config.js index 722f52089..2d8b0083f 100644 --- a/apps/khix/next.config.js +++ b/apps/khix/next.config.js @@ -1,16 +1,7 @@ /** @type {import("next").NextConfig} */ const config = { reactStrictMode: true, - images: { - formats: ["image/avif", "image/webp"], - minimumCacheTTL: 60 * 60 * 24 * 30, - remotePatterns: [ - { - protocol: "https", - hostname: "assets.knighthacks.org", - }, - ], - }, + allowedDevOrigins: ["127.0.0.1"], /** We already do linting and typechecking as separate tasks in CI */ typescript: { ignoreBuildErrors: true }, diff --git a/apps/khix/package.json b/apps/khix/package.json index 764488ec8..d5977394a 100644 --- a/apps/khix/package.json +++ b/apps/khix/package.json @@ -15,12 +15,12 @@ "with-env": "dotenv -e ../../.env --" }, "dependencies": { + "@gsap/react": "^2.1.2", "framer-motion": "^12.34.3", - "lucide-react": "^0.575.0", + "gsap": "^3.14.2", "next": "^16.2.7", "react": "^19.2.4", - "react-dom": "^19.2.4", - "react-icons": "^5.5.0" + "react-dom": "^19.2.4" }, "devDependencies": { "@forge/eslint-config": "workspace:*", @@ -35,7 +35,6 @@ "eslint": "catalog:", "prettier": "catalog:", "tailwindcss": "catalog:", - "tw-animate-css": "^1.4.0", "typescript": "catalog:" }, "prettier": "@forge/prettier-config" diff --git a/apps/khix/public/KHIXHero/optimized/1_front.webp b/apps/khix/public/KHIXHero/optimized/1_front.webp new file mode 100644 index 000000000..17718d112 Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/1_front.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/2_tk.webp b/apps/khix/public/KHIXHero/optimized/2_tk.webp new file mode 100644 index 000000000..8170f3162 Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/2_tk.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/3_tree_and_waterfall.webp b/apps/khix/public/KHIXHero/optimized/3_tree_and_waterfall.webp new file mode 100644 index 000000000..9d3544b26 Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/3_tree_and_waterfall.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/4_bg.webp b/apps/khix/public/KHIXHero/optimized/4_bg.webp new file mode 100644 index 000000000..2a567505d Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/4_bg.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/5_bg.webp b/apps/khix/public/KHIXHero/optimized/5_bg.webp new file mode 100644 index 000000000..fdd74e3da Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/5_bg.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/6_bg.webp b/apps/khix/public/KHIXHero/optimized/6_bg.webp new file mode 100644 index 000000000..4932c84e5 Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/6_bg.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/7_bg.webp b/apps/khix/public/KHIXHero/optimized/7_bg.webp new file mode 100644 index 000000000..7b32ccf8b Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/7_bg.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/pond-frames/pond-animated.webp b/apps/khix/public/KHIXHero/optimized/pond-frames/pond-animated.webp new file mode 100644 index 000000000..575bd097b Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/pond-frames/pond-animated.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/pond.webp b/apps/khix/public/KHIXHero/optimized/pond.webp new file mode 100644 index 000000000..8bd04b3a2 Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/pond.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/tk_glow_alone.webp b/apps/khix/public/KHIXHero/optimized/tk_glow_alone.webp new file mode 100644 index 000000000..9fa1e1043 Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/tk_glow_alone.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/waterfall-frames/waterfall-animated.webp b/apps/khix/public/KHIXHero/optimized/waterfall-frames/waterfall-animated.webp new file mode 100644 index 000000000..fa0ce93db Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/waterfall-frames/waterfall-animated.webp differ diff --git a/apps/khix/public/KHIXHero/optimized/waterfall.webp b/apps/khix/public/KHIXHero/optimized/waterfall.webp new file mode 100644 index 000000000..391c25972 Binary files /dev/null and b/apps/khix/public/KHIXHero/optimized/waterfall.webp differ diff --git a/apps/khix/public/assets/FAQ cave ceiling.webp b/apps/khix/public/assets/FAQ cave ceiling.webp new file mode 100644 index 000000000..e05c0a662 Binary files /dev/null and b/apps/khix/public/assets/FAQ cave ceiling.webp differ diff --git a/apps/khix/public/assets/FAQ crystal cluster.webp b/apps/khix/public/assets/FAQ crystal cluster.webp new file mode 100644 index 000000000..c92ab1406 Binary files /dev/null and b/apps/khix/public/assets/FAQ crystal cluster.webp differ diff --git a/apps/khix/public/assets/FAQ crystal rock 1.webp b/apps/khix/public/assets/FAQ crystal rock 1.webp new file mode 100644 index 000000000..855f042d0 Binary files /dev/null and b/apps/khix/public/assets/FAQ crystal rock 1.webp differ diff --git a/apps/khix/public/assets/FAQ crystal rock 2.webp b/apps/khix/public/assets/FAQ crystal rock 2.webp new file mode 100644 index 000000000..ceaa6edb6 Binary files /dev/null and b/apps/khix/public/assets/FAQ crystal rock 2.webp differ diff --git a/apps/khix/public/assets/FAQ crystal rock 3.webp b/apps/khix/public/assets/FAQ crystal rock 3.webp new file mode 100644 index 000000000..2d50b8c04 Binary files /dev/null and b/apps/khix/public/assets/FAQ crystal rock 3.webp differ diff --git a/apps/khix/public/assets/FAQ large crystal.webp b/apps/khix/public/assets/FAQ large crystal.webp new file mode 100644 index 000000000..658a47e3c Binary files /dev/null and b/apps/khix/public/assets/FAQ large crystal.webp differ diff --git a/apps/khix/public/assets/FAQ large mushroom.webp b/apps/khix/public/assets/FAQ large mushroom.webp new file mode 100644 index 000000000..6d527fe67 Binary files /dev/null and b/apps/khix/public/assets/FAQ large mushroom.webp differ diff --git a/apps/khix/public/assets/FAQ misc rock 1.webp b/apps/khix/public/assets/FAQ misc rock 1.webp new file mode 100644 index 000000000..f20554cdc Binary files /dev/null and b/apps/khix/public/assets/FAQ misc rock 1.webp differ diff --git a/apps/khix/public/assets/FAQ misc rock 2.webp b/apps/khix/public/assets/FAQ misc rock 2.webp new file mode 100644 index 000000000..69b5dbd1e Binary files /dev/null and b/apps/khix/public/assets/FAQ misc rock 2.webp differ diff --git a/apps/khix/public/assets/FAQ mushroom rock 1.webp b/apps/khix/public/assets/FAQ mushroom rock 1.webp new file mode 100644 index 000000000..3d63b8553 Binary files /dev/null and b/apps/khix/public/assets/FAQ mushroom rock 1.webp differ diff --git a/apps/khix/public/assets/FAQ mushroom rock 2.webp b/apps/khix/public/assets/FAQ mushroom rock 2.webp new file mode 100644 index 000000000..2b976560b Binary files /dev/null and b/apps/khix/public/assets/FAQ mushroom rock 2.webp differ diff --git a/apps/khix/public/assets/IMG_7680.webp b/apps/khix/public/assets/IMG_7680.webp new file mode 100644 index 000000000..013e739c1 Binary files /dev/null and b/apps/khix/public/assets/IMG_7680.webp differ diff --git a/apps/khix/public/assets/IMG_7681.webp b/apps/khix/public/assets/IMG_7681.webp new file mode 100644 index 000000000..1c6ac9e3e Binary files /dev/null and b/apps/khix/public/assets/IMG_7681.webp differ diff --git a/apps/khix/public/assets/IMG_7682.webp b/apps/khix/public/assets/IMG_7682.webp new file mode 100644 index 000000000..54f87e575 Binary files /dev/null and b/apps/khix/public/assets/IMG_7682.webp differ diff --git a/apps/khix/public/assets/IMG_7683.webp b/apps/khix/public/assets/IMG_7683.webp new file mode 100644 index 000000000..ff837fb18 Binary files /dev/null and b/apps/khix/public/assets/IMG_7683.webp differ diff --git a/apps/khix/public/assets/IMG_7684.webp b/apps/khix/public/assets/IMG_7684.webp new file mode 100644 index 000000000..ece91938d Binary files /dev/null and b/apps/khix/public/assets/IMG_7684.webp differ diff --git a/apps/khix/public/assets/IMG_7685.webp b/apps/khix/public/assets/IMG_7685.webp new file mode 100644 index 000000000..f09f6cba4 Binary files /dev/null and b/apps/khix/public/assets/IMG_7685.webp differ diff --git a/apps/khix/public/assets/IMG_7687.webp b/apps/khix/public/assets/IMG_7687.webp new file mode 100644 index 000000000..766f9dd61 Binary files /dev/null and b/apps/khix/public/assets/IMG_7687.webp differ diff --git a/apps/khix/public/assets/IMG_7688.webp b/apps/khix/public/assets/IMG_7688.webp new file mode 100644 index 000000000..e1804f1a5 Binary files /dev/null and b/apps/khix/public/assets/IMG_7688.webp differ diff --git a/apps/khix/public/assets/IMG_7689.webp b/apps/khix/public/assets/IMG_7689.webp new file mode 100644 index 000000000..6047df2d5 Binary files /dev/null and b/apps/khix/public/assets/IMG_7689.webp differ diff --git a/apps/khix/public/assets/LennyAnimFooter/lenny-animated.webp b/apps/khix/public/assets/LennyAnimFooter/lenny-animated.webp new file mode 100644 index 000000000..d202159de Binary files /dev/null and b/apps/khix/public/assets/LennyAnimFooter/lenny-animated.webp differ diff --git a/apps/khix/public/assets/_ignore-delete.webp b/apps/khix/public/assets/_ignore-delete.webp new file mode 100644 index 000000000..176a18ab5 Binary files /dev/null and b/apps/khix/public/assets/_ignore-delete.webp differ diff --git a/apps/khix/public/assets/_ignore-delete1.webp b/apps/khix/public/assets/_ignore-delete1.webp new file mode 100644 index 000000000..cd2bc9251 Binary files /dev/null and b/apps/khix/public/assets/_ignore-delete1.webp differ diff --git a/apps/khix/public/assets/branch-1.webp b/apps/khix/public/assets/branch-1.webp new file mode 100644 index 000000000..4d06ab69e Binary files /dev/null and b/apps/khix/public/assets/branch-1.webp differ diff --git a/apps/khix/public/assets/branch-2.webp b/apps/khix/public/assets/branch-2.webp new file mode 100644 index 000000000..248a8c184 Binary files /dev/null and b/apps/khix/public/assets/branch-2.webp differ diff --git a/apps/khix/public/assets/branch-3.webp b/apps/khix/public/assets/branch-3.webp new file mode 100644 index 000000000..351a47db0 Binary files /dev/null and b/apps/khix/public/assets/branch-3.webp differ diff --git a/apps/khix/public/assets/branch-4.webp b/apps/khix/public/assets/branch-4.webp new file mode 100644 index 000000000..fa9ecb496 Binary files /dev/null and b/apps/khix/public/assets/branch-4.webp differ diff --git a/apps/khix/public/assets/branch-5.webp b/apps/khix/public/assets/branch-5.webp new file mode 100644 index 000000000..66eec4c17 Binary files /dev/null and b/apps/khix/public/assets/branch-5.webp differ diff --git a/apps/khix/public/assets/leaf-1.webp b/apps/khix/public/assets/leaf-1.webp new file mode 100644 index 000000000..370aecda0 Binary files /dev/null and b/apps/khix/public/assets/leaf-1.webp differ diff --git a/apps/khix/public/assets/leaf-2.webp b/apps/khix/public/assets/leaf-2.webp new file mode 100644 index 000000000..675f5cf88 Binary files /dev/null and b/apps/khix/public/assets/leaf-2.webp differ diff --git a/apps/khix/public/assets/leaf-3.webp b/apps/khix/public/assets/leaf-3.webp new file mode 100644 index 000000000..5d353946c Binary files /dev/null and b/apps/khix/public/assets/leaf-3.webp differ diff --git a/apps/khix/public/assets/lights-1.webp b/apps/khix/public/assets/lights-1.webp new file mode 100644 index 000000000..7d29b4da3 Binary files /dev/null and b/apps/khix/public/assets/lights-1.webp differ diff --git a/apps/khix/public/assets/lights-2.webp b/apps/khix/public/assets/lights-2.webp new file mode 100644 index 000000000..0cab50130 Binary files /dev/null and b/apps/khix/public/assets/lights-2.webp differ diff --git a/apps/khix/public/assets/lights-3.webp b/apps/khix/public/assets/lights-3.webp new file mode 100644 index 000000000..e8af7ef1b Binary files /dev/null and b/apps/khix/public/assets/lights-3.webp differ diff --git a/apps/khix/public/assets/lights-4.webp b/apps/khix/public/assets/lights-4.webp new file mode 100644 index 000000000..5456fae79 Binary files /dev/null and b/apps/khix/public/assets/lights-4.webp differ diff --git a/apps/khix/public/assets/pile-1.webp b/apps/khix/public/assets/pile-1.webp new file mode 100644 index 000000000..d7340d0ae Binary files /dev/null and b/apps/khix/public/assets/pile-1.webp differ diff --git a/apps/khix/public/assets/pile-2.webp b/apps/khix/public/assets/pile-2.webp new file mode 100644 index 000000000..ab425b9ea Binary files /dev/null and b/apps/khix/public/assets/pile-2.webp differ diff --git a/apps/khix/public/assets/pile-3.webp b/apps/khix/public/assets/pile-3.webp new file mode 100644 index 000000000..7b41402b8 Binary files /dev/null and b/apps/khix/public/assets/pile-3.webp differ diff --git a/apps/khix/public/assets/pile-4.webp b/apps/khix/public/assets/pile-4.webp new file mode 100644 index 000000000..578561c12 Binary files /dev/null and b/apps/khix/public/assets/pile-4.webp differ diff --git a/apps/khix/public/assets/pile-5.webp b/apps/khix/public/assets/pile-5.webp new file mode 100644 index 000000000..b7fb8f76e Binary files /dev/null and b/apps/khix/public/assets/pile-5.webp differ diff --git a/apps/khix/public/assets/waterfall.webp b/apps/khix/public/assets/waterfall.webp new file mode 100644 index 000000000..a7c9e45e0 Binary files /dev/null and b/apps/khix/public/assets/waterfall.webp differ diff --git a/apps/khix/public/birds.mp3 b/apps/khix/public/birds.mp3 deleted file mode 100644 index bbd85cfcb..000000000 Binary files a/apps/khix/public/birds.mp3 and /dev/null differ diff --git a/apps/khix/public/favicon.svg b/apps/khix/public/favicon.svg new file mode 100644 index 000000000..c960d1aff --- /dev/null +++ b/apps/khix/public/favicon.svg @@ -0,0 +1,7 @@ + + + + diff --git a/apps/khix/public/flower.png b/apps/khix/public/flower.png deleted file mode 100644 index 18a25716d..000000000 Binary files a/apps/khix/public/flower.png and /dev/null differ diff --git a/apps/khix/public/khix-gem-shard-mask.png b/apps/khix/public/khix-gem-shard-mask.png deleted file mode 100644 index d04e30254..000000000 Binary files a/apps/khix/public/khix-gem-shard-mask.png and /dev/null differ diff --git a/apps/khix/public/khix-logo-white.svg b/apps/khix/public/khix-logo-white.svg deleted file mode 100644 index af0cc9ef8..000000000 --- a/apps/khix/public/khix-logo-white.svg +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/khix/public/khix-sigil.svg b/apps/khix/public/khix-sigil.svg deleted file mode 100644 index 460ecf049..000000000 --- a/apps/khix/public/khix-sigil.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/khix/public/khlogo.svg b/apps/khix/public/khlogo.svg new file mode 100644 index 000000000..0e352e2ad --- /dev/null +++ b/apps/khix/public/khlogo.svg @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + diff --git a/apps/khix/public/ladybug.png b/apps/khix/public/ladybug.png deleted file mode 100644 index 7b8bcc7ff..000000000 Binary files a/apps/khix/public/ladybug.png and /dev/null differ diff --git a/apps/khix/public/mushroom.png b/apps/khix/public/mushroom.png deleted file mode 100644 index 38839ac62..000000000 Binary files a/apps/khix/public/mushroom.png and /dev/null differ diff --git a/apps/khix/public/music.mp3 b/apps/khix/public/music.mp3 deleted file mode 100644 index 4c62cc364..000000000 Binary files a/apps/khix/public/music.mp3 and /dev/null differ diff --git a/apps/khix/src/app/_components/WispCursor.tsx b/apps/khix/src/app/_components/WispCursor.tsx deleted file mode 100644 index 3b866da16..000000000 --- a/apps/khix/src/app/_components/WispCursor.tsx +++ /dev/null @@ -1,155 +0,0 @@ -"use client"; - -import type { CSSProperties } from "react"; -import { useEffect, useRef, useState } from "react"; - -const WISP_COLORS = [ - { - core: "rgba(246, 255, 255, 0.92)", - glow: "rgba(119, 238, 255, 0.76)", - edge: "rgba(45, 167, 255, 0.34)", - }, - { - core: "rgba(235, 251, 255, 0.9)", - glow: "rgba(100, 201, 255, 0.72)", - edge: "rgba(131, 118, 255, 0.3)", - }, - { - core: "rgba(244, 255, 239, 0.88)", - glow: "rgba(142, 255, 218, 0.68)", - edge: "rgba(55, 211, 255, 0.3)", - }, -] as const; - -interface CursorWisp { - id: number; - x: number; - y: number; - size: number; - driftX: number; - driftY: number; - rotate: number; - core: string; - glow: string; - edge: string; -} - -type WispCursorStyle = CSSProperties & { - "--wisp-width": string; - "--wisp-height": string; - "--wisp-drift-x": string; - "--wisp-drift-y": string; - "--wisp-drift-x-mid": string; - "--wisp-drift-y-mid": string; - "--wisp-rotate": string; - "--wisp-rotate-mid": string; - "--wisp-tail-rotate": string; - "--wisp-tail-rotate-mid": string; - "--wisp-tail-rotate-end": string; - "--wisp-fog-drift-x-mid": string; - "--wisp-fog-drift-x-end": string; - "--wisp-core": string; - "--wisp-glow": string; - "--wisp-edge": string; -}; - -export default function WispCursor() { - const [wisps, setWisps] = useState([]); - const counterRef = useRef(0); - const lastTrailPos = useRef({ x: -200, y: -200 }); - const cleanupTimers = useRef([]); - - useEffect(() => { - const prefersReducedMotion = window.matchMedia( - "(prefers-reduced-motion: reduce)", - ).matches; - const isCoarsePointer = window.matchMedia("(pointer: coarse)").matches; - - if (prefersReducedMotion || isCoarsePointer) { - return; - } - - const onMove = (event: MouseEvent) => { - const dx = event.clientX - lastTrailPos.current.x; - const dy = event.clientY - lastTrailPos.current.y; - const distance = Math.sqrt(dx * dx + dy * dy); - - if (distance <= 42) { - return; - } - - lastTrailPos.current = { x: event.clientX, y: event.clientY }; - - const id = counterRef.current++; - const color = WISP_COLORS[id % WISP_COLORS.length] ?? WISP_COLORS[0]; - const driftDirection = id % 2 === 0 ? 1 : -1; - const wisp: CursorWisp = { - id, - x: event.clientX, - y: event.clientY, - size: 26 + (id % 4) * 3, - driftX: driftDirection * (10 + (id % 5) * 3), - driftY: -54 - (id % 4) * 10, - rotate: driftDirection * (5 + (id % 4) * 5), - ...color, - }; - - setWisps((currentWisps) => [...currentWisps.slice(-9), wisp]); - - const cleanupTimer = window.setTimeout(() => { - setWisps((currentWisps) => - currentWisps.filter((currentWisp) => currentWisp.id !== id), - ); - }, 1420); - cleanupTimers.current.push(cleanupTimer); - }; - - window.addEventListener("mousemove", onMove); - return () => { - window.removeEventListener("mousemove", onMove); - cleanupTimers.current.forEach((cleanupTimer) => { - window.clearTimeout(cleanupTimer); - }); - cleanupTimers.current = []; - }; - }, []); - - return ( - <> - {wisps.map((wisp) => { - const style: WispCursorStyle = { - left: wisp.x, - top: wisp.y, - "--wisp-width": `${wisp.size * 1.25}px`, - "--wisp-height": `${wisp.size * 1.55}px`, - "--wisp-drift-x": `${wisp.driftX}px`, - "--wisp-drift-y": `${wisp.driftY}px`, - "--wisp-drift-x-mid": `${wisp.driftX * 0.48}px`, - "--wisp-drift-y-mid": `${wisp.driftY * 0.52}px`, - "--wisp-rotate": `${wisp.rotate}deg`, - "--wisp-rotate-mid": `${wisp.rotate * 0.55}deg`, - "--wisp-tail-rotate": `${wisp.rotate * -1}deg`, - "--wisp-tail-rotate-mid": `${wisp.rotate * -0.72}deg`, - "--wisp-tail-rotate-end": `${wisp.rotate * -0.42}deg`, - "--wisp-fog-drift-x-mid": `${wisp.driftX * -0.28}px`, - "--wisp-fog-drift-x-end": `${wisp.driftX * -0.36}px`, - "--wisp-core": wisp.core, - "--wisp-glow": wisp.glow, - "--wisp-edge": wisp.edge, - }; - - return ( -