diff --git a/apps/landing/public/hero.jpeg b/apps/landing/public/hero.jpeg new file mode 100644 index 0000000..5e4ccd0 Binary files /dev/null and b/apps/landing/public/hero.jpeg differ diff --git a/apps/landing/src/app/_components/hero.tsx b/apps/landing/src/app/_components/hero.tsx new file mode 100644 index 0000000..863418c --- /dev/null +++ b/apps/landing/src/app/_components/hero.tsx @@ -0,0 +1,153 @@ +'use client'; + +import { + Button, + CodeIcon, + SparklesIcon, + UsersIcon, +} from '@imphnen-frontend-service/shadcn-ui/atoms'; +import { motion } from 'framer-motion'; +import Image from 'next/image'; +import { useEffect, useState } from 'react'; + +export function Hero() { + const [scrollY, setScrollY] = useState(0); + + useEffect(() => { + const handleScroll = () => { + setScrollY(window.scrollY); + }; + + window.addEventListener('scroll', handleScroll); + return () => window.removeEventListener('scroll', handleScroll); + }, []); + + return ( +
+ {/* Background Elements */} +
+
+ + {/* Animated Gradient Orbs */} +
+
+ + {/* Grid Pattern */} +
+
+ +
+
+ +
+ + Komunitas Programmer Indonesia +
+ +
+

+ Programmer Handal,
+ + Tanpa Ribet + +

+

+ Temukan potensi programming Anda bersama komunitas yang + mendukung, tutorial interaktif, dan sumber daya berkualitas + tinggi. +

+
+ +
+ + + + +
+ +
+
+
+ 100K+ +
+
Member
+
+
+
+
+ 500+ +
+
Tutorial
+
+
+
+
+ 24/7 +
+
Yapping
+
+
+
+ + +
+ {/* Decorative Elements */} +
+ +
+
+ +
+ + {/* Main Image */} +
+
+ IMPHNEN Programming Community +
+
+ +
+
+
+ ); +} diff --git a/apps/landing/src/app/page.tsx b/apps/landing/src/app/page.tsx index b52b60a..4bdfedc 100644 --- a/apps/landing/src/app/page.tsx +++ b/apps/landing/src/app/page.tsx @@ -1,10 +1,13 @@ import { Header } from './_components/header'; +import { Hero } from './_components/hero'; export default function Page() { return (
-
+
+ +
); } diff --git a/libs/shadcn-ui/src/atoms/icons.tsx b/libs/shadcn-ui/src/atoms/icons.tsx index f0ec41e..758c44f 100644 --- a/libs/shadcn-ui/src/atoms/icons.tsx +++ b/libs/shadcn-ui/src/atoms/icons.tsx @@ -1,3 +1,10 @@ -import { LuMenu as MenuIcon, LuX as XIcon } from 'react-icons/lu'; +import { + LuArrowDown as ArrowDownIcon, + LuCode as CodeIcon, + LuMenu as MenuIcon, + LuSparkles as SparklesIcon, + LuUsers as UsersIcon, + LuX as XIcon, +} from 'react-icons/lu'; -export { MenuIcon, XIcon }; +export { ArrowDownIcon, CodeIcon, MenuIcon, SparklesIcon, UsersIcon, XIcon }; diff --git a/package-lock.json b/package-lock.json index 1a8c457..f4e5e33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@tanstack/react-table": "^8.21.2", "axios": "^1.8.3", "clsx": "^2.1.1", + "framer-motion": "^12.9.2", "js-cookie": "^3.0.5", "next": "~15.2.4", "react": "^19.1.0", @@ -19070,6 +19071,33 @@ "url": "https://github.com/sponsors/rawify" } }, + "node_modules/framer-motion": { + "version": "12.9.2", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.9.2.tgz", + "integrity": "sha512-R0O3Jdqbfwywpm45obP+8sTgafmdEcUoShQTAV+rB5pi+Y1Px/FYL5qLLRe5tPtBdN1J4jos7M+xN2VV2oEAbQ==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.9.1", + "motion-utils": "^12.8.3", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -24333,6 +24361,21 @@ "pathe": "^2.0.1" } }, + "node_modules/motion-dom": { + "version": "12.9.1", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.9.1.tgz", + "integrity": "sha512-xqXEwRLDYDTzOgXobSoWtytRtGlf7zdkRfFbrrdP7eojaGQZ5Go4OOKtgnx7uF8sAkfr1ZjMvbCJSCIT2h6fkQ==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.8.3" + } + }, + "node_modules/motion-utils": { + "version": "12.8.3", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.8.3.tgz", + "integrity": "sha512-GYVauZEbca8/zOhEiYOY9/uJeedYQld6co/GJFKOy//0c/4lDqk0zB549sBYqqV2iMuX+uHrY1E5zd8A2L+1Lw==", + "license": "MIT" + }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", diff --git a/package.json b/package.json index a02c205..49a3103 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@tanstack/react-table": "^8.21.2", "axios": "^1.8.3", "clsx": "^2.1.1", + "framer-motion": "^12.9.2", "js-cookie": "^3.0.5", "next": "~15.2.4", "react": "^19.1.0",