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

이용 내역

설정

연습 기록
연습 기록

아직 연습 기록이 없어요

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

연습 기록

무엇을 올릴까요?

오늘 기록 0/3개

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

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

기록을 올리지 못했어요.
기록

이 시안 (v15 · 나만 보기)

지원자가 춤·보컬 연습을 남기고, 월 달력에서 기록한 날을 본다. 올린 기록은 본인만 볼 수 있다. 공개·동의 기능은 이번 시안에 없다. 이전 버전(공개 범위·동의 화면 포함)은 git 태그 v6-with-guardian-and-agency에 있다. 모든 데이터는 가짜다.

왼쪽 목록이나 화면 안 버튼으로 넘어간다.

흐름

  1. 마이 → 이용 내역 "연습 기록" → 홈(달력·고른 날 기록 목록).
  2. 홈에서 날짜를 고르면 그 날이 7일 안일 때 버튼이 "10월 25일 기록 올리기"로 바뀐다.
  3. 올리기 → 종류(영상·유튜브 링크·사진·오디오·글) → 파일 고르기 또는 링크 붙여넣기 → 태그(춤·보컬)·연습한 날·메모 → 저장 → 완료. 정보 입력 맨 아래에 "나만 볼 수 있어요" 표시.
  4. 고른 날에 이미 3개가 있으면 "하루 3개" 안내가 뜬다.
  5. 기록 상세 → ⋯ 메뉴에서 수정·삭제.
  6. 오류: 500MB 초과, 업로드 실패(다시 올리기), 빈 상태.

올리기 완료: 무대와 객석 (v10)

기본 규칙: 한 달이 공연 1회다. 좌석 1개는 그 달의 하루(10월 31석)이고, 기록이 1개 이상인 날이면 귀여운 관객(머리+어깨, 상자 없음)이 앉는다. 관객은 머리 크기·톤·머리카락이 조금씩 다르고, 가만히 있을 때도 아주 작게 웅성웅성 흔들린다. 빈 자리는 흐린 점 하나다. 하루에 몇 개를 올려도 좌석은 1개다. 앞줄(무대 쪽)부터 1일이다. "연속 n일"은 오늘(없으면 어제)부터 거꾸로 센다. 무대 카드를 누르면 달력으로 간다.

단계이름기록한 날무대
Lv.1연습실0-4일조명 1개
Lv.2소극장5-11일조명 2개
Lv.3공연장12-19일조명 3개
Lv.4콘서트홀20일 이상 (주 5일 정도)조명 3개 + 금빛 무대 테두리

"다음 단계(이름)까지 n석"은 다음 기준(5, 12, 20)에서 현재 기록한 날 수를 뺀 값이다. 콘서트홀부터는 "만석까지 n석"을 보여 준다. 만석(그 달 모든 날 기록)은 단계가 아니라 별도 보너스이고, 콘서트홀에 필요하지 않다. 만석이 되면 "최고 단계 · 만석 달성"이 뜬다.

한 줄 안내 규칙: 좌석 수·연속 일수 바로 아래에 한 줄만 보인다. 위에서부터 먼저 맞는 것 하나만 쓴다. 단계가 오르거나 만석이 되는 순간에는 단계 이름·좌석 수와 같은 순간(1.1초)에 나타난다. 왼쪽 목록의 "문구 ①~⑩"로 각각 볼 수 있다.

순서조건문구
1만석만석 달성! 이번 달 최고의 무대였어요
2오늘 단계가 오름{새 단계} 오픈! 다음 무대는 {다음 단계}({기준}석) · 콘서트홀: 콘서트홀 오픈! 이제 만석에 도전해요
3다음 단계(콘서트홀이면 만석)까지 1-2석{다음}까지 단 {n}석! 내일 한 번만 더 올려요
4이전 기록과 3일 이상 간격(새 좌석)다시 왔군요! 관객이 기다리고 있었어요
5이번 달 첫 기록첫 관객 입장! 내일도 무대에 서 볼까요?
6연속 3일 이상연속 {n}일째 무대! 관객이 점점 늘고 있어요
7이미 기록이 있던 날에 또 저장(3개 미만, 좌석은 그대로)오늘 두 번째 무대! 하루 3개까지 남길 수 있어요 (두/세 번째)
8그 날이 3/3개가 됨 (7보다 먼저 검사)오늘은 여기까지! 내일 또 객석을 채워요
9지난 날짜에 저장지난 날 빈자리를 채웠어요
10그 밖이번 달 만석까지 {남은}석 남았어요

관객 섞기(v13): 완료 화면을 보여 줄 때마다 관객 모양이 새로 섞인다(한 번 보는 동안은 그대로, 좌석 수와 켜진 좌석은 같다). 켜진 관객의 30-40%는 응원봉을 들고 왼쪽에서 오른쪽으로 물결치듯 흔든다. 10-15%는 피켓("♡", "최고!", "앵콜", "LOPI", "화이팅")이나 둘이 같이 든 현수막("LOPI 화이팅", "최고! 앵콜")을 든다: 5석 이상이면 1개 이상, 만석이면 3개 이상이고 밝은 바탕에 검정 글씨다. 춤추는 사람은 어깨·팔꿈치·골반·무릎 관절이 있는 인형이 2초 8박 안무를 이어서 춘다(팔을 번갈아 올리고 팔꿈치가 한 박 늦게 따라오며 골반이 흔들리고 한 발씩 뻗음). 가수도 같은 인형으로 가볍게 흔들린다. 움직임 줄이기 설정이면 한 자세로 멈춘다.

사람 모양: 관객은 톤 6가지(라임·연한 라임·짙은 라임·민트·라벤더 회색·웜 그레이), 머리 6가지(짧은 머리·삐죽머리·긴 머리·말총·똥머리·양갈래), 소품 4가지(모자·헤드폰·응원봉·손 든 사람), 머리 크기 3가지, 어린이·키 큰 사람으로 날짜마다 정해진다. 무대 위 공연자는 방금 저장한 기록의 태그를 따른다: 춤은 팔·다리를 번갈아 뻗는 댄서(자세 2개 반복), 보컬은 마이크를 들고 몸을 흔들며 한 손을 뻗는 가수(음표가 떠오름), 둘 다면 둘이 같이 서는 듀엣이다. 만석 커튼콜 때는 인사한다. 움직임 줄이기 설정이면 고정 자세다.

움직임(transform·opacity만, 레이아웃 이동 없음). 보통 약 2초: 조명 빔이 바깥에서 무대로 쓸어 오고, 오늘 좌석이 팝으로 켜지고, 가까운 관객이 박수(바운스)를 친다. 단계가 오르면 배지가 튀고 이름과 다음 목표 문구가 같이 바뀐다("레벨 업! 연습실 → 소극장"). 만석이 되는 순간 약 3초: 커튼이 닫혔다 열리고, 어두운 바탕에 라임 글씨의 "만석!" 배지(대비 15:1)와 색종이, 연습생 인사. 이미 찬 날에 올리면 객석은 그대로이고 움직임도 없다. 움직임 줄이기 설정이면 웅성웅성·이동·색종이 없이 새 좌석만 0.15초 페이드로 보인다.

미리 보기: 왼쪽 목록의 "완료 · 레벨 업(4→5일) / 공연장 진입(11→12일) / 콘서트홀 진입(19→20일) / 보컬 기록(가수) / 춤+보컬 기록(듀엣) / 만석 보너스 커튼콜(30→31일)"를 누르면 그 상태가 처음부터 재생된다. 다시 보려면 같은 항목을 다시 누른다. 만석 미리보기는 10월 31일에 저장했고 31일 전부 기록한 상태(연속 31일)로 가정한다. 다른 미리보기도 저장한 날까지만 좌석이 찬다.

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

마이 탭은 프로필 카드 → 내 오디션 영상(있을 때만) → 메뉴 순서다(lopi-app/screens/my-screen.tsx:20-57). 메뉴는 "이용 내역"과 "설정" 두 섹션이고 아이콘 없이 글과 오른쪽 화살표만 둔다(lopi-app/src/my/components/my-menu.tsx:73-130). "연습 기록"은 이용 내역 첫 줄에 넣었다.

업로드 제한

항목값출처·결정
영상 용량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
하루 개수최대 3개 (모든 종류 합산, 연습한 날 기준)민경문 결정 5
지난 날짜오늘 포함 7일 전까지민경문 결정 4
사진·오디오 용량검사 없음 (확인 필요)profile-upload-button.tsx:107-109, audition-apply-audio.tsx:123-124

레퍼런스

Mobbin(iOS) v7 검색어: private video diary app entries list. 이전 버전 검색어는 그대로 유효(달력·유튜브 링크·업로드 폼).

앱 · 화면가져온 것
Journal · All Entries내 기록 목록: 카드마다 제목·날짜·⋯ 메뉴.
Notion · 영상 보기 (Private)상세 헤더 제목 아래 "Private" 작은 표시.
Hypelist · Diary월 달력에서 기록한 날 표시.
Life Reset · Journey사진·영상 기록을 날짜별로 쌓는 모양.

이전 버전 레퍼런스: Weverse·pliability·Tonal·BeReal(달력), Weverse·Digg·Blinkist(링크 입력).

스타일 출처 (lopi-app)

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

데이터 모양 제안

PracticeLog

  • id, userId, practicedOn (DATE · 달력·하루 3개 기준), createdAt
  • kind (VIDEO | YOUTUBE | PHOTO | AUDIO | TEXT)
  • fields (DANCE | VOCAL), memo
  • status (UPLOADING | READY | FAILED), deletedAt
  • 조회는 userId가 본인일 때만. 제약: (userId, practicedOn)마다 READY·UPLOADING 3개까지 — 서버가 막는다. practicedOn ≥ 오늘−7일(KST).

PracticeLogMedia

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

정해 주실 것 (남은 것만)

  1. 하루 3개의 기준일: 시안은 "연습한 날" 기준이다. "올린 날" 기준으로 할지.
  2. 탈퇴 시 기록: 회원 탈퇴하면 연습 기록 파일을 바로 지울지, 일정 기간 보관할지.
  3. 유튜브 비공개 영상: 재생 실패 안내를 앱 안에서 어떻게 보여 줄지(시안은 상세 화면 배너).