commit
4987bc6275
@ -0,0 +1,24 @@ |
||||
# Logs |
||||
logs |
||||
*.log |
||||
npm-debug.log* |
||||
yarn-debug.log* |
||||
yarn-error.log* |
||||
pnpm-debug.log* |
||||
lerna-debug.log* |
||||
|
||||
node_modules |
||||
dist |
||||
dist-ssr |
||||
*.local |
||||
|
||||
# Editor directories and files |
||||
.vscode/* |
||||
!.vscode/extensions.json |
||||
.idea |
||||
.DS_Store |
||||
*.suo |
||||
*.ntvs* |
||||
*.njsproj |
||||
*.sln |
||||
*.sw? |
@ -0,0 +1,13 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8" /> |
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
||||
<title>SGPT</title> |
||||
</head> |
||||
<body> |
||||
<div id="root"></div> |
||||
<script type="module" src="/src/main.tsx"></script> |
||||
</body> |
||||
</html> |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,31 @@ |
||||
{ |
||||
"name": "spgt-landing-page", |
||||
"private": true, |
||||
"version": "0.0.0", |
||||
"type": "module", |
||||
"scripts": { |
||||
"dev": "vite", |
||||
"build": "tsc && vite build", |
||||
"preview": "vite preview" |
||||
}, |
||||
"dependencies": { |
||||
"localforage": "^1.10.0", |
||||
"match-sorter": "^6.3.1", |
||||
"react": "^18.2.0", |
||||
"react-dom": "^18.2.0", |
||||
"react-router-dom": "^6.8.2", |
||||
"sort-by": "^1.2.0" |
||||
}, |
||||
"devDependencies": { |
||||
"@types/react": "^18.0.27", |
||||
"@types/react-dom": "^18.0.10", |
||||
"@types/react-router-dom": "^5.3.3", |
||||
"@vitejs/plugin-react-swc": "^3.0.0", |
||||
"autoprefixer": "^10.4.13", |
||||
"postcss": "^8.4.21", |
||||
"postcss-import": "^15.1.0", |
||||
"tailwindcss": "^3.2.7", |
||||
"typescript": "^4.9.3", |
||||
"vite": "^4.1.0" |
||||
} |
||||
} |
@ -0,0 +1,6 @@ |
||||
module.exports = { |
||||
plugins: { |
||||
tailwindcss: {}, |
||||
autoprefixer: {}, |
||||
}, |
||||
} |
After Width: | Height: | Size: 1.5 KiB |
@ -0,0 +1,8 @@ |
||||
import "./App.css"; |
||||
import RouterProviderComponent from "./shared/providers/RouterProviderComponent"; |
||||
|
||||
function App() { |
||||
return <RouterProviderComponent />; |
||||
} |
||||
|
||||
export default App; |
After Width: | Height: | Size: 445 KiB |
After Width: | Height: | Size: 605 KiB |
After Width: | Height: | Size: 618 KiB |
After Width: | Height: | Size: 220 KiB |
After Width: | Height: | Size: 4.0 KiB |
@ -0,0 +1,5 @@ |
||||
@import "tailwindcss/base"; |
||||
|
||||
@import "tailwindcss/components"; |
||||
|
||||
@import "tailwindcss/utilities"; |
@ -0,0 +1,10 @@ |
||||
import React from "react"; |
||||
import ReactDOM from "react-dom/client"; |
||||
import App from "./App"; |
||||
import "./index.css"; |
||||
|
||||
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( |
||||
<React.StrictMode> |
||||
<App /> |
||||
</React.StrictMode> |
||||
); |
@ -0,0 +1,17 @@ |
||||
import AboutSection from "../shared/components/home/AboutSection"; |
||||
import FirstSection from "../shared/components/home/FirstSection"; |
||||
import RoadMap from "../shared/components/home/RoadMap"; |
||||
|
||||
type Props = {}; |
||||
|
||||
const Home = (props: Props) => { |
||||
return ( |
||||
<div className="flex flex-col gap-20"> |
||||
<FirstSection /> |
||||
<AboutSection /> |
||||
<RoadMap /> |
||||
</div> |
||||
); |
||||
}; |
||||
|
||||
export default Home; |
@ -0,0 +1,36 @@ |
||||
type Props = { |
||||
children: React.ReactNode; |
||||
bgColor?: string; |
||||
textColor?: string; |
||||
borderColor?: string; |
||||
onClick?: () => void; |
||||
size?: "sm" | "md" | "lg"; |
||||
}; |
||||
|
||||
const Button = ({ |
||||
children, |
||||
bgColor = "bg-[radial-gradient(ellipse_at_top_right,_var(--tw-gradient-stops))] from-orange-400 to-rose-400", |
||||
textColor = "text-white", |
||||
borderColor = "border-blue-500", |
||||
onClick, |
||||
size = "md", |
||||
}: Props) => { |
||||
const sizes = { |
||||
sm: "py-1 px-3 text-sm", |
||||
md: "py-2 px-4 text-md", |
||||
lg: "py-3 px-5 text-lg", |
||||
}; |
||||
|
||||
const sizeClass = sizes[size] || sizes.md; |
||||
|
||||
return ( |
||||
<button |
||||
className={`rounded-full transition-all duration-150 font-semibold ${bgColor} ${textColor} ${borderColor} ${sizeClass}`} |
||||
onClick={onClick} |
||||
> |
||||
{children} |
||||
</button> |
||||
); |
||||
}; |
||||
|
||||
export default Button; |
@ -0,0 +1,7 @@ |
||||
type Props = {}; |
||||
|
||||
const Footer = (props: Props) => { |
||||
return <div className="container mx-auto bg-white">Footer</div>; |
||||
}; |
||||
|
||||
export default Footer; |
@ -0,0 +1,105 @@ |
||||
import React from "react"; |
||||
import Button from "./Button"; |
||||
|
||||
type Props = {}; |
||||
|
||||
const menuItems = [ |
||||
{ |
||||
name: "Home", |
||||
path: "/", |
||||
}, |
||||
{ |
||||
name: "About", |
||||
path: "", |
||||
}, |
||||
{ |
||||
name: "Tokenomics", |
||||
path: "", |
||||
}, |
||||
{ |
||||
name: "Roadmap", |
||||
path: "", |
||||
}, |
||||
]; |
||||
|
||||
const Header = (props: Props) => { |
||||
const [isScrolled, setIsScrolled] = React.useState(false); |
||||
|
||||
React.useEffect(() => { |
||||
window.addEventListener("scroll", () => { |
||||
if (window.scrollY > 0) { |
||||
setIsScrolled(true); |
||||
} else { |
||||
setIsScrolled(false); |
||||
} |
||||
}); |
||||
}, []); |
||||
|
||||
return ( |
||||
<> |
||||
{isScrolled ? ( |
||||
<div className="fixed w-full z-30 p-1 transition-all duration-150 bg-gray-800"> |
||||
<div className="container mx-auto flex justify-between items-center"> |
||||
<div> |
||||
<h4 className="text-2xl transition-all duration-150 text-white uppercase font-bold"> |
||||
Logo |
||||
</h4> |
||||
</div> |
||||
|
||||
<div className="flex gap-10 items-center"> |
||||
<ul className="flex gap-10"> |
||||
{menuItems.map((item) => ( |
||||
<li className="inline-block" key={item.path}> |
||||
<a |
||||
href="#" |
||||
className="text-white text-md transition-all duration-150" |
||||
> |
||||
{item.name} |
||||
</a> |
||||
</li> |
||||
))} |
||||
</ul> |
||||
|
||||
<div className="flex gap-4"> |
||||
<Button size="sm">Whitepaper</Button> |
||||
<Button size="sm">Audit</Button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
) : ( |
||||
<div className="fixed z-30 w-full p-5 transition-all duration-150"> |
||||
<div className="container mx-auto flex justify-between items-center"> |
||||
<div> |
||||
<h4 className="text-4xl transition-all duration-150 text-white uppercase font-bold"> |
||||
Logo |
||||
</h4> |
||||
</div> |
||||
|
||||
<div className="flex gap-10 items-center"> |
||||
<ul className="flex gap-10"> |
||||
{menuItems.map((item) => ( |
||||
<li className="inline-block" key={item.path}> |
||||
<a |
||||
href="#" |
||||
className="text-white text-lg transition-all duration-150" |
||||
> |
||||
{item.name} |
||||
</a> |
||||
</li> |
||||
))} |
||||
</ul> |
||||
|
||||
<div className="flex gap-4"> |
||||
<Button size="md">Whitepaper</Button> |
||||
<Button size="md">Audit</Button> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
)} |
||||
</> |
||||
); |
||||
}; |
||||
|
||||
export default Header; |
@ -0,0 +1,51 @@ |
||||
import React from "react"; |
||||
import pokerChips from "../../../assets/images/poker-chips.webp"; |
||||
|
||||
type Props = {}; |
||||
|
||||
const AboutSection = (props: Props) => { |
||||
return ( |
||||
<div className="container mx-auto text-white py-20 flex"> |
||||
<div className="flex flex-col gap-10 w-1/2"> |
||||
<div className="flex flex-col gap-4"> |
||||
<h4 className="text-5xl uppercase font-bold">What is SGPT?</h4> |
||||
<p className="text-gray-300 md:w-4/5 text-lg"> |
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto |
||||
dignissimos necessitatibus nam vero in quis! Voluptatum doloremque |
||||
voluptatibus corporis animi ab. Quisquam alias error labore iste |
||||
dolores necessitatibus mollitia officia! |
||||
</p> |
||||
|
||||
<p className="text-gray-300 md:w-4/5 text-lg"> |
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto |
||||
dignissimos necessitatibus nam vero in quis! Voluptatum doloremque |
||||
voluptatibus corporis animi ab. Quisquam alias error labore iste |
||||
dolores necessitatibus mollitia officia! |
||||
</p> |
||||
</div> |
||||
|
||||
<div className="flex flex-col gap-4"> |
||||
<h4 className="text-5xl uppercase font-bold">What is SGPT?</h4> |
||||
<p className="text-gray-300 md:w-4/5 text-lg"> |
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto |
||||
dignissimos necessitatibus nam vero in quis! Voluptatum doloremque |
||||
voluptatibus corporis animi ab. Quisquam alias error labore iste |
||||
dolores necessitatibus mollitia officia! |
||||
</p> |
||||
|
||||
<p className="text-gray-300 md:w-4/5 text-lg"> |
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Architecto |
||||
dignissimos necessitatibus nam vero in quis! Voluptatum doloremque |
||||
voluptatibus corporis animi ab. Quisquam alias error labore iste |
||||
dolores necessitatibus mollitia officia! |
||||
</p> |
||||
</div> |
||||
</div> |
||||
<div className="w-1/2 flex justify-center items-center"> |
||||
<img className="w-2/3" src={pokerChips} /> |
||||
</div> |
||||
</div> |
||||
); |
||||
}; |
||||
|
||||
export default AboutSection; |
@ -0,0 +1,41 @@ |
||||
import robotImage from "../../../assets/images/robot.png"; |
||||
import Button from "../Button"; |
||||
|
||||
type Props = {}; |
||||
|
||||
const FirstSection = (props: Props) => { |
||||
return ( |
||||
<div |
||||
// style={{ backgroundImage: `url(${background})` }}
|
||||
className="min-h-screen flex bg-cover bg-center bg-no-repeat relative" |
||||
> |
||||
<div className="container flex mx-auto text-white z-20 mt-20"> |
||||
<div className="md:w-1/2 flex flex-col justify-center gap-10 pb-20"> |
||||
<h4 className="text-6xl font-bold"> |
||||
Lorem ipsum dolor sit amet consectetur adipisicing elit. |
||||
</h4> |
||||
<p className="w-3/4 font-body"> |
||||
Lorem ipsum dolor sit amet consectetur adipisicing elit. Similique |
||||
amet eveniet fugiat pariatur, illo in est officiis labore ad |
||||
corrupti obcaecati asperiores! Quos ratione tempore dolorum |
||||
temporibus tenetur quaerat. |
||||
</p> |
||||
|
||||
<div className="flex w-2/3 flex-wrap gap-4"> |
||||
<Button>Telegram</Button> |
||||
<Button>Telegram</Button> |
||||
<Button>Telegram</Button> |
||||
<Button>Telegram</Button> |
||||
<Button>Telegram</Button> |
||||
</div> |
||||
</div> |
||||
<div className="md:w-1/2 flex justify-center items-center"> |
||||
<img src={robotImage} className="w-4/5" /> |
||||
</div> |
||||
</div> |
||||
<div className="w-full h-full bg-black absolute opacity-75 z-10"></div> |
||||
</div> |
||||
); |
||||
}; |
||||
|
||||
export default FirstSection; |
@ -0,0 +1,33 @@ |
||||
import React from "react"; |
||||
|
||||
type Props = {}; |
||||
|
||||
const RoadMap = (props: Props) => { |
||||
return ( |
||||
<div className="container mx-auto text-white md:min-h-[40vh]"> |
||||
<h1 className="text-5xl font-bold text-center">RoadMap</h1> |
||||
|
||||
<div className="flex gap-10 mt-20"> |
||||
<div className="w-1/4 bg-[conic-gradient(at_left,_var(--tw-gradient-stops))] from-orange-400 to-rose-400 rounded-lg min-h-[200px] p-5"> |
||||
<h4 className="text-center text-2xl text-gray-100 font-semibold mb-3"> |
||||
Phase 1 |
||||
</h4> |
||||
<ol> |
||||
<li> |
||||
<p> |
||||
Lorem ipsum, dolor sit amet consectetur adipisicing elit. vitae. |
||||
</p> |
||||
</li> |
||||
<li> |
||||
<p> |
||||
Lorem ipsum, dolor sit amet consectetur adipisicing elit. vitae. |
||||
</p> |
||||
</li> |
||||
</ol> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
); |
||||
}; |
||||
|
||||
export default RoadMap; |
@ -0,0 +1,19 @@ |
||||
import { Outlet } from "react-router-dom"; |
||||
import Footer from "../Footer"; |
||||
import Header from "../Header"; |
||||
|
||||
type Props = {}; |
||||
|
||||
const HomeLayout = (props: Props) => { |
||||
return ( |
||||
<div className="w-full relative bg-black"> |
||||
<Header /> |
||||
<div className="w-full"> |
||||
<Outlet /> |
||||
</div> |
||||
<Footer /> |
||||
</div> |
||||
); |
||||
}; |
||||
|
||||
export default HomeLayout; |
@ -0,0 +1,16 @@ |
||||
import { createBrowserRouter, RouterProvider } from "react-router-dom"; |
||||
import Home from "../../pages/Home"; |
||||
import HomeLayout from "../components/layouts/HomeLayout"; |
||||
|
||||
const router = createBrowserRouter([ |
||||
{ |
||||
path: "/", |
||||
element: <HomeLayout />, |
||||
children: [{ path: "", element: <Home /> }], |
||||
}, |
||||
]); |
||||
const RouterProviderComponent = () => { |
||||
return <RouterProvider router={router} />; |
||||
}; |
||||
|
||||
export default RouterProviderComponent; |
@ -0,0 +1 @@ |
||||
/// <reference types="vite/client" />
|
@ -0,0 +1,18 @@ |
||||
/** @type {import('tailwindcss').Config} */ |
||||
module.exports = { |
||||
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], |
||||
theme: { |
||||
extend: {}, |
||||
fontFamily: { |
||||
sans: ["Sen", "sans-serif"], |
||||
body: ["Comfortaa", "sans-serif"], |
||||
}, |
||||
}, |
||||
plugins: [ |
||||
{ |
||||
"postcss-import": {}, |
||||
tailwindcss: {}, |
||||
autoprefixer: {}, |
||||
}, |
||||
], |
||||
}; |
@ -0,0 +1,21 @@ |
||||
{ |
||||
"compilerOptions": { |
||||
"target": "ESNext", |
||||
"useDefineForClassFields": true, |
||||
"lib": ["DOM", "DOM.Iterable", "ESNext"], |
||||
"allowJs": false, |
||||
"skipLibCheck": true, |
||||
"esModuleInterop": false, |
||||
"allowSyntheticDefaultImports": true, |
||||
"strict": true, |
||||
"forceConsistentCasingInFileNames": true, |
||||
"module": "ESNext", |
||||
"moduleResolution": "Node", |
||||
"resolveJsonModule": true, |
||||
"isolatedModules": true, |
||||
"noEmit": true, |
||||
"jsx": "react-jsx" |
||||
}, |
||||
"include": ["src"], |
||||
"references": [{ "path": "./tsconfig.node.json" }] |
||||
} |
@ -0,0 +1,9 @@ |
||||
{ |
||||
"compilerOptions": { |
||||
"composite": true, |
||||
"module": "ESNext", |
||||
"moduleResolution": "Node", |
||||
"allowSyntheticDefaultImports": true |
||||
}, |
||||
"include": ["vite.config.ts"] |
||||
} |
@ -0,0 +1,11 @@ |
||||
import react from "@vitejs/plugin-react-swc"; |
||||
import { defineConfig } from "vite"; |
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({ |
||||
plugins: [react()], |
||||
server: { |
||||
port: 5000, |
||||
host: "0.0.0.0", |
||||
}, |
||||
}); |
Loading…
Reference in new issue