diff --git a/package-lock.json b/package-lock.json
index 3bf7570..fd1e98f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -23,8 +23,10 @@
"crypto-browserify": "^3.12.1",
"firebase": "^10.13.1",
"https-browserify": "^1.0.0",
+ "lottie-react": "^2.4.1",
"moment": "^2.30.1",
"moment-timezone": "^0.5.46",
+ "motion": "^12.0.6",
"os-browserify": "^0.3.0",
"path-browserify": "^1.0.1",
"react": "^18.3.1",
@@ -13011,6 +13013,33 @@
"url": "https://github.com/sponsors/rawify"
}
},
+ "node_modules/framer-motion": {
+ "version": "12.0.6",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.0.6.tgz",
+ "integrity": "sha512-LmrXbXF6Vv5WCNmb+O/zn891VPZrH7XbsZgRLBROw6kFiP+iTK49gxTv2Ur3F0Tbw6+sy9BVtSqnWfMUpH+6nA==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-dom": "^12.0.0",
+ "motion-utils": "^12.0.0",
+ "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",
@@ -18184,6 +18213,25 @@
"loose-envify": "cli.js"
}
},
+ "node_modules/lottie-react": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/lottie-react/-/lottie-react-2.4.1.tgz",
+ "integrity": "sha512-LQrH7jlkigIIv++wIyrOYFLHSKQpEY4zehPicL9bQsrt1rnoKRYCYgpCUe5maqylNtacy58/sQDZTkwMcTRxZw==",
+ "license": "MIT",
+ "dependencies": {
+ "lottie-web": "^5.10.2"
+ },
+ "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/lottie-web": {
+ "version": "5.12.2",
+ "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.12.2.tgz",
+ "integrity": "sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==",
+ "license": "MIT"
+ },
"node_modules/lower-case": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
@@ -18950,6 +18998,47 @@
"node": ">= 0.8"
}
},
+ "node_modules/motion": {
+ "version": "12.0.6",
+ "resolved": "https://registry.npmjs.org/motion/-/motion-12.0.6.tgz",
+ "integrity": "sha512-AzCEO0+//mPlcGiL9JaVwjddHY1cbbnvz5upHL0toqQwsPCs+hiKJ0XG5jfG0XwDtBbiSXdEqW/UTmGLwkVQ6A==",
+ "license": "MIT",
+ "dependencies": {
+ "framer-motion": "^12.0.6",
+ "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/motion-dom": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.0.0.tgz",
+ "integrity": "sha512-CvYd15OeIR6kHgMdonCc1ihsaUG4MYh/wrkz8gZ3hBX/uamyZCXN9S9qJoYF03GqfTt7thTV/dxnHYX4+55vDg==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-utils": "^12.0.0"
+ }
+ },
+ "node_modules/motion-utils": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.0.0.tgz",
+ "integrity": "sha512-MNFiBKbbqnmvOjkPyOKgHUp3Q6oiokLkI1bEwm5QA28cxMZrv0CbbBGDNmhF6DIXsi1pCQBSs0dX8xjeER1tmA==",
+ "license": "MIT"
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
diff --git a/package.json b/package.json
index 2247d84..6a93aee 100644
--- a/package.json
+++ b/package.json
@@ -18,8 +18,10 @@
"crypto-browserify": "^3.12.1",
"firebase": "^10.13.1",
"https-browserify": "^1.0.0",
+ "lottie-react": "^2.4.1",
"moment": "^2.30.1",
"moment-timezone": "^0.5.46",
+ "motion": "^12.0.6",
"os-browserify": "^0.3.0",
"path-browserify": "^1.0.1",
"react": "^18.3.1",
diff --git a/public/section3card-1.svg b/public/section3card-1.svg
new file mode 100644
index 0000000..8568fce
--- /dev/null
+++ b/public/section3card-1.svg
@@ -0,0 +1,208 @@
+
diff --git a/public/section3card-2.svg b/public/section3card-2.svg
new file mode 100644
index 0000000..8566b60
--- /dev/null
+++ b/public/section3card-2.svg
@@ -0,0 +1,62 @@
+
diff --git a/public/section3card-3.svg b/public/section3card-3.svg
new file mode 100644
index 0000000..dcffe8d
--- /dev/null
+++ b/public/section3card-3.svg
@@ -0,0 +1,297 @@
+
diff --git a/public/section3card-4.svg b/public/section3card-4.svg
new file mode 100644
index 0000000..67af4ee
--- /dev/null
+++ b/public/section3card-4.svg
@@ -0,0 +1,59 @@
+
diff --git a/public/upArrow.json b/public/upArrow.json
new file mode 100644
index 0000000..e81f924
--- /dev/null
+++ b/public/upArrow.json
@@ -0,0 +1 @@
+{"assets":[],"ddd":0,"fr":60,"h":500,"ip":0,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Path 1","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[71.013,-28.405]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[250,253.015],"i":{"x":0.88,"y":0.77},"o":{"x":0.5,"y":0},"ti":[0,0],"to":[0,0]},{"t":48,"s":[250,213.015],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":120,"s":[250,253.015],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"Path 1","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,0],[71.013,-56.811],[142.026,0]]}}},{"ty":"rd","hd":false,"r":{"a":0,"k":4}},{"ty":"st","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[0.302,0.671,0.992],"i":{"x":0.88,"y":0.77},"o":{"x":0.5,"y":0}},{"t":48,"s":[0,0.529,0.988],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":120,"s":[0.302,0.671,0.992],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"lc":2,"lj":1,"ml":28.96,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.88,"y":0.77},"o":{"x":0.5,"y":0}},{"t":48,"s":[100],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":120,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"w":{"a":0,"k":20}}]},{"ddd":0,"ind":2,"ty":4,"nm":"Path 2","hd":false,"sr":1,"ks":{"a":{"a":0,"k":[71.013,-28.405]},"o":{"a":0,"k":100},"p":{"a":1,"k":[{"t":0,"s":[250,301.985],"i":{"x":0.88,"y":0.77},"o":{"x":0.5,"y":0},"ti":[0,0],"to":[0,0]},{"t":52.2,"s":[250,260.985],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25},"ti":[0,0],"to":[0,0]},{"t":120,"s":[250,301.985],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"r":{"a":0,"k":0},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0}},"ao":0,"ip":0,"op":121,"st":0,"bm":0,"shapes":[{"ty":"sh","hd":false,"nm":"Path 2","d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,0],[71.013,-56.811],[142.026,0]]}}},{"ty":"rd","hd":false,"r":{"a":0,"k":4}},{"ty":"st","hd":false,"bm":0,"c":{"a":1,"k":[{"t":0,"s":[0.835,0.906,0.961],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":52.2,"s":[0.667,0.808,0.922],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":120,"s":[0.835,0.906,0.961],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"lc":2,"lj":1,"ml":28.96,"o":{"a":1,"k":[{"t":0,"s":[100],"i":{"x":0.88,"y":0.77},"o":{"x":0.5,"y":0}},{"t":52.2,"s":[100],"i":{"x":0.75,"y":0.75},"o":{"x":0.25,"y":0.25}},{"t":120,"s":[100],"i":{"x":0,"y":0},"o":{"x":1,"y":1}}]},"w":{"a":0,"k":20}}]}],"meta":{"g":"@phase-software/lottie-exporter 0.7.0"},"nm":"","op":120,"v":"5.6.0","w":500}
\ No newline at end of file
diff --git a/src/App.js b/src/App.js
index 8789abb..9e60980 100644
--- a/src/App.js
+++ b/src/App.js
@@ -9,7 +9,8 @@ import IndividualCalendar from './pages/individualCalendar';
import MyPage from './pages/MyPage';
import AccountManagement from './pages/AccountManagement';
-import LandingPage from "./pages/LandingPage";
+// import LandingPage from "./components/LandingPage";
+import LandingPage from "./components/LandingPage";
function App() {
return (
diff --git a/src/components/Button.tsx b/src/components/Button.tsx
index f5e8086..8b47a2a 100644
--- a/src/components/Button.tsx
+++ b/src/components/Button.tsx
@@ -157,7 +157,7 @@ export const ButtonVariants = cva(
'font-pretendard',
'whitespace-nowrap',
'!transform-none',
- '!hover:transform hover:transform-none',
+ '!hover:transform-none',
!typographyVariants({ variant: 'b1-sb' }),
//disabled
@@ -184,8 +184,8 @@ export const ButtonVariants = cva(
'whitespace-nowrap',
typographyVariants({ variant: 'b1-sb' }),
`text-[var(--white)]`,
- 'transform hover:transform-none',
-
+ 'hover:transform-none',
+ 'hover:none'
]
},
},
diff --git a/src/components/LandingPage.css b/src/components/LandingPage.css
deleted file mode 100644
index 712e42a..0000000
--- a/src/components/LandingPage.css
+++ /dev/null
@@ -1,122 +0,0 @@
-html, body {
- margin: 0;
- padding: 0;
- overflow-x: hidden;
- }
-
-.landing-page {
- font-family: Arial, sans-serif;
- color: #333;
- line-height: 1;
- display: flex;
- flex-direction: column;
- /* min-height: 100vh; */
-
-}
-
- .landing-header {
- background-color: #F0F4F8;
- color: white;
- padding: 0.8rem;
- text-align: center;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- z-index: 10;
- }
-
- main {
- flex: 1 0 auto;
- padding-top: 60px; /* Adjust based on your header height */
- width: 100%;
- }
-
- .ci-logo {
- height: 40px;
- margin-right: 10px;
- }
-
- .hero {
- text-align: center;
- }
-
- .service-logo {
- width: 120px;
- margin-bottom: 1rem;
- }
-
- .hero h2 {
- font-size: 1.8rem;
- margin-bottom: 0.5rem;
- }
-
- .cta-button {
- display: inline-block;
- background-color: white;
- color: #4A90E2;
- padding: 0.5rem 1rem;
- border-radius: 20px;
- border-color: white;
- text-decoration: none;
- }
-
- .hero, .problem, .features, .team {
- padding: 2rem 1rem;
- box-sizing: border-box;
- }
-
- .problem-logo-div {
- background-image: url('../../public/logo.svg');
- background-position: center;
- background-repeat: no-repeat;
- background-size: contain;
- height: 200px;
- margin-bottom: 50px;
- }
-
- .problem li {
- margin-bottom: 1rem;
- }
-
- .feature-card {
- background-color: white;
- border-radius: 8px;
- padding: 1rem;
- margin-bottom: 1rem;
- box-shadow: 0 2px 4px rgba(0,0,0,0.1);
- }
-
- .feature-icon {
- font-size: 2rem;
- margin-right: 0.5rem;
- }
-
- .team-content {
- background-color: white;
- border-radius: 8px;
- padding: 1rem;
- box-shadow: 0 2px 4px rgba(0,0,0,0.1);
- }
-
- .landing-footer {
- background-color: #4A90E2;
- color: white;
- text-align: center;
- padding: 1rem 0.1rem;
- margin-left: -10%;
- width: 120%;
- box-sizing: border-box;
- }
-
- .footer-cta {
- font-weight: bold;
- }
-
- @media (min-width: 768px) {
- .features {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 1rem;
- }
- }
\ No newline at end of file
diff --git a/src/components/LandingPage.js b/src/components/LandingPage.js
index 2f4f409..5f52648 100644
--- a/src/components/LandingPage.js
+++ b/src/components/LandingPage.js
@@ -1,111 +1,544 @@
-import React from 'react';
-import { Link } from 'react-router-dom';
-import './LandingPage.css';
-
-const Header = () => (
- 카톡에서 "언제 괜찮아요?" 무한 반복하기 매번 지겹게 캘린더 스크린샷 올리기 투표 만들고 결과 정리하느라 시간 쓰기
-
다들 한번쯤 이런 적 있으시죠? 😫
-
{description}
-이제는 쉽고 빠르게 약속을 잡아보세요!
- 시작하기 -회의, 팀플, 동아리 활동...
-많은 상황에서 매번 약속 잡기가 힘들었죠
-이러한 경험을 가진 사람들이 모여
-“언제볼까?”가 탄생하게 되었습니다.
-🧑💻민상연 (Team Lead): BE/Infra 개발
-👩💻이현주 (FE Dev): FE 개발, 배포
-👩🎨이시은 (Designer): 웹 버전 디자인
-👩🎨장연우 (Designer): 모바일 버전 디자인
+ return ( +저희의 목표는 약속 상황의 불편함을 해결하고
-더 많은 만남과 추억을 만들 수 있도록 돕는 것!
- -); + ); +} + +//팀 소개 +const Section4 = () => { + const positions = [ + { x: 100, y: -38, name: "민상연", role: "Developer", profileURL: "@judemin", flag: "dev" }, + { x: 220, y: 80, name: "강찬욱", role: "Developer", profileURL: "@chanwookK", flag: "dev" }, + { x: 170, y: 200, name: "장연우", role: "Designer", profileURL: "@hyunju1112", flag: "design" }, + { x: -50, y: 170, name: "이시은", role: "Designer", profileURL: "@hyunju1112", flag: "design" }, + { x: -55, y: 40, name: "이현주", role: "Developer", profileURL: "@hyun1211", flag: "dev" }, + ]; + // 중심점 계산 (원의 중심을 (0,0)으로 가정) + const centerX = 40; + const centerY = 140; + + // 각 위치에서 중심을 향해 이동하는 거리 계산 + const calculateMovement = (x, y, index) => { + // 현재 위치에서 중심까지의 벡터 계산 + const vectorX = centerX - x; + const vectorY = centerY - y; + + // 벡터의 크기 계산 + const magnitude = Math.sqrt(vectorX * vectorX + vectorY * vectorY); + + // 이동할 거리 (예: 전체 거리의 20%) + const moveDistance = magnitude * 0.15; + + // 정규화된 벡터에 이동 거리를 곱해 최종 이동량 계산 + const moveX = (vectorX / magnitude) * moveDistance; + const moveY = (vectorY / magnitude) * moveDistance; + + return { + x: x + moveX, + y: y + moveY + }; + }; + + return( +Loadding...
+ )} +