+
diff --git a/src/app/wines/[id]/_components/wine-flavor/wine-flavor-section.tsx b/src/app/wines/[id]/_components/wine-flavor/wine-flavor-section.tsx
index 1a573f31..c0b17a90 100644
--- a/src/app/wines/[id]/_components/wine-flavor/wine-flavor-section.tsx
+++ b/src/app/wines/[id]/_components/wine-flavor/wine-flavor-section.tsx
@@ -29,7 +29,7 @@ const FlavorSection = ({ reviews, reviewCount }: FlavorSectionProps) => {
@@ -37,23 +37,21 @@ const FlavorSection = ({ reviews, reviewCount }: FlavorSectionProps) => {
-
+
어떤 향이 있나요?
-
+
({reviewCount}명 참여)
{/* Flavor 컴포넌트 */}
-
diff --git a/src/app/wines/[id]/_components/wine-header/wine-header.tsx b/src/app/wines/[id]/_components/wine-header/wine-header.tsx
index 9a97840d..7199c87e 100644
--- a/src/app/wines/[id]/_components/wine-header/wine-header.tsx
+++ b/src/app/wines/[id]/_components/wine-header/wine-header.tsx
@@ -77,12 +77,12 @@ const WineHeader = ({ wine }: WineHeaderProps) => {
{reviewLabel(wine.reviewCount)}
-
{wine.name}
-
+
{/* 1. 별점 */}
@@ -235,7 +235,7 @@ const WineReviewItem = ({
{/* 5. 맛 평가 토글 영역 */}
-
+
-
@@ -257,21 +263,21 @@ const WineReviewItem = ({
{/* 6. 토글 */}
-
diff --git a/src/app/wines/[id]/_components/wine-review/wine-review-section.tsx b/src/app/wines/[id]/_components/wine-review/wine-review-section.tsx
index 09171a0d..7dea063b 100644
--- a/src/app/wines/[id]/_components/wine-review/wine-review-section.tsx
+++ b/src/app/wines/[id]/_components/wine-review/wine-review-section.tsx
@@ -66,8 +66,8 @@ const ReviewSection = ({
{/* 모바일/태블릿: 평점 분포 */}
@@ -82,14 +82,14 @@ const ReviewSection = ({
{/* 왼쪽: 리뷰 목록 */}
-
+
{visibleReviews.map((review, index) => (
{
aria-labelledby={tasteHeadingId}
className={cn(
"w-full",
- "tablet:grid tablet:grid-cols-2",
+ "tablet:grid tablet:grid-cols-[1fr_2fr]",
"pc:flex pc:flex-col pc:gap-6"
)}
>
@@ -55,13 +55,13 @@ const WineTasteSection = ({ reviews, reviewCount }: WineTasteSectionProps) => {
-
+
어떤 맛이 나나요?
-
+
({reviewCount}명 참여)
@@ -70,7 +70,7 @@ const WineTasteSection = ({ reviews, reviewCount }: WineTasteSectionProps) => {
aria-label={`와인 맛 분포: ${tasteA11yLabel}`}
className="flex w-full justify-center tablet:justify-start"
>
-
+
diff --git a/src/app/wines/_components/wine-recommended/recommend-card.tsx b/src/app/wines/_components/wine-recommended/recommend-card.tsx
index 49e01cba..95fa7865 100644
--- a/src/app/wines/_components/wine-recommended/recommend-card.tsx
+++ b/src/app/wines/_components/wine-recommended/recommend-card.tsx
@@ -35,7 +35,7 @@ const RecommendCard = ({ wine }: RecommendCardProps) => {
"pc:text-body-md"
)}
regionClassName={cn(
- "text-caption text-secondary",
+ "mobile:text-caption text-secondary",
"tablet:text-body-sm tablet:mt-[8px]",
"pc:text-body-sm pc:mt-[8px]"
)}
diff --git a/src/components/card/card.tsx b/src/components/card/card.tsx
index 2bd85692..f35ac525 100644
--- a/src/components/card/card.tsx
+++ b/src/components/card/card.tsx
@@ -76,7 +76,7 @@ const Card = ({
blurDataURL={blurDataURL}
/>
)}
-
+
{href ? (
{
+const Flavor = ({ items }: FlavorProps) => {
return (
-
-
- 어떤 향이 있나요?
-
-
- ({count}명 참여)
-
-
-
+
{items.map((item, index) => (
diff --git a/tailwind.config.ts b/tailwind.config.ts
index 5ad01d06..0503aca7 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -54,6 +54,7 @@ export default {
"title-hero": ["32px", { lineHeight: "46px", fontWeight: "700" }],
"title-page-md": ["40px", { lineHeight: "52px", fontWeight: "700" }],
"title-page-sm": ["32px", { lineHeight: "46px", fontWeight: "700" }],
+ "title-page-xs": ["24px", { lineHeight: "32px", fontWeight: "700" }],
"heading-lg": ["24px", { lineHeight: "32px", fontWeight: "600" }],
"heading-md": ["20px", { lineHeight: "30px", fontWeight: "700" }],
"heading-sm": ["18px", { lineHeight: "30px", fontWeight: "700" }],
From c9227f0b8674dab63bb044acb59eac7548963b61 Mon Sep 17 00:00:00 2001
From: Yeonsu Lee <170384198+suuuuya@users.noreply.github.com>
Date: Sat, 18 Oct 2025 05:05:19 +0900
Subject: [PATCH 05/19] =?UTF-8?q?style:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8/?=
=?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85,=20=EB=A7=88=EC=9D=B4?=
=?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=8A=A4=ED=83=80=EC=9D=BC=20?=
=?UTF-8?q?=EC=88=98=EC=A0=95=20#218?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/(auth)/layout.tsx | 4 +++-
.../myprofile/_components/account-item/account-item.tsx | 9 +++++----
.../myprofile/_components/review-item/review-item.tsx | 4 ++--
.../wines/[id]/_components/wine-header/wine-header.tsx | 2 +-
4 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/src/app/(auth)/layout.tsx b/src/app/(auth)/layout.tsx
index 8bb8d2fd..89a450f0 100644
--- a/src/app/(auth)/layout.tsx
+++ b/src/app/(auth)/layout.tsx
@@ -5,7 +5,9 @@ import { ReactNode } from "react";
const Layout = ({ children }: { children: Readonly
}) => {
return (
- {children}
+
+ {children}
+
);
};
diff --git a/src/app/myprofile/_components/account-item/account-item.tsx b/src/app/myprofile/_components/account-item/account-item.tsx
index e147c7c1..f5972513 100644
--- a/src/app/myprofile/_components/account-item/account-item.tsx
+++ b/src/app/myprofile/_components/account-item/account-item.tsx
@@ -71,8 +71,8 @@ const AccountItem = ({ user }: AccountItemProps) => {
return (
@@ -110,8 +110,9 @@ const AccountItem = ({ user }: AccountItemProps) => {
autoFocus
maxLength={10}
className={cn(
- "w-2/3 flex-1 rounded-[4px] border border-gray-300 px-4 py-3 focus:outline-none",
- "tablet:flex-1 pc:w-full"
+ "h-[42px] w-2/3 flex-1 rounded-[4px] border border-gray-300 px-4 py-3 focus:outline-none",
+ "tablet:h-[50px] tablet:flex-1",
+ "pc:h-[50px] pc:w-full"
)}
/>
diff --git a/src/app/myprofile/_components/review-item/review-info.tsx b/src/app/myprofile/_components/review-item/review-info.tsx
index c6696328..41ce3677 100644
--- a/src/app/myprofile/_components/review-item/review-info.tsx
+++ b/src/app/myprofile/_components/review-item/review-info.tsx
@@ -26,6 +26,7 @@ const ReviewInfo = ({ info }: { info: WineType }) => {
height={60}
className="h-[60px] w-[46px] tablet:h-[80px] tablet:w-[60px] pc:h-[80px] pc:w-[60px]"
onError={() => setImgSrc(PLACEHOLDER)}
+ draggable={false}
/>
) : (
{
height={60}
className="h-[60px] w-[46px] tablet:h-[80px] tablet:w-[60px] pc:h-[80px] pc:w-[60px]"
alt={`${info.name} 이미지 불러오기 실패`}
+ draggable={false}
/>
)}
{
fill
className="object-cover"
quality={60}
+ draggable={false}
/>
@@ -55,6 +56,7 @@ const WineHeader = ({ wine }: WineHeaderProps) => {
quality={75}
sizes="(max-width: 743px) 220px, (max-width: 1279px) 280px, 320px"
className="object-contain"
+ draggable={false}
/>
) : (
{
sizes="(max-width: 743px) 220px, (max-width: 1279px) 280px, 320px"
className="object-contain"
alt={`${name} 이미지 불러오기 실패`}
+ draggable={false}
/>
)}
diff --git a/src/app/wines/[id]/_components/wine-info.tsx b/src/app/wines/[id]/_components/wine-info.tsx
index cedcfdd9..0c8d4e84 100644
--- a/src/app/wines/[id]/_components/wine-info.tsx
+++ b/src/app/wines/[id]/_components/wine-info.tsx
@@ -19,6 +19,7 @@ const WineInfo = ({ name, region, image }: WineInfoProps) => {
fill
className="object-contain"
sizes="62px"
+ draggable={false}
/>
) : (
{
fill
className="object-contain"
alt={`${name} 이미지 불러오기 실패`}
+ draggable={false}
/>
)}
diff --git a/src/app/wines/[id]/_components/wine-review/wine-review-rating.tsx b/src/app/wines/[id]/_components/wine-review/wine-review-rating.tsx
index b15e9d1d..2356b950 100644
--- a/src/app/wines/[id]/_components/wine-review/wine-review-rating.tsx
+++ b/src/app/wines/[id]/_components/wine-review/wine-review-rating.tsx
@@ -22,6 +22,7 @@ const WineReviewRating = ({ createdAt, user }: WineReviewRatingProps) => {
width={48}
height={48}
className="h-full w-full object-cover"
+ draggable={false}
/>
) : (
setHasError(true)}
+ draggable={false}
/>
) : (
-
+
)}
diff --git a/src/components/flavor/flavor.tsx b/src/components/flavor/flavor.tsx
index 3981f708..77f9d48b 100644
--- a/src/components/flavor/flavor.tsx
+++ b/src/components/flavor/flavor.tsx
@@ -17,6 +17,7 @@ const FlavorItem = ({ aroma, className }: FlavorItemProps) => {
width={100}
height={100}
className="rounded-4"
+ draggable={false}
/>
{label}
From f67b7b35125fb1bdf78da971f5bab65e05ba5ef1 Mon Sep 17 00:00:00 2001
From: junye0l
Date: Sun, 19 Oct 2025 00:21:41 +0900
Subject: [PATCH 09/19] =?UTF-8?q?fix=20:=20=EB=AC=B4=ED=95=9C=EC=8A=A4?=
=?UTF-8?q?=ED=81=AC=EB=A1=A4=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/my-profile/get-user-review.ts | 2 +-
src/api/user/get-user-wines.ts | 2 +-
.../myprofile/_components/my-profile/my-profile.tsx | 11 ++++++++---
3 files changed, 10 insertions(+), 5 deletions(-)
diff --git a/src/api/my-profile/get-user-review.ts b/src/api/my-profile/get-user-review.ts
index 2e6c5f73..13831633 100644
--- a/src/api/my-profile/get-user-review.ts
+++ b/src/api/my-profile/get-user-review.ts
@@ -23,6 +23,6 @@ export default async function getUserReview({
const res = await instance.get(url);
return {
...res.data,
- list: [...res.data.list].reverse(),
+ list: [...res.data.list],
};
}
diff --git a/src/api/user/get-user-wines.ts b/src/api/user/get-user-wines.ts
index a4b85064..ac191125 100644
--- a/src/api/user/get-user-wines.ts
+++ b/src/api/user/get-user-wines.ts
@@ -24,7 +24,7 @@ const getUserWines = async ({ cursor, limit }: GetUserWinesData) => {
return {
...res.data,
- list: [...res.data.list].reverse(),
+ list: [...res.data.list],
};
};
diff --git a/src/app/myprofile/_components/my-profile/my-profile.tsx b/src/app/myprofile/_components/my-profile/my-profile.tsx
index b8893482..fae27637 100644
--- a/src/app/myprofile/_components/my-profile/my-profile.tsx
+++ b/src/app/myprofile/_components/my-profile/my-profile.tsx
@@ -2,7 +2,7 @@
import { redirect, useSearchParams } from "next/navigation";
import { cn } from "@/lib/utils";
-import { useMemo, useState, useEffect } from "react";
+import { useMemo, useState } from "react";
import AccountItem from "../account-item/account-item";
import ReviewItem from "../review-item/review-item";
import WineItem from "../wine-item/wine-item";
@@ -90,8 +90,11 @@ const MyProfile = ({ userInfo }: MyProfileProps) => {
))
)}
+
+
+
{isFetchingNextPage && (
-
+
{Array.from({ length: 4 }).map((_, i) => (
))}
@@ -122,10 +125,12 @@ const MyProfile = ({ userInfo }: MyProfileProps) => {
{(userWines as WineType[])?.map((wine) => (
))}
+
+
)}
{isFetchingNextPage && (
-
+
{Array.from({ length: 6 }).map((_, i) => (
))}
From 039756d51724a3e5196604d42b3a3bc206f9e39a Mon Sep 17 00:00:00 2001
From: Yeonsu Lee <170384198+suuuuya@users.noreply.github.com>
Date: Sun, 19 Oct 2025 00:22:57 +0900
Subject: [PATCH 10/19] =?UTF-8?q?style:=20=ED=94=8C=EB=A1=9C=ED=8C=85=20?=
=?UTF-8?q?=EB=B2=84=ED=8A=BC=20=ED=81=AC=EA=B8=B0=20=EC=88=98=EC=A0=95=20?=
=?UTF-8?q?#218?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/button/chat-button.tsx | 2 +-
src/components/button/scroll-top-button.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/components/button/chat-button.tsx b/src/components/button/chat-button.tsx
index 34779f2d..e1da6800 100644
--- a/src/components/button/chat-button.tsx
+++ b/src/components/button/chat-button.tsx
@@ -23,7 +23,7 @@ const ChatButton = () => {
icon="GptIcon"
iconSize="md"
className={cn(
- "relative h-[40px] w-[40px] rounded-full border-gray-300",
+ "relative h-[45px] w-[45px] rounded-full border-gray-300",
"tablet:h-[50px] tablet:w-[50px]",
"pc:h-[50px] pc:w-[50px]"
)}
diff --git a/src/components/button/scroll-top-button.tsx b/src/components/button/scroll-top-button.tsx
index b55650b4..6c93889d 100644
--- a/src/components/button/scroll-top-button.tsx
+++ b/src/components/button/scroll-top-button.tsx
@@ -26,7 +26,7 @@ const ScrollTopButton = ({}: ScrollTopButtonProps) => {
icon="ArrowTopIcon"
iconSize="md"
className={cn(
- "h-[40px] w-[40px] rounded-full border-gray-300",
+ "h-[45px] w-[45px] rounded-full border-gray-300",
"tablet:h-[50px] tablet:w-[50px]",
"pc:h-[50px] pc:w-[50px]"
)}
From 44496f28f6908e54ff07986b54097e3cd655ea50 Mon Sep 17 00:00:00 2001
From: Yeonsu Lee <170384198+suuuuya@users.noreply.github.com>
Date: Sun, 19 Oct 2025 04:33:55 +0900
Subject: [PATCH 11/19] =?UTF-8?q?style:=20break-words=20=EC=B6=94=EA=B0=80?=
=?UTF-8?q?=20#218?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/(auth)/layout.tsx | 9 +++++----
.../myprofile/_components/review-item/review-info.tsx | 2 +-
.../wines/[id]/_components/wine-header/wine-header.tsx | 2 +-
.../[id]/_components/wine-review/wine-review-section.tsx | 2 +-
src/app/wines/_components/wine-options/type-option.tsx | 2 +-
src/components/flavor/flavor.tsx | 2 +-
src/components/select-type/select-type.tsx | 2 +-
7 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/src/app/(auth)/layout.tsx b/src/app/(auth)/layout.tsx
index 89a450f0..5869260b 100644
--- a/src/app/(auth)/layout.tsx
+++ b/src/app/(auth)/layout.tsx
@@ -4,10 +4,11 @@ import { ReactNode } from "react";
const Layout = ({ children }: { children: Readonly
}) => {
return (
-
-
- {children}
-
+
+ {children}
);
};
diff --git a/src/app/myprofile/_components/review-item/review-info.tsx b/src/app/myprofile/_components/review-item/review-info.tsx
index 41ce3677..3e00ce73 100644
--- a/src/app/myprofile/_components/review-item/review-info.tsx
+++ b/src/app/myprofile/_components/review-item/review-info.tsx
@@ -40,7 +40,7 @@ const ReviewInfo = ({ info }: { info: WineType }) => {
)}
{
-
+
diff --git a/src/app/wines/[id]/_components/wine-review/wine-review-section.tsx b/src/app/wines/[id]/_components/wine-review/wine-review-section.tsx
index 6b32b31d..f7038ea8 100644
--- a/src/app/wines/[id]/_components/wine-review/wine-review-section.tsx
+++ b/src/app/wines/[id]/_components/wine-review/wine-review-section.tsx
@@ -104,7 +104,7 @@ const ReviewSection = ({
-
+
{visibleReviews.map((review, index) => (
{
return (
타입
-
+
{(WINE_TYPE as WineType[]).map((item) => (
{
)}
-
+
{items.map((item, index) => (
)}
-
+
Date: Sun, 19 Oct 2025 06:42:18 +0900
Subject: [PATCH 12/19] =?UTF-8?q?style:=20=EC=99=80=EC=9D=B8=20=EB=93=B1?=
=?UTF-8?q?=EB=A1=9D/=EC=88=98=EC=A0=95=20=EB=AA=A8=EB=8B=AC=20=EC=8A=A4?=
=?UTF-8?q?=ED=83=80=EC=9D=BC=20=EC=88=98=EC=A0=95=20#218?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/@modal/(.)register/[id]/page.tsx | 2 +-
src/app/register/[id]/page.tsx | 32 ++++++++++++-------
.../_components/wine-options/type-option.tsx | 2 +-
src/components/modal/page-modal.tsx | 2 +-
src/components/select-type/select-type.tsx | 2 +-
5 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/src/app/@modal/(.)register/[id]/page.tsx b/src/app/@modal/(.)register/[id]/page.tsx
index 1a8a0f1e..dfd44935 100644
--- a/src/app/@modal/(.)register/[id]/page.tsx
+++ b/src/app/@modal/(.)register/[id]/page.tsx
@@ -17,7 +17,7 @@ const Page = async ({ params }: { params: Promise<{ id: string }> }) => {
return (
diff --git a/src/app/register/[id]/page.tsx b/src/app/register/[id]/page.tsx
index 6cf26e34..c3da5d36 100644
--- a/src/app/register/[id]/page.tsx
+++ b/src/app/register/[id]/page.tsx
@@ -40,18 +40,26 @@ const Page = async ({ params }: { params: Promise<{ id: string }> }) => {
}
return (
-
-
- {wineData ? "와인 수정" : "와인 등록"}
-
-
-
+
+
+
+ {wineData ? "와인 수정" : "와인 등록"}
+
+
+
+
);
diff --git a/src/app/wines/_components/wine-options/type-option.tsx b/src/app/wines/_components/wine-options/type-option.tsx
index c55c63e9..e9cc0c37 100644
--- a/src/app/wines/_components/wine-options/type-option.tsx
+++ b/src/app/wines/_components/wine-options/type-option.tsx
@@ -49,7 +49,7 @@ const TypeItem = ({
alt="타입"
draggable={false}
/>
-
+
{item}
diff --git a/src/components/modal/page-modal.tsx b/src/components/modal/page-modal.tsx
index 73b5b562..ca542597 100644
--- a/src/components/modal/page-modal.tsx
+++ b/src/components/modal/page-modal.tsx
@@ -85,7 +85,7 @@ const PageModal = ({
iconSize={"lg"}
iconColor="gray300"
aria-label="모달 닫기"
- className="h-6 w-6 border-none focus:outline-none"
+ className="h-[24px] w-[24px] border-none focus:outline-none tablet:h-auto tablet:w-auto pc:h-auto pc:w-auto"
onClick={() => router.back()}
autoFocus={false}
/>
diff --git a/src/components/select-type/select-type.tsx b/src/components/select-type/select-type.tsx
index 90a7e1a7..eda6d0a6 100644
--- a/src/components/select-type/select-type.tsx
+++ b/src/components/select-type/select-type.tsx
@@ -88,7 +88,7 @@ export const TypeInput = ({
alt="레드와인"
draggable={false}
/>
-
+
{typeName}
From 277297f3574c4d1a768b7e6fa4ba072a45221e58 Mon Sep 17 00:00:00 2001
From: Yeonsu Lee <170384198+suuuuya@users.noreply.github.com>
Date: Sun, 19 Oct 2025 07:09:49 +0900
Subject: [PATCH 13/19] =?UTF-8?q?style:=20=EB=A6=AC=EB=B7=B0=20=EB=93=B1?=
=?UTF-8?q?=EB=A1=9D/=EC=88=98=EC=A0=95=20=EB=AA=A8=EB=8B=AC=20=EC=8A=A4?=
=?UTF-8?q?=ED=83=80=EC=9D=BC=20=EC=88=98=EC=A0=95=20#218?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/register/[id]/page.tsx | 2 +-
src/app/reviews/[reviewId]/write/page.tsx | 19 ++++++++++++++++---
.../_components/wine-header/wine-header.tsx | 2 +-
.../wine-review-form/review-form.tsx | 2 +-
.../modal/page-modal-btn-wrapper.tsx | 3 ++-
5 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/src/app/register/[id]/page.tsx b/src/app/register/[id]/page.tsx
index c3da5d36..5ebf028c 100644
--- a/src/app/register/[id]/page.tsx
+++ b/src/app/register/[id]/page.tsx
@@ -47,7 +47,7 @@ const Page = async ({ params }: { params: Promise<{ id: string }> }) => {
"pc:py-[70px]"
)}
>
-
-
+
diff --git a/src/app/wines/[id]/_components/wine-review-form/review-form.tsx b/src/app/wines/[id]/_components/wine-review-form/review-form.tsx
index fa5457dd..c3fe9442 100644
--- a/src/app/wines/[id]/_components/wine-review-form/review-form.tsx
+++ b/src/app/wines/[id]/_components/wine-review-form/review-form.tsx
@@ -136,7 +136,7 @@ export default function ReviewForm({
return (
diff --git a/src/components/modal/page-modal-btn-wrapper.tsx b/src/components/modal/page-modal-btn-wrapper.tsx
index 93b91c56..fd7481f4 100644
--- a/src/components/modal/page-modal-btn-wrapper.tsx
+++ b/src/components/modal/page-modal-btn-wrapper.tsx
@@ -18,7 +18,8 @@ const PageModalBtnWrapper = ({
"after:absolute after:block after:bg-gradient-to-t after:content-['']",
"after:bottom-full after:left-0 after:h-[80px] after:w-full",
"after:pointer-events-none after:from-white after:from-40%",
- "tablet:sticky tablet:from-70% pc:sticky pc:from-70%",
+ "tablet:sticky tablet:from-70% tablet:px-0 pc:sticky pc:from-70%",
+ "pc:px-0",
className
)}
>
From e489a3f4cda79a6f94ecf60ec88c3f508da2c10e Mon Sep 17 00:00:00 2001
From: Yeonsu Lee <170384198+suuuuya@users.noreply.github.com>
Date: Sun, 19 Oct 2025 14:00:00 +0900
Subject: [PATCH 14/19] =?UTF-8?q?fix:=20=EB=A1=9C=EA=B3=A0=20h1=20?=
=?UTF-8?q?=ED=83=9C=EA=B7=B8=20=EC=82=AD=EC=A0=9C=20#218?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/gnb/gnb.tsx | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)
diff --git a/src/components/gnb/gnb.tsx b/src/components/gnb/gnb.tsx
index b6a6a818..18304722 100644
--- a/src/components/gnb/gnb.tsx
+++ b/src/components/gnb/gnb.tsx
@@ -51,16 +51,13 @@ const Gnb = ({ user }: { user: User }) => {
)}
>
-
-
-
-
-
-
+
+
+
{user ? (
Date: Sun, 19 Oct 2025 21:23:17 +0900
Subject: [PATCH 15/19] =?UTF-8?q?feat:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?=
=?UTF-8?q?=EC=9D=B4=EC=A0=84=20=ED=8E=98=EC=9D=B4=EC=A7=80=EB=A1=9C=20?=
=?UTF-8?q?=EB=A6=AC=EB=8B=A4=EC=9D=B4=EB=A0=89=ED=8A=B8=20=EA=B8=B0?=
=?UTF-8?q?=EB=8A=A5=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/auth/login.ts | 6 ++++--
src/app/(auth)/login/page.tsx | 8 ++++++++
src/middleware.ts | 24 ++++++++++++++++++++++--
3 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/src/api/auth/login.ts b/src/api/auth/login.ts
index 5498885f..5318028e 100644
--- a/src/api/auth/login.ts
+++ b/src/api/auth/login.ts
@@ -1,6 +1,7 @@
"use server";
import { cookies } from "next/headers";
+import { redirect } from "next/navigation";
const opts = {
maxAge: 60 * 60 * 24 * 30,
@@ -12,6 +13,7 @@ const opts = {
const login = async (prevState: any, formData: FormData) => {
const email = formData.get("email");
const password = formData.get("password");
+ const redirectUrl = formData.get("redirect");
if (!email || !password)
return { isError: true, message: "이메일 또는 비밀번호를 입력하세요." };
@@ -36,9 +38,9 @@ const login = async (prevState: any, formData: FormData) => {
cookieStore.set("refreshToken", `${data.refreshToken}`);
cookieStore.set("login_type", "basic", opts);
- return { isError: false, data: data };
+ redirect(redirectUrl as string);
} catch (error) {
- console.error(error);
+ throw error;
}
};
diff --git a/src/app/(auth)/login/page.tsx b/src/app/(auth)/login/page.tsx
index ce905a70..e30bd3d8 100644
--- a/src/app/(auth)/login/page.tsx
+++ b/src/app/(auth)/login/page.tsx
@@ -14,6 +14,7 @@ import { useToast } from "@/hooks/use-toast";
import { useRememberId } from "../_hooks/use-remember-id";
import { getCookie, setCookie } from "cookies-next";
import RecentLoginBadge from "../_components/recent-login-badge/recent-login-badge";
+import { useSearchParams } from "next/navigation";
interface LoginFormData {
email: string;
@@ -36,6 +37,7 @@ const Page = () => {
const [loginType, setLoginType] = useState(null);
const [state, formAction, isPending] = useActionState(login, null);
const { checked, setChecked, initialId, opts } = useRememberId();
+ const searchParams = useSearchParams();
const email = watch("email");
@@ -119,6 +121,12 @@ const Page = () => {
},
})}
/>
+
diff --git a/src/middleware.ts b/src/middleware.ts
index 0badd6f4..827de070 100644
--- a/src/middleware.ts
+++ b/src/middleware.ts
@@ -2,8 +2,21 @@ import { NextRequest, NextResponse } from "next/server";
const middleware = (request: NextRequest) => {
const token = request.cookies.get("accessToken")?.value;
+ const requestedPage = request.nextUrl.pathname;
- if (token) {
+ if (!token) {
+ if (requestedPage === "/login" || requestedPage === "/signup") {
+ return NextResponse.next();
+ }
+
+ const url = request.nextUrl.clone();
+ url.pathname = "/login";
+ url.searchParams.set("redirect", requestedPage);
+
+ return NextResponse.redirect(url);
+ }
+
+ if (requestedPage === "/login" || requestedPage === "/signup") {
return NextResponse.redirect(new URL("/myprofile", request.url));
}
@@ -11,7 +24,14 @@ const middleware = (request: NextRequest) => {
};
export const config = {
- matcher: ["/login", "/signup"],
+ matcher: [
+ "/myprofile",
+ "/wine/:path*",
+ "/register/:path*",
+ "/review/:path*",
+ "/login",
+ "/signup",
+ ],
};
export default middleware;
From e9e3df8bcfbd899b1b1afd4ef5141490793c186f Mon Sep 17 00:00:00 2001
From: Yeonsu Lee <170384198+suuuuya@users.noreply.github.com>
Date: Mon, 20 Oct 2025 14:59:21 +0900
Subject: [PATCH 16/19] =?UTF-8?q?style:=20=EB=AA=A8=EB=8B=AC=20=ED=8E=98?=
=?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EA=B0=80=EC=9A=B4=EB=8D=B0=20=EC=A0=95?=
=?UTF-8?q?=EB=A0=AC=20=EB=B0=8F=20=EB=A6=AC=EB=B7=B0=20=EC=88=98=EC=A0=95?=
=?UTF-8?q?=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=88=84=EB=9D=BD=EB=90=9C=20?=
=?UTF-8?q?=EC=8A=A4=ED=83=80=EC=9D=BC=20=EC=B6=94=EA=B0=80=20#218?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/app/register/[id]/page.tsx | 2 +-
src/app/reviews/[reviewId]/edit/page.tsx | 17 +++++++++++++++--
src/app/reviews/[reviewId]/write/page.tsx | 2 +-
3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/src/app/register/[id]/page.tsx b/src/app/register/[id]/page.tsx
index 5ebf028c..f3f697fa 100644
--- a/src/app/register/[id]/page.tsx
+++ b/src/app/register/[id]/page.tsx
@@ -42,7 +42,7 @@ const Page = async ({ params }: { params: Promise<{ id: string }> }) => {
return (
-
+
+
리뷰 수정
Date: Mon, 20 Oct 2025 17:25:42 +0900
Subject: [PATCH 17/19] Update team responsibilities in README
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Removed 정훈's responsibilities from the README.
---
README.md | 1 -
1 file changed, 1 deletion(-)
diff --git a/README.md b/README.md
index 64282688..b338970c 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,6 @@
- 휘태: 로그인, 회원가입, 리뷰 남기기/와인 등록하기 모달
- 연수: 마이페이지(내가 등록한 와인), notion 문서화
- 지권: 마이페이지(내가 쓴 후기)
-- 정훈: 와인 목록 페이지
> [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki)
From b3185c10d62daeaa0f70b82d99dc87ebe3456ef6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=EC=9D=B4=EC=97=B0=EC=88=98?=
<170384198+suuuuya@users.noreply.github.com>
Date: Mon, 20 Oct 2025 21:29:27 +0900
Subject: [PATCH 18/19] =?UTF-8?q?=E2=9C=A8=20Feat:=20README=20=ED=8E=98?=
=?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=9E=91=EC=84=B1(=EC=9E=84=EC=8B=9C?=
=?UTF-8?q?=EC=A0=80=EC=9E=A5)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Updated project description, team roles, and core time details.
---
README.md | 71 ++++++++++++++++++++++++++++++++++++++-----------------
1 file changed, 49 insertions(+), 22 deletions(-)
diff --git a/README.md b/README.md
index b338970c..0b520aa8 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,52 @@
-# Wine
-(프로젝트 설명)
-
-## 목표
-- 목표: 프로젝트 완성
-
-## 팀원 정보 및 역할
-- 준열: 팀 리딩, 랜딩 페이지, 와인 상세 페이지
-- 휘태: 로그인, 회원가입, 리뷰 남기기/와인 등록하기 모달
-- 연수: 마이페이지(내가 등록한 와인), notion 문서화
-- 지권: 마이페이지(내가 쓴 후기)
-
-> [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki)
-
-## Core Time
-- 데일리 스크럼
- - 월요일: 오후 3시
- - 화요일 일요일: 오후 1시 30분 (20~30분 진행)
-- 집중 코딩 (모각코)
- - 9:00 ~ 18:00 (zep 활용)
-
-> [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki)
+# 🍷 WHYNE
+### WHYNE은 사용자가 다양한 와인 리뷰를 확인하고, 구매 여부를 쉽게 판단할 수 있는 와인 리뷰 플랫폼입니다.
+
+
+
+
+
+
+## 🎯 목표
+> #### 주어진 요구사항을 충족하는 것을 넘어, 경쟁력 있는 특별한 UI / UX를 도입하고 사용자에게 최적의 와인 선택 경험을 제공하는 것
+
+
+
+## 👥 팀 소개
+
+
+
+ 🔗 [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki)
+
+
+
+
+
+|팀장 |팀원 |팀원 |팀원 |
+|:---:|:---:|:---:|:---:|
+|
|
|
|
|
+
+
+
+
+
+## ⏰ Core Time
+
+
+
+ 🔗 [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki)
+
+
+
+> 원활한 소통을 위해 매일 진행하며, 의미 없는 시간이 되지 않도록 **노션 문서화**로 기록합니다.
+
+#### 🗓️ 시간표
+
+| 요일 | 시간 |
+|:---:|:---:|
+| 월요일 | **15:00** |
+| 화요일 ~ 일요일 | **13:30** |
+
+
## Branch 전략
- `main` → 배포
From 6674d16d88a8cbf60c056d7264235533dd04e323 Mon Sep 17 00:00:00 2001
From: Yeonsu Lee <170384198+suuuuya@users.noreply.github.com>
Date: Mon, 20 Oct 2025 21:55:25 +0900
Subject: [PATCH 19/19] =?UTF-8?q?docs:=20=EB=A6=AC=EB=93=9C=EB=AF=B8=20?=
=?UTF-8?q?=EC=9E=91=EC=84=B1=EC=A4=91=20=EC=9E=84=EC=8B=9C=EC=A0=80?=
=?UTF-8?q?=EC=9E=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 26 +++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index 0b520aa8..b1fecd4c 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,18 @@
# 🍷 WHYNE
+
### WHYNE은 사용자가 다양한 와인 리뷰를 확인하고, 구매 여부를 쉽게 판단할 수 있는 와인 리뷰 플랫폼입니다.
-
## 🎯 목표
-> #### 주어진 요구사항을 충족하는 것을 넘어, 경쟁력 있는 특별한 UI / UX를 도입하고 사용자에게 최적의 와인 선택 경험을 제공하는 것
+
+> #### 주어진 요구사항을 충족하는 것을 넘어, 경쟁력 있는 특별한 UI / UX를 도입하고, 사용자에게 최적의 와인 선택 경험을 제공하는 것
-## 👥 팀 소개
+## 👥 팀 소개
@@ -40,15 +41,16 @@
> 원활한 소통을 위해 매일 진행하며, 의미 없는 시간이 되지 않도록 **노션 문서화**로 기록합니다.
#### 🗓️ 시간표
-
-| 요일 | 시간 |
-|:---:|:---:|
-| 월요일 | **15:00** |
+
+| 요일 | 시간 |
+| :-------------: | :-------: |
+| 월요일 | **15:00** |
| 화요일 ~ 일요일 | **13:30** |
## Branch 전략
+
- `main` → 배포
- `develop` → 통합 브랜치
- `feature/*`, `design/*`, `chore/*` → 작업 브랜치 → PR → develop → main
@@ -56,6 +58,7 @@
> [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki/%EB%B8%8C%EB%9E%9C%EC%B9%98-%EC%BB%A8%EB%B2%A4%EC%85%98)
## 기술 스택
+
- Next.js, React, TypeScript
- Tailwind CSS
- Storybook
@@ -65,12 +68,14 @@
> [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki/%EA%B8%B0%EC%88%A0-%EC%8A%A4%ED%83%9D)
## 깃허브 액션
-- Vercel 배포
-- Chromatic으로 Storybook 배포 (develop 기준)
+
+- Vercel 배포
+- Chromatic으로 Storybook 배포 (develop 기준)
> [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki/%EA%B9%83%ED%97%88%EB%B8%8C-%EC%95%A1%EC%85%98)
## 프로젝트 관리
+
- README: 프로젝트 개요 / 기술 스택 / 실행 방법
- Wiki: 세부 규칙, 가이드 문서, 브랜치 룰
- Notion: 회의록, 멘토링 피드백, 참고 자료
@@ -79,6 +84,7 @@
> [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A6%AC)
## 실행 방법
+
```bash
# 패키지 설치
npm install
@@ -107,9 +113,11 @@ src
┣ types # 전역 타입 정의 (TypeScript 인터페이스, 타입)
┗ utils # 공통 유틸리티 함수
```
+
> [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki/%ED%8F%B4%EB%8D%94-%EA%B5%AC%EC%A1%B0)
## 바로가기
+
- [배포 바로가기](https://google.com/)
- [스토리북 바로가기](https://68d3998e0b054d1207706cbb-tzevsxkvcq.chromatic.com/?path=/docs/my-profile-accountitem--docs)
- [Wiki 바로가기](https://github.com/Team-3-2/Wine/wiki)