9:41
Profile
김로피보컬 · 댄스 · 서울

이용 내역

설정

연습 기록
연습 기록

아직 연습 기록이 없어요

연습한 날 영상·유튜브 링크·사진·오디오·글을 남기면
달력에 그날이 표시돼요.

연습 기록

무엇을 올릴까요?

오늘 기록 0/3개

유튜브 링크
기록 올리기
연습 기록
영상 고르기
연습 기록
10월 27일 (화)
고음 구간 녹음
올리지 못했어요 · 인터넷 연결을 확인해 주세요

기록 하나에는 파일 하나를 올려요. 실패한 기록은 파일을 다시 고르지 않고 다시 올릴 수 있어요. 실패한 기록은 하루 3개에 세지 않아요.

기록을 올리지 못했어요.
기록
공개 범위
보호자 동의
휴대전화 본인인증

본인인증 업체 화면 자리(업체 미정). 보호자 본인 명의 휴대전화로 인증해요.

통신사
02:41

로피는 인증 결과(이름 일치·성인 여부·인증 시각·거래 번호)만 받아 보관해요. 휴대전화 번호와 생년월일은 저장하지 않는 것을 기본으로 해요(확인 필요).

보호자 동의

이 시안 (v2)

지원자가 춤·보컬 연습을 남기고, 월 달력에서 기록한 날을 본다. 공개 범위는 3단계(나만 보기 / 지원한 소속사만 / 스카우트용 공개)이고, 단계마다 따로 동의를 받는다. 피드백 기능은 없다.

왼쪽 목록이나 화면 안 버튼으로 넘어간다. "시안 조건"으로 공개 범위와 만 14세 미만 흐름을 바꿔 볼 수 있다. 모든 데이터는 가짜다.

v1에서 바뀐 것 (민경문 결정, 2026-10-27)

  • 잔디·연속 일수 → 월 달력. 기록한 날에 점(개수만큼, 최대 3개), 날짜를 누르면 그날 기록 목록. 연속 일수 숫자는 뺐고 "이번 달 n일 기록" 한 줄만 작게 둔다.
  • 유튜브 링크 종류 추가: 링크 붙여넣기 → 미리보기 → 태그·날짜·메모. 길이 제한 없음.
  • 진입점: 마이 → 이용 내역 첫 줄 "연습 기록".
  • 지난 날짜는 7일 전까지. 하루 기록 최대 3개, 4번째 시도 때 안내 화면.
  • 공개 범위에 스카우트용 공개 추가. 범위별 별도 선택 동의.
  • 보유·이용 기간 문구: "회원 탈퇴 또는 동의 철회 시까지 (소속사 공개는 철회 즉시 중단)".
  • 만 14세 미만: 이메일 요청·대기 흐름을 뺐다. 기본 나만 보기만 가능, 소속사·스카우트 공개는 보호자 휴대전화 본인인증 뒤 보호자가 직접 동의.

흐름

  1. 마이 → 이용 내역 "연습 기록" → 홈(달력·고른 날 기록 목록).
  2. 홈에서 날짜를 고르면 그 날이 7일 안일 때 버튼이 "10월 25일 기록 올리기"로 바뀐다. 7일이 지난 날을 고르면 "오늘 기록 올리기"로 돌아간다.
  3. 올리기 → 종류(영상·유튜브 링크·사진·오디오·글) → 파일 고르기 또는 링크 붙여넣기 → 태그(춤·보컬)·연습한 날(최근 8일 칩, 날마다 n/3 표시)·메모·공개 → 저장 → 완료.
  4. 고른 날에 이미 3개가 있으면 종류 시트 대신 "하루 3개" 안내가 뜬다. 정보 입력에서 3개가 찬 날을 고르면 저장 버튼이 꺼지고 빨간 안내가 나온다.
  5. 공개 범위 → 단계 선택 → 그 단계의 동의 화면(받는 곳·목적·항목·보유 기간·거부 권리, 체크 해제가 기본) → 공개. 넓은 단계(스카우트)에서 좁히면 넓은 단계 동의는 철회로 남긴다.
  6. 만 14세 미만: 단계 선택 → 동의 내용 → 보호자 확인 안내(가입 때 등록한 보호자 표시) → 보호자 휴대전화 본인인증 → 보호자 동의 → 공개.
  7. 오류: 500MB 초과(기존 모달 문구 + "긴 영상은 유튜브 링크로" 한 줄), 업로드 실패(다시 올리기), 빈 상태.

진입점: 마이 화면 (로피 코드에서 확인)

마이 탭은 프로필 카드 → 내 오디션 영상(있을 때만) → 메뉴 순서다(lopi-app/screens/my-screen.tsx:20-57). 메뉴는 "이용 내역"(오디션 지원 내역·결제 내역)과 "설정"(내 정보·비밀번호 변경·공지사항·고객센터·로그아웃·회원탈퇴) 두 섹션이고, 아이콘 없이 글과 오른쪽 화살표만 둔다(lopi-app/src/my/components/my-menu.tsx:73-130). 저장소 기준 커밋 7b7b574b.

"연습 기록"은 내가 쌓는 활동 기록이라 이용 내역 섹션 첫 줄에 넣었다. 새 섹션·아이콘은 만들지 않았다. 처음 알리는 "NEW" 표시 하나만 brand 색으로 둔다.

업로드 제한

항목값출처·결정
영상 용량500MB 초과 금지 (10진 MB)lopi-app/src/profile/components/use-profile-video-upload-button.ts:38, 검사 :189·:259
영상 길이제한 없음 (기존대로)민경문 결정 5. 프로필 영상 경로에 길이 검사 없음
영상 처리올리기 전 H.264, 긴 변 1920pxlopi-app/utils/video-upload-compression.ts:6-8
유튜브 링크길이·용량 제한 없음. youtube.com/watch, youtu.be, shorts 주소만 받음민경문 결정 2. 파일을 받지 않아 R2 저장 비용 없음
하루 개수최대 3개 (모든 종류 합산, 연습한 날 기준). 4번째는 안내 화면민경문 결정 5
지난 날짜오늘 포함 7일 전까지민경문 결정 4
초과 안내 문구"파일 크기가 너무 큽니다." 기존 문구 그대로lopi-app/locales/ko.json:627-629
사진·오디오 용량검사 없음 (확인 필요)v1과 같음. profile-upload-button.tsx:107-109, audition-apply-audio.tsx:123-124

레퍼런스

Mobbin 검색어(v2, 3회, 2026-10-27): monthly calendar log screen with dots on days that have entries and list of entries for selected day, paste YouTube link screen showing video thumbnail preview before posting(결과 0건), add link screen with pasted URL and video thumbnail preview card. v1 검색 7회는 그대로 유효(공개 범위·업로드 폼).

앱 · 화면가져온 것
Weverse · Calendar월 달력 + 날짜 아래 작은 점(개수만큼) + 아래에 고른 날 목록. 같은 K-pop 사용자층이 익숙한 모양.
pliability · 기록 달력고른 날을 brand 비슷한 연두 원으로 채우는 방식. 로피 brand #BEF264와 맞아 그대로 따랐다.
Tonal · 월 달력점 하나로 "한 날"을 알리고 숫자는 그대로. 연속 일수 없이도 꾸준함이 보인다.
BeReal · Memories Calendar어두운 바탕 달력의 대비. 연속 표시(불꽃)는 쓰지 않았다(결정 1).
Weverse · Add URL링크 입력칸 아래 바로 미리보기 카드(썸네일·제목·출처).
Digg · Add a link block입력칸 오른쪽 지우기(×), 큰 썸네일 + 제목 카드.
Blinkist · Paste a link빈 입력칸 오른쪽 "붙여넣기" 버튼.
Facebook · Who can see your future posts(v1) 질문형 제목 + 라디오 한 줄 설명 → 3단계 공개 범위.

스타일 출처 (lopi-app, v1과 같음)

  • brand #BEF264(tailwind.config.js), 카드 #161616 rounded-xl, 주 버튼 50px 둥근 brand 바탕 검정 글씨(ui/animated-button.tsx:50).
  • 마이 화면: 제목 "Profile" Outfit 28/500(my-screen.tsx:31-35), 섹션 제목 22px semibold·줄 15px·화살표 white/50(my-menu.tsx:40-66), 회원탈퇴 흐리게(:19-20).

데이터 모양 제안

PracticeLog

  • id, userId, practicedOn (DATE · 달력·하루 3개 기준), createdAt
  • kind (VIDEO | YOUTUBE | PHOTO | AUDIO | TEXT)
  • fields (DANCE | VOCAL), memo
  • visible (기록별 숨기기, 기본 true — 공개 단계는 사람 단위)
  • status (UPLOADING | READY | FAILED), deletedAt
  • 제약: (userId, practicedOn)마다 READY·UPLOADING 3개까지 — 앱이 아니라 서버가 막는다. practicedOn ≥ 오늘−7일(KST).

PracticeLogMedia

  • 파일: fileUrl(R2), mimeType, sizeBytes, durationMs, thumbnailUrl
  • 유튜브: youtubeVideoId(11자), 원래 URL, title·thumbnailUrl(oEmbed로 받은 값, 표시용 캐시). 파일은 저장하지 않는다.

동의는 사람·범위 단위

  • PracticeShareConsent (append-only): userId, scope (APPLIED | SCOUT), kind (AGREE | WITHDRAW), agreedBy (SELF | GUARDIAN), guardianVerificationId?, textVersion, screen, appVersion, at.
  • GuardianVerification: userId, method (PHONE_IDV), 업체 거래 번호, nameMatched, isAdult, verifiedAt. 휴대전화 번호·생년월일·CI는 저장하지 않는 것을 기본으로(확인 필요).
  • 현재 공개 단계 = 철회되지 않은 가장 넓은 scope. 나만 보기를 고르면 남은 범위 모두 WITHDRAW 행.
  • PracticeLogView: logId, agencyId, scope, viewedAt — 소속사 열람 기록.

정해 주실 것 (남은 것만)

이번 결정으로 닫힌 것: 진입점, 지난 날짜 7일, 영상 길이·하루 개수, 소속사가 보는 범위(3단계), 보유 기간 문구.

  1. 스카우트용 공개에서 소속사가 보는 프로필 항목과 연락 방법: 연습 기록만 보이면 누구인지 알 수 없다. 이름·나이·프로필 사진·활동 지역 중 무엇을 같이 보일지, 소속사가 어떻게 연락하는지(로피 안 메시지 등). 동의 화면 "항목" 칸이 이 결정에 따라 바뀐다.
  2. 철회 뒤 이미 본 기록: 소속사 쪽 다운로드를 막을지, 이미 내려받은 파일의 파기를 소속사 계약으로 요구할지.
  3. 보호자 휴대전화 본인인증 업체와 비용: 지금 코드에 연동이 없다. 업체 선택과 건당 비용, 인증 결과 중 무엇을 저장할지(시안 기본: 이름 일치·성인 여부·거래 번호만).
  4. 하루 3개의 기준일: 시안은 "연습한 날" 기준이다. "올린 날" 기준으로 할지.
  5. 만 14~18세: 법은 본인 동의를 인정하지만, 미성년 연습 영상을 모든 소속사(스카우트)에 보이는 일이라 보호자 알림을 더할지.
  6. 소속사 화면에서 늦게 올린 기록 표시: 연습한 날과 올린 날이 다를 때(최대 7일) 소속사에게도 "나중에 올림"을 보일지.