# 1. 회원관리

## 1.1. 회원가입

- 일반 가입
    - 이메일
        - 이메일 중복체크 ‘이미 가입된 이메일 주소입니다.’ 경고문(alert)
    - 비밀번호/비밀번호 확인: 10~20자 영문, 숫자, 특수문자 사용가능 및  재확인 일치 여부
    - 닉네임: 중복확인 버튼으로 닉네임 중복 확인, 한글, 영문, 숫자 2자 이상 20자 내외
    - 회원가입 버튼 클릭 시 인증 이메일 전송

## 1.2. 로그인

- 일반 로그인
    - 이메일: 틀릴 경우 로그인 버튼 위에 ‘이메일 혹은 비밀번호를 잘못 입력하셨습니다.’경고문(alert)
    - 비밀번호: 틀릴 경우 로그인 버튼 위에 ‘이메일 혹은 비밀번호를 잘못 입력하셨습니다.’경고문(alert)
- 소셜 로그인
    - 소셜 로그인 버튼: 해당 소셜에 로그인이 안 되어 있을 경우 로그인 페이지로 이동.

## 1.3. 로그아웃

## 1.4. 마이페이지

- 마이페이지
    - 프로필
        - 프로필 이미지, 닉네임, 자기소개
        - 팔로워/팔로잉 목록 확인
    - 내가 작성한 레시피
    - 내가 쓴 게시물
- 회원 정보(프로필) 수정
    - 비밀번호/비밀번호 확인: 10~20자 영문, 숫자, 특수문자 사용가능 및  재확인 일치 여부
    - 닉네임: 중복확인 (버튼), 한글, 영문, 숫자 2자 이상 20자 내외
    - 프로필 이미지
- 팔로잉: 버튼 클릭 시 해당 계정 팔로잉
- 탈퇴하기

## 1.5. 비밀번호 찾기

- 비밀번호 찾기
    - 가입된 이메일로 새로운 비밀번호 발급

# 2. 레시피 게시판(메인)

## 2.1. 사이트 소개 모달

- 레시피를 읽어주고, 음성으로 제어가 가능하다는 내용
- 슬라이드 및 클릭으로 페이징 기능 구현

## 2.2. 레시피

- 글 작성
    - 사용자에게 가이드라인 제시 → 재료를 적을 수 있는 공간, 요리 중간 과정을 적을 수 있는 공간을 분리한다.
    - 사용자가 글 작성 할 수 있는 공간에 마우스를 올린 경우 + 버튼으로 텍스트를 추가할지 사진을 추가할지 선택 → 블럭으로 구분 할 수 있다.
    - 레시피 제목은 50자 까지 가능 (한글, 영어, 특수문자 포함)
    - 글 내용은 최대 10000자까지 가능
    - 10000자가 넘어가면 “더 이상 글을 작성할 수 없습니다” 라는 알림이 뜸
    - 사진은 최대 10장까지 첨부
    - 요리 태그 기능을 통해 분류할 수 있도록 함 (ex. 한식, 중식, 일식, 돈까스, 치킨 등)
    - 사진 위치 옮기기
    - 사진의 최대 크기는 가로 800, 세로 480 (추후 결정)
- 레시피 글
    - 음성 명령 or 버튼으로 재생 가능
    - 블럭을 재생할 때, 옵션을 선택할 수 있도록 (자동 재생, 재생 텀, 재생하고 대기, 반복 횟수)
    - 전체 재생을 선택한 경우 블럭을 선택 했을 때 그 블럭부터 레시피를 읽기
    - 구간 재생을 선택한 경우 블럭을 선택 했을 때 그 블럭만 레시피를 읽기
    - 음성 인식 결과 텍스트를 보여주는 Footer 구현
    - 명령어 미인식 시에 다시 명령해달라는 소리 재생 (추후 도전 과제로 타이핑으로 수정하기)
    - 명령어 종류
        - 요리 시작 / 대기
        이전 / 다음 재생 + 다시 재생
        횟수에 따라 건너뛰기 기능
        처음부터 다시 재생
        재료 확인
        볼륨 증가 / 감소
        타이머 기능 ( 타이머를 중첩 가능하게 구현 )
- 레시피 목록
    - 태그 별로 따로 모아서 볼 수 있어야함
    - 작성자를 확인 할 수 있음
    - 조회수 확인 가능
    - 추천수 확인 가능
    - 글 작성 시간 확인 가능

## 2.3 메인페이지

- 레시피 게시판의 글들을 검색할 수 있다. (검색 옵션으로 제목, 내용, 재료, 태그를 선택할 수 있다.)
- 미리 분류해 둔 태그(아이콘 사용)를 눌렀을 때 레시피 게시판으로 이동하며 분류한 태그를 기준으로 검색한 결과가 나옴
- 한달 동안의 추천 수 결과를 집계해서 베스트 레시피 목록을 띄워준다.
- 하루 동안 추천을 많이 받은 오늘의 레시피 목록을 띄워준다. (한 시간 간격으로 갱신)
- 커뮤니티별 게시글 5개씩 띄워준다. (맨 아래부분)

# 3. 커뮤니티(일반게시판)

## 3.1 커뮤니티 공통 사항

- 조회수 기능
- 회원이 아닌 유저도 조회 가능
- 회원인 경우에만 게시글을 추천
- 글 작성
    - 제목은 총 50자 (한글,영어, 특수 문자 포함)
    - 제목 미입력시 ‘제목을 입력하세요.’ 경고문
    - 글 내용은 총 10000자 (한글, 영어, 특수 문자 포함)
    - 글 내용 미입력시 ‘내용을 입력하세요.’ 경고문
    - 사진 업로드 가능 (최대 3개, 화면 크기에 맞게 이미지 사이즈 조정)
    - 회원만 작성할 수 있다
- 댓글 작성
    - 댓글은 총 500자 (한글, 영어, 특수 문자 포함)
    - 회원만 작성할 수 있다.
    - 대댓글 작성 가능

## 3.2 일반 게시물

## 3.3 공지사항

- 글 작성
    - 관리자만 가능
- 댓글 불가

## 3.4 요리자랑 게시물

- 사진 업로드 필수 (최대 3개, 화면 크기에 맞게 이미지 사이즈 조정)
- 게시판목록에서는 업로드된 사진을 썸네일로 하여 카드 형태로 보여진다.

# 4. 인공지능

## 4.1. 음성 인식

1. 저장되어있는 레시피 읽어주는 기능 (TTS)
    1. 레시피 작성할 때 존재하는 블럭 별로 list 안에 list 형태로 append 시킴 —> 이차원 list
    2. 완성된 list를 index 하나씩 읽어주도록 함
        - 일단 하나 읽고 멈춰야 함
        - 이후 특정 시간이 지나면 다음 index에 들어있는 것을 읽어주도록
        - (시간이 된다면) 해당 index에 들어있는 텍스트에 시간이 적혀있는 것(3분, 2분 30초)이 있다면 그 시간만큼 기다리는 시간을 설정할 수 있도록 → 자동으로 타이머 설정
    3. 읽을 때 나오는 목소리를 기존 목소리가 아닌 내 목소리를 입히기
2. 레시피 읽기를 시작할 때 / 레시피를 읽어주는 도중 사용자와 소통하는 기능 (STT)
    1. 모바일/태블릿 소리(볼륨) 부분과의 연동 확인
        
        —> 브라우저 내부 소리 부분이랑 연동할 수도 있으므로 확인해봐야 할 부분
        
    2. 명령어 설정
        - 레시피 읽기 시작할 때
            - 레시피 읽어줘! 등
        - 레시피를 읽어주는 도중
            - 멈춰! 기다려줘! 잠시만! 잠깐만! 다시 시작해줘! 한 단계 앞으로 돌아가줘!, 다음 단계로 넘어가줘!  볼륨 높여줘!, 볼륨 낮춰줘!, *분 타이머 설정해줘! 등
    3. 명령어 학습
        - 위에 적은 명령어들을 AI가 인지할 수 있도록 해당 음절, 단어 및 문장 학습
    4. 해당 명령어를 입력받을 시 나오는 반응 설정 및 반응 코딩
        - 레시피 읽어줘!: TTS를 통해 목소리가 나오기 시작함
        - 멈춰! 기다려줘! 잠시만! 잠깐만! : TTS를 통해 목소리가 나오던 것이 멈춤
        - 다시 시작해줘!: 멈춘 부분부터 레시피 읽어주기를 다시 진행함
        - 한 단계 앞으로 돌아가줘!: 현재 읽고 있는 index에서 한 단계 앞에 있는 index의 것을 읽어줌
            - 첫 index를 진행하던 중 해당 명령어 말할 시: “현재 첫번째 단계입니다” 음성
        - 다음 단계로 넘어가줘!: 현재 읽고 있는 index에서 한 단계 뒤에 있는 index의 것을 읽어줌
            - 마지막 index를 진행하던 중 해당 명령어 말할 시: “현재 마지막 단계입니다” 음성
        - 볼륨 높여줘!: 현재 설정된 볼륨에서 한 단계 더 높여준 후 *초 딜레이, 이후 다시 읽던 것 읽어줌
        - 볼륨 낮춰줘!: 현재 설정된 볼륨에서 한 단계 더 낮춘 후 *초 딜레이, 이후 다시 읽던 것 읽어줌
        - *분 타이머 설정해줘!: *분에 해당하는 타이머 설정한 후 시작되도록 함
            - 타이머가 다 됐을 경우 노래/소리 를 통해 알려줌

## 4.2. 텍스트 인식

1. 사진을 찍었을 때 그 사진에 존재하는 텍스트를 인식하여 저장(휘발성)
    1. 한글에 대하여 한글을 인식할 수 있도록 학습
    2. 모바일/태블릿 카메라와의 연동 확인
    3. 찍은 사진에 존재하는 텍스트 인식
    4. 인식한 텍스트를 휘발성 데이터로 저장
    5. 그 데이터를 갈무리하여 음성 인식의 TTS 부분을 실행시킴
        - 갈무리하는 방식
            - 아무렇게나 휘갈겨쓴 레시피는 갈무리하기 힘들 것으로 보임. 텍스트를 인식하더라도 String 형태로밖에 저장할 수 없을 듯
            - 따라서 특정 형태를 따라서 작성된 레시피의 텍스트를 인식하여 갈무리해야함
            - 특정 형태 예시
                
                
                ![제목 없음.png](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a914a6d0-14b0-4ea9-aaf0-b45ba5975ea1/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C.png>)
                
                ![제목 없음2.png](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ee722c74-9603-4b16-8081-1b74e48c1d65/%EC%A0%9C%EB%AA%A9_%EC%97%86%EC%9D%8C2.png>)
                
            - 한 줄 / 한 덩어리 당 하나의 list에 넣어서 데이터 list에 해당 list를 append시킴 —> 이차원 list

## 고객(일반 유저)

1. 메인페이지(비로그인)
    - 검색창
        - 
    - 카테고리(대분류)
        - ex
            
            ![Untitled](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/65174c35-9648-4787-888e-876ee9662bc3/Untitled.png>)
            
    - 베스트 게시글
    - 레시피 게시글
    - 커뮤니티 게시글
    - 팔로우한 유저 게시글
    - ex
        
        ![Untitled](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/dea3838f-ae69-45ed-b03d-43eb7a7daf38/Untitled.png>)
        
        ![Untitled](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a3c59840-343b-4b2b-afc9-63f1236344cd/Untitled.png>)
        
        ![Untitled](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c31848f7-5941-4b56-8ebc-e6034253c498/Untitled.png>)
        
        ![Untitled](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d376e871-bce2-4322-931e-436ee9ca951b/Untitled.png>)
        
        ![Untitled](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3b20ca11-c732-4895-a26b-c259a26f15f7/Untitled.png>)
        
2. 회원가입
    - 필수
        - 이메일(인증: 링크 타고 들어오는 방법), 비밀번호, 닉네임
        - 중복체크 (이메일, 닉네임)
        - 비밀번호 8~20, 영어 대소문자 + 특수문자
    - 추가
        - 생년월일, 전화번호 등
        - 개인정보 동의
3. 로그인
    - 필수
    - 추가
        - 소셜(구글/네이버/카카오)
4. 메인페이지(로그인)
    - 헤더 변경
        - 회원가입, 로그인 → 로그아웃, 프로필
5. 검색(메인페이지, 레시피 / 커뮤니티)
    - 검색 기준
        - 요리 재료 및 이름으로 검색
            - 글제목, 글내용에서 추출
    - 검색 목록
        - 검색어에 대한 검색 목록을 게시판 종류별로 표시
6. 레시피 게시글
    - ex
        
        ![Untitled](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b59b894c-02a5-42e1-ab9c-301af9a5e854/Untitled.png>)
        
        ![Untitled](<https://s3-us-west-2.amazonaws.com/secure.notion-static.com/065caae1-f892-4c84-8682-11af7c1f2cdb/Untitled.png>)
        
    - 작성자 마이페이지 조회
    - 추천, 비추천
    - 댓글( + 대댓글 1단계만)
        - 작성자 댓글 색 다르게?
        - 맨션기능
    - 신고
    - 레시피 읽어주기(가이드) 기능(AI)
    - 음성 봇 (기타 기능)
        - 명령 시동어 + 명령어
            
            ex) 메카현태 + 멈춰, 전단계, 등등
            
7. 커뮤니티 게시글
    - 공지
    - 잡담
        - 지도
        - 사진
    - 요리 자랑?
        - 인스타 느낌으로
8. 게시글 작성
    - 레시피
        - 양식 지정: 블럭 형식(문단 나눠서)
        - 사진 혹은 텍스트 작성 가능
    - 커뮤니티
        - 카테고리 양식 선택 (드롭다운)
        - 레시피 게시판의 정보를 가져와서 요리 자랑 할 때 같이 띄워줄 수 있음
9. 마이페이지
    - 내 정보 (패스워드, 닉네임, 프로필 이미지) 변경
    - 마이페이지 공개 범위 변경
    - 다른 사람들에게 과시 할 수 있는 정보 변경
    - 팔로우 한 사람들 목록을 보거나 변경
    - 팔로우 한 사람 목록에서 특정 인물을 클릭하면 그 사람의 마이페이지로 넘어감
    - 내가 작성한 글을 모아서 볼 수 있음 → 클릭시 해당 글로 넘어감 (공개로 설정했을 경우에도 다른 사람들이 내가 작성한 글을 볼 수 있음)
    - 타인의 마이페이지로 간 경우 (공개 되어있는 경우)
        - 그 사람의 팔로우 확인 가능
        - 그 사람이 작성한 글 목록 확인 가능
        - 마이 페이지에 작성한 자기소개와 같은 글 확인 가능

---

## 관리자

- 로그인
    - 사용자 테이블에 isauthor 컬럼 추가하여 그게 true 인 사용자가 관라지가 되는 것!
- 공지사항 게시판 공지사항을 올릴 수 있음
    - 공지사항이 추가된 경우 모든 사용자에게 알림이 간다
- 신고가 접수된 경우 관리자에게 알림이 온다.
- 신고 내역을 확인 할 수 있는 관리자 페이지에 접속할 수 있어야함
    - 신고 내역
        - 신고한 게시물의 제목 → 누르면 게시물로 이동
        - 신고 내용 → 무슨 이유로 신고를 했는지
        - 신고한 사람 → 정당하지 않은 경우 이 사람을 밴함
        - 신고 내용이 정당한 경우 유저를 밴할 수 있다.
- 관리자가 글을 삭제하기 보다는 블라인드 처리를 하고 블라인드 처리된 게시글은 관리자 페이지에서 따로 확인 가능
- 만약 잘못 블라인드 한 경우 다시 풀 수 있음.
- 유저 목록을 확인하고 밴 할 수 있음