| 항목 | 내용 |
|---|---|
| 상태 | UI 프로토타입 기준 초안 |
| 작성일 | 2026-07-14 |
| 제품 형태 | Tauri 기반 데스크톱 우선 앱 |
| 핵심 대상 | 계획을 자주 미루고, 가까운 사람과 함께할 때 실행력이 높아지는 개인 사용자 |
오늘 해야 할 일을 명확히 정하고, 미완료 항목을 반드시 다시 결정하며, 가까운 사람과 약속 결과를 공유해 실행을 이어가는 소셜 투두 앱.
Today의 차별점은 투두 목록, 잔디, 일기 자체가 아니다.
- 하루 최대 3개의 핵심 약속을 사전에 정한다.
- 완료하지 못한 항목을 자동 복사하지 않고 다시 결정한다.
- 총 완료 개수가 아니라 약속 이행률과 일관성을 기록한다.
- 공개 피드보다 2~5명의 비공개 책임 그룹에 집중한다.
- 실패를 처벌하지 않고 다음 행동으로 연결한다.
경쟁 제품에 소셜 기능이 없다는 것이 문제가 아니다. 소셜 반응이 사용자의 사전 약속, 실행 결과, 다음 날 재계획으로 충분히 연결되지 않는 것이 문제다.
Today가 해결할 문제는 다음과 같다.
- 사용자가 투두 앱을 열어도 무엇부터 적을지 결정하기 어렵다.
- 전날의 미완료 항목이 오늘 목록에 쌓이거나 과거 기록으로 방치된다.
- 단순 체크 개수는 계획의 품질이나 지속적인 행동 변화를 보여주지 못한다.
- 친구의 활동을 보는 것과 실제 책임감을 느끼는 것 사이에 간극이 있다.
- 계획, 실행 결과, 회고가 서로 분리되어 있다.
사용자가 매일 1~3개의 핵심 약속을 정하고, 미완료 항목을 명시적으로 재결정하며, 가까운 사람과 결과를 공유하면 일반 체크리스트보다 계획 이행률과 지속 사용률이 높아질 것이다.
검증해야 할 세부 가설:
- 작성 가이드가 첫 할 일 작성 시간을 줄인다.
- 약속을 3개로 제한하면 과도한 계획이 줄어든다.
- 이월함이 미완료 항목의 장기 방치를 줄인다.
- 소규모 그룹의 응원과 제한된 리마인드가 실행률을 높인다.
- 약속 이행률 중심의 기록이 단순 완료 개수보다 의미 있는 성취감을 준다.
- 사용자가 앱 실행 후 15초 안에 첫 할 일을 작성할 수 있다.
- 사용자가 오늘의 핵심 약속을 최대 3개로 정할 수 있다.
- 모든 미완료 약속이 완료, 미룸, 포기 중 하나로 종료된다.
- 사용자가 현재 스트릭과 주간 일관성을 바로 이해할 수 있다.
- 사용자가 가까운 사람과 선택한 약속만 공유할 수 있다.
- 공개 SNS 피드
- 일반 메신저 수준의 채팅
- AI 자동 계획 및 AI 일기
- 팀 프로젝트 관리
- 노션 수준의 문서 편집기
- 대규모 그룹과 공개 챌린지
- 복잡한 포인트 및 보상 시스템
- 캘린더 양방향 동기화
- 18~34세 학생, 취업 준비생, 주니어 직장인
- 투두 앱을 설치했지만 1~2주 내 중단한 경험이 있는 사람
- 많은 기능보다 오늘 할 일을 명확히 정하는 것이 중요한 사람
- 친구, 연인, 스터디원과 함께할 때 실행력이 높아지는 사람
- 계획을 자주 미루지만 미룬 일을 관리하는 체계가 없는 사람
- 조직 단위의 승인과 권한 관리가 필요한 사용자
- 칸반, 간트 차트, 업무 의존성이 필요한 팀
- 공개 SNS 활동 자체가 목적인 사용자
- 복잡한 프로젝트 포트폴리오를 관리하려는 사용자
앱을 열면 과거 통계보다 오늘 해야 할 행동이 먼저 보인다.
미완료 항목은 다음 날 자동 복사하지 않는다. 사용자가 오늘 하기, 날짜 변경, 언젠가 하기, 포기 중 하나를 고른다.
아무 항목 하나를 완료해 유지되는 스트릭이 아니라 미리 정한 핵심 약속을 기준으로 계산한다.
불특정 다수의 경쟁보다 2~5명의 가까운 관계를 우선한다.
실패 경고보다 실패 이유와 다음 행동을 정리하도록 돕는다.
할 일, 일기, 이미지의 공개 범위 기본값은 나만 보기다.
빠른 작성
→ 오늘의 약속 1~3개 선택
→ 실행 및 상태 변경
→ 선택적 친구 공유와 반응
→ 하루 종료 시 미완료 항목 재결정
→ 기록 확인
→ 다음 날 다시 계획
MVP는 이 루프가 반복되는지 검증하는 데 집중한다.
- Today
- 친구
- 기록
- 일기
- 내 정보
데스크톱에서는 좌측 레일, 좁은 창에서는 하단 내비게이션을 사용한다.
- 날짜와 현재 스트릭
- 빠른 입력
- 오늘의 약속 최대 3개
- 이월함
- 일반 할 일
- 친구 활동 요약
- 연간 활동 히트맵
- 현재 및 최장 스트릭
- 주간 일관성
- 카테고리별 완료율
- 미룬 횟수와 자주 실패하는 요일
- 계획 대비 실제 집중 시간
- 책임 그룹 목록
- 오늘 공개된 약속
- 완료 여부와 주간 일관성
- 응원, 축하, 허용된 리마인드
- 앱 실행 후 한 번의 탭으로 입력을 시작한다.
- 빈 입력창 대신 상황별 작성 가이드를 제공한다.
- 최근 카테고리와 자주 작성한 항목을 제안한다.
- 자연어 날짜 해석은 백엔드 연동 이후 검토한다.
작성 가이드 예시:
- 오늘 끝내면 마음이 가장 가벼워질 일은?
- 10분 안에 끝낼 수 있는 일은?
- 어제 미룬 일 중 하나만 처리한다면?
- 오늘 반드시 지켜야 하는 약속은?
- 하루 최대 3개까지 지정한다.
- 일반 할 일보다 시각적으로 먼저 보인다.
- 약속 지정 시점과 결과를 기록한다.
- 공개 범위를 항목별로 선택한다.
- 상태는 예정, 진행 중, 완료, 미룸, 포기를 지원한다.
전날 미완료 항목은 오늘 목록에 자동으로 섞이지 않고 이월함에 보인다.
| 선택 | 결과 |
|---|---|
| 오늘 하기 | 오늘 목록으로 이동 |
| 날짜 변경 | 지정 날짜에 다시 노출 |
| 언젠가 하기 | 백로그로 이동 |
| 포기 | 선택적으로 이유 기록 |
이월함을 처리하지 않아도 새 할 일을 작성할 수 있다.
- 미리 정한 핵심 약속을 모두 이행한 연속 일수다.
- 사전에 설정한 휴식일은 스트릭을 끊지 않는다.
- 오늘의 약속이 미결정 상태라면 전날까지의 스트릭을 유지한다.
- 미룸 또는 포기로 종료된 날은 완료 스트릭에 포함하지 않는다.
완료한 핵심 약속 수 ÷ 계획한 핵심 약속 수 × 100
- 결과는 0~100% 정수로 표시한다.
- 친구 비교에는 총 완료 개수가 아니라 일관성을 사용한다.
- 기본 색상은 핵심 약속 이행률을 뜻한다.
- 날짜별 계획 수와 완료 수를 확인할 수 있다.
- 카테고리, 완료 개수, 집중 시간, 일기 작성일 필터는 후속 범위다.
- 단순 앱 실행 여부는 활동으로 계산하지 않는다.
- 한 그룹은 2~5명으로 제한한다.
- 오늘 공개한 약속, 완료 여부, 스트릭, 주간 일관성을 공유한다.
- 응원, 완료 축하, 제한된 리마인드를 지원한다.
- 사용자가 리마인드 허용 시간과 하루 횟수를 정한다.
공개 범위는 나만 보기, 특정 책임 그룹, 모든 친구를 지원한다. 기본값은 나만 보기다.
- 반복 루틴
- 한 줄 회고와 마크다운 일기
- 할 일별 집중 타이머
- 완료 사진 및 이미지 첨부
- 데이터 내보내기
- 시스템 알림
- AI 할 일 분해 및 추천
- AI 일기 초안
- 공개 피드와 대규모 크루
- 공동 챌린지
- 캘린더 동기화
- 위젯과 워치 앱
| 상태 | 의미 |
|---|---|
planned |
예정된 할 일 |
in_progress |
실행 중 |
completed |
완료 |
deferred |
다른 시점으로 미룸 |
abandoned |
포기 |
| 결과 | 의미 |
|---|---|
| 미결정 | 하루가 끝나지 않았거나 아직 정리하지 않음 |
| 완료 | 약속 이행 |
| 미룸 | 다음 행동을 다시 정함 |
| 포기 | 하지 않기로 명시적으로 결정 |
- 한 날짜의 약속 슬롯은 1~3뿐이다.
- 약속 지정 후 변경 내역은 기록에서 보존한다.
- 미룸과 포기는 올바른 정리 행동이지만 완료 스트릭에는 포함하지 않는다.
- 같은 상태 변경 요청은 중복 실행되어도 결과가 달라지지 않아야 한다.
- 사용 목적 선택: 공부, 운동, 생활, 업무
- 오늘 해결할 일 하나 입력
- 첫 번째 오늘의 약속 지정
- 완료 확인 시간을 선택
- 친구 초대는 건너뛸 수 있음
- Today 화면 진입
- Today 진입
- 이월 항목 확인
- 새 할 일 작성
- 약속 최대 3개 선택
- 공개 여부 선택
- 상태를 진행 중으로 변경
- 완료 처리
- 선택적으로 사진 또는 한 줄 기록 추가
- 친구 반응 확인
- 미완료 약속 확인
- 완료, 미룸, 포기 중 하나로 종료
- 선택적으로 한 줄 회고 작성
- 오늘의 일관성 확인
- 다음 날 이월함에 필요한 항목만 보냄
- 차갑고 업무 도구 같은 인상보다 따뜻하고 차분한 개인 도구를 지향한다.
- 밝은 배경과 세이지 계열의 핵심 색상을 사용한다.
- 정보 밀도는 낮추되 핵심 약속은 일반 할 일보다 분명하게 강조한다.
- shadcn/ui 컴포넌트를 기반으로 하되 기본 예제 디자인을 그대로 복제하지 않는다.
- 긴 애니메이션보다 빠른 상태 피드백을 우선한다.
- 최소 창 너비: 320px
- 기본 Tauri 검증 크기: 800×600
- 640px 이상: 좌측 내비게이션 레일
- 640px 미만: 하단 내비게이션
- 핵심 입력과 약속 목록은 모든 크기에서 첫 화면에 최대한 유지한다.
- 모든 아이콘 버튼에 접근 가능한 이름을 제공한다.
- 키보드만으로 주요 흐름을 완료할 수 있어야 한다.
- 포커스 표시를 제거하지 않는다.
- 색상만으로 완료, 미룸, 포기 상태를 구분하지 않는다.
- 운영체제 글자 크기와 대비 설정을 고려한다.
- 첫 사용 빈 상태
- 할 일이 없는 오늘
- 약속 3개가 모두 채워진 상태
- 미완료 항목이 있는 상태
- 모든 약속을 완료한 상태
- 네트워크 없음 및 재시도 상태
- 데이터 로딩 상태
- 권한 없음 및 비공개 상태
| 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 |
주간 책임 실행 사용자 수
다음 조건을 모두 충족한 사용자 수:
- 한 주에 4일 이상 핵심 약속을 설정한다.
- 약속을 완료, 미룸, 포기 중 하나로 명확히 종료한다.
- 미결정 상태로 장기간 방치하지 않는다.
| 지표 | 목표 가설 |
|---|---|
| 첫 할 일 작성 완료율 | 80% 이상 |
| 첫 할 일 작성 중앙 시간 | 15초 이하 |
| D1 유지율 | 55% 이상 |
| D7 유지율 | 35% 이상 |
| D30 유지율 | 15% 이상 |
| 24시간 내 이월 항목 정리율 | 60% 이상 |
| 주 4일 이상 약속 설정 비율 | WAU의 35% 이상 |
| 소셜 기능 주간 참여율 | WAU의 25% 이상 |
| 푸시 알림 차단률 | 15% 이하 |
목표값은 시장 평균이 아니라 초기 제품 가설이며 베타 결과에 따라 조정한다.
초기 검증에 필요한 최소 이벤트만 수집한다.
| 이벤트 | 주요 속성 |
|---|---|
task_created |
입력 경로, 작성 소요 시간 |
commitment_declared |
슬롯, 공개 범위 |
commitment_resolved |
완료, 미룸, 포기 |
rollover_decided |
오늘, 날짜 변경, 언젠가, 포기 |
group_reaction_sent |
응원, 축하, 리마인드 |
daily_review_finished |
약속 수, 미결정 수 |
구체적인 할 일 제목, 일기 본문, 이미지 내용은 분석 이벤트에 포함하지 않는다.
- 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 0 | 할 일, 약속, 이월 결정, 기본 RLS | 코드 완료, 검증 대기 |
| DB 1 | 프로필, 사용자 설정, 약속 해결 및 이월 원자성 | 코드 완료, 검증 대기 |
| DB 2 | 책임 그룹, 최대 5명 제한, 공개 범위, 차단 RLS | 대기 |
| DB 3 | 응원, 축하, 리마인드 시간 및 횟수 제한 | 대기 |
| DB 4 | 초대 방식 확정, 최소 2명 활성화, Auth 및 생성 타입 연결 | 대기 |
- 핵심 화면 초기 표시 1초 이내 목표
- 사용자별 타임존과 날짜 경계 지원
- 중복 상태 변경에 안전한 멱등 처리
- 네트워크 재연결 시 충돌 없는 동기화
- 개인정보 내보내기와 계정 삭제
- 오류 추적과 성능 모니터링
- 이미지 및 사용자 생성 콘텐츠의 신고와 차단
- PRD 확정
- Tauri, React, TypeScript, Tailwind, pnpm 구성
- 핵심 상태와 기록 계산 규칙 작성
완료 조건: 앱 셸이 실행되고 핵심 규칙 테스트가 통과한다.
- shadcn/ui 설정
- 색상, 타이포그래피, 반경 토큰
- 반응형 좌측 및 하단 내비게이션
완료 조건: 800×600과 320px 너비에서 앱 셸이 깨지지 않는다.
- 빠른 입력
- 오늘의 약속
- 이월함
- 일반 할 일
- 빈 상태와 하루 완료 상태
완료 조건: 목업 데이터로 핵심 정보 우선순위와 주요 상태를 확인할 수 있다.
- 연간 히트맵
- 현재 및 최장 스트릭
- 주간 일관성
- 실패 패턴과 카테고리 통계
완료 조건: 사용자가 최근 행동 변화와 반복 실패를 한 화면에서 이해할 수 있다.
- 그룹 목록과 상세
- 공개된 약속
- 응원, 축하, 리마인드 설정
- 비공개 및 차단 상태
완료 조건: 공개 피드 없이도 가까운 사람과의 책임감 흐름을 검증할 수 있다.
- 할 일 추가 및 완료
- 약속 지정과 3개 제한
- 미룸 및 포기
- 이월함 결정
- 화면 간 상태 반영
완료 조건: 백엔드 없이 핵심 행동 루프 전체를 시연할 수 있다.
- 키보드 탐색
- 접근성 점검
- 반응형 보정
- 로딩, 오류, 빈 상태
- 사용자 테스트 반영
완료 조건: 핵심 흐름에 막힘이 없고 주요 접근성 기준을 충족한다.
- 생성된 TypeScript 타입과 Data API 계약
- Supabase Auth와 RLS 권한
- 데이터베이스 스키마
- 실제 데이터 연결
- 동기화 및 오류 처리
완료 조건: 두 기기 또는 두 세션에서 데이터가 안전하게 동기화된다.
- 분석 이벤트
- 오류 및 성능 모니터링
- 개인정보 내보내기 및 삭제
- 제한된 사용자 배포
완료 조건: 성공 지표를 수집하고 다음 제품 결정을 내릴 수 있다.
| 위험 | 대응 |
|---|---|
| 약속 3개 제한이 답답하게 느껴짐 | 일반 할 일 수는 제한하지 않고 핵심 약속만 제한 |
| 스트릭이 실패 압박으로 작동 | 휴식일, 미결정 유예, 재계획 메시지 제공 |
| 친구 리마인드가 괴롭힘이 됨 | 기본 비공개, 허용 시간 및 횟수, 차단 기능 |
| 기록 화면이 성과 경쟁을 유발 | 총량보다 개인 일관성과 변화에 집중 |
| UI 프로토타입이 백엔드 구조를 고정 | 실제 API 계약 전 데이터 계층 추상화 금지 |
- 데스크톱 검증 후 모바일 앱을 별도로 제공할지 여부
- 스트릭에서 계획이 없던 과거 평일을 실패로 볼지 여부
- 휴식일에 자발적으로 완료한 약속을 스트릭에 포함할지 여부
- 책임 그룹 초대 방식: 코드, 링크, 사용자 검색
- 인증 제공자와 데이터베이스
- Drizzle 적용 범위
- 일기 기능을 MVP에 포함할지 P1으로 유지할지 여부
- 제품명은 Today를 사용한다.
- Tauri 데스크톱 앱을 먼저 만든다.
- React 19, TypeScript 6, Tailwind CSS 4를 사용한다.
- UI 컴포넌트는 shadcn/ui와 Radix UI를 사용한다.
- UI/UX를 먼저 목업하고 백엔드는 이후 Supabase로 연결한다.
- 백엔드 전까지 로컬 목업 데이터만 사용한다.
- 공개 피드와 AI 기능은 MVP에서 제외한다.