diff --git a/src/App.css b/src/App.css deleted file mode 100644 index b9d355d..0000000 --- a/src/App.css +++ /dev/null @@ -1,42 +0,0 @@ -#root { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.react:hover { - filter: drop-shadow(0 0 2em #61dafbaa); -} - -@keyframes logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} - -@media (prefers-reduced-motion: no-preference) { - a:nth-of-type(2) .logo { - animation: logo-spin infinite 20s linear; - } -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} diff --git a/src/pages/Landing.tsx b/src/pages/Landing.tsx index 6e2c459..81d5496 100644 --- a/src/pages/Landing.tsx +++ b/src/pages/Landing.tsx @@ -1,7 +1,7 @@ -import { useState, useEffect } from 'react'; +import React, { useState, useEffect } from 'react'; import { motion } from 'framer-motion'; import { useToast } from '@/hooks/use-toast'; -import DeployChainIcon from '@/components/DeployChainIcon'; + import DeploymentCard from '@/components/DeploymentCard'; import deploymentPipeline from '@/assets/deployment-pipeline.jpg'; @@ -20,6 +20,7 @@ const Landing = () => { const [deploying, setDeploying] = useState(false); const [repoUrl, setRepoUrl] = useState(''); const [branch, setBranch] = useState('main'); + const [menuOpen, setMenuOpen] = useState(false); const { toast } = useToast(); // Mock data for deployments @@ -135,55 +136,121 @@ const Landing = () => { }; return ( -
+
{/* Navigation */}
- DeployChain + DeployChain
+ {/* Desktop Nav */}
- {['hero', 'problem', 'solution', 'features', 'demo', 'deployments', 'try-it'].map((section) => ( - - ))} + + + +
+ {/* Hamburger for mobile */} +
+
+ {/* Mobile Menu Drawer */} + {menuOpen && ( +
setMenuOpen(false)}> +
e.stopPropagation()}> + + + + +
+
+ )}
{/* Hero Section */} -
-
+
+ {/* Video Background */} + + {/* Overlay to prevent white blink */} +
+
- -

DeployChain

-

+ +

DeployChain

+

Vercel for Web3: Deploy dApps with One Git Push

-

+

Smart contracts + frontend deployed seamlessly to Sepolia testnet.

-
+
smoothScrollTo('try-it')} - className="btn-hero" + className="btn-hero w-full sm:w-auto" > Try It Now @@ -191,7 +258,7 @@ const Landing = () => { whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }} onClick={() => smoothScrollTo('demo')} - className="btn-outline" + className="btn-outline w-full sm:w-auto" > Watch Demo @@ -234,10 +301,10 @@ const Landing = () => { whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} transition={{ delay: index * 0.2 }} - className="card-problem" + className="card-problem p-6 rounded-xl shadow-md bg-white/80 dark:bg-gray-900/80 text-center flex flex-col items-center" > -

{problem.title}

-

{problem.description}

+

{problem.title}

+

{problem.description}

))}
@@ -312,10 +379,10 @@ const Landing = () => { whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} transition={{ delay: index * 0.1 }} - className="card-feature" + className="card-feature p-6 rounded-xl shadow-md bg-white/80 dark:bg-gray-900/80 text-center flex flex-col items-center" > -

{feature.title}

-

{feature.description}

+

{feature.title}

+

{feature.description}

))}
@@ -384,11 +451,13 @@ const Landing = () => { ) : (
{deployments.map((deployment, index) => ( - +
+ +
))}
)} diff --git a/README.md b/web/README.md similarity index 100% rename from README.md rename to web/README.md diff --git a/bun.lockb b/web/bun.lockb similarity index 100% rename from bun.lockb rename to web/bun.lockb diff --git a/components.json b/web/components.json similarity index 100% rename from components.json rename to web/components.json diff --git a/eslint.config.js b/web/eslint.config.js similarity index 100% rename from eslint.config.js rename to web/eslint.config.js diff --git a/index.html b/web/index.html similarity index 83% rename from index.html rename to web/index.html index 51962bc..4a122a2 100644 --- a/index.html +++ b/web/index.html @@ -1,6 +1,7 @@ + DeployChain - Vercel for Web3 dApps @@ -11,11 +12,11 @@ - + - + diff --git a/package-lock.json b/web/package-lock.json similarity index 98% rename from package-lock.json rename to web/package-lock.json index d6506b5..deac208 100644 --- a/package-lock.json +++ b/web/package-lock.json @@ -63,7 +63,7 @@ "@eslint/js": "^9.32.0", "@tailwindcss/typography": "^0.5.16", "@types/node": "^22.16.5", - "@types/react": "^18.3.23", + "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", "@vitejs/plugin-react-swc": "^3.11.0", "autoprefixer": "^10.4.21", @@ -76,14 +76,13 @@ "tailwindcss": "^3.4.17", "typescript": "^5.8.3", "typescript-eslint": "^8.38.0", - "vite": "^5.4.19" + "vite": "^5.4.20" } }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -847,7 +846,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -865,7 +863,6 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -880,7 +877,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -890,7 +886,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -900,14 +895,12 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -918,7 +911,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -932,7 +924,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -942,7 +933,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -956,7 +946,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "license": "MIT", "optional": true, "engines": { @@ -2929,14 +2918,14 @@ "version": "15.7.13", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", - "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", - "dev": true, + "version": "18.3.24", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.24.tgz", + "integrity": "sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A==", + "devOptional": true, "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -2947,7 +2936,7 @@ "version": "18.3.7", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", - "dev": true, + "devOptional": true, "license": "MIT", "peerDependencies": { "@types/react": "^18.0.0" @@ -3269,7 +3258,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -3282,7 +3270,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3298,14 +3285,12 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true, "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -3319,7 +3304,6 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true, "license": "MIT" }, "node_modules/argparse": { @@ -3383,14 +3367,12 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, "license": "MIT" }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3414,7 +3396,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -3470,7 +3451,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -3518,7 +3498,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -3543,7 +3522,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -3592,7 +3570,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -3605,14 +3582,12 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -3629,7 +3604,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3643,7 +3617,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, "license": "MIT", "bin": { "cssesc": "bin/cssesc" @@ -3830,14 +3803,12 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true, "license": "Apache-2.0" }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true, "license": "MIT" }, "node_modules/dom-helpers": { @@ -3854,7 +3825,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { @@ -3896,7 +3866,6 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/esbuild": { @@ -4175,7 +4144,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -4192,7 +4160,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -4219,7 +4186,6 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -4242,7 +4208,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -4293,7 +4258,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", @@ -4351,7 +4315,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -4366,7 +4329,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4385,7 +4347,6 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -4406,7 +4367,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.3" @@ -4419,7 +4379,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -4429,7 +4388,6 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -4475,7 +4433,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -4544,7 +4501,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -4557,7 +4513,6 @@ "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -4573,7 +4528,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4583,7 +4537,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4593,7 +4546,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -4606,7 +4558,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -4616,14 +4567,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -4639,7 +4588,6 @@ "version": "1.21.6", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "dev": true, "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -4713,7 +4661,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, "license": "MIT", "engines": { "node": ">=14" @@ -4726,7 +4673,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, "license": "MIT" }, "node_modules/locate-path": { @@ -5236,7 +5182,6 @@ "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, "license": "ISC" }, "node_modules/lucide-react": { @@ -5261,7 +5206,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -5271,7 +5215,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -5298,7 +5241,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -5330,7 +5272,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, "license": "MIT", "dependencies": { "any-promise": "^1.0.0", @@ -5342,7 +5283,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -5385,7 +5325,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5414,7 +5353,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -5474,7 +5412,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/parent-module": { @@ -5504,7 +5441,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5514,14 +5450,12 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -5538,14 +5472,12 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -5558,7 +5490,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5568,7 +5499,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 6" @@ -5578,7 +5508,6 @@ "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5607,7 +5536,6 @@ "version": "15.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dev": true, "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", @@ -5625,7 +5553,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" @@ -5645,7 +5572,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5681,7 +5607,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5707,7 +5632,6 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -5721,7 +5645,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, "license": "MIT" }, "node_modules/prelude-ls": { @@ -5765,7 +5688,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -5989,7 +5911,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, "license": "MIT", "dependencies": { "pify": "^2.3.0" @@ -5999,7 +5920,6 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -6044,7 +5964,6 @@ "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -6072,7 +5991,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -6119,7 +6037,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -6165,7 +6082,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -6178,7 +6094,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6188,7 +6103,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -6211,7 +6125,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -6221,7 +6134,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -6240,7 +6152,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -6255,7 +6166,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6265,14 +6175,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6285,7 +6193,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -6302,7 +6209,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6315,7 +6221,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6338,7 +6243,6 @@ "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", @@ -6374,7 +6278,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6397,7 +6300,6 @@ "version": "3.4.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", - "dev": true, "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -6444,7 +6346,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, "license": "MIT", "dependencies": { "any-promise": "^1.0.0" @@ -6454,7 +6355,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" @@ -6473,7 +6373,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -6499,7 +6398,6 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "dev": true, "license": "Apache-2.0" }, "node_modules/tslib": { @@ -6663,7 +6561,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, "license": "MIT" }, "node_modules/vaul": { @@ -6702,9 +6599,9 @@ } }, "node_modules/vite": { - "version": "5.4.19", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", - "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "version": "5.4.20", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", + "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", "dev": true, "license": "MIT", "dependencies": { @@ -6765,7 +6662,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -6791,7 +6687,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -6810,7 +6705,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -6828,7 +6722,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6838,14 +6731,12 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -6860,7 +6751,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6873,7 +6763,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -6886,7 +6775,6 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", - "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" diff --git a/package.json b/web/package.json similarity index 98% rename from package.json rename to web/package.json index db8ca42..4ed1089 100644 --- a/package.json +++ b/web/package.json @@ -66,7 +66,7 @@ "@eslint/js": "^9.32.0", "@tailwindcss/typography": "^0.5.16", "@types/node": "^22.16.5", - "@types/react": "^18.3.23", + "@types/react": "^18.3.24", "@types/react-dom": "^18.3.7", "@vitejs/plugin-react-swc": "^3.11.0", "autoprefixer": "^10.4.21", @@ -79,6 +79,6 @@ "tailwindcss": "^3.4.17", "typescript": "^5.8.3", "typescript-eslint": "^8.38.0", - "vite": "^5.4.19" + "vite": "^5.4.20" } } diff --git a/postcss.config.js b/web/postcss.config.js similarity index 100% rename from postcss.config.js rename to web/postcss.config.js diff --git a/web/public/Your paragraph text.mp4 b/web/public/Your paragraph text.mp4 new file mode 100644 index 0000000..31580ba Binary files /dev/null and b/web/public/Your paragraph text.mp4 differ diff --git a/public/favicon.ico b/web/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to web/public/favicon.ico diff --git a/public/placeholder.svg b/web/public/placeholder.svg similarity index 100% rename from public/placeholder.svg rename to web/public/placeholder.svg diff --git a/public/robots.txt b/web/public/robots.txt similarity index 100% rename from public/robots.txt rename to web/public/robots.txt diff --git a/web/src/App.css b/web/src/App.css new file mode 100644 index 0000000..8cfdc67 --- /dev/null +++ b/web/src/App.css @@ -0,0 +1,99 @@ +#root { + width: 100vw; + min-height: 100vh; + margin: 0; + padding: 0; + text-align: initial; +} + +html, body { + width: 100vw; + min-height: 100vh; + margin: 0; + padding: 0; + box-sizing: border-box; + overflow-x: hidden; +} + +section, footer, header, nav, main, div { + box-sizing: border-box; +} + +img, video { + max-width: 100%; + height: auto; + display: block; +} + +@media (max-width: 640px) { + .max-w-6xl, .max-w-4xl, .max-w-3xl, .max-w-2xl { + max-width: 100vw !important; + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .px-4, .sm\:px-6, .lg\:px-8 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .text-5xl, .md\:text-7xl { + font-size: 2rem !important; + } + .text-4xl, .md\:text-5xl { + font-size: 1.5rem !important; + } + .text-3xl, .md\:text-3xl { + font-size: 1.25rem !important; + } + .text-2xl, .md\:text-2xl { + font-size: 1.1rem !important; + } + .text-xl, .md\:text-xl { + font-size: 1rem !important; + } + .mb-12, .mb-6 { + margin-bottom: 1rem !important; + } + .h-16 { + height: 3.5rem !important; + } + .flex-row { + flex-direction: column !important; + gap: 0.5rem !important; + } +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/src/App.tsx b/web/src/App.tsx similarity index 89% rename from src/App.tsx rename to web/src/App.tsx index 18daf2e..ef6e7ca 100644 --- a/src/App.tsx +++ b/web/src/App.tsx @@ -5,6 +5,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { BrowserRouter, Routes, Route } from "react-router-dom"; import Index from "./pages/Index"; import NotFound from "./pages/NotFound"; +import Dashboard from "./pages/Dashboard"; const queryClient = new QueryClient(); @@ -16,6 +17,7 @@ const App = () => ( } /> + } /> {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */} } /> diff --git a/web/src/assets/Deploy.svg b/web/src/assets/Deploy.svg new file mode 100644 index 0000000..a5dd4a5 --- /dev/null +++ b/web/src/assets/Deploy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/src/assets/bits.png b/web/src/assets/bits.png new file mode 100644 index 0000000..7e40fd4 Binary files /dev/null and b/web/src/assets/bits.png differ diff --git a/web/src/assets/block.png b/web/src/assets/block.png new file mode 100644 index 0000000..d9ec41c Binary files /dev/null and b/web/src/assets/block.png differ diff --git a/src/assets/deployment-pipeline.jpg b/web/src/assets/deployment-pipeline.jpg similarity index 100% rename from src/assets/deployment-pipeline.jpg rename to web/src/assets/deployment-pipeline.jpg diff --git a/src/components/DeployChainIcon.tsx b/web/src/components/DeployChainIcon.tsx similarity index 96% rename from src/components/DeployChainIcon.tsx rename to web/src/components/DeployChainIcon.tsx index 42fa2f5..f8d7184 100644 --- a/src/components/DeployChainIcon.tsx +++ b/web/src/components/DeployChainIcon.tsx @@ -3,7 +3,7 @@ import { motion } from 'framer-motion'; const DeployChainIcon = () => { return ( diff --git a/src/components/DeploymentCard.tsx b/web/src/components/DeploymentCard.tsx similarity index 100% rename from src/components/DeploymentCard.tsx rename to web/src/components/DeploymentCard.tsx diff --git a/src/components/ui/accordion.tsx b/web/src/components/ui/accordion.tsx similarity index 100% rename from src/components/ui/accordion.tsx rename to web/src/components/ui/accordion.tsx diff --git a/src/components/ui/alert-dialog.tsx b/web/src/components/ui/alert-dialog.tsx similarity index 100% rename from src/components/ui/alert-dialog.tsx rename to web/src/components/ui/alert-dialog.tsx diff --git a/src/components/ui/alert.tsx b/web/src/components/ui/alert.tsx similarity index 100% rename from src/components/ui/alert.tsx rename to web/src/components/ui/alert.tsx diff --git a/src/components/ui/aspect-ratio.tsx b/web/src/components/ui/aspect-ratio.tsx similarity index 100% rename from src/components/ui/aspect-ratio.tsx rename to web/src/components/ui/aspect-ratio.tsx diff --git a/src/components/ui/avatar.tsx b/web/src/components/ui/avatar.tsx similarity index 100% rename from src/components/ui/avatar.tsx rename to web/src/components/ui/avatar.tsx diff --git a/src/components/ui/badge.tsx b/web/src/components/ui/badge.tsx similarity index 100% rename from src/components/ui/badge.tsx rename to web/src/components/ui/badge.tsx diff --git a/src/components/ui/breadcrumb.tsx b/web/src/components/ui/breadcrumb.tsx similarity index 100% rename from src/components/ui/breadcrumb.tsx rename to web/src/components/ui/breadcrumb.tsx diff --git a/src/components/ui/button.tsx b/web/src/components/ui/button.tsx similarity index 100% rename from src/components/ui/button.tsx rename to web/src/components/ui/button.tsx diff --git a/src/components/ui/calendar.tsx b/web/src/components/ui/calendar.tsx similarity index 100% rename from src/components/ui/calendar.tsx rename to web/src/components/ui/calendar.tsx diff --git a/src/components/ui/card.tsx b/web/src/components/ui/card.tsx similarity index 100% rename from src/components/ui/card.tsx rename to web/src/components/ui/card.tsx diff --git a/src/components/ui/carousel.tsx b/web/src/components/ui/carousel.tsx similarity index 100% rename from src/components/ui/carousel.tsx rename to web/src/components/ui/carousel.tsx diff --git a/src/components/ui/chart.tsx b/web/src/components/ui/chart.tsx similarity index 100% rename from src/components/ui/chart.tsx rename to web/src/components/ui/chart.tsx diff --git a/src/components/ui/checkbox.tsx b/web/src/components/ui/checkbox.tsx similarity index 100% rename from src/components/ui/checkbox.tsx rename to web/src/components/ui/checkbox.tsx diff --git a/src/components/ui/collapsible.tsx b/web/src/components/ui/collapsible.tsx similarity index 100% rename from src/components/ui/collapsible.tsx rename to web/src/components/ui/collapsible.tsx diff --git a/src/components/ui/command.tsx b/web/src/components/ui/command.tsx similarity index 100% rename from src/components/ui/command.tsx rename to web/src/components/ui/command.tsx diff --git a/src/components/ui/context-menu.tsx b/web/src/components/ui/context-menu.tsx similarity index 100% rename from src/components/ui/context-menu.tsx rename to web/src/components/ui/context-menu.tsx diff --git a/src/components/ui/dialog.tsx b/web/src/components/ui/dialog.tsx similarity index 100% rename from src/components/ui/dialog.tsx rename to web/src/components/ui/dialog.tsx diff --git a/src/components/ui/drawer.tsx b/web/src/components/ui/drawer.tsx similarity index 100% rename from src/components/ui/drawer.tsx rename to web/src/components/ui/drawer.tsx diff --git a/src/components/ui/dropdown-menu.tsx b/web/src/components/ui/dropdown-menu.tsx similarity index 100% rename from src/components/ui/dropdown-menu.tsx rename to web/src/components/ui/dropdown-menu.tsx diff --git a/src/components/ui/form.tsx b/web/src/components/ui/form.tsx similarity index 100% rename from src/components/ui/form.tsx rename to web/src/components/ui/form.tsx diff --git a/src/components/ui/hover-card.tsx b/web/src/components/ui/hover-card.tsx similarity index 100% rename from src/components/ui/hover-card.tsx rename to web/src/components/ui/hover-card.tsx diff --git a/src/components/ui/input-otp.tsx b/web/src/components/ui/input-otp.tsx similarity index 100% rename from src/components/ui/input-otp.tsx rename to web/src/components/ui/input-otp.tsx diff --git a/src/components/ui/input.tsx b/web/src/components/ui/input.tsx similarity index 100% rename from src/components/ui/input.tsx rename to web/src/components/ui/input.tsx diff --git a/src/components/ui/label.tsx b/web/src/components/ui/label.tsx similarity index 100% rename from src/components/ui/label.tsx rename to web/src/components/ui/label.tsx diff --git a/src/components/ui/menubar.tsx b/web/src/components/ui/menubar.tsx similarity index 100% rename from src/components/ui/menubar.tsx rename to web/src/components/ui/menubar.tsx diff --git a/src/components/ui/navigation-menu.tsx b/web/src/components/ui/navigation-menu.tsx similarity index 100% rename from src/components/ui/navigation-menu.tsx rename to web/src/components/ui/navigation-menu.tsx diff --git a/src/components/ui/pagination.tsx b/web/src/components/ui/pagination.tsx similarity index 100% rename from src/components/ui/pagination.tsx rename to web/src/components/ui/pagination.tsx diff --git a/src/components/ui/popover.tsx b/web/src/components/ui/popover.tsx similarity index 100% rename from src/components/ui/popover.tsx rename to web/src/components/ui/popover.tsx diff --git a/src/components/ui/progress.tsx b/web/src/components/ui/progress.tsx similarity index 100% rename from src/components/ui/progress.tsx rename to web/src/components/ui/progress.tsx diff --git a/src/components/ui/radio-group.tsx b/web/src/components/ui/radio-group.tsx similarity index 100% rename from src/components/ui/radio-group.tsx rename to web/src/components/ui/radio-group.tsx diff --git a/src/components/ui/resizable.tsx b/web/src/components/ui/resizable.tsx similarity index 100% rename from src/components/ui/resizable.tsx rename to web/src/components/ui/resizable.tsx diff --git a/src/components/ui/scroll-area.tsx b/web/src/components/ui/scroll-area.tsx similarity index 100% rename from src/components/ui/scroll-area.tsx rename to web/src/components/ui/scroll-area.tsx diff --git a/src/components/ui/select.tsx b/web/src/components/ui/select.tsx similarity index 100% rename from src/components/ui/select.tsx rename to web/src/components/ui/select.tsx diff --git a/src/components/ui/separator.tsx b/web/src/components/ui/separator.tsx similarity index 100% rename from src/components/ui/separator.tsx rename to web/src/components/ui/separator.tsx diff --git a/src/components/ui/sheet.tsx b/web/src/components/ui/sheet.tsx similarity index 100% rename from src/components/ui/sheet.tsx rename to web/src/components/ui/sheet.tsx diff --git a/src/components/ui/sidebar.tsx b/web/src/components/ui/sidebar.tsx similarity index 100% rename from src/components/ui/sidebar.tsx rename to web/src/components/ui/sidebar.tsx diff --git a/src/components/ui/skeleton.tsx b/web/src/components/ui/skeleton.tsx similarity index 100% rename from src/components/ui/skeleton.tsx rename to web/src/components/ui/skeleton.tsx diff --git a/src/components/ui/slider.tsx b/web/src/components/ui/slider.tsx similarity index 100% rename from src/components/ui/slider.tsx rename to web/src/components/ui/slider.tsx diff --git a/src/components/ui/sonner.tsx b/web/src/components/ui/sonner.tsx similarity index 100% rename from src/components/ui/sonner.tsx rename to web/src/components/ui/sonner.tsx diff --git a/src/components/ui/switch.tsx b/web/src/components/ui/switch.tsx similarity index 100% rename from src/components/ui/switch.tsx rename to web/src/components/ui/switch.tsx diff --git a/src/components/ui/table.tsx b/web/src/components/ui/table.tsx similarity index 100% rename from src/components/ui/table.tsx rename to web/src/components/ui/table.tsx diff --git a/src/components/ui/tabs.tsx b/web/src/components/ui/tabs.tsx similarity index 100% rename from src/components/ui/tabs.tsx rename to web/src/components/ui/tabs.tsx diff --git a/src/components/ui/textarea.tsx b/web/src/components/ui/textarea.tsx similarity index 100% rename from src/components/ui/textarea.tsx rename to web/src/components/ui/textarea.tsx diff --git a/src/components/ui/toast.tsx b/web/src/components/ui/toast.tsx similarity index 100% rename from src/components/ui/toast.tsx rename to web/src/components/ui/toast.tsx diff --git a/src/components/ui/toaster.tsx b/web/src/components/ui/toaster.tsx similarity index 100% rename from src/components/ui/toaster.tsx rename to web/src/components/ui/toaster.tsx diff --git a/src/components/ui/toggle-group.tsx b/web/src/components/ui/toggle-group.tsx similarity index 100% rename from src/components/ui/toggle-group.tsx rename to web/src/components/ui/toggle-group.tsx diff --git a/src/components/ui/toggle.tsx b/web/src/components/ui/toggle.tsx similarity index 100% rename from src/components/ui/toggle.tsx rename to web/src/components/ui/toggle.tsx diff --git a/src/components/ui/tooltip.tsx b/web/src/components/ui/tooltip.tsx similarity index 100% rename from src/components/ui/tooltip.tsx rename to web/src/components/ui/tooltip.tsx diff --git a/src/components/ui/use-toast.ts b/web/src/components/ui/use-toast.ts similarity index 100% rename from src/components/ui/use-toast.ts rename to web/src/components/ui/use-toast.ts diff --git a/src/hooks/use-mobile.tsx b/web/src/hooks/use-mobile.tsx similarity index 100% rename from src/hooks/use-mobile.tsx rename to web/src/hooks/use-mobile.tsx diff --git a/src/hooks/use-toast.ts b/web/src/hooks/use-toast.ts similarity index 100% rename from src/hooks/use-toast.ts rename to web/src/hooks/use-toast.ts diff --git a/src/index.css b/web/src/index.css similarity index 100% rename from src/index.css rename to web/src/index.css diff --git a/src/lib/utils.ts b/web/src/lib/utils.ts similarity index 100% rename from src/lib/utils.ts rename to web/src/lib/utils.ts diff --git a/src/main.tsx b/web/src/main.tsx similarity index 100% rename from src/main.tsx rename to web/src/main.tsx diff --git a/web/src/pages/Dashboard.tsx b/web/src/pages/Dashboard.tsx new file mode 100644 index 0000000..3d371e2 --- /dev/null +++ b/web/src/pages/Dashboard.tsx @@ -0,0 +1,140 @@ + +import React, { useState, useEffect } from 'react'; + +const Dashboard: React.FC = () => { + const [activeSection, setActiveSection] = useState<'github' | 'health' | 'transaction'>('github'); + + return ( +
+ {/* Sidebar */} + + {/* Main Area */} +
+ {activeSection === 'github' && ( + <> +

Deployments

+
+ +
+ + )} + {activeSection === 'health' && ( + <> +

Health

+
Monitor the health of your deployments and services here.
+ + )} + {activeSection === 'transaction' && ( + <> +

Transaction

+
View and manage your deployment transactions here.
+ + )} +
+
+ ); +}; + + + +function DeploymentsTable() { + const [deployments, setDeployments] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(""); + + useEffect(() => { + setLoading(true); + fetch("https://8589d4996986.ngrok-free.app/api/deployments") + .then((res) => { + if (!res.ok) throw new Error("Failed to fetch"); + return res.json(); + }) + .then((data) => { + setDeployments(data); + setError(""); + }) + .catch((err) => { + setError(err.message || "Unknown error"); + }) + .finally(() => setLoading(false)); + }, []); + + if (loading) return
Loading...
; + if (error) return
Error: {error}
; + if (!deployments.length) return
No deployments found.
; + + return ( + + + + + + + + + + + + + + + + {deployments.map((item) => ( + + + + + + + + + + + + ))} + + +
IDProject NameStatusTypeNetworkGas UsedError MessageCreated AtUpdated At
{item.id}{item.project_name} + + {item.status} + + {item.deployment_type}{item.blockchain_network}{item.gas_used}{item.error_message}{new Date(item.created_at).toLocaleString()}{new Date(item.updated_at).toLocaleString()}
+ ); +} + +export default Dashboard; diff --git a/src/pages/Index.tsx b/web/src/pages/Index.tsx similarity index 100% rename from src/pages/Index.tsx rename to web/src/pages/Index.tsx diff --git a/web/src/pages/Landing.tsx b/web/src/pages/Landing.tsx new file mode 100644 index 0000000..5a4a190 --- /dev/null +++ b/web/src/pages/Landing.tsx @@ -0,0 +1,391 @@ +import { useState, useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { motion } from 'framer-motion'; +import { useToast } from '@/hooks/use-toast'; +import DeployChainIcon from '@/components/DeployChainIcon'; +import DeploymentCard from '@/components/DeploymentCard'; +import block from '@/assets/block.png'; +import Deploy from '@/assets/Deploy.svg'; + + +interface Deployment { + id: number; + project_name: string; + status: 'deployed' | 'deploying' | 'failed'; + url: string; + contract_addresses: { [key: string]: string }; + deployment_type: 'dapp' | 'static'; +} + +const Landing = () => { + const [deployments, setDeployments] = useState([]); + const [loading, setLoading] = useState(true); + const [deploying, setDeploying] = useState(false); + const [repoUrl, setRepoUrl] = useState(''); + const [branch, setBranch] = useState('main'); + const { toast } = useToast(); + const navigate = useNavigate(); + + // Mock data for deployments + const mockDeployments: Deployment[] = [ + { + id: 1, + project_name: "Test dApp", + status: "deployed", + url: "https://app-1.deploychain.locci.cloud", + contract_addresses: { + "Greeter": "0x123abc456def789ghi012jkl345mno678pqr901st", + "Token": "0x987zyx654wvu321tsr098qpo765nml432kji109hg" + }, + deployment_type: "dapp" + }, + { + id: 2, + project_name: "Portfolio Site", + status: "deployed", + url: "https://portfolio.deploychain.locci.cloud", + contract_addresses: {}, + deployment_type: "static" + }, + { + id: 3, + project_name: "NFT Marketplace", + status: "deploying", + url: "https://nft-marketplace.deploychain.locci.cloud", + contract_addresses: { + "NFTMarketplace": "0xabc123def456ghi789jkl012mno345pqr678stu901" + }, + deployment_type: "dapp" + } + ]; + + useEffect(() => { + fetchDeployments(); + }, []); + + const fetchDeployments = async () => { + try { + const response = await fetch('/api/deployments'); + if (response.ok) { + const data = await response.json(); + setDeployments(data); + } else { + // Use mock data if API fails + setDeployments(mockDeployments); + } + } catch (error) { + console.error('Failed to fetch deployments:', error); + setDeployments(mockDeployments); + } finally { + setLoading(false); + } + }; + + const handleDeploy = async (e: React.FormEvent) => { + e.preventDefault(); + if (!repoUrl.trim()) { + toast({ + title: "Error", + description: "Please enter a GitHub repository URL", + variant: "destructive" + }); + return; + } + + setDeploying(true); + try { + const projectName = repoUrl.split('/').pop()?.replace('.git', '') || 'Unknown'; + const response = await fetch('/api/deploy', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + repo_url: repoUrl, + branch: branch, + project_name: projectName + }), + }); + + if (response.ok) { + toast({ + title: "Deployment Started!", + description: `${projectName} is being deployed. Check the deployments section for updates.`, + }); + setRepoUrl(''); + setBranch('main'); + // Refetch deployments after a short delay + setTimeout(fetchDeployments, 1000); + } else { + throw new Error('Deployment failed'); + } + } catch (error) { + console.error('Deployment error:', error); + toast({ + title: "Deployment Failed", + description: "There was an error starting your deployment. Please try again.", + variant: "destructive" + }); + } finally { + setDeploying(false); + } + }; + + const smoothScrollTo = (elementId: string) => { + const element = document.getElementById(elementId); + if (element) { + element.scrollIntoView({ behavior: 'smooth' }); + } + }; + + return ( +
+ {/* Navigation */} + +
+
+
+
+
+ + DeployChain +
+
+
+
+ + + +
+
+
+
+ + {/* Hero Section */} +
+ {/* Video Background */} + + {/* Overlay to prevent white blink */} +
+
+ + +

+ DeployChain Logo +

+

+ Vercel for Web3: Deploy dApps with One Git Push +

+

+ Smart contracts + frontend deployed seamlessly to Sepolia testnet. +

+
+ navigate('/dashboard')} + className="btn-hero w-full sm:w-auto" + > + Try It Now + +
+
+
+
+ + {/* Problem Section */} +
+
+ +

+ The Web3 Deployment Problem +

+
+
+ {[ + { + title: "Fragmented Workflow", + description: "Separate tools for frontend and smart contracts make deployment complex and error-prone." + }, + { + title: "Manual Setup", + description: "Configuring RPCs, compiling Solidity, and managing deployments takes valuable development time." + }, + { + title: "Slow Iteration", + description: "Hackathon time lost on deployment setup instead of building innovative features." + } + ].map((problem, index) => ( + +

{problem.title}

+

{problem.description}

+
+ ))} +
+
+
+ + {/* Solution Section */} +
+
+ +

+ DeployChain: One Push, Full dApp +

+

+ Our intelligent pipeline detects Web3 projects, compiles smart contracts, deploys to Sepolia testnet, + and provides you with a complete dashboard to track your dApp's performance. +

+
+ + DeployChain deployment pipeline flowchart + +
+
+ + {/* Features Section */} +
+
+ +

Key Features

+
+
+ {[ + { + title: "One-Push Deploy", + description: "Complete dApp deployment in under 5 minutes with a single Git push." + }, + { + title: "Web3 Detection", + description: "Automatically detects Web3 projects via contracts/ folder or hardhat.config.js." + }, + { + title: "MultiBaas Powered", + description: "Seamless smart contract deployment to Sepolia testnet infrastructure." + }, + { + title: "Dashboard Insights", + description: "Track deployments with direct Etherscan links and performance metrics." + } + ].map((feature, index) => ( + +

{feature.title}

+

{feature.description}

+
+ ))} +
+
+
+ + {/* Footer */} + +
+ ); +}; + +export default Landing; \ No newline at end of file diff --git a/src/pages/NotFound.tsx b/web/src/pages/NotFound.tsx similarity index 100% rename from src/pages/NotFound.tsx rename to web/src/pages/NotFound.tsx diff --git a/src/vite-env.d.ts b/web/src/vite-env.d.ts similarity index 100% rename from src/vite-env.d.ts rename to web/src/vite-env.d.ts diff --git a/tailwind.config.ts b/web/tailwind.config.ts similarity index 100% rename from tailwind.config.ts rename to web/tailwind.config.ts diff --git a/tsconfig.app.json b/web/tsconfig.app.json similarity index 100% rename from tsconfig.app.json rename to web/tsconfig.app.json diff --git a/tsconfig.json b/web/tsconfig.json similarity index 100% rename from tsconfig.json rename to web/tsconfig.json diff --git a/tsconfig.node.json b/web/tsconfig.node.json similarity index 100% rename from tsconfig.node.json rename to web/tsconfig.node.json diff --git a/vite.config.ts b/web/vite.config.ts similarity index 96% rename from vite.config.ts rename to web/vite.config.ts index da25c6d..7ba85d8 100644 --- a/vite.config.ts +++ b/web/vite.config.ts @@ -7,7 +7,7 @@ import { componentTagger } from "lovable-tagger"; export default defineConfig(({ mode }) => ({ server: { host: "::", - port: 8080, + port: 5173, }, plugins: [react(), mode === "development" && componentTagger()].filter(Boolean), resolve: {