Skip to content

Latest commit

 

History

History
576 lines (413 loc) · 19.3 KB

File metadata and controls

576 lines (413 loc) · 19.3 KB

Today PRD v0.2

항목 내용
상태 UI 프로토타입 기준 초안
작성일 2026-07-14
제품 형태 Tauri 기반 데스크톱 우선 앱
핵심 대상 계획을 자주 미루고, 가까운 사람과 함께할 때 실행력이 높아지는 개인 사용자

1. 제품 정의

한 문장 정의

오늘 해야 할 일을 명확히 정하고, 미완료 항목을 반드시 다시 결정하며, 가까운 사람과 약속 결과를 공유해 실행을 이어가는 소셜 투두 앱.

핵심 차별점

Today의 차별점은 투두 목록, 잔디, 일기 자체가 아니다.

  1. 하루 최대 3개의 핵심 약속을 사전에 정한다.
  2. 완료하지 못한 항목을 자동 복사하지 않고 다시 결정한다.
  3. 총 완료 개수가 아니라 약속 이행률과 일관성을 기록한다.
  4. 공개 피드보다 2~5명의 비공개 책임 그룹에 집중한다.
  5. 실패를 처벌하지 않고 다음 행동으로 연결한다.

2. 문제 정의

경쟁 제품에 소셜 기능이 없다는 것이 문제가 아니다. 소셜 반응이 사용자의 사전 약속, 실행 결과, 다음 날 재계획으로 충분히 연결되지 않는 것이 문제다.

Today가 해결할 문제는 다음과 같다.

  • 사용자가 투두 앱을 열어도 무엇부터 적을지 결정하기 어렵다.
  • 전날의 미완료 항목이 오늘 목록에 쌓이거나 과거 기록으로 방치된다.
  • 단순 체크 개수는 계획의 품질이나 지속적인 행동 변화를 보여주지 못한다.
  • 친구의 활동을 보는 것과 실제 책임감을 느끼는 것 사이에 간극이 있다.
  • 계획, 실행 결과, 회고가 서로 분리되어 있다.

3. 제품 가설

사용자가 매일 1~3개의 핵심 약속을 정하고, 미완료 항목을 명시적으로 재결정하며, 가까운 사람과 결과를 공유하면 일반 체크리스트보다 계획 이행률과 지속 사용률이 높아질 것이다.

검증해야 할 세부 가설:

  • 작성 가이드가 첫 할 일 작성 시간을 줄인다.
  • 약속을 3개로 제한하면 과도한 계획이 줄어든다.
  • 이월함이 미완료 항목의 장기 방치를 줄인다.
  • 소규모 그룹의 응원과 제한된 리마인드가 실행률을 높인다.
  • 약속 이행률 중심의 기록이 단순 완료 개수보다 의미 있는 성취감을 준다.

4. 목표와 제외 범위

MVP 목표

  • 사용자가 앱 실행 후 15초 안에 첫 할 일을 작성할 수 있다.
  • 사용자가 오늘의 핵심 약속을 최대 3개로 정할 수 있다.
  • 모든 미완료 약속이 완료, 미룸, 포기 중 하나로 종료된다.
  • 사용자가 현재 스트릭과 주간 일관성을 바로 이해할 수 있다.
  • 사용자가 가까운 사람과 선택한 약속만 공유할 수 있다.

MVP 제외 범위

  • 공개 SNS 피드
  • 일반 메신저 수준의 채팅
  • AI 자동 계획 및 AI 일기
  • 팀 프로젝트 관리
  • 노션 수준의 문서 편집기
  • 대규모 그룹과 공개 챌린지
  • 복잡한 포인트 및 보상 시스템
  • 캘린더 양방향 동기화

5. 목표 사용자

1차 사용자

  • 18~34세 학생, 취업 준비생, 주니어 직장인
  • 투두 앱을 설치했지만 1~2주 내 중단한 경험이 있는 사람
  • 많은 기능보다 오늘 할 일을 명확히 정하는 것이 중요한 사람
  • 친구, 연인, 스터디원과 함께할 때 실행력이 높아지는 사람
  • 계획을 자주 미루지만 미룬 일을 관리하는 체계가 없는 사람

우선하지 않는 사용자

  • 조직 단위의 승인과 권한 관리가 필요한 사용자
  • 칸반, 간트 차트, 업무 의존성이 필요한 팀
  • 공개 SNS 활동 자체가 목적인 사용자
  • 복잡한 프로젝트 포트폴리오를 관리하려는 사용자

6. 제품 원칙

Today First

앱을 열면 과거 통계보다 오늘 해야 할 행동이 먼저 보인다.

미완료 항목을 방치하지 않는다

미완료 항목은 다음 날 자동 복사하지 않는다. 사용자가 오늘 하기, 날짜 변경, 언젠가 하기, 포기 중 하나를 고른다.

약속의 품질을 기록한다

아무 항목 하나를 완료해 유지되는 스트릭이 아니라 미리 정한 핵심 약속을 기준으로 계산한다.

가까운 책임감에 집중한다

불특정 다수의 경쟁보다 2~5명의 가까운 관계를 우선한다.

실패를 처벌하지 않는다

실패 경고보다 실패 이유와 다음 행동을 정리하도록 돕는다.

기본값은 비공개다

할 일, 일기, 이미지의 공개 범위 기본값은 나만 보기다.

7. 핵심 행동 루프

빠른 작성
  → 오늘의 약속 1~3개 선택
  → 실행 및 상태 변경
  → 선택적 친구 공유와 반응
  → 하루 종료 시 미완료 항목 재결정
  → 기록 확인
  → 다음 날 다시 계획

MVP는 이 루프가 반복되는지 검증하는 데 집중한다.

8. 정보 구조

주요 내비게이션

  1. Today
  2. 친구
  3. 기록
  4. 일기
  5. 내 정보

데스크톱에서는 좌측 레일, 좁은 창에서는 하단 내비게이션을 사용한다.

화면 우선순위

Today

  1. 날짜와 현재 스트릭
  2. 빠른 입력
  3. 오늘의 약속 최대 3개
  4. 이월함
  5. 일반 할 일
  6. 친구 활동 요약

기록

  1. 연간 활동 히트맵
  2. 현재 및 최장 스트릭
  3. 주간 일관성
  4. 카테고리별 완료율
  5. 미룬 횟수와 자주 실패하는 요일
  6. 계획 대비 실제 집중 시간

친구

  1. 책임 그룹 목록
  2. 오늘 공개된 약속
  3. 완료 여부와 주간 일관성
  4. 응원, 축하, 허용된 리마인드

9. 기능 요구사항

P0 — 핵심 MVP

빠른 입력

  • 앱 실행 후 한 번의 탭으로 입력을 시작한다.
  • 빈 입력창 대신 상황별 작성 가이드를 제공한다.
  • 최근 카테고리와 자주 작성한 항목을 제안한다.
  • 자연어 날짜 해석은 백엔드 연동 이후 검토한다.

작성 가이드 예시:

  • 오늘 끝내면 마음이 가장 가벼워질 일은?
  • 10분 안에 끝낼 수 있는 일은?
  • 어제 미룬 일 중 하나만 처리한다면?
  • 오늘 반드시 지켜야 하는 약속은?

오늘의 약속

  • 하루 최대 3개까지 지정한다.
  • 일반 할 일보다 시각적으로 먼저 보인다.
  • 약속 지정 시점과 결과를 기록한다.
  • 공개 범위를 항목별로 선택한다.
  • 상태는 예정, 진행 중, 완료, 미룸, 포기를 지원한다.

이월함

전날 미완료 항목은 오늘 목록에 자동으로 섞이지 않고 이월함에 보인다.

선택 결과
오늘 하기 오늘 목록으로 이동
날짜 변경 지정 날짜에 다시 노출
언젠가 하기 백로그로 이동
포기 선택적으로 이유 기록

이월함을 처리하지 않아도 새 할 일을 작성할 수 있다.

약속 스트릭

  • 미리 정한 핵심 약속을 모두 이행한 연속 일수다.
  • 사전에 설정한 휴식일은 스트릭을 끊지 않는다.
  • 오늘의 약속이 미결정 상태라면 전날까지의 스트릭을 유지한다.
  • 미룸 또는 포기로 종료된 날은 완료 스트릭에 포함하지 않는다.

주간 일관성

완료한 핵심 약속 수 ÷ 계획한 핵심 약속 수 × 100
  • 결과는 0~100% 정수로 표시한다.
  • 친구 비교에는 총 완료 개수가 아니라 일관성을 사용한다.

연간 활동 히트맵

  • 기본 색상은 핵심 약속 이행률을 뜻한다.
  • 날짜별 계획 수와 완료 수를 확인할 수 있다.
  • 카테고리, 완료 개수, 집중 시간, 일기 작성일 필터는 후속 범위다.
  • 단순 앱 실행 여부는 활동으로 계산하지 않는다.

책임 그룹

  • 한 그룹은 2~5명으로 제한한다.
  • 오늘 공개한 약속, 완료 여부, 스트릭, 주간 일관성을 공유한다.
  • 응원, 완료 축하, 제한된 리마인드를 지원한다.
  • 사용자가 리마인드 허용 시간과 하루 횟수를 정한다.

개인정보

공개 범위는 나만 보기, 특정 책임 그룹, 모든 친구를 지원한다. 기본값은 나만 보기다.

P1 — MVP 이후

  • 반복 루틴
  • 한 줄 회고와 마크다운 일기
  • 할 일별 집중 타이머
  • 완료 사진 및 이미지 첨부
  • 데이터 내보내기
  • 시스템 알림

P2 — 장기 범위

  • AI 할 일 분해 및 추천
  • AI 일기 초안
  • 공개 피드와 대규모 크루
  • 공동 챌린지
  • 캘린더 동기화
  • 위젯과 워치 앱

10. 상태 모델

할 일 상태

상태 의미
planned 예정된 할 일
in_progress 실행 중
completed 완료
deferred 다른 시점으로 미룸
abandoned 포기

약속 결과

결과 의미
미결정 하루가 끝나지 않았거나 아직 정리하지 않음
완료 약속 이행
미룸 다음 행동을 다시 정함
포기 하지 않기로 명시적으로 결정

핵심 규칙

  • 한 날짜의 약속 슬롯은 1~3뿐이다.
  • 약속 지정 후 변경 내역은 기록에서 보존한다.
  • 미룸과 포기는 올바른 정리 행동이지만 완료 스트릭에는 포함하지 않는다.
  • 같은 상태 변경 요청은 중복 실행되어도 결과가 달라지지 않아야 한다.

11. 핵심 사용자 흐름

첫 사용

  1. 사용 목적 선택: 공부, 운동, 생활, 업무
  2. 오늘 해결할 일 하나 입력
  3. 첫 번째 오늘의 약속 지정
  4. 완료 확인 시간을 선택
  5. 친구 초대는 건너뛸 수 있음
  6. Today 화면 진입

아침 계획

  1. Today 진입
  2. 이월 항목 확인
  3. 새 할 일 작성
  4. 약속 최대 3개 선택
  5. 공개 여부 선택

실행

  1. 상태를 진행 중으로 변경
  2. 완료 처리
  3. 선택적으로 사진 또는 한 줄 기록 추가
  4. 친구 반응 확인

하루 종료

  1. 미완료 약속 확인
  2. 완료, 미룸, 포기 중 하나로 종료
  3. 선택적으로 한 줄 회고 작성
  4. 오늘의 일관성 확인
  5. 다음 날 이월함에 필요한 항목만 보냄

12. UI/UX 요구사항

디자인 방향

  • 차갑고 업무 도구 같은 인상보다 따뜻하고 차분한 개인 도구를 지향한다.
  • 밝은 배경과 세이지 계열의 핵심 색상을 사용한다.
  • 정보 밀도는 낮추되 핵심 약속은 일반 할 일보다 분명하게 강조한다.
  • shadcn/ui 컴포넌트를 기반으로 하되 기본 예제 디자인을 그대로 복제하지 않는다.
  • 긴 애니메이션보다 빠른 상태 피드백을 우선한다.

반응형 기준

  • 최소 창 너비: 320px
  • 기본 Tauri 검증 크기: 800×600
  • 640px 이상: 좌측 내비게이션 레일
  • 640px 미만: 하단 내비게이션
  • 핵심 입력과 약속 목록은 모든 크기에서 첫 화면에 최대한 유지한다.

접근성

  • 모든 아이콘 버튼에 접근 가능한 이름을 제공한다.
  • 키보드만으로 주요 흐름을 완료할 수 있어야 한다.
  • 포커스 표시를 제거하지 않는다.
  • 색상만으로 완료, 미룸, 포기 상태를 구분하지 않는다.
  • 운영체제 글자 크기와 대비 설정을 고려한다.

필수 UI 상태

  • 첫 사용 빈 상태
  • 할 일이 없는 오늘
  • 약속 3개가 모두 채워진 상태
  • 미완료 항목이 있는 상태
  • 모든 약속을 완료한 상태
  • 네트워크 없음 및 재시도 상태
  • 데이터 로딩 상태
  • 권한 없음 및 비공개 상태

13. 기능 승인 기준

ID 승인 기준 우선순위
TASK-01 2탭 이내에 새 할 일을 만들 수 있다. P0
TASK-02 예정, 진행 중, 완료, 미룸, 포기 상태를 표현한다. P0
TASK-03 미완료 항목은 다음 날 이월함에 표시된다. P0
COMMIT-01 하루 최대 3개의 약속만 지정할 수 있다. P0
COMMIT-02 약속 지정 이후의 변경 내역을 보존한다. P0
STREAK-01 휴식일을 건너뛰어 스트릭을 계산한다. P0
STREAK-02 미결정인 오늘은 기존 스트릭을 즉시 끊지 않는다. P0
HISTORY-01 365일의 약속 이행률을 히트맵으로 표시한다. P0
SOCIAL-01 항목별 공개 범위를 선택할 수 있다. P0
SOCIAL-02 책임 그룹 인원을 5명으로 제한한다. P0
SOCIAL-03 리마인드 시간과 횟수를 사용자가 제한한다. P0
A11Y-01 아이콘 버튼이 접근 가능한 이름을 가진다. P0
A11Y-02 키보드로 핵심 행동 루프를 완료할 수 있다. P0

14. 성공 지표

North Star Metric

주간 책임 실행 사용자 수

다음 조건을 모두 충족한 사용자 수:

  • 한 주에 4일 이상 핵심 약속을 설정한다.
  • 약속을 완료, 미룸, 포기 중 하나로 명확히 종료한다.
  • 미결정 상태로 장기간 방치하지 않는다.

초기 베타 목표

지표 목표 가설
첫 할 일 작성 완료율 80% 이상
첫 할 일 작성 중앙 시간 15초 이하
D1 유지율 55% 이상
D7 유지율 35% 이상
D30 유지율 15% 이상
24시간 내 이월 항목 정리율 60% 이상
주 4일 이상 약속 설정 비율 WAU의 35% 이상
소셜 기능 주간 참여율 WAU의 25% 이상
푸시 알림 차단률 15% 이하

목표값은 시장 평균이 아니라 초기 제품 가설이며 베타 결과에 따라 조정한다.

15. 분석 이벤트

초기 검증에 필요한 최소 이벤트만 수집한다.

이벤트 주요 속성
task_created 입력 경로, 작성 소요 시간
commitment_declared 슬롯, 공개 범위
commitment_resolved 완료, 미룸, 포기
rollover_decided 오늘, 날짜 변경, 언젠가, 포기
group_reaction_sent 응원, 축하, 리마인드
daily_review_finished 약속 수, 미결정 수

구체적인 할 일 제목, 일기 본문, 이미지 내용은 분석 이벤트에 포함하지 않는다.

16. 기술 방향

클라이언트

  • Tauri 2 / Rust
  • React 19 / TypeScript 6 / Vite
  • Tailwind CSS 4
  • shadcn/ui / Radix UI
  • pnpm

현재 프로토타입 원칙

  • UI 검증 동안 로컬 목업 데이터와 React 상태를 사용한다.
  • 아직 존재하지 않는 API를 위한 저장소 계층이나 복잡한 추상화를 만들지 않는다.
  • 실제 데이터 연결 시 목업을 타입이 생성된 supabase-js 호출로 교체한다.
  • Tauri 클라이언트에 데이터베이스 비밀번호나 서버 전용 비밀 키를 포함하지 않는다.

후속 백엔드

  • Supabase Auth, Postgres, Data API, RLS 사용
  • SQL migration을 스키마의 단일 원본으로 사용
  • 다중 테이블 변경과 멱등 처리는 Database Function 및 trigger로 처리
  • 서버 비밀, 외부 webhook, 원격 알림은 필요한 시점에 Edge Function으로 처리
  • 별도 애플리케이션 서버와 ORM은 직접 DB 연결 요구가 생길 때 재검토

DB 구현 단계

단계 범위 상태
DB 0 할 일, 약속, 이월 결정, 기본 RLS 코드 완료, 검증 대기
DB 1 프로필, 사용자 설정, 약속 해결 및 이월 원자성 코드 완료, 검증 대기
DB 2 책임 그룹, 최대 5명 제한, 공개 범위, 차단 RLS 대기
DB 3 응원, 축하, 리마인드 시간 및 횟수 제한 대기
DB 4 초대 방식 확정, 최소 2명 활성화, Auth 및 생성 타입 연결 대기

비기능 요구사항

  • 핵심 화면 초기 표시 1초 이내 목표
  • 사용자별 타임존과 날짜 경계 지원
  • 중복 상태 변경에 안전한 멱등 처리
  • 네트워크 재연결 시 충돌 없는 동기화
  • 개인정보 내보내기와 계정 삭제
  • 오류 추적과 성능 모니터링
  • 이미지 및 사용자 생성 콘텐츠의 신고와 차단

17. 개발 단계

Phase 0 — 제품 및 기반

  • PRD 확정
  • Tauri, React, TypeScript, Tailwind, pnpm 구성
  • 핵심 상태와 기록 계산 규칙 작성

완료 조건: 앱 셸이 실행되고 핵심 규칙 테스트가 통과한다.

Phase 1 — UI 기반

  • shadcn/ui 설정
  • 색상, 타이포그래피, 반경 토큰
  • 반응형 좌측 및 하단 내비게이션

완료 조건: 800×600과 320px 너비에서 앱 셸이 깨지지 않는다.

Phase 2 — Today 프로토타입

  • 빠른 입력
  • 오늘의 약속
  • 이월함
  • 일반 할 일
  • 빈 상태와 하루 완료 상태

완료 조건: 목업 데이터로 핵심 정보 우선순위와 주요 상태를 확인할 수 있다.

Phase 3 — 기록 프로토타입

  • 연간 히트맵
  • 현재 및 최장 스트릭
  • 주간 일관성
  • 실패 패턴과 카테고리 통계

완료 조건: 사용자가 최근 행동 변화와 반복 실패를 한 화면에서 이해할 수 있다.

Phase 4 — 책임 그룹 프로토타입

  • 그룹 목록과 상세
  • 공개된 약속
  • 응원, 축하, 리마인드 설정
  • 비공개 및 차단 상태

완료 조건: 공개 피드 없이도 가까운 사람과의 책임감 흐름을 검증할 수 있다.

Phase 5 — 로컬 상호작용

  • 할 일 추가 및 완료
  • 약속 지정과 3개 제한
  • 미룸 및 포기
  • 이월함 결정
  • 화면 간 상태 반영

완료 조건: 백엔드 없이 핵심 행동 루프 전체를 시연할 수 있다.

Phase 6 — UX 안정화

  • 키보드 탐색
  • 접근성 점검
  • 반응형 보정
  • 로딩, 오류, 빈 상태
  • 사용자 테스트 반영

완료 조건: 핵심 흐름에 막힘이 없고 주요 접근성 기준을 충족한다.

Phase 7 — Supabase 연결

  • 생성된 TypeScript 타입과 Data API 계약
  • Supabase Auth와 RLS 권한
  • 데이터베이스 스키마
  • 실제 데이터 연결
  • 동기화 및 오류 처리

완료 조건: 두 기기 또는 두 세션에서 데이터가 안전하게 동기화된다.

Phase 8 — 베타

  • 분석 이벤트
  • 오류 및 성능 모니터링
  • 개인정보 내보내기 및 삭제
  • 제한된 사용자 배포

완료 조건: 성공 지표를 수집하고 다음 제품 결정을 내릴 수 있다.

18. 주요 위험

위험 대응
약속 3개 제한이 답답하게 느껴짐 일반 할 일 수는 제한하지 않고 핵심 약속만 제한
스트릭이 실패 압박으로 작동 휴식일, 미결정 유예, 재계획 메시지 제공
친구 리마인드가 괴롭힘이 됨 기본 비공개, 허용 시간 및 횟수, 차단 기능
기록 화면이 성과 경쟁을 유발 총량보다 개인 일관성과 변화에 집중
UI 프로토타입이 백엔드 구조를 고정 실제 API 계약 전 데이터 계층 추상화 금지

19. 확정이 필요한 항목

  • 데스크톱 검증 후 모바일 앱을 별도로 제공할지 여부
  • 스트릭에서 계획이 없던 과거 평일을 실패로 볼지 여부
  • 휴식일에 자발적으로 완료한 약속을 스트릭에 포함할지 여부
  • 책임 그룹 초대 방식: 코드, 링크, 사용자 검색
  • 인증 제공자와 데이터베이스
  • Drizzle 적용 범위
  • 일기 기능을 MVP에 포함할지 P1으로 유지할지 여부

20. 현재 결정

  • 제품명은 Today를 사용한다.
  • Tauri 데스크톱 앱을 먼저 만든다.
  • React 19, TypeScript 6, Tailwind CSS 4를 사용한다.
  • UI 컴포넌트는 shadcn/ui와 Radix UI를 사용한다.
  • UI/UX를 먼저 목업하고 백엔드는 이후 Supabase로 연결한다.
  • 백엔드 전까지 로컬 목업 데이터만 사용한다.
  • 공개 피드와 AI 기능은 MVP에서 제외한다.