diff --git a/package-lock.json b/package-lock.json
index e857530..4b3dacd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,14 +18,16 @@
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-label": "^2.1.0",
"@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-switch": "^1.1.0",
"@reduxjs/toolkit": "^2.2.6",
+ "@splinetool/react-spline": "^4.0.0",
"@supabase/ssr": "^0.4.0",
"@vercel/analytics": "^1.3.1",
"@vercel/speed-insights": "^1.0.12",
"axios": "^1.7.2",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
- "formik": "^2.4.6",
+ "framer-motion": "^11.3.21",
"ldrs": "^1.0.2",
"lucide-react": "^0.408.0",
"next": "14.2.5",
@@ -39,8 +41,7 @@
"sass": "^1.77.8",
"scss": "^0.2.4",
"tailwind-merge": "^2.4.0",
- "tailwindcss-animate": "^1.0.7",
- "yup": "^1.4.0"
+ "tailwindcss-animate": "^1.0.7"
},
"devDependencies": {
"@types/node": "^20",
@@ -1454,6 +1455,35 @@
}
}
},
+ "node_modules/@radix-ui/react-switch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.0.tgz",
+ "integrity": "sha512-OBzy5WAj641k0AOSpKQtreDMe+isX0MQJ1IVyF03ucdF3DunOnROVrjWs8zsXUxC3zfZ6JL9HFVCUlMghz9dJw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@radix-ui/react-use-callback-ref": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
@@ -1614,6 +1644,38 @@
"linux"
]
},
+ "node_modules/@splinetool/react-spline": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@splinetool/react-spline/-/react-spline-4.0.0.tgz",
+ "integrity": "sha512-FqrV7/K2q998Y0t83QUauQxsifKWAg9CFZoSb64qRuH7IfHkDs5/OgU1ACkg0aTgsEPtFlH+kATQ+8X6MrizHQ==",
+ "dependencies": {
+ "blurhash": "2.0.5",
+ "lodash.debounce": "4.0.8",
+ "react-merge-refs": "2.1.1",
+ "thumbhash": "0.1.1"
+ },
+ "peerDependencies": {
+ "@splinetool/runtime": "*",
+ "next": ">=14.2.0",
+ "react": "*",
+ "react-dom": "*"
+ },
+ "peerDependenciesMeta": {
+ "next": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@splinetool/runtime": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@splinetool/runtime/-/runtime-1.9.3.tgz",
+ "integrity": "sha512-wcSxsRUpZRzPqX3/4UHlN5H1hOBoBiut9VRr8f7KG6d/joDahLP2MnWF8/7eoOuWAA+DC08hQhfdl9b45PFlIA==",
+ "peer": true,
+ "dependencies": {
+ "on-change": "^4.0.0",
+ "semver-compare": "^1.0.0"
+ }
+ },
"node_modules/@supabase/auth-js": {
"version": "2.64.4",
"resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.64.4.tgz",
@@ -1726,16 +1788,6 @@
"tslib": "^2.4.0"
}
},
- "node_modules/@types/hoist-non-react-statics": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
- "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
- "license": "MIT",
- "dependencies": {
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0"
- }
- },
"node_modules/@types/node": {
"version": "20.14.10",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
@@ -2041,6 +2093,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/blurhash": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz",
+ "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==",
+ "license": "MIT"
+ },
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -2421,15 +2479,6 @@
}
}
},
- "node_modules/deepmerge": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz",
- "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -2657,31 +2706,6 @@
"node": ">=12.20.0"
}
},
- "node_modules/formik": {
- "version": "2.4.6",
- "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz",
- "integrity": "sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==",
- "funding": [
- {
- "type": "individual",
- "url": "https://opencollective.com/formik"
- }
- ],
- "license": "Apache-2.0",
- "dependencies": {
- "@types/hoist-non-react-statics": "^3.3.1",
- "deepmerge": "^2.1.1",
- "hoist-non-react-statics": "^3.3.0",
- "lodash": "^4.17.21",
- "lodash-es": "^4.17.21",
- "react-fast-compare": "^2.0.1",
- "tiny-warning": "^1.0.2",
- "tslib": "^2.0.0"
- },
- "peerDependencies": {
- "react": ">=16.8.0"
- }
- },
"node_modules/fraction.js": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
@@ -2696,6 +2720,31 @@
"url": "https://github.com/sponsors/rawify"
}
},
+ "node_modules/framer-motion": {
+ "version": "11.3.21",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.3.21.tgz",
+ "integrity": "sha512-D+hfIsvzV8eL/iycld4K+tKlg2Q2LdwnrcBEohtGw3cG1AIuNYATbT5RUqIM1ndsAk+EfGhoSGf0UaiFodc5Tw==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -3030,16 +3079,10 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"license": "MIT"
},
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "license": "MIT"
- },
- "node_modules/lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"license": "MIT"
},
"node_modules/loose-envify": {
@@ -3388,6 +3431,19 @@
"node": ">= 0.2.0"
}
},
+ "node_modules/on-change": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/on-change/-/on-change-4.0.2.tgz",
+ "integrity": "sha512-cMtCyuJmTx/bg2HCpHo3ZLeF7FZnBOapLqZHr2AlLeJ5Ul0Zu2mUJJz051Fdwu/Et2YW04ZD+TtU+gVy0ACNCA==",
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/on-change?sponsor=1"
+ }
+ },
"node_modules/package-json-from-dist": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
@@ -3666,12 +3722,6 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
- "node_modules/property-expr": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz",
- "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==",
- "license": "MIT"
- },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -3723,12 +3773,6 @@
"react": "^18.3.1"
}
},
- "node_modules/react-fast-compare": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
- "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==",
- "license": "MIT"
- },
"node_modules/react-icons": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.2.1.tgz",
@@ -3744,6 +3788,16 @@
"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"license": "MIT"
},
+ "node_modules/react-merge-refs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-2.1.1.tgz",
+ "integrity": "sha512-jLQXJ/URln51zskhgppGJ2ub7b2WFKGq3cl3NYKtlHoTG+dN2q7EzWrn3hN3EgPsTMvpR9tpq5ijdp7YwFZkag==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/gregberge"
+ }
+ },
"node_modules/react-redux": {
"version": "9.1.2",
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz",
@@ -4024,6 +4078,13 @@
"node": ">= 0.2.0"
}
},
+ "node_modules/semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
+ "license": "MIT",
+ "peer": true
+ },
"node_modules/server-only": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz",
@@ -4373,16 +4434,10 @@
"node": ">=0.8"
}
},
- "node_modules/tiny-case": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz",
- "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==",
- "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==",
+ "node_modules/thumbhash": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/thumbhash/-/thumbhash-0.1.1.tgz",
+ "integrity": "sha512-kH5pKeIIBPQXAOni2AiY/Cu/NKdkFREdpH+TLdM0g6WA7RriCv0kPLgP731ady67MhTAqrVG/4mnEeibVuCJcg==",
"license": "MIT"
},
"node_modules/to-fast-properties": {
@@ -4406,12 +4461,6 @@
"node": ">=8.0"
}
},
- "node_modules/toposort": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
- "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==",
- "license": "MIT"
- },
"node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
@@ -4431,18 +4480,6 @@
"integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
"license": "0BSD"
},
- "node_modules/type-fest": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
- "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/typescript": {
"version": "5.5.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
@@ -4740,18 +4777,6 @@
"engines": {
"node": ">= 14"
}
- },
- "node_modules/yup": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz",
- "integrity": "sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==",
- "license": "MIT",
- "dependencies": {
- "property-expr": "^2.0.5",
- "tiny-case": "^1.0.3",
- "toposort": "^2.0.2",
- "type-fest": "^2.19.0"
- }
}
}
}
diff --git a/package.json b/package.json
index 1395dd8..8d21598 100644
--- a/package.json
+++ b/package.json
@@ -19,13 +19,16 @@
"@radix-ui/react-icons": "^1.3.0",
"@radix-ui/react-label": "^2.1.0",
"@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-switch": "^1.1.0",
"@reduxjs/toolkit": "^2.2.6",
+ "@splinetool/react-spline": "^4.0.0",
"@supabase/ssr": "^0.4.0",
"@vercel/analytics": "^1.3.1",
"@vercel/speed-insights": "^1.0.12",
"axios": "^1.7.2",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
+ "framer-motion": "^11.3.21",
"ldrs": "^1.0.2",
"lucide-react": "^0.408.0",
"next": "14.2.5",
diff --git a/public/LinkPreview.png b/public/LinkPreview.png
new file mode 100644
index 0000000..a6140c1
Binary files /dev/null and b/public/LinkPreview.png differ
diff --git a/public/event_poster.avif b/public/event_poster.avif
new file mode 100644
index 0000000..4d67497
Binary files /dev/null and b/public/event_poster.avif differ
diff --git a/src/app/accounts/setting/page.tsx b/src/app/accounts/setting/page.tsx
new file mode 100644
index 0000000..9b771c5
--- /dev/null
+++ b/src/app/accounts/setting/page.tsx
@@ -0,0 +1,337 @@
+import Link from "next/link"
+import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuSeparator, DropdownMenuItem } from "@/components/ui/dropdown-menu"
+import { Button } from "@/components/ui/button"
+import { Avatar, AvatarImage, AvatarFallback } from "@/components/ui/avatar"
+import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "@/components/ui/card"
+import { Label } from "@/components/ui/label"
+import { Input } from "@/components/ui/input"
+import { Textarea } from "@/components/ui/textarea"
+import { Switch } from "@/components/ui/switch"
+import { JSX, SVGProps } from "react"
+
+export default function Component() {
+ return (
+
+
+
+
+ Acme Inc
+
+
+
+
+
+
+
+ JD
+
+ Toggle user menu
+
+
+
+
+
+
+ JD
+
+
+
John Doe
+
john@example.com
+
+
+
+
+
+
+ Profile
+
+
+
+
+
+ Settings
+
+
+
+
+
+
+ Sign out
+
+
+
+
+
+
+
+
+
Account Settings
+
+
+
+
+ Profile
+
+
+ Password
+
+
+ Notifications
+
+
+ Integrations
+
+
+ Security
+
+
+
+
+
+ Profile
+ Update your profile information.
+
+
+
+
+
+ JD
+
+
Change Photo
+
+
+ Name
+
+
+
+ Email
+
+
+
+ Bio
+
+
+
+
+ Save
+
+
+
+
+ Password
+ Change your password.
+
+
+
+ Current Password
+
+
+
+ New Password
+
+
+
+ Confirm Password
+
+
+
+
+ Change Password
+
+
+
+
+ Notification Settings
+ Choose what you want to be notified about.
+
+
+
+
+
+
+
Everything
+
Email digest, mentions & all activity.
+
+
+
+
+
+
+
Available
+
Only mentions and comments.
+
+
+
+
+
+
+
Ignoring
+
Turn off all notifications.
+
+
+
+
+
+
+
+
+ Integrations
+ Manage your connected services.
+
+
+
+
+
Google Calendar
+
Connect your Google Calendar to sync events.
+
+
+ Connect
+
+
+
+
+
Slack
+
+ Connect your Slack workspace to receive notifications.
+
+
+
+ Connect
+
+
+
+
+
+
+ Security
+ Manage your account security settings.
+
+
+
+
+
Two-Factor Authentication
+
Add an extra layer of security to your account.
+
+
+
+
+
+
Logout Sessions
+
Manage your active login sessions.
+
+
+ Manage
+
+
+
+
+
+
+
+
+ )
+}
+
+function AtSignIcon(props: JSX.IntrinsicAttributes & SVGProps) {
+ return (
+
+
+
+
+ )
+}
+
+
+function BellIcon(props: JSX.IntrinsicAttributes & SVGProps) {
+ return (
+
+
+
+
+ )
+}
+
+
+function EyeOffIcon(props: JSX.IntrinsicAttributes & SVGProps) {
+ return (
+
+
+
+
+
+
+ )
+}
+
+function MountainIcon(props: JSX.IntrinsicAttributes & SVGProps) {
+ return (
+
+
+
+ )
+}
+
+
+function XIcon(props: JSX.IntrinsicAttributes & SVGProps) {
+ return (
+
+
+
+
+ )
+}
diff --git a/src/app/auth/component/component.tsx b/src/app/auth/component/component.tsx
index 0f32c2d..65b6c78 100644
--- a/src/app/auth/component/component.tsx
+++ b/src/app/auth/component/component.tsx
@@ -135,7 +135,7 @@ export function Component( props : Props) {
}, [props.email])
return (
-
+
diff --git a/src/app/event/[id]/components/currentWindowSize.jsx b/src/app/event/[id]/components/currentWindowSize.jsx
new file mode 100644
index 0000000..1f55cec
--- /dev/null
+++ b/src/app/event/[id]/components/currentWindowSize.jsx
@@ -0,0 +1,30 @@
+import { useState, useEffect } from 'react';
+
+export default function useWindowDimensions() {
+
+ const hasWindow = typeof window !== 'undefined';
+
+ function getWindowDimensions() {
+ const width = hasWindow ? window.innerWidth : null;
+ const height = hasWindow ? window.innerHeight : null;
+ return {
+ width,
+ height,
+ };
+ }
+
+ const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());
+
+ useEffect(() => {
+ if (hasWindow) {
+ function handleResize() {
+ setWindowDimensions(getWindowDimensions());
+ }
+
+ window.addEventListener('resize', handleResize);
+ return () => window.removeEventListener('resize', handleResize);
+ }
+ }, [hasWindow]);
+
+ return windowDimensions;
+}
\ No newline at end of file
diff --git a/src/app/event/[id]/components/event.jsx b/src/app/event/[id]/components/event.jsx
new file mode 100644
index 0000000..c724aa1
--- /dev/null
+++ b/src/app/event/[id]/components/event.jsx
@@ -0,0 +1,71 @@
+import React, { useState, useEffect } from 'react';
+import "@/styles/event.css";
+
+import EventPoster from "./eventPoster";
+import EventDetails from "./eventDetails";
+import useWindowDimensions from "./currentWindowSize";
+
+
+function GenerateEvent({props:event}){
+ // Getting current window dimensions
+ const {width , height} = useWindowDimensions();
+
+ // console.log(width-height);
+
+ const [scrollPosition, setScrollPosition] = useState(0);
+ const [eventDetailsFixed ,setEventDetailsFixed] = useState("event-details-fixed");
+ const [eventPosterFixed ,setEventPosterFixed] = useState("");
+ const [eventPosterCover, setEventPosterCover] = useState("");
+
+ const handleScroll = () => {
+ const position = window.scrollY;
+ setScrollPosition(position);
+ };
+
+ // To change classes
+ useEffect(()=>{
+ if(width-height>0) {
+ if((scrollPosition>(width-height-(0.12*(width-height)))) ){ //
+ setEventDetailsFixed("");
+ setEventPosterFixed("event-poster-fixed");
+ }
+ else{
+ setEventPosterFixed("");
+ setEventDetailsFixed("event-details-fixed");
+ }
+ setEventPosterCover("event-poster-cover");
+ }
+ else{
+
+ setEventPosterFixed("");
+ setEventDetailsFixed("");
+ }
+ },[scrollPosition,width,height]);
+
+ // To track scroll position
+ useEffect(() => {
+ window.addEventListener('scroll', handleScroll, { passive: true });
+
+ return () => {
+ window.removeEventListener('scroll', handleScroll);
+ };
+ }, []);
+
+ const eventPoster = "/event_poster.avif";
+ return (
+
+ )
+}
+
+export default GenerateEvent;
\ No newline at end of file
diff --git a/src/app/event/[id]/components/eventConvenors.jsx b/src/app/event/[id]/components/eventConvenors.jsx
new file mode 100644
index 0000000..d8a063b
--- /dev/null
+++ b/src/app/event/[id]/components/eventConvenors.jsx
@@ -0,0 +1,15 @@
+import React from "react";
+export default function EventConvenors(props) {
+ return (
+ <>
+
+
Convenors
+
+ {props.eventConvenors.map((item,index) => {
+ return {item} ;
+ })}
+
+
+ >
+ );
+}
\ No newline at end of file
diff --git a/src/app/event/[id]/components/eventDetails.jsx b/src/app/event/[id]/components/eventDetails.jsx
new file mode 100644
index 0000000..fa81f57
--- /dev/null
+++ b/src/app/event/[id]/components/eventDetails.jsx
@@ -0,0 +1,206 @@
+'use client'
+import React, { useEffect, useState } from "react";
+import Link from "next/link";
+import { useRouter } from "next/navigation";
+import EventMode from "./eventMode"
+import EventDuration from "./eventDuration";
+import EventRequirements from "./eventRequirements";
+import EventPrizes from "./eventPrizes";
+import EventConvenors from "./eventConvenors";
+import EventVenue from "./eventVenue";
+import EventWinners from "./eventWinners";
+
+import { Montserrat } from "next/font/google";
+const montserratFont = Montserrat({weight: ["100","400"], subsets: ["latin"]});
+
+
+function EventDetails(props){
+
+ const [isAdmin,setIsAdmin] = useState(true); //Set default to false
+
+ const [event,setEvent] = useState(props.event);
+ const [eventName,setEventName] = useState(event.name);
+ const [eventDescription,setEventDescription] = useState(event.description);
+ const [registerUntilDate,setRegisterUntilDate] = useState(event.register_until);
+ const [registrationLink , setRegistrationLink] = useState(event.registration_link);
+ const [hostedRegistration , setHostedRegistration] = useState(event.hosted_registration);
+ const [hostLink, setHostLink] = useState(event.host_link);
+ const [daysLeftToRegister,setDaysLeftToRegister]= useState(CalculateDaysLeft(registerUntilDate));
+ const [eventDate,setEventDate] = useState(event.date);
+ const [eventDuration , setEventDuration]=useState((CalculateEventDuration(event.duration)));
+ const [eventMode ,setEventMode] = useState(event.mode);
+ const [eventVenue ,setEventVenue] = useState(event.venue);
+ const [eventRequirements, setEventRequirements] = useState(event.requirements);
+ const [eventPrizes , setEventPrizes] = useState(event.prizes);
+ const [eventConvenors,setEventConvenors] = useState(event.convenors);
+ const [eventWinners,setEventWinners] = useState(event.winners);
+
+ //To update the remaining registration time each second
+ useEffect(()=>{
+ setInterval(()=>{
+ setDaysLeftToRegister(CalculateDaysLeft(registerUntilDate))
+ },1000)
+ },[daysLeftToRegister])
+
+
+
+ return <>
+
+
{eventName}
+
+
+
{daysLeftToRegister}
+
+ Register
+
+ {isAdmin ? DeleteButton() : null}
+
+
+
+
+
Event Date
+
{formatDate(new Date(eventDate))}
+
+
+
Event Time
+
{new Date(eventDate).toLocaleTimeString()}
+
+
+
+
+
+
+
About Event
+
{eventDescription}
+
+
+
+
+
+
+ {(eventWinners === null || Object.keys(eventWinners).length === 0) ? null:}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+}
+
+function DeleteButton(){
+ const router = useRouter();
+
+ function onDeleteButtonClicked(){
+ if(confirm("Are you sure you want to delete this event?")){
+ router.push("/events");
+ }else{
+ return false;
+ }
+ }
+
+ return(
+
+ Delete
+
+ )
+}
+
+
+
+function CalculateDaysLeft(date){
+ var today = new Date();
+ var anotherDate = new Date(date);
+ const timeInMS = anotherDate.getTime() - today.getTime();
+ var daysRemaining = Math.ceil(timeInMS / (1000 * 60 * 60 * 24));
+
+ var hoursRemaining = (Math.ceil(timeInMS / (1000 * 60 * 60 )));
+ var minutesRemaining = (Math.ceil(timeInMS / (1000 * 60)));
+ var secondsRemaining = (Math.ceil(timeInMS / (1000)));
+ if(daysRemaining>3){
+ return (daysRemaining+" days left")
+ }
+ else{
+ if(hoursRemaining>1){
+ return (hoursRemaining+" hours left");
+ }
+ else{
+ if(minutesRemaining>2){
+ return(minutesRemaining+" minutes left");
+ }
+ else{
+ if(secondsRemaining>0){
+ return(secondsRemaining+" seconds left");
+ }
+ else{
+ return("Registration closed");
+ }
+ }
+ }
+ }
+}
+
+function CalculateEventDuration (totalmins) {
+
+ var absTotal= Math.abs(totalmins);
+ var mins= absTotal % 60;
+ var hours = Math.floor(absTotal / 60);
+ var days= Math.floor(hours / 24);
+ var hourss = hours % 24;
+ var duration ="";
+ if(days>0){
+ ;
+ if(days==1){duration = duration+days+" Day"}
+ else{duration = duration+days+" Day"};
+ if(hourss || mins){duration = duration+", ";}
+ }
+ if(hourss){
+ if(hourss==1){duration = duration+hourss+" Hour"}
+ else{duration = duration+hourss+" Hours"};
+ if(mins){duration = duration+", ";}
+ }
+ if(mins){
+ duration = duration+mins+" Minutes";
+ }
+
+ return duration;
+
+}
+
+function formatDate(date) {
+ // Array of month names
+ const monthNames = [
+ "January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"
+ ];
+
+ // Array of day names
+ const dayNames = [
+ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
+ ];
+
+ // Extract day, month, and year from the date
+ const day = date.getDate();
+ const month = monthNames[date.getMonth()];
+ const year = date.getFullYear();
+ const dayName = dayNames[date.getDay()];
+
+ // Format the date
+ return `${day < 10 ? '0' + day : day}-${month}-${year}, ${dayName}`;
+}
+export default EventDetails;
\ No newline at end of file
diff --git a/src/app/event/[id]/components/eventDuration.jsx b/src/app/event/[id]/components/eventDuration.jsx
new file mode 100644
index 0000000..727bae1
--- /dev/null
+++ b/src/app/event/[id]/components/eventDuration.jsx
@@ -0,0 +1,25 @@
+import React from "react";
+export default function EventDuration(props) {
+ return (
+ <>
+
+
+
{props.eventDuration}
+
+ >
+ );
+}
+
+const DurationIcon = () => (
+
+
+
+
+);
diff --git a/src/app/event/[id]/components/eventMode.jsx b/src/app/event/[id]/components/eventMode.jsx
new file mode 100644
index 0000000..4576533
--- /dev/null
+++ b/src/app/event/[id]/components/eventMode.jsx
@@ -0,0 +1,38 @@
+import React from "react";
+export default function EventMode(props) {
+ return <>
+
+
{props.eventMode ? : }
+
{props.eventMode ? "Online" : props.eventVenue}
+
+ >
+}
+
+const OnlineIcon = ({ width = 24, height = 24}) => (
+
+
+
+);
+
+
+const OfflineIcon = ({ width = 32, height = 32}) => (
+
+
+
+
+
+
+);
+
diff --git a/src/app/event/[id]/components/eventPoster.jsx b/src/app/event/[id]/components/eventPoster.jsx
new file mode 100644
index 0000000..9f8fa23
--- /dev/null
+++ b/src/app/event/[id]/components/eventPoster.jsx
@@ -0,0 +1,10 @@
+import React from "react";
+import Image from "next/image";
+function EventPoster(props){
+ return <>
+
+
+ >
+}
+
+export default EventPoster;
\ No newline at end of file
diff --git a/src/app/event/[id]/components/eventPrizes.jsx b/src/app/event/[id]/components/eventPrizes.jsx
new file mode 100644
index 0000000..dc143c2
--- /dev/null
+++ b/src/app/event/[id]/components/eventPrizes.jsx
@@ -0,0 +1,126 @@
+import React, { useState } from "react";
+export default function EventPrizes(props) {
+ var specialPrizes=false;
+ var specialPrizesIndex=0;
+ var specialPrizesArray = [];
+
+
+ if (props.eventPrizes === null || props.eventPrizes.length === 0) {
+ return <>>;
+ }
+ else{
+ props.eventPrizes.map((value, index) => {
+ if (typeof value === 'object') {
+ specialPrizes = true;
+ specialPrizesIndex = index;
+ }});
+ Object.entries(props.eventPrizes[specialPrizesIndex]).forEach(([key, value]) => {
+ specialPrizesArray.push();
+ })
+ }
+
+ return (
+ <>
+
+
+
+
{specialPrizes ? "Special Prizes":null}
+ {specialPrizes ?
{specialPrizesArray.map((value,index)=>{return({value}
)})}
+ :null}
+
+
+ >
+ );
+}
+
+const FirstPrizeIcon = () => (
+
+
+
+
+
+
+
+
+);
+
+const SecondPrizeIcon = () => (
+
+
+
+
+
+
+
+
+);
+
+const ThirdPrizeIcon = () => (
+
+
+
+
+
+
+
+
+);
diff --git a/src/app/event/[id]/components/eventRequirements.jsx b/src/app/event/[id]/components/eventRequirements.jsx
new file mode 100644
index 0000000..9cd3ff9
--- /dev/null
+++ b/src/app/event/[id]/components/eventRequirements.jsx
@@ -0,0 +1,34 @@
+import React from "react";
+export default function EventRequirements(props) {
+ return (
+ <>
+
+
Requirements
+
+ {props.eventRequirements.map((item,index) => {
+ return {item} ;
+ })}
+
+
+ >
+ );
+}
+
+const RequirementIcon = () => (
+
+
+
+
+
+ );
+
\ No newline at end of file
diff --git a/src/app/event/[id]/components/eventVenue.jsx b/src/app/event/[id]/components/eventVenue.jsx
new file mode 100644
index 0000000..3c2beea
--- /dev/null
+++ b/src/app/event/[id]/components/eventVenue.jsx
@@ -0,0 +1,27 @@
+import React from "react";
+export default function EventRequirements(props) {
+ return (
+ <>
+
+ >
+ );
+}
+
+const OfflineIcon = ({ width = 32, height = 32}) => (
+
+
+
+
+
+
+ );
+
\ No newline at end of file
diff --git a/src/app/event/[id]/components/eventWinners.jsx b/src/app/event/[id]/components/eventWinners.jsx
new file mode 100644
index 0000000..7c9bfeb
--- /dev/null
+++ b/src/app/event/[id]/components/eventWinners.jsx
@@ -0,0 +1,236 @@
+import React, { useEffect } from "react";
+export default function EventWinners(props) {
+ const eventWinners = props.eventWinners;
+
+ return (
+ <>
+ Event Winners🎉
+
+ {Object.entries(eventWinners).map((winnerCategory, index) => {
+ return GenerateWinnerCard(winnerCategory, index);
+ })}
+
+ >
+ );
+}
+
+function GenerateWinners(winner, index) {
+ var prizeIcon = null;
+ if (index === 0) {
+ prizeIcon =
;
+ } else if (index === 1) {
+ prizeIcon =
;
+ } else if (index === 2) {
+ prizeIcon =
;
+ } else {
+ prizeIcon = index + 1 + `. `;
+ }
+ return (
+
+ {prizeIcon}
+
+ {winner}
+
+
+ );
+}
+
+function GenerateWinnerCard(winnerCategory, index) {
+ return (
+
+ {winnerCategory[0]}
+
+ {winnerCategory[1].map((winner, idx) => {
+ return GenerateWinners(winner, idx);
+ })}
+
+
+ );
+}
+
+
+const BronzeTrophyIcon = ({ width = 32, height = 32 }) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+const SilverTrophyIcon = ({ width = 32, height = 32 }) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+const GoldTrophyIcon = ({ width = 32, height = 32 }) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
diff --git a/src/app/event/[id]/fetchEvent.jsx b/src/app/event/[id]/fetchEvent.jsx
new file mode 100644
index 0000000..e4ac05d
--- /dev/null
+++ b/src/app/event/[id]/fetchEvent.jsx
@@ -0,0 +1,28 @@
+import { useState, useEffect } from 'react';
+import axios from 'axios';
+
+const useFetchEvent = (eventId) => {
+ const [event, setEvent] = useState({});
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+
+ useEffect(() => {
+ const fetchEvent = async () => {
+ try {
+ const response = await axios.get(`/api/v1/get/event?id=${eventId}`);
+ const result = response.data;
+ setEvent(result.event);
+ setLoading(false);
+ } catch (error) {
+ setError(error);
+ setLoading(false);
+ }
+ };
+
+ fetchEvent();
+ }, [eventId]);
+
+ return { event, loading, error };
+};
+
+export default useFetchEvent;
diff --git a/src/app/event/[id]/page.jsx b/src/app/event/[id]/page.jsx
new file mode 100644
index 0000000..0e1e96b
--- /dev/null
+++ b/src/app/event/[id]/page.jsx
@@ -0,0 +1,72 @@
+'use client'
+import React from 'react';
+import { useRouter } from 'next/navigation';
+import GenerateEvent from './components/event';
+import useFetchEvent from './fetchEvent';
+import Loading from '@/components/loading';
+
+function Event({ params }) {
+ const eventId = params.id;
+ // const { event, loading, error } = useFetchEvent(eventId);
+ // const router = useRouter();
+
+ // if (loading) {
+ // return <>
+ //
+ // >;
+ // }
+
+ // if (error) {
+ // console.error(error);
+ // router.push('/events');
+ // return null;
+ // }
+
+
+
+ // To start calling api delete the object below and uncomment the above code
+ const event = {
+ "id": 7,
+ "name": "Codestrike v6.0",
+ "description": `Join us for an exciting coding event organized by Coding Club IIITV, \nwhere teamwork and innovation take center stage! \nIn this unique competition, teams of three programmers will come together to \n solve complex coding challenges within a set timeframe. Participants will need to collaborate closely, leveraging each other's strengths to develop efficient and creative solutions. This event is designed to foster camaraderie, enhance problem-solving skills, and encourage effective communication among team members. Don't miss this opportunity to test your coding prowess, make new friends, and have a blast working together. Sign up now and be part of a thrilling coding adventure!`,
+ "date": "2024-08-05T15:30:00",
+ "duration": 60,
+ "mode": false,
+ "host_link": "https://www.hosted.com",
+ "venue": "Mess Hall",
+ "requirements": [
+ "Laptop",
+ "Notebook",
+ "Pen",
+ "Pencil"
+ ],
+ "hosted_registration": true,
+ "register_until": "2024-08-05T15:32:30",
+ "registration_link": "https://www.registration.com",
+ "creator": "b4e05b86-df08-49d8-a118-51c205216401",
+ "prizes" : ["Rs. 10000","Rs. 5000", "Rs. 1000",
+ {
+ "Female Special":"Rs. 1000",
+ "FY Special":"Rs. 1000"
+ }
+ ],
+ "winners" : {
+ "Web Dev":["ABCDEGFHIJKL","ABCDEGFHIJKL","ABCDEGFHIJKL"],
+ "Cloud ":["ABCDEGFHIJKL"],
+ "CyberSecurity":["ABCDEGFHIJKL","ABCDEGFHIJKL"]
+ },
+ "convenors":[
+ "Devyash Saini","Devyash Saini","Devyash Saini","Devyash Saini"
+ ]
+ }
+
+
+
+ return (
+
+ );
+}
+
+export default Event;
diff --git a/src/app/event/layout.tsx b/src/app/event/layout.tsx
new file mode 100644
index 0000000..1bcbaa6
--- /dev/null
+++ b/src/app/event/layout.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+import Navbar from "@/components/navbar"
+import Footer from "@/components/footer"
+
+
+interface RootLayoutProps {
+ children: React.ReactNode;
+}
+
+export default function RootLayout({ children } : RootLayoutProps) {
+ return (
+ <>
+
+ {children}
+
+ >
+ )
+}
\ No newline at end of file
diff --git a/src/app/event/page.jsx b/src/app/event/page.jsx
new file mode 100644
index 0000000..2c14f25
--- /dev/null
+++ b/src/app/event/page.jsx
@@ -0,0 +1,6 @@
+import { redirect } from "next/navigation";
+function Page(){
+ redirect("/events");
+}
+
+export default Page;
\ No newline at end of file
diff --git a/src/app/form_create/components/loggingout.tsx b/src/app/form_create/components/loggingout.tsx
index 117c5e6..8bc3cec 100644
--- a/src/app/form_create/components/loggingout.tsx
+++ b/src/app/form_create/components/loggingout.tsx
@@ -1,11 +1,10 @@
import React from 'react'
-import Link from 'next/link'
import { SVGProps } from 'react'
import Loader from '@/components/ui/loader'
export function LoggingOut() {
return (
-
+
diff --git a/src/app/home/components/hero-parallax.tsx b/src/app/home/components/hero-parallax.tsx
new file mode 100644
index 0000000..900f44e
--- /dev/null
+++ b/src/app/home/components/hero-parallax.tsx
@@ -0,0 +1,159 @@
+"use client";
+import React from "react";
+import {
+ motion,
+ useScroll,
+ useTransform,
+ useSpring,
+ MotionValue,
+} from "framer-motion";
+import Image from "next/image";
+import Link from "next/link";
+
+export const HeroParallax = ({
+ products,
+}: {
+ products: {
+ title: string;
+ link: string;
+ thumbnail: string;
+ }[];
+}) => {
+ const firstRow = products.slice(0, 5);
+ const secondRow = products.slice(5, 10);
+ const thirdRow = products.slice(10, 15);
+ const ref = React.useRef(null);
+ const { scrollYProgress } = useScroll({
+ target: ref,
+ offset: ["start start", "end start"],
+ });
+
+ const springConfig = { stiffness: 300, damping: 30, bounce: 100 };
+
+ const translateX = useSpring(
+ useTransform(scrollYProgress, [0, 1], [0, 1000]),
+ springConfig
+ );
+ const translateXReverse = useSpring(
+ useTransform(scrollYProgress, [0, 1], [0, -1000]),
+ springConfig
+ );
+ const rotateX = useSpring(
+ useTransform(scrollYProgress, [0, 0.2], [15, 0]),
+ springConfig
+ );
+ const opacity = useSpring(
+ useTransform(scrollYProgress, [0, 0.2], [0.2, 1]),
+ springConfig
+ );
+ const rotateZ = useSpring(
+ useTransform(scrollYProgress, [0, 0.2], [20, 0]),
+ springConfig
+ );
+ const translateY = useSpring(
+ useTransform(scrollYProgress, [0, 0.2], [-700, 500]),
+ springConfig
+ );
+ return (
+
+
+
+
+ {firstRow.map((product) => (
+
+ ))}
+
+
+ {secondRow.map((product) => (
+
+ ))}
+
+
+ {thirdRow.map((product) => (
+
+ ))}
+
+
+
+ );
+};
+
+export const Header = () => {
+ return (
+
+
+ The Ultimate development studio
+
+
+ We build beautiful products with the latest technologies and frameworks.
+ We are a team of passionate developers and designers that love to build
+ amazing products.
+
+
+ );
+};
+
+export const ProductCard = ({
+ product,
+ translate,
+}: {
+ product: {
+ title: string;
+ link: string;
+ thumbnail: string;
+ };
+ translate: MotionValue
;
+}) => {
+ return (
+
+
+
+
+
+
+ {product.title}
+
+
+ );
+};
diff --git a/src/app/home/layout.tsx b/src/app/home/layout.tsx
index 1bcbaa6..56ca438 100644
--- a/src/app/home/layout.tsx
+++ b/src/app/home/layout.tsx
@@ -1,12 +1,32 @@
import React from 'react';
import Navbar from "@/components/navbar"
import Footer from "@/components/footer"
+<<<<<<< HEAD
+=======
+import type { Metadata } from "next";
+>>>>>>> a53050d3b3abb1d3c6c5c28f33551fa418aba183
interface RootLayoutProps {
children: React.ReactNode;
}
+<<<<<<< HEAD
+=======
+export const metadata: Metadata = {
+ title: "Coding Club IIITV",
+ description: "IIITV Coding Club Community Website | Workshops | Mentorship | Community",
+ openGraph: {
+ title: 'Coding Club IIITV',
+ description: 'IIITV Coding Club Community Website | Workshops | Mentorship | Community',
+ images: ["https://iiitvcc.vercel.app/LinkPreview.png"],
+ type: 'website',
+ locale: 'en_IN',
+ url: 'https://iiitvcc.vercel.app',
+ },
+};
+
+>>>>>>> a53050d3b3abb1d3c6c5c28f33551fa418aba183
export default function RootLayout({ children } : RootLayoutProps) {
return (
<>
@@ -15,4 +35,8 @@ export default function RootLayout({ children } : RootLayoutProps) {
>
)
-}
\ No newline at end of file
+<<<<<<< HEAD
+}
+=======
+}
+>>>>>>> a53050d3b3abb1d3c6c5c28f33551fa418aba183
diff --git a/src/app/home/page.tsx b/src/app/home/page.tsx
index 882e8ec..c924626 100644
--- a/src/app/home/page.tsx
+++ b/src/app/home/page.tsx
@@ -1,14 +1,32 @@
+'use client'
import React from "react"
import Link from "next/link"
import { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter } from "@/components/ui/card"
+import { HeroParallax } from "./components/hero-parallax"
+
import Image from "next/image"
+// import { useRef } from 'react';
+// import Spline from '@splinetool/react-spline/next';
+
+// export default function App() {
+// return (
+//
+//
+//
+// );
+// }
+
export default function Home() {
return (
-
-
+
+
+
Unlock Your Coding Potential
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index c30d450..491f673 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -6,6 +6,7 @@ import "./globals.css";
import { Analytics } from "@vercel/analytics/react"
import { SpeedInsights } from "@vercel/speed-insights/next"
import { cn } from "@/lib/utils"
+import Head from 'next/head';
const inter = Inter({ subsets: ["latin"] });
@@ -23,7 +24,15 @@ const fontBody = Inter({
export const metadata: Metadata = {
title: "Coding Club IIITV",
- description: "IIITV Coding Club Blog Website",
+ description: "IIITV Coding Club Community Website | Workshops | Mentorship | Community",
+ openGraph: {
+ title: 'Coding Club IIITV',
+ description: 'IIITV Coding Club Community Website | Workshops | Mentorship | Community',
+ images: ["https://iiitvcc.vercel.app/LinkPreview.png"],
+ type: 'website',
+ locale: 'en_IN',
+ url: 'https://iiitvcc.vercel.app',
+ },
};
export default function RootLayout({
@@ -33,13 +42,13 @@ export default function RootLayout({
}>) {
return (
-
+
-
+