diff --git a/public/images/company-logo-1.svg b/public/images/company-logo-1.svg new file mode 100644 index 0000000..3d3437e --- /dev/null +++ b/public/images/company-logo-1.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/company-logo-2.svg b/public/images/company-logo-2.svg new file mode 100644 index 0000000..1a16d9c --- /dev/null +++ b/public/images/company-logo-2.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/company-logo-3.svg b/public/images/company-logo-3.svg new file mode 100644 index 0000000..e58fc9f --- /dev/null +++ b/public/images/company-logo-3.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/company-logo-4.svg b/public/images/company-logo-4.svg new file mode 100644 index 0000000..e335cd5 --- /dev/null +++ b/public/images/company-logo-4.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/company-logo-5.svg b/public/images/company-logo-5.svg new file mode 100644 index 0000000..86556df --- /dev/null +++ b/public/images/company-logo-5.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/public/images/company-logo-6.svg b/public/images/company-logo-6.svg new file mode 100644 index 0000000..20347fc --- /dev/null +++ b/public/images/company-logo-6.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/company-logo-7.svg b/public/images/company-logo-7.svg new file mode 100644 index 0000000..285a7e6 --- /dev/null +++ b/public/images/company-logo-7.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/company-logo-8.svg b/public/images/company-logo-8.svg new file mode 100644 index 0000000..8559a25 --- /dev/null +++ b/public/images/company-logo-8.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/company-logo-9.svg b/public/images/company-logo-9.svg new file mode 100644 index 0000000..57d76b9 --- /dev/null +++ b/public/images/company-logo-9.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/images/hyperliquid-bg-1.jpg b/public/images/hyperliquid-bg-1.jpg new file mode 100644 index 0000000..2c44186 Binary files /dev/null and b/public/images/hyperliquid-bg-1.jpg differ diff --git a/public/images/hyperliquid-bg-2.jpg b/public/images/hyperliquid-bg-2.jpg new file mode 100644 index 0000000..df01837 Binary files /dev/null and b/public/images/hyperliquid-bg-2.jpg differ diff --git a/public/images/hyperliquid-img.jpg b/public/images/hyperliquid-img.jpg new file mode 100644 index 0000000..d60e9b7 Binary files /dev/null and b/public/images/hyperliquid-img.jpg differ diff --git a/public/images/screenshots/10x.png b/public/images/screenshots/10x.png new file mode 100644 index 0000000..1f9aeb5 Binary files /dev/null and b/public/images/screenshots/10x.png differ diff --git a/public/images/screenshots/hyper.png b/public/images/screenshots/hyper.png new file mode 100644 index 0000000..78871df Binary files /dev/null and b/public/images/screenshots/hyper.png differ diff --git a/public/images/screenshots/main.png b/public/images/screenshots/main.png new file mode 100644 index 0000000..9c31260 Binary files /dev/null and b/public/images/screenshots/main.png differ diff --git a/public/images/screenshots/trade.png b/public/images/screenshots/trade.png new file mode 100644 index 0000000..3160204 Binary files /dev/null and b/public/images/screenshots/trade.png differ diff --git a/public/images/telegram-icon.svg b/public/images/telegram-icon.svg new file mode 100644 index 0000000..9c99fa3 --- /dev/null +++ b/public/images/telegram-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000..0984344 Binary files /dev/null and b/public/logo.png differ diff --git a/src/app/globals.css b/src/app/globals.css index 49fcd1f..e59a381 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -41,6 +41,7 @@ } @layer base { + *, ::after, ::before, @@ -51,6 +52,7 @@ } @layer utilities { + html, body { max-width: 100vw; @@ -78,8 +80,10 @@ @layer base { :root { - --background: 0 0% 0%; /* Black background */ - --foreground: 0 0% 98%; /* White text */ + --background: 0 0% 0%; + /* Black background */ + --foreground: 0 0% 98%; + /* White text */ --card: 0 0% 3.9%; --card-foreground: 0 0% 98%; --popover: 0 0% 3.9%; @@ -118,42 +122,81 @@ /* Custom animations for landing page */ @keyframes floating { - 0% { transform: translateY(0px); } - 50% { transform: translateY(-20px); } - 100% { transform: translateY(0px); } + 0% { + transform: translateY(0px); + } + + 50% { + transform: translateY(-20px); + } + + 100% { + transform: translateY(0px); + } } + .animate-floating { animation: floating 6s ease-in-out infinite; } @keyframes shine { - 0% { transform: translateX(-100%); } - 100% { transform: translateX(100%); } + 0% { + transform: translateX(-100%); + } + + 100% { + transform: translateX(100%); + } } + .animate-shine { animation: shine 8s infinite; } @keyframes slide { - 0% { background-position: 0 0; } - 100% { background-position: 20px 20px; } + 0% { + background-position: 0 0; + } + + 100% { + background-position: 20px 20px; + } } + .animate-slide { animation: slide 3s linear infinite; } @keyframes fade-in { - 0% { opacity: 0; } - 100% { opacity: 1; } + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } } + .animate-fade-in { animation: fade-in 2s ease-out; } @keyframes terminal-blink { - 0%, 100% { opacity: 1; } - 50% { opacity: 0; } + + 0%, + 100% { + opacity: 1; + } + + 50% { + opacity: 0; + } } + .animate-terminal-blink { animation: terminal-blink 1s step-end infinite; +} + +:root { + --navbar-height: 4rem; } \ No newline at end of file diff --git a/src/app/page.tsx b/src/app/page.tsx index e0098f1..acc6740 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -2,9 +2,12 @@ import React, { useEffect, useRef } from "react"; import Image from "next/image"; -import { MessageCircle, Github, BookOpen } from "lucide-react"; +import { Github } from "lucide-react"; import { Geist, Geist_Mono } from "next/font/google"; -import { XIcon } from "@/components/XIcon"; +import Link from "next/link"; +import MatrixBackground from "@/components/MatrixBackground"; +import { CSSProperties } from "react"; +import Navigation from "@/components/Navigation"; // Initialize fonts const geistSans = Geist({ @@ -64,9 +67,10 @@ export default function HomePage() { // Drawing the characters const draw = () => { // Black BG for the canvas with opacity to create trail effect - ctx.fillStyle = "rgba(0, 0, 0, 0.04)"; + ctx.fillStyle = "rgba(0, 0, 0, 0.06)"; ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.globalAlpha = 0.6; ctx.fillStyle = "#47D8A3"; // Green primary color theme ctx.font = font_size + "px arial"; @@ -87,7 +91,7 @@ export default function HomePage() { } }; - const interval = setInterval(draw, 42); + const interval = setInterval(draw, 55); // Cleanup return () => { @@ -98,139 +102,372 @@ export default function HomePage() { return (
-
- {/* Matrix animation canvas as background */} - + - {/* Social Links - Bottom Left (Adjusted for mobile) */} -
- +
+
+ Hyperliquid Matrix screenshot +
+
+
+ + + {/* Trusted By Section */} +
+

+ Trusted by engineers at +

+
+
+ + {/* Hyperliquid Section */} +
+

+ Built for Hyperliquid +

+

+ Get answers from your positions or refer to trading concepts or + strategies. Use the model's experience in one click. +

+ {/*
+
+ Hyperliquid Matrix screenshot +
+
*/} +
+ + {/* Trading Section */} +
+

+ 10x your trading +

+

+ Matrix lets you breeze through the market by predicting your next + trade. +

+ +
+ + {/* Hero Section */} +
+

+ Trade in natural language +

+

+ Matrix lets you trade using instructions. Manage your Trades and + Portfolio with a simple prompt. +

+ +
+ + {/* Features Section */} +
+
+ + {/* Telegram Section */} +
+
+
+
+
+ Telegram + + Telegram
- -
+

+ Iterating with our Alpha Community +

+

+ Join the Hyperliquid Trader's community channel with alpha + strategies and trading tips to iterate continuously on your + Trading skills. +

+ +
+
+
+
+

Matrix Trading

+

1900 members

+
+
+
+ + {/* Testimonials Section */} +
+

+ Loved by world-class traders +

+

+ Traders in web3 reach for Matrix by choice. +

+
+ + {/* CTA Section */} +
+
+ + + PRICING + +
+
- {/* Main content container with proper spacing */} -
- {/* Logo Container - Adjusted for mobile */} -
- Matrix Logo -
- - {/* Content below logo - ENHANCED WITH PREMIUM GLASS EFFECT - Mobile optimized */} -
- {/* Enhanced Premium Glass Card Effect - More See-Through, Mobile optimized */} -
+
+
+ - {/* Subtle glow effects */} -
-
- - {/* Glass card shine effect */} -
-
- -

- 'Cursor for Hyperliquid' -

-

- your advanced co-pilot for perps trading. -

-
- {/* Custom Connect Button - Enhanced and Mobile optimized */} - +
+
+ + Pricing + + + Downloads + + + Docs + + + Forum + +
+
+ + Careers + + + Company + + + Security + + + Privacy + +
+
+ + Terms + + + Changelog + + + GitHub + + + Twitter + +
- {/* Version Number - Bottom, centered on mobile */} -
- - v0.1337 - +
+
+ English +
+
+ +
-
+
); } diff --git a/src/components/HeroSection.tsx b/src/components/HeroSection.tsx new file mode 100644 index 0000000..df8f842 --- /dev/null +++ b/src/components/HeroSection.tsx @@ -0,0 +1,70 @@ +import React from "react"; +import MatrixBackground from "./MatrixBackground"; + +const HeroSection: React.FC = () => { + return ( +
+ + +
+
+
+

+ The AI +
Code Editor +

+
+ +
+

+ Built to make you extraordinarily productive, Cursor is the best + way to code with AI. +

+
+ +
+ + + + + All Downloads + + +
+ +
+
+ Cursor Demo +
+
+
+
+
+ ); +}; + +export default HeroSection; diff --git a/src/components/MatrixBackground.tsx b/src/components/MatrixBackground.tsx new file mode 100644 index 0000000..82bbc45 --- /dev/null +++ b/src/components/MatrixBackground.tsx @@ -0,0 +1,110 @@ +"use client"; + +import React, { useEffect, useRef } from "react"; +import Image from "next/image"; + +interface MatrixBackgroundProps { + imageUrl: string; + imageAlt?: string; + className?: string; +} + +export default function MatrixBackground({ + imageUrl, + imageAlt = "Background image", + className = "", +}: MatrixBackgroundProps) { + const canvasRef = useRef(null); + + // Initialize and run the matrix animation + useEffect(() => { + const canvas = canvasRef.current; + if (!canvas) return; + + const ctx = canvas.getContext("2d"); + if (!ctx) return; + + // Making the canvas full screen + const resizeCanvas = () => { + canvas.height = window.innerHeight; + canvas.width = window.innerWidth; + }; + + // Handle window resize + window.addEventListener("resize", resizeCanvas); + resizeCanvas(); + + // Matrix characters + const matrix = + "0123456789abcdefABCDEF₿ΞΨ♦️₮Ł∞☰⧉Ω◈⬢⌘฿◊{}[]()<>_|:;,.+-*/=~!@#$%^&*0x1x2x3xf9b4b2f1c9d8a7e6c5b4a30x1234567890xdefi0xenable0xswap0xabcdef"; + + const matrixChars = matrix.split(""); + + const font_size = 10; + const columns = canvas.width / font_size; // Number of columns for the rain + + // An array of drops - one per column + const drops: number[] = []; + for (let x = 0; x < columns; x++) { + drops[x] = Math.floor(Math.random() * canvas.height); + } + + // Drawing the characters + const draw = () => { + // Black BG for the canvas with opacity to create trail effect + ctx.fillStyle = "rgba(0, 0, 0, 0.06)"; + ctx.fillRect(0, 0, canvas.width, canvas.height); + + ctx.globalAlpha = 0.6; + ctx.fillStyle = "#47D8A3"; // Green primary color theme + ctx.font = font_size + "px arial"; + + // Looping over drops + for (let i = 0; i < drops.length; i++) { + // Random character to print + const text = + matrixChars[Math.floor(Math.random() * matrixChars.length)]; + ctx.fillText(text, i * font_size, drops[i] * font_size); + + // Sending the drop back to the top randomly after it has crossed the screen + if (drops[i] * font_size > canvas.height && Math.random() > 0.975) { + drops[i] = 0; + } + + // Incrementing Y coordinate + drops[i]++; + } + }; + + const interval = setInterval(draw, 55); + + // Cleanup + return () => { + clearInterval(interval); + window.removeEventListener("resize", resizeCanvas); + }; + }, []); + + return ( +
+ {/* Matrix Canvas Background */} +
+ +
+ + {/* Content Container with Image */} +
+
+ {imageAlt} +
+
+
+ ); +} diff --git a/src/components/Navigation.tsx b/src/components/Navigation.tsx new file mode 100644 index 0000000..d99704b --- /dev/null +++ b/src/components/Navigation.tsx @@ -0,0 +1,122 @@ +import Image from "next/image"; +import Link from "next/link"; +import { useEffect, useState } from "react"; + +interface NavigationProps { + onConnect: () => void; +} + +export default function Navigation({ onConnect }: NavigationProps) { + const [isScrolled, setIsScrolled] = useState(false); + + useEffect(() => { + const handleScroll = () => { + setIsScrolled(window.scrollY > 0); + }; + + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + return ( + + ); +} diff --git a/src/components/XIcon.tsx b/src/components/XIcon.tsx deleted file mode 100644 index 1a54087..0000000 --- a/src/components/XIcon.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export function XIcon({ className = "h-5 w-5" }) { - return ( - - - - ); -}