diff --git a/public/assets/login/step1.png b/public/assets/login/step1.png new file mode 100644 index 0000000..4e5a079 Binary files /dev/null and b/public/assets/login/step1.png differ diff --git a/public/assets/login/step2.png b/public/assets/login/step2.png new file mode 100644 index 0000000..4cc0ca3 Binary files /dev/null and b/public/assets/login/step2.png differ diff --git a/public/assets/login/step3.png b/public/assets/login/step3.png new file mode 100644 index 0000000..5db0d29 Binary files /dev/null and b/public/assets/login/step3.png differ diff --git a/src/pages/AdminDashboard.tsx b/src/pages/AdminDashboard.tsx index 8285434..b80fb32 100644 --- a/src/pages/AdminDashboard.tsx +++ b/src/pages/AdminDashboard.tsx @@ -186,41 +186,54 @@ export default function AdminDashboard() { ------------------------------- */ return (
- {/* HEADER */} -
-
-
-

- EvenTee 관리자 -

+
+
+ + {/* 왼쪽: 로고 + 관리자 타이틀 */} +
+
+ Eventee Logo + + Eventee 관리자 + +
-

- {event.title} -

+ {/* 이벤트 정보 */} +
+

+ {event.title} +

+

+ {format(event.startDate, "yyyy.MM.dd")} ~ {format(event.endDate, "yyyy.MM.dd")} +

+
+
-

- {format(event.startDate, "yyyy.MM.dd")} ~{" "} - {format(event.endDate, "yyyy.MM.dd")} -

-
+ {/* 오른쪽: 돌아가기 버튼 */} + + +
+
- -
- {/* MAIN */}
diff --git a/src/pages/EventMainPage.tsx b/src/pages/EventMainPage.tsx index 14892f5..d828827 100644 --- a/src/pages/EventMainPage.tsx +++ b/src/pages/EventMainPage.tsx @@ -767,35 +767,43 @@ useEffect(() => { return (
- {/* 헤더 */} -
- {/* 왼쪽: 제목 + 설명 */} -
- {/* 로고 + 이벤트 타이틀 */} -
-

- Eventee -

- -
-

- - {headerTitleText} - {eventPeriod && ( - - ({eventPeriod}) - - )} -

-
-
+{/* 헤더 */} +
+ + {/* 왼쪽: 로고 + 이벤트 제목 */} +
+ + {/* 공통 로고 */} +
+ Eventee Logo + + Eventee + +
+ + {/* 이벤트 타이틀 + 기간 */} +
+

+ {headerTitleText} + {eventPeriod && ( + + ({eventPeriod}) + + )} +

{headerSubtitleText && ( -

+

{headerSubtitleText}

)}
+
+ {/* 오른쪽: 운영자 버튼 + 프로필 */}
diff --git a/src/pages/EventPasswordPage.tsx b/src/pages/EventPasswordPage.tsx index 7d55583..00ad5e1 100644 --- a/src/pages/EventPasswordPage.tsx +++ b/src/pages/EventPasswordPage.tsx @@ -88,14 +88,23 @@ export default function EventPasswordPage() { return (
- {/* 로고 */} -
-

- EvenTee -

-
+ {/* HEADER (LoginPage 동일 디자인) */} +
+
+
+ Eventee Logo + + Eventee + +
+
+
-
+
{/* 헤더 */}
diff --git a/src/pages/JoinEventPage.tsx b/src/pages/JoinEventPage.tsx index 6705df0..82339c1 100644 --- a/src/pages/JoinEventPage.tsx +++ b/src/pages/JoinEventPage.tsx @@ -65,14 +65,24 @@ export default function JoinEventPage() { return (
- {/* 로고 */} -
-

- EvenTee -

-
+ {/* ===== 공통 헤더 (로그인 / 패스워드 / 닉네임 입력과 동일) ===== */} +
+
+
+ Eventee Logo + + Eventee + +
+
+
+ {/* ========================================================== */} -
+
{/* 타이틀 */}
@@ -104,6 +114,7 @@ export default function JoinEventPage() { className="mt-2 uppercase h-[56px] text-center text-[20px] tracking-[0.2em]" maxLength={6} /> + {error && (

{error}

)} diff --git a/src/pages/LoginPage.tsx b/src/pages/LoginPage.tsx index c648c9b..1bdb21d 100644 --- a/src/pages/LoginPage.tsx +++ b/src/pages/LoginPage.tsx @@ -1,11 +1,10 @@ -import { useNavigate } from "react-router-dom"; -import EventeeButton from "../components/EventeeButton"; import "../styles/login-animations.css"; +import EventeeButton from "../components/EventeeButton"; const GOOGLE_CLIENT_ID = import.meta.env.VITE_GOOGLE_CLIENT_ID; const REDIRECT_URI = import.meta.env.VITE_GOOGLE_REDIRECT_URI; -const buildGoogleOAuthUrl = (target) => { +const buildGoogleOAuthUrl = (target: string) => { return ( `https://accounts.google.com/o/oauth2/v2/auth?` + `client_id=${GOOGLE_CLIENT_ID}` + @@ -19,14 +18,12 @@ const buildGoogleOAuthUrl = (target) => { }; export default function LoginPage() { - const navigate = useNavigate(); - - const handleGoogleLogin = (e) => { - const rect = e.target.getBoundingClientRect(); + const handleGoogleLogin = (e: React.MouseEvent) => { + const rect = (e.target as HTMLButtonElement).getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; - e.target.style.setProperty("--x", `${x}px`); - e.target.style.setProperty("--y", `${y}px`); + (e.target as HTMLButtonElement).style.setProperty("--x", `${x}px`); + (e.target as HTMLButtonElement).style.setProperty("--y", `${y}px`); window.location.href = buildGoogleOAuthUrl("my-page"); }; @@ -36,65 +33,179 @@ export default function LoginPage() { }; return ( -
-
- {/* 로고 영역 */} -
-

- EvenTee -

-

- 쉽고 빠른 이벤트 관리 플랫폼 -

+
+ + {/* HEADER */} +
+
+
+ Eventee Logo + + Eventee + +
+ + 팀 행사 · 동아리 공연 · 프로젝트 데모데이까지 +
+
- {/* 카드 박스 */} -
-

- 로그인 또는 회원가입 -

+
+ + {/* HERO SECTION */} +
+
+ + {/* Badge */} +
+ + 이벤트 관리, 티켓 한 장처럼 가볍게 +
+ + {/* TITLE */} +

+ 이벤트를 쉽고 빠르고 +
+ 간편하게 관리해보세요. +

+ + {/* SUBTEXT */} +

+ 여러 채널에 흩어진 명단, 공지, 투표를 하나의 화면에서 정리할 수 있어요. + 초대부터 마감까지 Eventee가 알아서 정리합니다. +

+ + {/* FEATURES */} +
    +
  • + + 팀·동아리 행사, 공연, MT, 데모데이 등 다양한 이벤트에 활용 가능 +
  • +
  • + + 참여자 관리, 공지, 투표, 게시글 기능까지 한 번에 +
  • +
  • + + Google 계정으로 3초 만에 시작할 수 있어요. +
  • +
+ + {/* BUTTONS */} +
+ + {/* GOOGLE BUTTON */} + + + {/* JOIN EVENT */} + + +
+ +

+ 아래로 내려가면 Eventee 기능을 더 자세히 볼 수 있어요. +

-
- {/* Google 로그인 */} - - - {/* 이벤트 참여 */} - - 이벤트 참여하기 -
-
+
+ + {/* ---------------- HOW IT WORKS ---------------- */} + +
+

+ How it works +

+

+ Eventee로 이런 것들을 할 수 있어요 +

+
+ + {/* STEP 1 */} +
+ +

참여자를 한 눈에 관리

+

+ 참여 인원을 한 화면에서 정리할 수 있습니다. +

+
+ + {/* STEP 2 */} +
+ +

공지 전달도 클릭 한 번

+

+ 중요한 공지, 일정 변경까지 빠르게 전달하세요. +

+
+ + {/* STEP 3 */} +
+ +

투표와 게시글로 실시간 소통

+

+ 소통과 일정 조율을 한 번에 해결하세요. +

+
+ + {/* LOGIN SECTION */} +
+

+ 지금 바로 시작해보세요 +

+

+ 다음 행사에도 그대로 불러와 더 편하게 운영할 수 있어요. +

+ + + + + 초대받은 이벤트 참여하기 + + +

+ 본 서비스는 소셜 로그인 정보를 기반으로 운영됩니다. +

+
- {/* 하단 안내 */} -

- 본 서비스는 소셜 로그인 정보를 기반으로 안전하게 운영됩니다. -

-
+
); } diff --git a/src/pages/MyPage.tsx b/src/pages/MyPage.tsx index b2076fc..789a3cf 100644 --- a/src/pages/MyPage.tsx +++ b/src/pages/MyPage.tsx @@ -59,13 +59,24 @@ export default function MyPage() {
- {/* 헤더 */} -
-

- EvenTee -

+ {/* 헤더 */} +
+ + {/* 로그인 페이지 동일 로고 디자인 */} +
+ Eventee Logo + + Eventee +
+
+ + {/* 프로필 카드 */}
diff --git a/src/pages/SignupPage.tsx b/src/pages/SignupPage.tsx index 66a0d46..a0f2d98 100644 --- a/src/pages/SignupPage.tsx +++ b/src/pages/SignupPage.tsx @@ -6,19 +6,16 @@ import EventeeButton from "../components/EventeeButton"; import { Input } from "../components/ui/input"; import { Label } from "../components/ui/label"; import { apiFetch } from "../utils/apiFetch"; + export default function SignupPage() { const navigate = useNavigate(); const location = useLocation(); - // EventPasswordPage에서 넘어온 값들 const password = location.state?.password; const passedInviteCode = location.state?.eventCode; - // Context에서 관리되는 값 const { inviteCode: ctxInviteCode, setCurrentEvent } = useApp(); - - // 최종 inviteCode: state > context > null const inviteCode = passedInviteCode || ctxInviteCode || null; const [nickname, setNickname] = useState(""); @@ -26,7 +23,6 @@ export default function SignupPage() { const [isSubmitting, setIsSubmitting] = useState(false); const API_URL = import.meta.env.VITE_API_URL; - const nextPage = "/event-main"; const validateNickname = (value: string): string | null => { @@ -56,7 +52,6 @@ export default function SignupPage() { setIsSubmitting(true); try { - // ★ fetch → apiFetch로 변경 const response = await apiFetch(`${API_URL}/api/v1/events/join`, { method: "POST", headers: { @@ -77,7 +72,6 @@ export default function SignupPage() { return; } - // currentEvent 타입과 맞도록 저장 setCurrentEvent({ id: data.result.eventId, title: data.result.title, @@ -88,7 +82,6 @@ export default function SignupPage() { createdBy: data.result.role ?? "PARTICIPANT", }); - // ★ 다음 페이지로 이동 navigate(nextPage, { state: { eventId: data.result.eventId, @@ -106,20 +99,35 @@ export default function SignupPage() { }; return ( -
-
-

- EvenTee -

-
+
+ + {/* HEADER (LoginPage와 동일) */} +
+
+
+ Eventee Logo + + Eventee + +
+
+
+ +
-
+ {/* 제목 */}
-

닉네임 입력

+

닉네임 입력

-
+ {/* 카드 */} +
+
+ {error && (

{error}

)} +

2~5자, 한글/영문/숫자만 사용 가능

- + {isSubmitting ? "참여 중..." : "입장하기"} +
+
);