# PAGE_FEATURES.md - 페이지별 기능 명세 > 와이어프레임 작성을 위한 페이지별 기능 설명 문서 > 모든 경로는 `/{locale}` 접두어 생략 (예: `/student/home` → 실제 `/ko/student/home`) --- ## 1. 전체 페이지 맵 | # | 카테고리 | 경로 | 페이지명 | 접근 권한 | |---|---------|------|---------|----------| | 1 | 랜딩 | `/` | 루트 리다이렉트 | 전체 | | 2 | 랜딩 | `/[locale]` | 랜딩 페이지 | 전체 | | 3 | 리다이렉트 | `/home` | 역할별 홈 리다이렉트 | 로그인 | | 4 | 학생 | `/student/home` | 학생 홈 | 학생 | | 5 | 교사 | `/teacher/home` | 교사 홈 | 교사 | | 6 | 교사 | `/teacher/pending-approval` | 교사 승인 대기 | 교사(미승인) | | 7 | 관리자 | `/admin/teacher-approvals` | 교사 승인 관리 | 관리자 | | 8 | 관리자 | `/admin/ip-whitelist` | IP 화이트리스트 | 관리자 | | 9 | 팀 | `/team` | 내 팀 목록 | 로그인 | | 10 | 팀 | `/team/all` | 공개 팀 탐색 | 로그인 | | 11 | 팀 | `/team/create` | 팀 생성 | 교사 | | 12 | 팀 | `/team/[teamId]` | 팀 상세 | 조건부 | | 13 | 팀 | `/team/[teamId]/manage` | 팀 관리 | 팀 소유자 | | 14 | 팀 | `/invite/[inviteId]` | 초대 수락 | 전체 | | 15 | 글쓰기 | `/write` | 글쓰기 모드 선택 | 로그인 | | 16 | 글쓰기 | `/write/text` | 텍스트 글쓰기 | 로그인 | | 17 | 글쓰기 | `/write/image` | 이미지 글쓰기 | 로그인 | | 18 | 글쓰기 | `/write/easy` | 쉬운 글쓰기 | 로그인 | | 19 | 글쓰기 | `/write/fill-in-blank` | 빈칸 채우기 | 로그인 | | 20 | 글쓰기 | `/write/edit/[id]` | 글 수정 | 작성자 | | 21 | 이미지 | `/imageUpload` | 이미지 업로드 | 로그인 | | 22 | 인터랙션 | `/interaction` | 인터랙티브 뷰어 | 로그인 | | 23 | 커리큘럼 | `/curriculum` | 커리큘럼 목록 | 로그인 | | 24 | 커리큘럼 | `/curriculum/[curriculumId]` | 커리큘럼 상세 | 로그인 | | 25 | 커리큘럼 | `/lesson/[lessonId]` | 수업 상세 | 로그인 | | 26 | 커리큘럼 | `/my-curriculums` | 내 커리큘럼 | 로그인 | | 27 | 사용자 | `/my` | 마이페이지 | 로그인 | | 28 | 사용자 | `/writing` | 내 글 목록 | 로그인 | | 29 | 사용자 | `/writing/[writingId]` | 글 상세 보기 | 로그인 | | 30 | 요금제 | `/pricing` | 요금제 안내 | 전체 | --- ## 2. 카테고리별 상세 설명 --- ### 2.1 랜딩/인증 #### `/` - 루트 리다이렉트 - 브라우저 언어에 따라 `/{locale}`으로 자동 리다이렉트 - UI 없음 --- #### `/[locale]` - 랜딩 페이지 **접근 권한**: 전체 (로그인 사용자는 역할별 홈으로 자동 리다이렉트) **조건부 동작**: - 로그인 + 교사 → `/teacher/home` 자동 이동 - 로그인 + 학생 → `/student/home` 자동 이동 - 비로그인 → 랜딩 페이지 표시 **주요 기능**: - 서비스 소개 (사이트명, 태그라인, 부제목) - **"시작하기" 버튼** → Google 로그인 모달 다이얼로그 오픈 - "이렇게 사용해요" 3단계 안내: 1. 회원가입 2. 만들기 3. 글쓰기 - 하단 CTA 섹션: 캐릭터 이미지(`hello.png`) + CTA 버튼 **이동 경로**: "시작하기" 버튼 → 로그인 다이얼로그 → 로그인 후 역할별 홈 --- #### `/home` - 역할별 홈 리다이렉트 **접근 권한**: 로그인 필수 **동작**: 교사 → `/teacher/home`, 학생 → `/student/home` 자동 리다이렉트 > **인증 방식**: 별도 로그인 페이지 없이 모달 다이얼로그로 Google 로그인 처리 --- ### 2.2 학생 영역 #### `/student/home` - 학생 홈 **접근 권한**: 학생 역할 필수 **주요 기능**: 1. **환영 메시지**: 사용자 이름(또는 이메일 앞부분) + 부제목 표시 2. **빠른 액션 그리드** (3개 카드): - "새 글쓰기" → `/write` 이동 - "내 팀" → `/team` 이동 - "팀 참가" → `/team/all` 이동 - 미구현 카드는 클릭 불가 + "개발 중" 오버레이 3. **팀 초대 알림** (대기 초대 있을 때만 표시): - 각 초대: 팀 이름, 초대자 이름 표시 - **"수락"** / **"거절"** 버튼 4. **글쓰기 패턴 분석 바**: 클릭 시 WritingPatternDialog 오픈 5. **최근 활동 섹션**: - 최근 작성 글 카드 그리드 표시 - **"전체 보기"** 버튼 → `/writing` 이동 - 글 삭제 가능 - **빈 상태**: "아직 작성한 글이 없어요" + **"글쓰기 시작"** 버튼 → `/write` **다이얼로그**: 글쓰기 패턴 분석 결과 --- ### 2.3 교사 영역 #### `/teacher/home` - 교사 홈 **접근 권한**: 교사 역할 필수 **주요 기능**: - 환영 메시지 (사용자 이름 표시) - **"내 팀 보기"** 버튼 → `/team` 이동 - **"팀 만들기"** 버튼 → `/team/create` 이동 **이동 경로**: `/team`, `/team/create` --- #### `/teacher/pending-approval` - 교사 승인 대기 **접근 권한**: 로그인 필수 (교사 승인 전 상태) **조건부 동작** (2가지 상태): **승인 대기 상태** (기본): - 시계 아이콘 + "승인 대기 중" 제목 + 설명 메시지 - **"상태 확인"** 버튼 → 서버에서 최신 승인 상태 조회 (승인되면 자동 반영) - **"로그아웃"** 버튼 **거부 상태**: - X 아이콘 + "거부됨" 제목 + 설명 메시지 - 거부 사유 표시 (사유가 있는 경우) - "상태 확인" 버튼 없음 (로그아웃만 가능) - **"로그아웃"** 버튼 --- ### 2.4 관리자 영역 #### `/admin/teacher-approvals` - 교사 승인 관리 **접근 권한**: 관리자 전용 (403 시 "접근 권한 없음" 화면) **데이터**: 승인 대기 중인 교사 목록 **주요 기능**: - 대기 교사 테이블: 이름, 이메일, 액션 열 - 대기 교사 수 배지 표시 - **"승인"** 버튼 → 교사 승인 처리 - **"거부"** 버튼 → 거부 사유 입력 다이얼로그 → 거부 처리 --- #### `/admin/ip-whitelist` - IP 화이트리스트 관리 **접근 권한**: 관리자 전용 (403 시 "접근 권한 없음" 화면) **주요 기능**: - 활성화/비활성화 토글 스위치 - 현재 접속 IP 표시 + **"현재 IP 추가"** 버튼 - IP 목록 관리 (줄 단위 텍스트 입력, IP 개수 표시) - **"저장"** 버튼 --- ### 2.5 팀 관리 #### `/team` - 내 팀 목록 **접근 권한**: 로그인 필수 **데이터**: 사용자의 모든 팀 목록 → "소유 팀"과 "참여 팀"으로 분류 **주요 기능**: - 헤더에 통계 표시: "총 {n}개, 소유 {n}, 참여 {n}" - **"팀 만들기"** 버튼 → `/team/create` 이동 - **소유 팀 섹션** (FaCrown 아이콘): 내가 만든 팀 카드 그리드 - 팀 카드 클릭 → `/team/{teamId}/manage` (관리 페이지) - **참여 팀 섹션** (FaUserFriends 아이콘): 참여 중인 팀 카드 그리드 - 팀 카드 클릭 → `/team/{teamId}` (상세 페이지) **팀 카드 표시 정보**: 팀 이름, 커버 이미지, 멤버 수, AI 활성화 여부 --- #### `/team/all` - 공개 팀 탐색 **접근 권한**: 전체 (로그인 불필요) **데이터**: 공개 팀 목록 (10개씩 페이지네이션) **주요 기능**: - 공개 팀 카드 그리드 표시 - **"새로고침"** 버튼 → 목록 다시 로드 - **"더 보기"** 버튼 → 다음 페이지 로드 (커서 기반 페이지네이션) - 팀 카드 클릭 → `/team/{teamId}` 이동 --- #### `/team/create` - 팀 생성 **접근 권한**: 로그인 필수 **폼 필드**: - **팀 이름** (필수): 50자 제한 - **커버 이미지** (선택): 드래그 앤 드롭 업로드, 16:9 비율 **버튼**: **"취소"** / **"만들기"** **생성 완료 다이얼로그**: - **"초대 링크 만들기"** → 초대 URL + **"복사"** 버튼 + QR 코드 + **"QR 다운로드"** - **"팀 관리로 이동"** → `/team/{teamId}/manage` #### `/team/[teamId]` - 팀 상세 **접근 권한**: 조건부 (멤버/공개팀/비공개팀에 따라 다른 뷰) **3가지 뷰:** **뷰 A - 멤버 뷰** (팀 멤버일 때): - 팀 정보 헤더: 팀 이름, 멤버 수, 소유자 배지, 팀 설명 - 소유자: **"팀 관리"** 버튼 → `/team/{teamId}/manage` - 멤버: **"팀 나가기"** 버튼 → 탈퇴 확인 다이얼로그 (소유자는 나가기 불가) - 4개 탭: 1. **개요**: 커리큘럼 진행 카드 + 통계 4개 (전체/주간/월간/최근 활동) + 최근 글 3개 2. **주제**: 주제별 아코디언 (주제당 글 목록) 3. **활동**: 내 글 현황 + 멤버 리더보드 + 팀 최근 글 4. **멤버**: 멤버 카드 그리드 **뷰 B - 공개 뷰** (비멤버 + 공개 팀): - 팀 정보 + **"팀 참가"** 버튼 - 공개 글 목록 (허용 시) 또는 "글이 공개되지 않습니다" 안내 **뷰 C - 비공개 뷰** (비멤버 + 비공개 팀): - "접근 권한 없음" 메시지 #### `/team/[teamId]/manage` - 팀 관리 **접근 권한**: 팀 소유자 전용 **"뒤로가기"** → `/team`, **"멤버 페이지 보기"** → `/team/{teamId}` **6개 탭:** 1. **개요** (LuInfo): TeamInfoCard 컴포넌트 - 팀 기본 정보 표시/수정 **초대 링크 관리 (InviteLinkManager)**: - 기존 초대 링크 목록 표시: 각 초대마다 사용 횟수, 최대 사용 횟수(설정 시), 만료일 배지 - 각 초대: QR 코드 미리보기(클릭 시 확대 다이얼로그) + URL 표시 + **"복사"** 버튼 + **"취소"** 버튼 - **"+ 만들기"** 버튼 → 초대 생성 폼 토글: - **최대 사용 횟수**: NumberInput (0 = 무제한) - **만료일**: DatePicker (프리셋: 없음/내일/1주/2주/4주, 또는 캘린더에서 직접 선택) - **"취소"** / **"만들기"** 버튼 - 빈 상태: "아직 초대 링크가 없습니다" **이메일 초대 (EmailInviteSection)** **대량 멤버 생성 (BulkMemberCreator)** - 4단계 플로우: - 스텝 인디케이터 (입력 → 미리보기 → 생성 중 → 결과) - **Step 1 - 입력**: - 학생 이름 목록: 행 단위 입력 (추가/삭제 가능), 또는 CSV 파일 업로드 (드래그 앤 드롭 지원) - 아이디 템플릿: 기본값 `{이름}_{랜덤}` (플레이스홀더: `{이름}`, `{번호}`, `{랜덤}` 칩 클릭으로 삽입) - 비밀번호 템플릿: 기본값 `raon{번호}!!` (동일 플레이스홀더) - 라이브 미리보기: 첫 번째 학생 기준으로 생성될 아이디/비밀번호 실시간 표시 - **"미리보기"** 버튼 (유효한 행 1개 이상일 때 활성) - **Step 2 - 미리보기**: 전체 학생의 생성될 아이디/비밀번호 테이블 확인 → **"돌아가기"** / **"생성"** 버튼 - **Step 3 - 생성 중**: 진행 애니메이션 - **Step 4 - 결과**: - 성공/실패 결과 테이블 (이름, 아이디, 비밀번호, 상태) - **"카드 출력"** 버튼 → 새 창에서 학생 로그인 카드 3열 그리드로 출력 (이름/아이디/비밀번호/팀명 포함) - 성공 수/실패 수 토스트 알림 2. **AI 설정** (LuBrain): - AI 기능 설정 (TeamAISettings) - 채점 설정 (TeamScoringSettings) - 평가 기준 설정 (TeamRubricSettings) 3. **커리큘럼** (LuBookMarked): - 팀 커리큘럼 관리 (TeamCurriculumManager) 4. **주제** (LuBookOpen): - 글쓰기 주제 CRUD 관리 (TeamTopicManager) 5. **모니터링** (LuActivity): - 실시간 글쓰기 모니터링 (LiveWritingMonitor) - 주제별/멤버별 분석 (TopicMemberAnalysisSection) 6. **멤버** (LuUsers): - 멤버 편집기 (TeamMemberEditor): 멤버 목록, 닉네임 수정, 소유권 이전, 멤버 제거, 글쓰기 분석, 트렌드 보기 - **위험 구역**: 팀 삭제 - **"팀 삭제"** 버튼 → 삭제 확인 다이얼로그 **팀 삭제 다이얼로그**: - 경고 메시지 ("이 작업은 되돌릴 수 없습니다") - 팀 이름 표시 - **팀 이름 확인 입력**: 정확히 일치해야 삭제 버튼 활성화 - **"취소"** / **"삭제"** 버튼 → 삭제 성공 시 `/team`으로 이동 #### `/invite/[inviteId]` - 초대 수락 **접근 권한**: 전체 (비로그인도 접근 가능) **데이터**: 초대 정보 (팀 이름, 설명, 유효 여부, 이미 참가 여부) **5가지 상태별 화면:** 1. **로딩**: 스피너 + "로딩 중" 2. **이미 참가한 팀**: "이미 멤버입니다" + **"팀으로 이동"** 버튼 → `/team/{teamId}` 3. **참가 완료**: "참가 완료!" + **"팀으로 이동"** 버튼 → `/team/{teamId}` 4. **유효하지 않은 초대**: "유효하지 않은 초대" + 사유 표시 + **"홈으로"** 버튼 → `/home` 5. **참가 준비** (유효한 초대): - 팀 이름, 설명 (있으면) 표시 - 에러 발생 시 에러 메시지 표시 - **로그인 상태**: **"팀 참가"** 버튼 → 참가 처리 (로딩 표시) - **비로그인 상태**: "로그인하여 참가하세요" + **"로그인 & 참가"** 버튼 → 로그인 다이얼로그 오픈 → 로그인 완료 후 자동 참가 --- ### 2.6 글쓰기 #### `/write` - 글쓰기 모드 선택 **접근 권한**: 로그인 필수 **URL 파라미터에 의한 자동 리다이렉트**: - `lessonId` → `/write/text` (수업 파라미터 포함) - `topicId` + `helpLevel=ai-draft` → `/write/fill-in-blank` - `topicId` + `helpLevel=ai-hint` → `/write/easy` - `topicId` + `startType=image` → `/write/image` - `topicId` (기본) → `/write/text` - `id` → `/write/edit/{id}` - `mode=wrt` → `/write/text` - `mode=img` → `/write/image` **주요 기능** (파라미터 없이 직접 진입 시): 1. **헤더 텍스트**: "모드를 선택해주세요" 2. **컴팩트 카드 행 (CompactCardsRow)**: 사용자가 속한 팀의 최근 글 3개 미리보기 3. **2단계 모드 선택 (WritingModeSelector)**: - **Step 1 - 시작 유형 선택** (2개 카드): - "그림부터 시작" (LuImage) - "글부터 시작" (LuFileText) - **Step 2 - 도움 수준 선택** (3개 카드, 뒤로가기 버튼 포함): - "AI 초안" (LuBot, "추천" 배지) → `/write/fill-in-blank` (IP 제한 시 비활성) - "AI 힌트" (LuSparkles) → `/write/easy` - "혼자서" (LuPenLine, "기본" 배지) → `/write/text` - 이미지 시작 선택 시 → `/write/image` 4. **추천 영감 섹션 (InspirationSection)**: 가로 배치 2개 영감 아이템 **이동 경로**: `/write/text`, `/write/image`, `/write/easy`, `/write/fill-in-blank`, `/write/edit/{id}` #### `/write/text` - 텍스트 글쓰기 **접근 권한**: 로그인 필수 **입력 필드**: 주제 선택 드롭다운, 제목 입력, 리치 텍스트 에디터 **버튼**: **"저장된 초안"**, **"맞춤법 검사"**, **"AI 힌트"** (조건부), **"뒤로"**, **"저장"** **AI 기능**: - **실시간 텍스트 분석**: 점수, 감각어/감정어/의성어 탐지, 개선 제안 - **AI 힌트**: 4단계 진행형 힌트 (팀 설정으로 제한 가능) - **맞춤법 검사**: 오류 단어 + 교정 제안 **자동 저장**: 작성 중 자동 저장 + 상태 표시 **특수 모드**: - **수업 모드** (`lessonId`): 수업 프롬프트 표시, 자동 저장 비활성 - **팀 모드**: 팀 이름 + 주제 헤더 - **영감 모드** (`inspirationId`): 제목/주제 자동 채움 **다이얼로그**: 저장된 초안 목록, 주제 변경 경고, AI 힌트 드로어 **이동**: 저장 시 → `/imageUpload?writingId={id}` --- #### `/write/image` - 이미지 글쓰기 **접근 권한**: 로그인 필수 **텍스트 글쓰기와 동일한 기능** (AI 분석, 힌트, 맞춤법, 자동 저장, 다이얼로그) + 아래 차이점: **차이점**: - **순차적 잠금 해제**: 주제 선택 → 제목 입력 → 이미지 업로드 + 에디터 활성화 - **이미지 업로드**: 드래그 앤 드롭, **"이미지 변경"** 으로 재업로드 가능 - 수업 모드/영감 모드 미지원 **이동**: 이미지 있으면 → `/interaction`, 없으면 → `/imageUpload` #### `/write/easy` - 쉬운 글쓰기 **접근 권한**: 로그인 필수 **2가지 모드**: 텍스트 모드 (기본) / 이미지 모드 **입력**: 주제 선택, 제목 입력, 줄 단위 텍스트 입력 (Enter로 제출, 편집/삭제 가능), 이미지 모드 시 이미지 업로드 **버튼**: **"저장된 초안"**, **"뒤로"**, **"저장"** **AI 기능**: - **줄별 AI 제안**: 줄 제출 후 자동 생성 (줄당 최대 3개) - **이미지 분석** (이미지 모드): 이미지에서 추천 키워드 추출 **자동 저장**: 작성 중 자동 저장 + 상태 표시 **이미지 모드 순차 잠금**: 주제 → 제목 → 이미지 + 글쓰기 **이동**: 이미지 있으면 → `/interaction`, 없으면 → `/imageUpload` #### `/write/fill-in-blank` - 빈칸 채우기 글쓰기 **접근 권한**: 로그인 필수, AI 기능은 IP 화이트리스트 확인 **2가지 모드**: 이미지 우선 (기본) / 텍스트 우선 **Step 1 - 입력**: - 주제 선택 → 제목 입력 → 콘텐츠 입력 (순차 잠금) - 이미지 모드: 이미지 업로드 / 추천 이미지 선택 / 팀 글 이미지 선택 - 텍스트 모드: 텍스트 입력 (최소 20자) - **"생성"** 버튼 → AI 초안 생성 (진행률 표시) **Step 2 - 빈칸 채우기**: - AI 초안의 빈칸을 순차적으로 채움 (원본/직접 입력/AI 제안 선택) - 진행률 바 + 참여 보상 점수 표시 - **"다시 시작"** / **"저장"** 버튼 **이동**: 이미지 있으면 → `/interaction`, 없으면 → `/imageUpload` #### `/write/edit/[id]` - 글 수정 **접근 권한**: 로그인 필수 (글 작성자) **입력**: 제목 (편집 가능), 주제 (읽기 전용), 리치 텍스트 에디터, 이미지 변경 (선택) **버튼**: **"뒤로"**, **"맞춤법 검사"**, **"AI 힌트"** (팀 AI 활성화 시), **"저장"** **AI 기능**: `/write/text`와 동일 (실시간 분석, 맞춤법, AI 힌트) **자동 저장**: 없음 (명시적 저장만) **이동**: 이미지 있으면 → `/interaction`, 없으면 → `/imageUpload` --- ### 2.7 이미지 업로드 & 인터랙션 #### `/imageUpload` - 이미지 업로드 **접근 권한**: 로그인 필수 **파라미터**: `writingId` (필수) **모드 선택 화면**: **"AI 이미지 생성"** / **"직접 업로드"** 버튼 **AI 모드 (4단계 플로우)**: 1. **추출 중**: 글 내용에서 장면 자동 추출 2. **장면 선택**: 추출된 장면 카드 목록 → 하나 선택 → **"생성"** 버튼 3. **생성 중**: 진행률 표시 4. **완료**: 생성 이미지 미리보기 + **"장면 변경"** / **"계속"** 버튼 **업로드 모드**: - 파일 업로드 (드래그 앤 드롭) → 미리보기 + **"파일 변경"** / **"업로드"** 버튼 **수정 모드** (이미 이미지가 있는 글): - 기존 이미지 표시 + **"이미지 변경"** / **"현재 유지"** 버튼 **AI 생성 비활성 조건**: 플랜 미지원, IP 제한, 일일 한도 초과, 팀 AI 비활성 **이동**: 완료 시 → `/interaction?writingId={id}` --- #### `/interaction` - 인터랙티브 이미지 뷰어 **접근 권한**: 로그인 필수 **파라미터**: `writingId` (필수) **주요 기능**: - 생성된 이미지를 인터랙티브 캔버스로 표시 - 기존 왜곡 영역 및 효과 표시 **보기/편집 모드 토글**: **보기 모드**: 클릭/터치로 왜곡 효과 활성화 **편집 모드** (소유자만): - 왜곡 영역 추가/삭제/편집 - 물리/모션/이징/속도/강도 등 파라미터 조정 (프리셋 또는 커스텀) - 스프라이트 효과 설정 - 전체 화면 토글 - **"저장"** 버튼 **분석 섹션**: 점수 (0~100), 영역 해금 배지, 개선 힌트 **댓글 섹션**: 댓글 목록 + 작성 --- ### 2.8 커리큘럼 & 수업 #### `/curriculum` - 커리큘럼 목록 **접근 권한**: 로그인 필수 (미인증 시 홈으로 리다이렉트) **기능**: 사용 가능한 커리큘럼 대시보드 표시 **이동**: 커리큘럼 클릭 → `/curriculum/{curriculumId}` --- #### `/curriculum/[curriculumId]` - 커리큘럼 상세 **접근 권한**: 로그인 필수 **데이터**: 커리큘럼 정보 + 수업 목록 (병렬 로드) **기능**: 커리큘럼 제목/설명 + 수업 목록 (순서대로) + 수업 뷰어 **상태별 화면**: 로딩 (스피너), 에러 (토스트 "커리큘럼 로드 실패") **이동**: 수업 클릭 → `/lesson/{lessonId}` --- #### `/lesson/[lessonId]` - 수업 상세 **접근 권한**: 로그인 필수 **파라미터**: `lessonId` (필수), `teamId`, `curriculumId`, `step` (선택) **기능**: - 수업 콘텐츠 표시 (마크다운, 비디오, 글쓰기 프롬프트 등) - **"뒤로가기"** 버튼: teamId 있으면 → `/team/{teamId}`, 없으면 → 이전 페이지 - **"수업 완료"** 버튼: teamId + curriculumId + step 있을 때 → 수업 완료 처리 + 토스트 "레슨을 완료했어요!" + 팀 페이지로 이동 **상태별 화면**: 로딩 (스피너), 에러 (에러 메시지 + 뒤로가기), 권한 없음 --- #### `/my-curriculums` - 내 커리큘럼 **접근 권한**: 로그인 필수 (미인증 시 홈으로 리다이렉트) **기능**: 사용자가 등록한 커리큘럼 대시보드 표시 --- ### 2.9 마이페이지 & 글 관리 #### `/my` - 마이페이지 **접근 권한**: 로그인 필수 (미인증 시 홈으로 리다이렉트) **주요 기능**: 1. **프로필**: 아바타 변경, 이름 편집, 나이/학년 편집, 플랜 배지 2. **통계** (4개 카드): 글 수, 팀 수, AI 크레딧, 주간 목표 진행률 3. **최근 글 미리보기**: 최대 3개 + **"전체 보기"** → `/writing` 4. **팀 미리보기**: 최대 3개 + **"전체 보기"** → `/team` 5. **커리큘럼 미리보기**: **"전체 보기"** → `/my-curriculums` 6. **환경 설정**: 언어, 테마 등 7. **계정 정보**: 현재 플랜 + 제한 사항 (AI 팀 수, 분석 사용량, 이미지 생성 한도) + AI 크레딧 - FREE 플랜: **"업그레이드"** 버튼 → `/pricing` - **"계정 삭제"** → 확인 다이얼로그 #### `/writing` - 내 글 목록 **접근 권한**: 로그인 필수 **데이터**: 사용자의 모든 글 목록 **주요 기능**: - 제목 + "총 {n}개의 글을 작성했어요" 통계 - **정렬 드롭다운**: "최신순" / "오래된순" - 글 카드 그리드: 이미지 미리보기, 제목, 날짜, 삭제 버튼 - 글 카드 클릭 → `/writing/{writingId}` - 글 삭제 (삭제 확인 후 목록에서 제거, 애니메이션) **상태별 화면**: - **로딩**: 스켈레톤 - **빈 상태**: "아직 작성한 글이 없어요" + **"글 쓰기 시작하기"** 버튼 → `/write` --- #### `/writing/[writingId]` - 글 상세 보기 **접근 권한**: 전체 (공개 페이지, 로그인 불필요) **데이터**: 글 상세 정보 (서버 사이드 렌더링) **주요 기능**: - **헤더** (스티키): 글 제목, 작성자 정보, 메타데이터 - **인터랙티브 이미지** (generatedImage 존재 시): 저장된 왜곡 영역 + 스프라이트 효과로 인터랙티브 뷰어 표시 - **원본 글**: HTML 포맷 텍스트 표시 - **댓글 섹션**: 댓글 목록 + 댓글 작성 + 답글 **상태별 화면**: 로딩, 에러 (글 없음 / 로드 실패 → 홈으로 이동) --- ### 2.10 요금제 #### `/pricing` - 요금제 안내 **접근 권한**: 전체 (공개 페이지) **주요 기능**: 1. **결제 주기 토글**: 월간/연간 전환 (연간 할인 배지 표시) 2. **요금제 카드 4개**: - **Free**: 무료, 기본 기능, CTA → 로그인 다이얼로그 - **Classroom** (하이라이트, "가장 인기" 배지): 유료, 교실 기능 - **Academy**: 유료, 고급 기능 - **School**: "문의" → 이메일 (`contact@bluenovalab.com`) - 각 카드: 플랜명, 설명, 가격, 기능 목록, CTA 버튼 - 현재 플랜이면 버튼 비활성 3. **CTA 버튼 동작** (로그인 상태 + 유료 플랜): - 동일 플랜+주기 → 비활성 - 무료→유료 → 구매 확인 다이얼로그 - 업그레이드 → 업그레이드 다이얼로그 (즉시/예약, 예상 환불 크레딧) - 다운그레이드 → 다운그레이드 다이얼로그 (즉시/예약, 예상 크레딧+유효기간) - 주기 변경 → 주기 변경 다이얼로그 4. **기능 비교 테이블**: 9개 기능 × 4개 플랜 매트릭스 (팀 AI, 멤버, 글, AI 분석, AI 어시스턴트, 이미지 생성, 실시간 모니터링, 패턴 분석, 우선 지원) 5. **FAQ 섹션**: 4개 Q&A **다이얼로그 4종**: 구매 확인, 업그레이드 옵션, 다운그레이드 옵션, 결제 주기 변경 --- ## 3. 주요 유저 플로우 ### 3.1 학생 글쓰기 플로우 ``` 랜딩 → 로그인 → /student/home → /write (모드 선택) ├── /write/text → /imageUpload → /interaction → 완료 ├── /write/image → /interaction → 완료 ├── /write/easy → 완료 └── /write/fill-in-blank → 완료 ``` ### 3.2 교사 팀 관리 플로우 ``` 랜딩 → 로그인 → /teacher/home → /team/create → (초대 링크 생성) → /team → /team/[teamId] → /team/[teamId]/manage ``` ### 3.3 학생 팀 참가 플로우 ``` 초대 링크 클릭 → /invite/[inviteId] → 로그인 → 팀 참가 → /team/[teamId] 또는 /student/home → /team/all → 팀 선택 → /team/[teamId] → 참가 ``` ### 3.4 커리큘럼 학습 플로우 ``` /curriculum → /curriculum/[curriculumId] → /lesson/[lessonId] → 수업 완료 → /write (연계 글쓰기) ``` ### 3.5 교사 승인 플로우 ``` 교사 회원가입 → /teacher/pending-approval (대기) 관리자: /admin/teacher-approvals → 승인/거부 승인 후: /teacher/home ``` ### 3.6 글 수정 플로우 ``` /writing → /writing/[writingId] → /write/edit/[id] → 저장 → /writing/[writingId] ``` --- ## 4. 공통 UI 요소 (모든 페이지) - **인증 모달**: Google 로그인 다이얼로그 (별도 로그인 페이지 없음) - **네비게이션**: 상단 헤더 (로고, 메뉴, 프로필) - **로케일**: 한국어/영어/일본어 전환 - **토스트**: 성공/오류 알림 - **로딩**: 페이지별 스피너/스켈레톤 --- © 2024 BlueNovaLab. All rights reserved.