diff --git a/.cursor/.prompt/101101_메인페이지구성.md b/.cursor/.prompt/101101_메인페이지구성.md
new file mode 100644
index 0000000..7b696e5
--- /dev/null
+++ b/.cursor/.prompt/101101_메인페이지구성.md
@@ -0,0 +1,3 @@
+### 메인페이지구성
+[] 1. https://mabinogimobile.nexon.com/Main를 브라우저로 열기
+[] 2. 1번 링크를 참조해서 기존 src/app/layout.tsx과 src/app/page.tsx파일에 큰 레이아웃 클론 css는 tailwind로
\ No newline at end of file
diff --git a/projectmemo.txt b/.cursor/.prompt/projectmemo.txt
similarity index 100%
rename from projectmemo.txt
rename to .cursor/.prompt/projectmemo.txt
diff --git a/.cursor/.prompt/todolist.md b/.cursor/.prompt/todolist.md
new file mode 100644
index 0000000..3fccf43
--- /dev/null
+++ b/.cursor/.prompt/todolist.md
@@ -0,0 +1,102 @@
+### 백엔드/API
+[x] 1.1 Prisma 스키마 최종 확정(모델/관계/index/unique)
+[x] 1.2 마이그레이션 생성 및 적용(prisma migrate dev)
+[x] 1.3 Prisma Client 재생성 및 dev DB 초기화
+[x] 1.4 시드 스크립트 분리(역할/기본 관리자/샘플 게시판)
+[x] 1.5 서비스/리포지토리 계층 뼈대 생성(트랜잭션 유틸 포함)
+
+### 권한/역할(RBAC)
+[x] 2.1 역할·권한 시드(admin/editor/user) 추가
+[x] 2.2 권한 enum/매핑 정의(리소스/액션)
+[x] 2.3 서버 권한 미들웨어 적용(API 보호 라우트 지정)
+[x] 2.4 페이지/컴포넌트 가드 훅 구현(usePermission)
+[x] 2.5 권한 기반 UI 노출 제어(빠른 액션/관리자 메뉴)
+
+### 로그인/인증
+[x] 3.1 로그인/가입 폼 검증(Zod) 및 오류 UX
+[x] 3.2 비밀번호 해시/검증 로직(bcrypt) 적용
+[x] 3.3 세션/쿠키(HttpOnly/SameSite/Secure) 및 토큰 저장 전략
+[x] 3.4 비밀번호 재설정 토큰 발급/검증/만료
+[x] 3.5 보호 라우팅 미들웨어 및 인증 가드
+[x] 3.6 로그인 시도 레이트리밋(정책은 보안/정책 참조)
+
+### 상태관리/데이터
+[x] 4.1 React Query 설치 및 Provider 구성
+[x] 4.2 공통 fetcher/에러 형식/재시도·백오프 설정
+[x] 4.3 캐시 키/무효화 전략 수립 및 적용
+[x] 4.4 낙관적 업데이트 패턴 적용(작성/수정)
+
+### 공통/레이아웃
+[x] 5.1 앱 레이아웃/헤더/푸터/사이드바 구성
+[x] 5.2 공통 컴포넌트(버튼/입력/모달/토스트) 제작
+[x] 5.3 글로벌 로딩/스켈레톤/에러 경계 패턴 정립
+[x] 5.4 테마/다크모드 및 반응형 설정
+
+### 메인 화면
+[x] 6.1 Hero/공지 배너 컴포넌트(자동/수동 슬라이드)
+[x] 6.2 최근/인기 글 리스트 및 무한스크롤 연동
+[x] 6.3 권한 기반 빠른 액션 노출 제어
+[x] 6.4 검색 바 및 결과 페이지 라우팅
+[x] 6.5 개인화 위젯(최근 본 글/알림 요약)
+
+### 게시판/컨텐츠
+[x] 7.1 게시글 CRUD API 및 페이지 연동
+[x] 7.2 목록 페이징/정렬/검색(제목/태그/작성자/기간)
+[x] 7.3 태그/카테고리 모델 및 UI
+[x] 7.4 첨부 업로드 및 본문 삽입
+[x] 7.5 추천/신고, 조회수 카운트
+[x] 7.6 익명/비밀댓글/비댓 해시 처리
+[x] 7.7 신고→알림→블라인드 자동화 훅
+[x] 7.8 일반 게시판 공용 폼/라우트 템플릿 생성
+[x] 7.9 일반 카테고리 설정 매핑(공지/가입인사/버그건의/이벤트/소통방/자유/무엇이든/마사지꿀팁/관리사찾아요/청와대/방문후기[승인])
+[x] 7.10 제휴업소 일반(사진) 카테고리 전용 이미지 첨부/미리보기 규칙
+
+### 특수 페이지(카테고리)
+[x] 8.1 출석부: 데일리 체크인/중복 방지/포인트 지급/누적 통계
+[x] 8.2 포인트안내: 정책 안내 페이지(에디터 연동/버전 이력)
+[x] 8.3 회원랭킹: 기간별 랭킹 집계/캐싱/페이지네이션/정렬 옵션
+[x] 8.4 무료쿠폰: 쿠폰 등록/재고/사용 처리/만료/1인 제한/로그
+[x] 8.5 월간집계: 월별 지표 산출 배치/차트/다운로드(CSV)
+[x] 8.6 주변 제휴업체: 위치 기반 목록/지도/필터(거리/카테고리)
+[x] 8.7 제휴문의: 접수 폼/관리자 승인 워크플로우/알림
+[x] 8.8 제휴업소 요청: 요청 생성/승인/상태 관리/이력
+
+### 에디터/업로드
+[x] 9.1 에디터(Tiptap/Quill 중 택1) 통합
+[x] 9.2 이미지/파일 업로드 서버 처리 및 검증
+[x] 9.3 리사이즈/웹포맷 최적화 및 용량 제한
+[x] 9.4 붙여넣기/드래그 삽입, 캡션/대체텍스트
+[x] 9.5 사진 중심 카테고리 프리셋(해상도/비율/워터마크 옵션)
+
+### 관리자(Admin)
+[x] 10.1 대시보드 핵심 지표 위젯
+[x] 10.2 게시판 스키마/설정 관리 UI
+[x] 10.3 사용자 검색/정지/권한 변경
+[x] 10.4 공지/배너 등록 및 노출 설정
+[x] 10.5 감사 이력/신고 내역/열람 로그
+[x] 10.6 카테고리 유형/설정 관리(일반/특수/승인/레벨/익명/태그)
+
+### 테스트/품질
+[ ] 11.1 유닛 테스트(서비스/리포지토리)
+[ ] 11.2 통합 테스트(API 핵심 플로우)
+[ ] 11.3 E2E 테스트(인증/게시글 작성/검색)
+[ ] 11.4 린트/포맷/프리커밋 훅, 타입 엄격화
+
+### 보안/정책
+[ ] 12.1 레이트리밋 파라미터 확정 및 적용
+[ ] 12.2 CSRF 방어 전략 및 토큰 처리
+[ ] 12.3 XSS 콘텐츠 정제 규칙 정의/적용
+[ ] 12.4 비밀번호 정책/자동 로그아웃/감사 로그 설정
+[ ] 12.5 금칙어 정책/DB 운영 절차 수립
+### 배포/운영
+[ ] 13.1 환경변수 파일 체계 및 비밀키 전략
+[ ] 13.2 CI 파이프라인 구성(테스트/빌드/린트)
+[ ] 13.3 배포 설정 및 헬스체크 엔드포인트
+[ ] 13.4 모니터링/알림(Sentry 등) 연동
+[ ] 13.5 백업/복구 전략 수립
+
+
+
+### 14 배포용 상태 적용
+[ ] 14.1 패스워드찾기 정상화
+[ ] 14.2 에디터 정상화
diff --git a/.cursor/commands/ck.md b/.cursor/commands/ck.md
new file mode 100644
index 0000000..ebfb9d0
--- /dev/null
+++ b/.cursor/commands/ck.md
@@ -0,0 +1,3 @@
+#check
+
+Mark the checklist as done once completed
\ No newline at end of file
diff --git a/.cursor/commands/cm.md b/.cursor/commands/cm.md
new file mode 100644
index 0000000..538f2ef
--- /dev/null
+++ b/.cursor/commands/cm.md
@@ -0,0 +1,3 @@
+# Commit with message
+
+Set an appropriate message for the recent changes, then commit.
diff --git a/.cursor/commands/n.md b/.cursor/commands/n.md
new file mode 100644
index 0000000..41c563c
--- /dev/null
+++ b/.cursor/commands/n.md
@@ -0,0 +1,2 @@
+### next work
+Do the next task.
\ No newline at end of file
diff --git a/src/app/_layout.tsxbk b/src/app/_layout.tsxbk
new file mode 100644
index 0000000..d94199f
--- /dev/null
+++ b/src/app/_layout.tsxbk
@@ -0,0 +1,36 @@
+import type { Metadata } from "next";
+import "./globals.css";
+import QueryProvider from "@/app/QueryProvider";
+import { AppHeader } from "@/app/components/AppHeader";
+import { AppSidebar } from "@/app/components/AppSidebar";
+import { AppFooter } from "@/app/components/AppFooter";
+import { ToastProvider } from "@/app/components/ui/ToastProvider";
+
+
+export const metadata: Metadata = {
+ title: "msg App",
+ description: "msg App",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/app/_page.tsx.bk b/src/app/_page.tsx.bk
new file mode 100644
index 0000000..d31828b
--- /dev/null
+++ b/src/app/_page.tsx.bk
@@ -0,0 +1,17 @@
+import Image from "next/image";
+import { QuickActions } from "@/app/components/QuickActions";
+import { HeroBanner } from "@/app/components/HeroBanner";
+import { PostList } from "@/app/components/PostList";
+import { PersonalWidgets } from "@/app/components/PersonalWidgets";
+
+export default function Home({ searchParams }: { searchParams?: { sort?: "recent" | "popular" } }) {
+ const sort = searchParams?.sort ?? "recent";
+ return (
+
+ );
+}
diff --git a/src/app/globals.css b/src/app/globals.css
index a2dc41e..fd8e9cc 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -22,5 +22,8 @@
body {
background: var(--background);
color: var(--foreground);
- font-family: Arial, Helvetica, sans-serif;
+ font-family: var(--font-sans), Arial, Helvetica, sans-serif;
}
+
+/* 유틸: 카드 스켈레톤 색상 헬퍼 (타깃 사이트 톤 유사) */
+.bg-neutral-100 { background-color: #f5f5f7; }
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index d94199f..43bfdc9 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -2,7 +2,6 @@ import type { Metadata } from "next";
import "./globals.css";
import QueryProvider from "@/app/QueryProvider";
import { AppHeader } from "@/app/components/AppHeader";
-import { AppSidebar } from "@/app/components/AppSidebar";
import { AppFooter } from "@/app/components/AppFooter";
import { ToastProvider } from "@/app/components/ui/ToastProvider";
@@ -18,16 +17,27 @@ export default function RootLayout({
children: React.ReactNode;
}>) {
return (
-
-
+
+
-
-
-
-
{children}
+
-
diff --git a/src/app/page.tsx b/src/app/page.tsx
index d31828b..76b5a6d 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,17 +1,41 @@
-import Image from "next/image";
-import { QuickActions } from "@/app/components/QuickActions";
import { HeroBanner } from "@/app/components/HeroBanner";
-import { PostList } from "@/app/components/PostList";
-import { PersonalWidgets } from "@/app/components/PersonalWidgets";
export default function Home({ searchParams }: { searchParams?: { sort?: "recent" | "popular" } }) {
const sort = searchParams?.sort ?? "recent";
return (
-
-
-
-
-
+
+ {/* 히어로 섹션: 상단 대형 비주얼 영역 */}
+
+
+ {/* 메인 그리드: 좌 대형 카드, 우 2열 카드 등 타깃 사이트 구조를 단순화한 12그리드 */}
+
+
+ {/* 하단 롤링 배너/뉴스 영역 유사 섹션 */}
+
);
}
diff --git a/todolist.txt b/todolist.txt
deleted file mode 100644
index d384f4b..0000000
--- a/todolist.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-[백엔드/API]
-1.1 Prisma 스키마 최종 확정(모델/관계/index/unique) o
-1.2 마이그레이션 생성 및 적용(prisma migrate dev) o
-1.3 Prisma Client 재생성 및 dev DB 초기화 o
-1.4 시드 스크립트 분리(역할/기본 관리자/샘플 게시판) o
-1.5 서비스/리포지토리 계층 뼈대 생성(트랜잭션 유틸 포함) o
-
-[권한/역할(RBAC)]
-2.1 역할·권한 시드(admin/editor/user) 추가 o
-2.2 권한 enum/매핑 정의(리소스/액션) o
-2.3 서버 권한 미들웨어 적용(API 보호 라우트 지정) o
-2.4 페이지/컴포넌트 가드 훅 구현(usePermission) o
-2.5 권한 기반 UI 노출 제어(빠른 액션/관리자 메뉴) o
-
-[로그인/인증]
-3.1 로그인/가입 폼 검증(Zod) 및 오류 UX o
-3.2 비밀번호 해시/검증 로직(bcrypt) 적용 o
-3.3 세션/쿠키(HttpOnly/SameSite/Secure) 및 토큰 저장 전략 o
-3.4 비밀번호 재설정 토큰 발급/검증/만료 o
-3.5 보호 라우팅 미들웨어 및 인증 가드 o
-3.6 로그인 시도 레이트리밋(정책은 보안/정책 참조) o
-
-[상태관리/데이터]
-4.1 React Query 설치 및 Provider 구성 o
-4.2 공통 fetcher/에러 형식/재시도·백오프 설정 o
-4.3 캐시 키/무효화 전략 수립 및 적용 o
-4.4 낙관적 업데이트 패턴 적용(작성/수정) o
-
-[공통/레이아웃]
-5.1 앱 레이아웃/헤더/푸터/사이드바 구성 o
-5.2 공통 컴포넌트(버튼/입력/모달/토스트) 제작 o
-5.3 글로벌 로딩/스켈레톤/에러 경계 패턴 정립 o
-5.4 테마/다크모드 및 반응형 설정 o
-
-[메인 화면]
-6.1 Hero/공지 배너 컴포넌트(자동/수동 슬라이드) o
-6.2 최근/인기 글 리스트 및 무한스크롤 연동 o
-6.3 권한 기반 빠른 액션 노출 제어 o
-6.4 검색 바 및 결과 페이지 라우팅 o
-6.5 개인화 위젯(최근 본 글/알림 요약) o
-
-[게시판/컨텐츠]
-7.1 게시글 CRUD API 및 페이지 연동 o
-7.2 목록 페이징/정렬/검색(제목/태그/작성자/기간) o
-7.3 태그/카테고리 모델 및 UI o
-7.4 첨부 업로드 및 본문 삽입 o
-7.5 추천/신고, 조회수 카운트 o
-7.6 익명/비밀댓글/비댓 해시 처리 o
-7.7 신고→알림→블라인드 자동화 훅 o
-7.8 일반 게시판 공용 폼/라우트 템플릿 생성 o
-7.9 일반 카테고리 설정 매핑(공지/가입인사/버그건의/이벤트/소통방/자유/무엇이든/마사지꿀팁/관리사찾아요/청와대/방문후기[승인]) o
-7.10 제휴업소 일반(사진) 카테고리 전용 이미지 첨부/미리보기 규칙 o
-
-[특수 페이지(카테고리)]
-8.1 출석부: 데일리 체크인/중복 방지/포인트 지급/누적 통계 o
-8.2 포인트안내: 정책 안내 페이지(에디터 연동/버전 이력) o
-8.3 회원랭킹: 기간별 랭킹 집계/캐싱/페이지네이션/정렬 옵션 o
-8.4 무료쿠폰: 쿠폰 등록/재고/사용 처리/만료/1인 제한/로그 o
-8.5 월간집계: 월별 지표 산출 배치/차트/다운로드(CSV) o
-8.6 주변 제휴업체: 위치 기반 목록/지도/필터(거리/카테고리) o
-8.7 제휴문의: 접수 폼/관리자 승인 워크플로우/알림 o
-8.8 제휴업소 요청: 요청 생성/승인/상태 관리/이력 o
-
-[에디터/업로드]
-9.1 에디터(Tiptap/Quill 중 택1) 통합 o
-9.2 이미지/파일 업로드 서버 처리 및 검증 o
-9.3 리사이즈/웹포맷 최적화 및 용량 제한 o
-9.4 붙여넣기/드래그 삽입, 캡션/대체텍스트 o
-9.5 사진 중심 카테고리 프리셋(해상도/비율/워터마크 옵션) o
-
-[관리자(Admin)]
-10.1 대시보드 핵심 지표 위젯 o
-10.2 게시판 스키마/설정 관리 UI o
-10.3 사용자 검색/정지/권한 변경 o
-10.4 공지/배너 등록 및 노출 설정 o
-10.5 감사 이력/신고 내역/열람 로그 o
-10.6 카테고리 유형/설정 관리(일반/특수/승인/레벨/익명/태그) o
-
-[테스트/품질]
-11.1 유닛 테스트(서비스/리포지토리)
-11.2 통합 테스트(API 핵심 플로우)
-11.3 E2E 테스트(인증/게시글 작성/검색)
-11.4 린트/포맷/프리커밋 훅, 타입 엄격화
-
-[보안/정책]
-12.1 레이트리밋 파라미터 확정 및 적용
-12.2 CSRF 방어 전략 및 토큰 처리
-12.3 XSS 콘텐츠 정제 규칙 정의/적용
-12.4 비밀번호 정책/자동 로그아웃/감사 로그 설정
-12.5 금칙어 정책/DB 운영 절차 수립
-[배포/운영]
-13.1 환경변수 파일 체계 및 비밀키 전략
-13.2 CI 파이프라인 구성(테스트/빌드/린트)
-13.3 배포 설정 및 헬스체크 엔드포인트
-13.4 모니터링/알림(Sentry 등) 연동
-13.5 백업/복구 전략 수립
-
-
-
-14 배포용 상태 적용
-14.1 패스워드찾기 정상화
-14.2 에디터 정상화