diff --git a/index.html b/index.html
index db1fe31..db8151b 100644
--- a/index.html
+++ b/index.html
@@ -4,7 +4,40 @@
-
seed
+ 과제 고민 끝, 대학생 맞춤형 AI 프롬프트 가이드 - SEED
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/googlefdf77e33a4cf56c6.html b/public/googlefdf77e33a4cf56c6.html
new file mode 100644
index 0000000..81d4520
--- /dev/null
+++ b/public/googlefdf77e33a4cf56c6.html
@@ -0,0 +1 @@
+google-site-verification: googlefdf77e33a4cf56c6.html
\ No newline at end of file
diff --git a/src/features/main/hooks/index.ts b/src/features/main/hooks/index.ts
index 1644c00..bb5fa09 100644
--- a/src/features/main/hooks/index.ts
+++ b/src/features/main/hooks/index.ts
@@ -4,5 +4,3 @@ export * from "./usePhraseCloudMotion";
export * from "./useExecutionOnlySectionState";
export * from "./useSolutionTimelineProgress";
export * from "./useObservedHeight";
-export * from "./useWaitList";
-export * from "./useSendEmail";
diff --git a/src/features/main/hooks/useSendEmail.ts b/src/features/main/hooks/useSendEmail.ts
deleted file mode 100644
index f1152d2..0000000
--- a/src/features/main/hooks/useSendEmail.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { useRef, useState } from "react";
-import type React from "react";
-
-import { useWaitList } from "./useWaitList";
-
-type SubmitStatus = "idle" | "loading" | "success" | "error";
-
-export const useSendEmail = () => {
- const [email, setEmail] = useState("");
- const [submitStatus, setSubmitStatus] = useState("idle");
- const [errorMessage, setErrorMessage] = useState("");
-
- const isSubmittingRef = useRef(false);
-
- const { submit } = useWaitList();
-
- const submitWaitlistEmail = async () => {
- const trimmedEmail = email.trim();
- if (!trimmedEmail || isSubmittingRef.current) return;
-
- isSubmittingRef.current = true;
- setSubmitStatus("loading");
- setErrorMessage("");
-
- try {
- const result = await submit(trimmedEmail);
-
- if (!result.success) {
- setErrorMessage(
- result.errorMessage ??
- "오류가 발생했습니다. 잠시 후 다시 시도해주세요.",
- );
- setSubmitStatus("error");
- } else {
- setSubmitStatus("success");
- }
- } finally {
- isSubmittingRef.current = false;
- }
- };
-
- const submitOnEnter = (e: React.KeyboardEvent) => {
- if (e.key === "Enter") submitWaitlistEmail();
- };
-
- return {
- email,
- setEmail,
- submitStatus,
- errorMessage,
- submitWaitlistEmail,
- submitOnEnter,
- };
-};
diff --git a/src/features/main/hooks/useWaitList.ts b/src/features/main/hooks/useWaitList.ts
deleted file mode 100644
index f81020f..0000000
--- a/src/features/main/hooks/useWaitList.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { FunctionsHttpError } from "@supabase/supabase-js";
-
-import { supabase } from "@/shared";
-
-type WaitlistSubmitResult = {
- success: boolean;
- errorMessage?: string;
-};
-
-export const useWaitList = () => {
- const submit = async (email: string): Promise => {
- try {
- const { error } = await supabase.functions.invoke("notify-waitlist", {
- body: { email },
- });
-
- if (error) {
- let message = "오류가 발생했습니다. 잠시 후 다시 시도해주세요.";
- try {
- if (error instanceof FunctionsHttpError) {
- const body = await error.context.json();
- if (body?.error) message = body.error;
- }
- } catch (e) {
- console.error("Error parsing error message:", e);
- }
- return { success: false, errorMessage: message };
- }
-
- return { success: true };
- } catch (e) {
- console.error("useWaitList submit 중 예기치 않은 오류 발생:", e);
- return {
- success: false,
- errorMessage: "오류가 발생했습니다. 잠시 후 다시 시도해주세요.",
- };
- }
- };
-
- return { submit };
-};
diff --git a/src/features/main/ui/SendEmailSection.tsx b/src/features/main/ui/SendEmailSection.tsx
deleted file mode 100644
index c1fbc88..0000000
--- a/src/features/main/ui/SendEmailSection.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-import { Button, Flex, Input, Text, VStack } from "@chakra-ui/react";
-
-import { CheckIcon } from "@/shared";
-
-import { useSendEmail } from "../hooks";
-
-export const SendEmailSection = () => {
- const {
- email,
- setEmail,
- submitStatus,
- errorMessage,
- submitWaitlistEmail,
- submitOnEnter,
- } = useSendEmail();
-
- return (
-
- {submitStatus === "success" ? (
-
-
-
- 알림 신청이 완료되었습니다!
-
-
- ) : (
- <>
-
-
- 이메일
-
- setEmail(e.target.value)}
- onKeyDown={submitOnEnter}
- />
- {submitStatus === "error" && (
-
- {errorMessage}
-
- )}
-
-
-
-
-
- >
- )}
-
- );
-};
diff --git a/src/features/main/ui/index.ts b/src/features/main/ui/index.ts
index 1c17ab9..b4b94f4 100644
--- a/src/features/main/ui/index.ts
+++ b/src/features/main/ui/index.ts
@@ -1,3 +1,2 @@
export { AssignmentHelpSection } from "./AssignmentHelpSection";
export { ExecutionOnlySection } from "./ExecutionOnlySection";
-export * from "./SendEmailSection";
diff --git a/src/pages/main/MainPage.tsx b/src/pages/main/MainPage.tsx
index 9759b01..ce886fd 100644
--- a/src/pages/main/MainPage.tsx
+++ b/src/pages/main/MainPage.tsx
@@ -1,16 +1,14 @@
import { useState } from "react";
+import { useNavigate } from "react-router";
import { Box, Button, Flex, HStack, Text, VStack } from "@chakra-ui/react";
-import {
- AssignmentHelpSection,
- ExecutionOnlySection,
- SendEmailSection,
-} from "@/features";
-import { CheckIcon, CopyIcon, SparklesIcon } from "@/shared";
+import { AssignmentHelpSection, ExecutionOnlySection } from "@/features";
+import { CheckIcon, CopyIcon, ROUTE_PATHS, SparklesIcon } from "@/shared";
export default function MainPage() {
const [isSolutionSectionReady, setIsSolutionSectionReady] = useState(false);
+ const navigate = useNavigate();
return (
@@ -88,17 +86,38 @@ export default function MainPage() {
-
+
+
+
-
+
@@ -335,9 +354,9 @@ export default function MainPage() {
as="section"
bg="white"
display="flex"
- h="100dvh"
+ minH="100dvh"
justifyContent="center"
- py={11}
+ py={{ base: 16, md: 20, lg: 24 }}
w="full"
>