diff --git a/CRUSH.md b/CRUSH.md
index c922779..28bf8be 100644
--- a/CRUSH.md
+++ b/CRUSH.md
@@ -18,6 +18,10 @@
// Chakra UI imports (named, grouped)
import { Box, Flex, Image } from '@chakra-ui/react';
+// TanStack Router imports
+import { createRouter, createRootRoute, createRoute } from '@tanstack/react-router';
+import { Outlet, Link } from '@tanstack/react-router';
+
// Local imports (default preferred)
import Header from './components/header';
```
@@ -35,11 +39,25 @@ function ComponentName() {
export default ComponentName;
```
+### Routing Pattern
+```typescript
+// Create routes in src/router.tsx
+const route = createRoute({
+ getParentRoute: () => rootRoute,
+ path: '/example',
+ component: ExampleComponent,
+});
+
+// Use for nested routes
+// Use for navigation
+```
+
### TypeScript & Configuration
- Strict mode enabled with `noUnusedLocals`, `noUnusedParameters`
- Path aliases available: `@/*` → `./src/*`
- Use Chakra UI props for responsive design
- Framer Motion for animations (`motion()` wrapper pattern)
+- TanStack Router for navigation and routing
### Styling Approach
- Primary: Chakra UI props and components
diff --git a/package-lock.json b/package-lock.json
index 7784422..fd13154 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,6 +12,7 @@
"@chakra-ui/react": "^3.12.0",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
+ "@tanstack/react-router": "^1.133.27",
"add": "^2.0.6",
"color-mode": "^0.1.0",
"framer-motion": "^12.5.0",
@@ -1716,6 +1717,94 @@
"tslib": "^2.8.0"
}
},
+ "node_modules/@tanstack/history": {
+ "version": "1.133.19",
+ "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.133.19.tgz",
+ "integrity": "sha512-Y866qBVVprdQkmO0/W1AFBI8tiQy398vFeIwP+VrRWCOzs3VecxSVzAvaOM4iHfkJz81fFAZMhLLjDVoPikD+w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/react-router": {
+ "version": "1.133.27",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.133.27.tgz",
+ "integrity": "sha512-0q87mjJWhMsnP9SOD/v07lclCxrMuB20CdKi305cTZRIF858ETG0fThUF4LlstiKvxE49Wr+PBY0kwjfY4pUow==",
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/history": "1.133.19",
+ "@tanstack/react-store": "^0.7.0",
+ "@tanstack/router-core": "1.133.27",
+ "isbot": "^5.1.22",
+ "tiny-invariant": "^1.3.3",
+ "tiny-warning": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": ">=18.0.0 || >=19.0.0",
+ "react-dom": ">=18.0.0 || >=19.0.0"
+ }
+ },
+ "node_modules/@tanstack/react-store": {
+ "version": "0.7.7",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.7.7.tgz",
+ "integrity": "sha512-qqT0ufegFRDGSof9D/VqaZgjNgp4tRPHZIJq2+QIHkMUtHjaJ0lYrrXjeIUJvjnTbgPfSD1XgOMEt0lmANn6Zg==",
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/store": "0.7.7",
+ "use-sync-external-store": "^1.5.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@tanstack/router-core": {
+ "version": "1.133.27",
+ "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.133.27.tgz",
+ "integrity": "sha512-1nb2CirHC0hZmFr8wEk0gxuExpvuk0jlKOY1+SQ7jcJCxBKHLGvAfhL6ycets3XetrTLzgBEvfuixFj3qYiFwA==",
+ "license": "MIT",
+ "dependencies": {
+ "@tanstack/history": "1.133.19",
+ "@tanstack/store": "^0.7.0",
+ "cookie-es": "^2.0.0",
+ "seroval": "^1.3.2",
+ "seroval-plugins": "^1.3.2",
+ "tiny-invariant": "^1.3.3",
+ "tiny-warning": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
+ "node_modules/@tanstack/store": {
+ "version": "0.7.7",
+ "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.7.7.tgz",
+ "integrity": "sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/tannerlinsley"
+ }
+ },
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -3688,6 +3777,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/cookie-es": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz",
+ "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==",
+ "license": "MIT"
+ },
"node_modules/cosmiconfig": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
@@ -4716,6 +4811,15 @@
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"license": "MIT"
},
+ "node_modules/isbot": {
+ "version": "5.1.31",
+ "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.31.tgz",
+ "integrity": "sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ==",
+ "license": "Unlicense",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -5807,6 +5911,27 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/seroval": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz",
+ "integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/seroval-plugins": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.3.tgz",
+ "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "seroval": "^1.0"
+ }
+ },
"node_modules/set-getter": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.1.tgz",
@@ -6179,6 +6304,18 @@
"node": ">=0.8"
}
},
+ "node_modules/tiny-invariant": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
+ "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
+ "license": "MIT"
+ },
+ "node_modules/tiny-warning": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
+ "license": "MIT"
+ },
"node_modules/to-object-path": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
@@ -6385,6 +6522,15 @@
"punycode": "^2.1.0"
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/vite": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.1.tgz",
diff --git a/package.json b/package.json
index 64b80ef..22c073e 100644
--- a/package.json
+++ b/package.json
@@ -14,6 +14,7 @@
"@chakra-ui/react": "^3.12.0",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
+ "@tanstack/react-router": "^1.133.27",
"add": "^2.0.6",
"color-mode": "^0.1.0",
"framer-motion": "^12.5.0",
diff --git a/public/images/new/arrow_pc_1.webp b/public/images/new/arrow_pc_1.webp
new file mode 100644
index 0000000..fcfcbd9
Binary files /dev/null and b/public/images/new/arrow_pc_1.webp differ
diff --git a/public/images/new/confuse.webp b/public/images/new/confuse.webp
new file mode 100644
index 0000000..f80ed7d
Binary files /dev/null and b/public/images/new/confuse.webp differ
diff --git a/public/images/new/hero_text1x.webp b/public/images/new/hero_text1x.webp
new file mode 100644
index 0000000..75fded2
Binary files /dev/null and b/public/images/new/hero_text1x.webp differ
diff --git a/src/components/layout.tsx b/src/components/layout.tsx
new file mode 100644
index 0000000..de88bac
--- /dev/null
+++ b/src/components/layout.tsx
@@ -0,0 +1,22 @@
+import { Outlet } from '@tanstack/react-router'
+import {
+ Box,
+ Container,
+} from '@chakra-ui/react'
+
+import Header from './header'
+import Footer from './footer'
+
+function Layout() {
+ return (
+
+
+
+
+
+
+
+ )
+}
+
+export default Layout
\ No newline at end of file
diff --git a/src/main.tsx b/src/main.tsx
index eec4a75..1441145 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,7 +1,8 @@
import { Provider } from "@/components/ui/provider"
import React from "react"
import ReactDOM from "react-dom/client"
-import App from "./App"
+import { RouterProvider } from '@tanstack/react-router'
+import router from './router'
import "./index.css"
import "./fonts.css"
import "./colors.css"
@@ -9,7 +10,7 @@ import "./colors.css"
ReactDOM.createRoot(document.getElementById("root")!).render(
-
+
)
diff --git a/src/pages/home.tsx b/src/pages/home.tsx
new file mode 100644
index 0000000..4c64428
--- /dev/null
+++ b/src/pages/home.tsx
@@ -0,0 +1,34 @@
+import { Box } from '@chakra-ui/react'
+import Hero1 from '../components/hero1'
+import Hero2 from '../components/hero2'
+import Compare from '../components/compare'
+import Qa from '../components/qa'
+import Oil_info from '../components/oil_info'
+import Bestoil from '../components/bestoil'
+import Salespoint from '../components/salespoint'
+
+function HomePage() {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ )
+}
+
+export default HomePage
\ No newline at end of file
diff --git a/src/pages/main.tsx b/src/pages/main.tsx
new file mode 100644
index 0000000..1debbe8
--- /dev/null
+++ b/src/pages/main.tsx
@@ -0,0 +1,54 @@
+import { Box, Image, Stack, } from '@chakra-ui/react'
+import { Link } from '@tanstack/react-router'
+
+function HeroSection() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
+
+function MainPage() {
+ return (
+ <>
+
+
+ >
+ )
+}
+
+export default MainPage
\ No newline at end of file
diff --git a/src/router.tsx b/src/router.tsx
new file mode 100644
index 0000000..30ecf56
--- /dev/null
+++ b/src/router.tsx
@@ -0,0 +1,30 @@
+import { createRouter, createRootRoute, createRoute } from '@tanstack/react-router'
+import Layout from './components/layout'
+import MainPage from './pages/main'
+import HomePage from './pages/home'
+
+// Create a root route with layout
+const rootRoute = createRootRoute({
+ component: Layout,
+})
+
+// Main page route (new landing page)
+const indexRoute = createRoute({
+ getParentRoute: () => rootRoute,
+ path: '/',
+ component: MainPage,
+})
+
+// Home page route (old content)
+const homeRoute = createRoute({
+ getParentRoute: () => rootRoute,
+ path: '/home',
+ component: HomePage,
+})
+
+// Create the router
+const router = createRouter({
+ routeTree: rootRoute.addChildren([indexRoute, homeRoute]),
+})
+
+export default router
\ No newline at end of file