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) => (
- smoothScrollTo(section)}
- className="text-muted-foreground hover:text-primary transition-colors capitalize"
- >
- {section.replace('-', ' ')}
-
- ))}
+ smoothScrollTo('problem')}
+ className="text-white hover:text-primary transition-colors capitalize"
+ >
+ About
+
+ smoothScrollTo('features')}
+ className="text-white hover:text-primary transition-colors capitalize"
+ >
+ Features
+
+ smoothScrollTo('try-it')}
+ className="ml-2 px-4 py-2 rounded bg-primary text-primary-foreground font-semibold hover:bg-primary/80 transition-colors"
+ >
+ Try It Now
+
+
+ {/* Hamburger for mobile */}
+
+
setMenuOpen((open) => !open)}
+ aria-label="Open navigation menu"
+ >
+
+
+
+
+ {/* Mobile Menu Drawer */}
+ {menuOpen && (
+ setMenuOpen(false)}>
+
e.stopPropagation()}>
+
setMenuOpen(false)} aria-label="Close navigation menu">
+
+
+
+
+
{ setMenuOpen(false); smoothScrollTo('problem'); }}
+ className="text-white text-lg py-2 px-2 text-left w-full hover:text-primary transition-colors capitalize"
+ >
+ About
+
+
{ setMenuOpen(false); smoothScrollTo('features'); }}
+ className="text-white text-lg py-2 px-2 text-left w-full hover:text-primary transition-colors capitalize"
+ >
+ Features
+
+
{ setMenuOpen(false); smoothScrollTo('try-it'); }}
+ className="mt-4 px-4 py-2 rounded bg-primary text-primary-foreground font-semibold hover:bg-primary/80 transition-colors text-left w-full"
+ >
+ Try It Now
+
+
+
+ )}
{/* 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 */}
+
+ Dashboard
+
+ setActiveSection('github')}
+ >
+ Github
+
+ setActiveSection('health')}
+ >
+ Health
+
+ setActiveSection('transaction')}
+ >
+ Transaction
+
+
+ {
+ // TODO: Add logout logic here
+ window.location.href = "/";
+ }}
+ >
+ Logout
+
+
+ {/* 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 (
+
+
+
+ ID
+ Project Name
+ Status
+ Type
+ Network
+ Gas Used
+ Error Message
+ Created At
+ Updated At
+
+
+
+ {deployments.map((item) => (
+
+ {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 */}
+
+
+
+
+
+ smoothScrollTo('problem')}
+ className="text-white hover:text-primary transition-colors capitalize"
+ >
+ About
+
+ smoothScrollTo('features')}
+ className="text-white hover:text-primary transition-colors capitalize"
+ >
+ Features
+
+ navigate('/dashboard')}
+ className="ml-2 px-4 py-2 rounded bg-primary text-primary-foreground font-semibold hover:bg-primary/80 transition-colors shadow"
+ style={{ minWidth: '120px' }}
+ >
+ Try It Now
+
+
+
+
+
+
+ {/* Hero Section */}
+
+ {/* Video Background */}
+
+
+
+ {/* Overlay to prevent white blink */}
+
+
+
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+
+
+ {/* 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 */}
+
+
+
+
+ © 2025 DeployChain
+
+
+
+
+
+ );
+};
+
+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: {