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..c58a7b333 100644 --- a/apps/khix/package.json +++ b/apps/khix/package.json @@ -15,12 +15,17 @@ "with-env": "dotenv -e ../../.env --" }, "dependencies": { + "@forge/api": "workspace:*", + "@gsap/react": "^2.1.2", + "@t3-oss/env-nextjs": "^0.13.10", + "@trpc/client": "catalog:", "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" + "superjson": "2.2.6", + "zod": "catalog:" }, "devDependencies": { "@forge/eslint-config": "workspace:*", @@ -35,7 +40,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/about/grass-left.png b/apps/khix/public/assets/about/grass-left.png new file mode 100644 index 000000000..4dc1cd51a Binary files /dev/null and b/apps/khix/public/assets/about/grass-left.png differ diff --git a/apps/khix/public/assets/about/grass-mushroom.png b/apps/khix/public/assets/about/grass-mushroom.png new file mode 100644 index 000000000..4d0b481ba Binary files /dev/null and b/apps/khix/public/assets/about/grass-mushroom.png differ diff --git a/apps/khix/public/assets/about/grass-right.png b/apps/khix/public/assets/about/grass-right.png new file mode 100644 index 000000000..6c4441080 Binary files /dev/null and b/apps/khix/public/assets/about/grass-right.png differ diff --git a/apps/khix/public/assets/about/log.png b/apps/khix/public/assets/about/log.png new file mode 100644 index 000000000..a5fc5ff0c Binary files /dev/null and b/apps/khix/public/assets/about/log.png differ diff --git a/apps/khix/public/assets/about/rock-glow.png b/apps/khix/public/assets/about/rock-glow.png new file mode 100644 index 000000000..bf86a1fe3 Binary files /dev/null and b/apps/khix/public/assets/about/rock-glow.png differ diff --git a/apps/khix/public/assets/about/rock.png b/apps/khix/public/assets/about/rock.png new file mode 100644 index 000000000..a9d16b9c1 Binary files /dev/null and b/apps/khix/public/assets/about/rock.png differ diff --git a/apps/khix/public/assets/about/stump.png b/apps/khix/public/assets/about/stump.png new file mode 100644 index 000000000..c5aa422b7 Binary files /dev/null and b/apps/khix/public/assets/about/stump.png differ diff --git a/apps/khix/public/assets/bloom.png b/apps/khix/public/assets/bloom.png new file mode 100644 index 000000000..0a17c417f Binary files /dev/null and b/apps/khix/public/assets/bloom.png differ diff --git a/apps/khix/public/assets/bottom pool waterfall.png b/apps/khix/public/assets/bottom pool waterfall.png new file mode 100644 index 000000000..01165f115 Binary files /dev/null and b/apps/khix/public/assets/bottom pool waterfall.png 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/extended-front.webp b/apps/khix/public/assets/extended-front.webp new file mode 100644 index 000000000..23759c509 Binary files /dev/null and b/apps/khix/public/assets/extended-front.webp differ diff --git a/apps/khix/public/assets/foam spray waterfall.png b/apps/khix/public/assets/foam spray waterfall.png new file mode 100644 index 000000000..ce792fa29 Binary files /dev/null and b/apps/khix/public/assets/foam spray waterfall.png differ diff --git a/apps/khix/public/assets/gloom.webp b/apps/khix/public/assets/gloom.webp new file mode 100644 index 000000000..b80c1b477 Binary files /dev/null and b/apps/khix/public/assets/gloom.webp differ diff --git a/apps/khix/public/assets/khix site hero front.png b/apps/khix/public/assets/khix site hero front.png new file mode 100644 index 000000000..c722161fb Binary files /dev/null and b/apps/khix/public/assets/khix site hero front.png differ diff --git a/apps/khix/public/assets/large-sponsor-rock.png b/apps/khix/public/assets/large-sponsor-rock.png new file mode 100644 index 000000000..6e773ac1f Binary files /dev/null and b/apps/khix/public/assets/large-sponsor-rock.png 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/rocks waterfall.png b/apps/khix/public/assets/rocks waterfall.png new file mode 100644 index 000000000..016c03f62 Binary files /dev/null and b/apps/khix/public/assets/rocks waterfall.png differ diff --git a/apps/khix/public/assets/small-sponsor-rock.png b/apps/khix/public/assets/small-sponsor-rock.png new file mode 100644 index 000000000..8b6259c3c Binary files /dev/null and b/apps/khix/public/assets/small-sponsor-rock.png differ diff --git a/apps/khix/public/assets/sponsor-logos/amd.svg b/apps/khix/public/assets/sponsor-logos/amd.svg new file mode 100644 index 000000000..50ec3a6e0 --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/amd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/khix/public/assets/sponsor-logos/auritas.svg b/apps/khix/public/assets/sponsor-logos/auritas.svg new file mode 100644 index 000000000..2e1ef338d --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/auritas.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/khix/public/assets/sponsor-logos/bny.svg b/apps/khix/public/assets/sponsor-logos/bny.svg new file mode 100644 index 000000000..6b0d00f0e --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/bny.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/apps/khix/public/assets/sponsor-logos/databricks.svg b/apps/khix/public/assets/sponsor-logos/databricks.svg new file mode 100644 index 000000000..f438a7920 --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/databricks.svg @@ -0,0 +1,51 @@ + + + + + + + + + + diff --git a/apps/khix/public/assets/sponsor-logos/google.svg b/apps/khix/public/assets/sponsor-logos/google.svg new file mode 100644 index 000000000..322bd6762 --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/google.svg @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/khix/public/assets/sponsor-logos/lockheed-martin.svg b/apps/khix/public/assets/sponsor-logos/lockheed-martin.svg new file mode 100644 index 000000000..c135aac6b --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/lockheed-martin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/khix/public/assets/sponsor-logos/morgan-and-morgan.svg b/apps/khix/public/assets/sponsor-logos/morgan-and-morgan.svg new file mode 100644 index 000000000..c9984c2ab --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/morgan-and-morgan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/khix/public/assets/sponsor-logos/nextera.svg b/apps/khix/public/assets/sponsor-logos/nextera.svg new file mode 100644 index 000000000..826e0591e --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/nextera.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/khix/public/assets/sponsor-logos/nvidia.svg b/apps/khix/public/assets/sponsor-logos/nvidia.svg new file mode 100644 index 000000000..843ef60e0 --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/nvidia.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/khix/public/assets/sponsor-logos/oneethos.svg b/apps/khix/public/assets/sponsor-logos/oneethos.svg new file mode 100644 index 000000000..26cd9b588 --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/oneethos.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/khix/public/assets/sponsor-logos/rfsmart.svg b/apps/khix/public/assets/sponsor-logos/rfsmart.svg new file mode 100644 index 000000000..d33f53084 --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/rfsmart.svg @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/khix/public/assets/sponsor-logos/roblox.svg b/apps/khix/public/assets/sponsor-logos/roblox.svg new file mode 100644 index 000000000..4303549bf --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/roblox.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/khix/public/assets/sponsor-logos/servicenow.svg b/apps/khix/public/assets/sponsor-logos/servicenow.svg new file mode 100644 index 000000000..2be86146f --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/servicenow.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/khix/public/assets/sponsor-logos/statsig.svg b/apps/khix/public/assets/sponsor-logos/statsig.svg new file mode 100644 index 000000000..13b988bb4 --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/statsig.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/khix/public/assets/sponsor-logos/synopsys.svg b/apps/khix/public/assets/sponsor-logos/synopsys.svg new file mode 100644 index 000000000..ad64ad156 --- /dev/null +++ b/apps/khix/public/assets/sponsor-logos/synopsys.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/khix/public/assets/stream only waterfall.png b/apps/khix/public/assets/stream only waterfall.png new file mode 100644 index 000000000..95d98ab78 Binary files /dev/null and b/apps/khix/public/assets/stream only waterfall.png differ diff --git a/apps/khix/public/assets/waterfall-animated.webp b/apps/khix/public/assets/waterfall-animated.webp new file mode 100644 index 000000000..09860b0a8 Binary files /dev/null and b/apps/khix/public/assets/waterfall-animated.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/faq/FAQ cave ceiling - Thomas Ha.png b/apps/khix/public/faq/FAQ cave ceiling - Thomas Ha.png new file mode 100644 index 000000000..a6b9fa99c Binary files /dev/null and b/apps/khix/public/faq/FAQ cave ceiling - Thomas Ha.png differ diff --git a/apps/khix/public/faq/FAQ crystal cluster - Thomas Ha.png b/apps/khix/public/faq/FAQ crystal cluster - Thomas Ha.png new file mode 100644 index 000000000..2303dc303 Binary files /dev/null and b/apps/khix/public/faq/FAQ crystal cluster - Thomas Ha.png differ diff --git a/apps/khix/public/faq/FAQ crystal rock 1 - Thomas Ha.png b/apps/khix/public/faq/FAQ crystal rock 1 - Thomas Ha.png new file mode 100644 index 000000000..2b17bc6e4 Binary files /dev/null and b/apps/khix/public/faq/FAQ crystal rock 1 - Thomas Ha.png differ diff --git a/apps/khix/public/faq/FAQ crystal rock 2 - Thomas Ha.png b/apps/khix/public/faq/FAQ crystal rock 2 - Thomas Ha.png new file mode 100644 index 000000000..4dfbd1992 Binary files /dev/null and b/apps/khix/public/faq/FAQ crystal rock 2 - Thomas Ha.png differ diff --git a/apps/khix/public/faq/FAQ crystal rock 3 - Thomas Ha.png b/apps/khix/public/faq/FAQ crystal rock 3 - Thomas Ha.png new file mode 100644 index 000000000..7ed7899b7 Binary files /dev/null and b/apps/khix/public/faq/FAQ crystal rock 3 - Thomas Ha.png differ diff --git a/apps/khix/public/faq/FAQ large crystal - Thomas Ha.png b/apps/khix/public/faq/FAQ large crystal - Thomas Ha.png new file mode 100644 index 000000000..87d36761f Binary files /dev/null and b/apps/khix/public/faq/FAQ large crystal - Thomas Ha.png differ diff --git a/apps/khix/public/faq/FAQ large mushroom - Thomas Ha.png b/apps/khix/public/faq/FAQ large mushroom - Thomas Ha.png new file mode 100644 index 000000000..619310bac Binary files /dev/null and b/apps/khix/public/faq/FAQ large mushroom - Thomas Ha.png differ diff --git a/apps/khix/public/faq/FAQ misc rock 1 - Thomas Ha.png b/apps/khix/public/faq/FAQ misc rock 1 - Thomas Ha.png new file mode 100644 index 000000000..05c4d5df0 Binary files /dev/null and b/apps/khix/public/faq/FAQ misc rock 1 - Thomas Ha.png differ diff --git a/apps/khix/public/faq/FAQ misc rock 2 - Thomas Ha.png b/apps/khix/public/faq/FAQ misc rock 2 - Thomas Ha.png new file mode 100644 index 000000000..332c44643 Binary files /dev/null and b/apps/khix/public/faq/FAQ misc rock 2 - Thomas Ha.png differ diff --git a/apps/khix/public/faq/FAQ mushroom rock 1 - Thomas Ha.png b/apps/khix/public/faq/FAQ mushroom rock 1 - Thomas Ha.png new file mode 100644 index 000000000..e52f347c8 Binary files /dev/null and b/apps/khix/public/faq/FAQ mushroom rock 1 - Thomas Ha.png differ diff --git a/apps/khix/public/faq/FAQ mushroom rock 2 - Thomas Ha.png b/apps/khix/public/faq/FAQ mushroom rock 2 - Thomas Ha.png new file mode 100644 index 000000000..03e7430cb Binary files /dev/null and b/apps/khix/public/faq/FAQ mushroom rock 2 - Thomas Ha.png differ diff --git a/apps/khix/public/faq/answer-rock-cut.png b/apps/khix/public/faq/answer-rock-cut.png new file mode 100644 index 000000000..f5343e25e Binary files /dev/null and b/apps/khix/public/faq/answer-rock-cut.png differ diff --git a/apps/khix/public/faq/answerRockCroppedFaq.png b/apps/khix/public/faq/answerRockCroppedFaq.png new file mode 100644 index 000000000..259665fe9 Binary files /dev/null and b/apps/khix/public/faq/answerRockCroppedFaq.png differ diff --git a/apps/khix/public/faq/faq background 1.png b/apps/khix/public/faq/faq background 1.png new file mode 100644 index 000000000..2b7e8cc21 Binary files /dev/null and b/apps/khix/public/faq/faq background 1.png differ diff --git a/apps/khix/public/faq/footer.png b/apps/khix/public/faq/footer.png new file mode 100644 index 000000000..3e1e74cd9 Binary files /dev/null and b/apps/khix/public/faq/footer.png differ diff --git a/apps/khix/public/faq/leftcol.png b/apps/khix/public/faq/leftcol.png new file mode 100644 index 000000000..332d872b1 Binary files /dev/null and b/apps/khix/public/faq/leftcol.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 1.png b/apps/khix/public/faq/lennyblink/Frame 1.png new file mode 100644 index 000000000..6ca1ef7be Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 1.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 10.png b/apps/khix/public/faq/lennyblink/Frame 10.png new file mode 100644 index 000000000..6ca1ef7be Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 10.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 11.png b/apps/khix/public/faq/lennyblink/Frame 11.png new file mode 100644 index 000000000..0a88c21ec Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 11.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 12.png b/apps/khix/public/faq/lennyblink/Frame 12.png new file mode 100644 index 000000000..d5b2157d7 Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 12.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 13.png b/apps/khix/public/faq/lennyblink/Frame 13.png new file mode 100644 index 000000000..2d11ef3cf Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 13.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 14.png b/apps/khix/public/faq/lennyblink/Frame 14.png new file mode 100644 index 000000000..00aa2b408 Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 14.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 15.png b/apps/khix/public/faq/lennyblink/Frame 15.png new file mode 100644 index 000000000..110037421 Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 15.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 16.png b/apps/khix/public/faq/lennyblink/Frame 16.png new file mode 100644 index 000000000..00aa2b408 Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 16.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 17.png b/apps/khix/public/faq/lennyblink/Frame 17.png new file mode 100644 index 000000000..2d11ef3cf Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 17.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 18.png b/apps/khix/public/faq/lennyblink/Frame 18.png new file mode 100644 index 000000000..d5b2157d7 Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 18.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 19.png b/apps/khix/public/faq/lennyblink/Frame 19.png new file mode 100644 index 000000000..0a88c21ec Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 19.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 2.png b/apps/khix/public/faq/lennyblink/Frame 2.png new file mode 100644 index 000000000..6ca1ef7be Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 2.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 3.png b/apps/khix/public/faq/lennyblink/Frame 3.png new file mode 100644 index 000000000..6ca1ef7be Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 3.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 4.png b/apps/khix/public/faq/lennyblink/Frame 4.png new file mode 100644 index 000000000..6ca1ef7be Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 4.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 5.png b/apps/khix/public/faq/lennyblink/Frame 5.png new file mode 100644 index 000000000..6ca1ef7be Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 5.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 6.png b/apps/khix/public/faq/lennyblink/Frame 6.png new file mode 100644 index 000000000..6ca1ef7be Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 6.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 7.png b/apps/khix/public/faq/lennyblink/Frame 7.png new file mode 100644 index 000000000..6ca1ef7be Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 7.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 8.png b/apps/khix/public/faq/lennyblink/Frame 8.png new file mode 100644 index 000000000..6ca1ef7be Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 8.png differ diff --git a/apps/khix/public/faq/lennyblink/Frame 9.png b/apps/khix/public/faq/lennyblink/Frame 9.png new file mode 100644 index 000000000..6ca1ef7be Binary files /dev/null and b/apps/khix/public/faq/lennyblink/Frame 9.png differ diff --git a/apps/khix/public/faq/question-rock-cut.png b/apps/khix/public/faq/question-rock-cut.png new file mode 100644 index 000000000..3551e888c Binary files /dev/null and b/apps/khix/public/faq/question-rock-cut.png differ diff --git a/apps/khix/public/faq/rightcol.png b/apps/khix/public/faq/rightcol.png new file mode 100644 index 000000000..66e5e3817 Binary files /dev/null and b/apps/khix/public/faq/rightcol.png differ diff --git a/apps/khix/public/faq/selection-faq-rock.png b/apps/khix/public/faq/selection-faq-rock.png new file mode 100644 index 000000000..845b2a97c Binary files /dev/null and b/apps/khix/public/faq/selection-faq-rock.png differ diff --git a/apps/khix/public/faq/selection-selected-faq-rock.png b/apps/khix/public/faq/selection-selected-faq-rock.png new file mode 100644 index 000000000..1a01e6eaf Binary files /dev/null and b/apps/khix/public/faq/selection-selected-faq-rock.png differ diff --git a/apps/khix/public/faq/seperatorRocks.png b/apps/khix/public/faq/seperatorRocks.png new file mode 100644 index 000000000..5dec22e5a Binary files /dev/null and b/apps/khix/public/faq/seperatorRocks.png 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/PARALLAX.MD b/apps/khix/src/PARALLAX.MD new file mode 100644 index 000000000..2fc31eb2f --- /dev/null +++ b/apps/khix/src/PARALLAX.MD @@ -0,0 +1,77 @@ +# Parallax Implementation Notes + +Temporary handoff for agents working on KHIX or future Forge parallax sections. +This documents the Chromium fix from Carlos's 39fc6795 commit so it can be +reused without rediscovering the same failure mode. + +## What Broke + +The KHIX hero parallax broke when the art stack was treated like a page +background instead of a normal hero section. The problematic shape was: + +- a long or sticky scroll zone that made the hero behave like a background +- a large transformed `.art` container using `scale(...)` +- per-layer parallax values that did not account for that container scale +- unthrottled pointer writes fighting Chromium's rendering pipeline + +The visible symptoms were rapid inline style churn in DevTools, unstable +Chromium parallax, and the hero reading as the entire page background instead +of a section that can scroll away. + +## Carlos's Fix + +Keep the hero itself as a normal section: + +- `section#home` owns the hero and stays in document flow +- `.stage` is `position: relative`, not sticky, for a normal hero +- the hero is `100vh` / `100svh`; extra page scroll should come from following + sections, not from a fake hero scroll zone + +Keep the artwork full-bleed inside the hero without scaling the whole .art +container: + +- store the old visual scale as `--khix-art-motion-scale: 0.64` +- use a smaller art inset, currently `inset: -6.32svh -3.76vw` +- do not put `transform: scale(...)` on `.art` +- apply `--khix-art-motion-scale` inside each layer's parallax transform math + +Scope motion variables to the stage and throttle writes: + +- write `--khix-hero-pointer-x`, `--khix-hero-pointer-y`, and + `--khix-hero-scroll-progress` on the hero stage +- coalesce pointer movement with `requestAnimationFrame` +- only write motion values when they changed by a meaningful epsilon +- cancel pending pointer frames during cleanup and when reduced motion is + enabled + +## Reusable Pattern + +For future parallax components: + +- make the section normal page flow first; avoid sticky or oversized scroll + zones unless the design explicitly calls for pinned storytelling +- keep the art stack visually oversized with insets, not by scaling the whole + container +- if the art needs a visual scale, put that number in a CSS variable and + multiply the pointer and scroll offsets by it +- put all layer movement on `transform: translate3d(...)` and keep depth values + as CSS vars on each layer +- use one local stage for motion vars; do not inject global `:root` motion state + for a component-specific parallax +- throttle pointer writes with `requestAnimationFrame`; throttle scroll writes + too, and skip writes when the value barely changed +- respect `prefers-reduced-motion` by resetting pointer and scroll progress to + `0` and disabling nonessential animated layers + +## Verification Checklist + +Before handing off a parallax change: + +- the hero/section scrolls away like a normal section when content follows it +- the stage is not sticky unless pinned scroll storytelling is the requirement +- Chrome/Chromium DevTools does not show unrelated title/glow/art nodes + constantly changing inline style attributes +- pointer movement still changes layer transforms differently by depth +- scroll changes `--khix-hero-scroll-progress` without causing layout shifts +- `pnpm --filter=@forge/khix lint` and + `pnpm --filter=@forge/khix typecheck` pass for KHIX changes 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 ( -