From bfb06ebcc8315394fef913e44335f4aa8c595a0f Mon Sep 17 00:00:00 2001 From: yumin-kim4757 Date: Thu, 16 Jul 2026 19:19:41 +0900 Subject: [PATCH 01/11] =?UTF-8?q?fix(web):=20=EC=98=A4=EB=8A=98/=EC=A7=91?= =?UTF-8?q?=EC=A4=91=20=ED=83=AD=20=EB=B3=80=EA=B2=BD=20=ED=9B=84=20?= =?UTF-8?q?=ED=86=B5=EA=B3=84=20=EC=BA=90=EC=8B=9C=20=EA=B0=B1=EC=8B=A0=20?= =?UTF-8?q?(#265)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../today/_hooks/todo-modal/use-create-todo-submit.ts | 3 +++ .../(with-time-sidebar)/today/_hooks/useTodayTodoList.ts | 3 +++ .../app/[locale]/(main)/focus/_hooks/use-focus-session.ts | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/todo-modal/use-create-todo-submit.ts b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/todo-modal/use-create-todo-submit.ts index f3ce6441..c5786846 100644 --- a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/todo-modal/use-create-todo-submit.ts +++ b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/todo-modal/use-create-todo-submit.ts @@ -8,6 +8,7 @@ import type { CreateTodoRequest } from "@/schemas/todo/todo-schema"; import { getGetTodayQueryKey } from "@/api/generated/endpoints/home/home"; import { useCreateTodo } from "@/api/generated/endpoints/todo/todo"; +import { useStatisticsQueryInvalidation } from "@/hooks/statistics/use-statistics-query-invalidation"; const buildCreateTodoRequestBody = ( data: CreateTodoRequest, @@ -29,6 +30,7 @@ export const useCreateTodoSubmit = () => { const [isErrorToastOpen, setIsErrorToastOpen] = useState(false); const { mutate: createTodo } = useCreateTodo(); const queryClient = useQueryClient(); + const { invalidateStatistics } = useStatisticsQueryInvalidation(); const handleSubmit = (data: CreateTodoRequest) => { createTodo( @@ -36,6 +38,7 @@ export const useCreateTodoSubmit = () => { { onSuccess: () => { queryClient.invalidateQueries({ queryKey: getGetTodayQueryKey() }); + invalidateStatistics(); }, onError: () => { setIsErrorToastOpen(true); diff --git a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts index bf8975fc..a42f0ab4 100644 --- a/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts +++ b/apps/timo-web/app/[locale]/(main)/(with-time-sidebar)/today/_hooks/useTodayTodoList.ts @@ -52,6 +52,7 @@ export const useTodayTodoList = ( invalidateTimeBoxes, invalidateTodayView, invalidateFocusTodo, + invalidateStatistics, } = useTimerQueryInvalidation(); const { mutate: startTimer, isPending: isStartTimerPending } = useStartTimer({ @@ -119,6 +120,7 @@ export const useTodayTodoList = ( invalidateTimeBoxes(); invalidateTodoDetail(todoId, dateKey); invalidateFocusTodo(); + invalidateStatistics(); }, onError: (error: ErrorType) => { setTodos(previous); @@ -149,6 +151,7 @@ export const useTodayTodoList = ( invalidateTodayView(); invalidateTodoDetail(todoId, dateKey); invalidateFocusTodo(); + invalidateStatistics(); }, }, ); diff --git a/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts b/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts index ee97c800..6818c827 100644 --- a/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts +++ b/apps/timo-web/app/[locale]/(main)/focus/_hooks/use-focus-session.ts @@ -47,6 +47,7 @@ export const useFocusSession = ({ invalidateTimeBoxes, invalidateTodayView, invalidateFocusTodo, + invalidateStatistics, } = useTimerQueryInvalidation(); const invalidateTodoDetail = () => { const todo = focusView.todo; @@ -96,6 +97,7 @@ export const useFocusSession = ({ invalidateTimeBoxes(); invalidateTodayView(); invalidateTodoDetail(); + invalidateStatistics(); }, onError: onMutationError, }, @@ -110,6 +112,7 @@ export const useFocusSession = ({ invalidateTimeBoxes(); invalidateTodayView(); invalidateTodoDetail(); + invalidateStatistics(); }, onError: onMutationError, }, @@ -121,6 +124,7 @@ export const useFocusSession = ({ invalidateTimeBoxes(); invalidateTodayView(); invalidateTodoDetail(); + invalidateStatistics(); }, onError: onMutationError, }, From 0f8a78ae5a1b7a6e9730ca0deae0c5f168d242bb Mon Sep 17 00:00:00 2001 From: kimminna Date: Fri, 17 Jul 2026 16:27:20 +0900 Subject: [PATCH 02/11] =?UTF-8?q?docs(root):=20README=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=B0=EC=83=B7=EC=97=90=20=EA=B8=B0=EB=8A=A5=20=EC=84=A4?= =?UTF-8?q?=EB=AA=85=20=EC=BA=A1=EC=85=98=EC=9D=84=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Why We Built It / Features 섹션 이미지에 영어·한글 설명을 추가했습니다 - 팀원 프로필 사진을 새 업로드 이미지로 교체했습니다 --- README.md | 40 ++++++++++++++++++++++++++++++++-------- README_ko.md | 40 ++++++++++++++++++++++++++++++++-------- 2 files changed, 64 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 88b5757b..1d3f5ef3 100644 --- a/README.md +++ b/README.md @@ -34,19 +34,43 @@ As you use it, Timo learns your time patterns and helps you plan more realistica ## Why We Built It +image + +image + - **To-do lists aren't enough**: Writing tasks down feels productive, but without a time structure, most lists stay unfinished at end of day. - **Time estimates make plans real**: A task without a duration is just a wish. Timo pairs every task with a time block from the start. - **Feedback closes the loop**: The gap between planned and actual time is where most tools stop. Timo closes that loop by recording real execution time and feeding it back into future planning. ## Features -- **✏️ Todo + Time Estimate**: Add tasks with an expected duration and optional tags. The estimate becomes the foundation of your daily schedule. +image + +- **📝 Todo + Time Estimate**: Enter what you need to do and how long you expect it to take — Timo turns it into a timebox that becomes part of your plan. + +image + +- **⏱️ Timer-Based Execution**: Start a timebox and a timer runs for exactly the duration you set, keeping you focused on getting it done. + +image + +- **📊 Timeline Tracking**: The actual time you spent is automatically recorded on the timeline as a time block, so you can see exactly when and how long you worked. + +image + +- **🤖 AI Feedback**: Timo compares your accumulated estimated vs. actual time data and recommends the most realistic duration for each task, giving you feedback to plan better. + +image + +- **▶️ Seamless Transition**: Complete a timebox and the next one starts right away, keeping your workflow moving without interruption. + +image -- **📦 Automatic Timebox Scheduling**: Each task is automatically converted into a time block on your schedule — turning a flat to-do list into an executable plan. +- **📈 Daily Statistics**: See how much time you focused today, and compare estimated vs. actual time at a glance. -- **⏱️ Timer-Based Execution**: Start a timebox and a timer begins. Pause, extend, or go full-screen to stay focused. When time is up, you get a notification. Actual time spent is recorded automatically. +image -- **🤖 AI Time Recommendations**: Timo learns how long similar tasks actually take you, then recommends more accurate time estimates — making future plans increasingly realistic. +- **🎯 Focus Mode**: Zoom into a single todo and work through it distraction-free. ## Getting Started @@ -87,7 +111,7 @@ Timo is optimized for desktop use — designed for students and job seekers who - 김민아 + image
김민아 @@ -96,7 +120,7 @@ Timo is optimized for desktop use — designed for students and job seekers who - 김유민 + image
김유민 @@ -105,7 +129,7 @@ Timo is optimized for desktop use — designed for students and job seekers who - 김정민 + image
김정민 @@ -114,7 +138,7 @@ Timo is optimized for desktop use — designed for students and job seekers who - 이혜원 + image
이혜원 diff --git a/README_ko.md b/README_ko.md index 05c32b76..e7ad14c7 100644 --- a/README_ko.md +++ b/README_ko.md @@ -34,19 +34,43 @@ Timo는 할 일을 실행 가능한 시간 단위(타임박스)로 변환해주 ## 왜 만들었나요? +image + +image + - **투두 리스트만으로는 부족합니다**: 할 일을 적는 것만으로는 실제로 완수하기 어렵습니다. 시간 구조 없이 작성된 목록은 대부분 그날 끝나지 않습니다. - **시간 추정이 계획을 실행 가능하게 만듭니다**: 소요 시간 없는 태스크는 바람일 뿐입니다. Timo는 모든 태스크에 시간을 붙여 구체적인 계획으로 만듭니다. - **실행과 피드백까지 연결합니다**: 계획한 시간과 실제 수행 시간의 차이를 추적하고, 이를 다음 계획에 반영해 점점 더 현실적인 일정을 만들어 갑니다. ## 주요 기능 -- **✏️ 투두 + 예상 소요 시간 입력**: 태스크를 입력할 때 예상 소요 시간과 태그를 함께 설정합니다. 이 정보가 하루 일정의 기반이 됩니다. +image + +- **📝 투두 + 예상 소요 시간 입력**: 해야 할 일과 예상 소요 시간을 입력하면 타임박스가 생성되어 계획에 반영됩니다. + +image + +- **⏱️ 타이머 실행**: 타임박스를 실행하면 설정한 시간만큼 타이머가 작동해 계획을 수행합니다. + +image + +- **📊 타임라인 기록**: 실제로 수행한 시간만큼 타임라인에 박스 형태로 기록됩니다. + +image + +- **🤖 AI 피드백**: 그동안의 예상 소요 시간과 실제 소요 시간 데이터를 비교해 AI가 가장 적합한 시간을 추천하고 피드백을 제공합니다. + +image + +- **▶️ 다음 타임박스로 자연스러운 전환**: 하나의 타임박스를 완료하면 바로 다음 타임박스가 시작됩니다. + +image -- **📦 타임박스 자동 생성**: 입력된 태스크는 실행 가능한 시간 단위의 타임박스로 자동 변환됩니다. 평면적인 리스트가 실행 가능한 일정으로 바뀝니다. +- **📈 통계**: 하루에 집중한 시간과 예상·실제 소요 시간의 차이를 한눈에 확인할 수 있습니다. -- **⏱️ 타이머 기반 실행**: 타임박스를 시작하면 타이머가 작동합니다. 일시정지·연장·전체화면 기능을 제공하며, 완료 시 알림을 받을 수 있습니다. 실제 수행 시간은 자동으로 기록됩니다. +image -- **🤖 AI 소요 시간 추천**: 반복 사용을 통해 유사 태스크의 실제 소요 시간 패턴을 학습하고, 더 정확한 시간 추천을 제공합니다. 이를 통해 사용할수록 더 현실적인 계획을 세울 수 있습니다. +- **🎯 집중 모드**: 하나의 투두에 집중해서 수행할 수 있는 모드입니다. ## 실행 방법 @@ -87,7 +111,7 @@ Timo는 데스크탑 환경에서 장시간 자기주도적 작업을 수행하 - 김민아 + image
김민아 @@ -96,7 +120,7 @@ Timo는 데스크탑 환경에서 장시간 자기주도적 작업을 수행하 - 김유민 + image
김유민 @@ -105,7 +129,7 @@ Timo는 데스크탑 환경에서 장시간 자기주도적 작업을 수행하 - 김정민 + image
김정민 @@ -114,7 +138,7 @@ Timo는 데스크탑 환경에서 장시간 자기주도적 작업을 수행하 - 이혜원 + image
이혜원 From c90c3d7ee24f20f248d9aeca37e573966883a859 Mon Sep 17 00:00:00 2001 From: kimminna Date: Fri, 17 Jul 2026 16:35:14 +0900 Subject: [PATCH 03/11] =?UTF-8?q?style(root):=20README=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=EC=99=80=20=EC=84=A4=EB=AA=85=20=EC=82=AC?= =?UTF-8?q?=EC=9D=B4=EC=97=90=20=EC=97=AC=EB=B0=B1=EC=9D=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Why We Built It / Features 섹션의 이미지와 캡션 사이에 br 태그로 여백을 추가했습니다 --- README.md | 18 ++++++++++++++++++ README_ko.md | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/README.md b/README.md index 1d3f5ef3..f18c5420 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,12 @@ As you use it, Timo learns your time patterns and helps you plan more realistica image +
+ image +
+ - **To-do lists aren't enough**: Writing tasks down feels productive, but without a time structure, most lists stay unfinished at end of day. - **Time estimates make plans real**: A task without a duration is just a wish. Timo pairs every task with a time block from the start. - **Feedback closes the loop**: The gap between planned and actual time is where most tools stop. Timo closes that loop by recording real execution time and feeding it back into future planning. @@ -46,30 +50,44 @@ As you use it, Timo learns your time patterns and helps you plan more realistica image +
+ - **📝 Todo + Time Estimate**: Enter what you need to do and how long you expect it to take — Timo turns it into a timebox that becomes part of your plan. image +
+ - **⏱️ Timer-Based Execution**: Start a timebox and a timer runs for exactly the duration you set, keeping you focused on getting it done. image +
+ - **📊 Timeline Tracking**: The actual time you spent is automatically recorded on the timeline as a time block, so you can see exactly when and how long you worked. image +
+ - **🤖 AI Feedback**: Timo compares your accumulated estimated vs. actual time data and recommends the most realistic duration for each task, giving you feedback to plan better. image +
+ - **▶️ Seamless Transition**: Complete a timebox and the next one starts right away, keeping your workflow moving without interruption. image +
+ - **📈 Daily Statistics**: See how much time you focused today, and compare estimated vs. actual time at a glance. image +
+ - **🎯 Focus Mode**: Zoom into a single todo and work through it distraction-free. ## Getting Started diff --git a/README_ko.md b/README_ko.md index e7ad14c7..b7f8b147 100644 --- a/README_ko.md +++ b/README_ko.md @@ -36,8 +36,12 @@ Timo는 할 일을 실행 가능한 시간 단위(타임박스)로 변환해주 image +
+ image +
+ - **투두 리스트만으로는 부족합니다**: 할 일을 적는 것만으로는 실제로 완수하기 어렵습니다. 시간 구조 없이 작성된 목록은 대부분 그날 끝나지 않습니다. - **시간 추정이 계획을 실행 가능하게 만듭니다**: 소요 시간 없는 태스크는 바람일 뿐입니다. Timo는 모든 태스크에 시간을 붙여 구체적인 계획으로 만듭니다. - **실행과 피드백까지 연결합니다**: 계획한 시간과 실제 수행 시간의 차이를 추적하고, 이를 다음 계획에 반영해 점점 더 현실적인 일정을 만들어 갑니다. @@ -46,30 +50,44 @@ Timo는 할 일을 실행 가능한 시간 단위(타임박스)로 변환해주 image +
+ - **📝 투두 + 예상 소요 시간 입력**: 해야 할 일과 예상 소요 시간을 입력하면 타임박스가 생성되어 계획에 반영됩니다. image +
+ - **⏱️ 타이머 실행**: 타임박스를 실행하면 설정한 시간만큼 타이머가 작동해 계획을 수행합니다. image +
+ - **📊 타임라인 기록**: 실제로 수행한 시간만큼 타임라인에 박스 형태로 기록됩니다. image +
+ - **🤖 AI 피드백**: 그동안의 예상 소요 시간과 실제 소요 시간 데이터를 비교해 AI가 가장 적합한 시간을 추천하고 피드백을 제공합니다. image +
+ - **▶️ 다음 타임박스로 자연스러운 전환**: 하나의 타임박스를 완료하면 바로 다음 타임박스가 시작됩니다. image +
+ - **📈 통계**: 하루에 집중한 시간과 예상·실제 소요 시간의 차이를 한눈에 확인할 수 있습니다. image +
+ - **🎯 집중 모드**: 하나의 투두에 집중해서 수행할 수 있는 모드입니다. ## 실행 방법 From 0aa3707f0f6940a340b01f00122f4dc4a2cde16f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=95=84?= Date: Fri, 17 Jul 2026 16:39:07 +0900 Subject: [PATCH 04/11] =?UTF-8?q?style(root):=20=EC=82=AC=EC=A7=84?= =?UTF-8?q?=EA=B3=BC=20=EC=84=A4=EB=AA=85=20=EC=82=AC=EC=9D=B4=EC=97=90=20?= =?UTF-8?q?=EA=B3=B5=EB=B0=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f18c5420..073bbd5e 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,6 @@ As you use it, Timo learns your time patterns and helps you plan more realistica
-image -
- **To-do lists aren't enough**: Writing tasks down feels productive, but without a time structure, most lists stay unfinished at end of day. @@ -52,44 +50,86 @@ As you use it, Timo learns your time patterns and helps you plan more realistica
+
+ - **📝 Todo + Time Estimate**: Enter what you need to do and how long you expect it to take — Timo turns it into a timebox that becomes part of your plan. +
+ +
+ image
+
+ - **⏱️ Timer-Based Execution**: Start a timebox and a timer runs for exactly the duration you set, keeping you focused on getting it done. +
+ +
+ image
+
+ - **📊 Timeline Tracking**: The actual time you spent is automatically recorded on the timeline as a time block, so you can see exactly when and how long you worked. +
+ +
+ image
+
+ - **🤖 AI Feedback**: Timo compares your accumulated estimated vs. actual time data and recommends the most realistic duration for each task, giving you feedback to plan better. +
+ +
+ image
+
+ - **▶️ Seamless Transition**: Complete a timebox and the next one starts right away, keeping your workflow moving without interruption. +
+ +
+ image
+
+ - **📈 Daily Statistics**: See how much time you focused today, and compare estimated vs. actual time at a glance. +
+ +
+ image
+
+ - **🎯 Focus Mode**: Zoom into a single todo and work through it distraction-free. +
+ +
+ ## Getting Started **Prerequisites** From ce3555691529c970a021d8aa64e3e8befc9daac6 Mon Sep 17 00:00:00 2001 From: kimminna Date: Fri, 17 Jul 2026 16:41:07 +0900 Subject: [PATCH 05/11] =?UTF-8?q?style(root):=20README=5Fko=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EA=B5=AC=EC=84=B1=EC=9D=84=20=EC=98=81?= =?UTF-8?q?=EB=AC=B8=ED=8C=90=EA=B3=BC=20=ED=86=B5=EC=9D=BC=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Why 섹션 이미지를 1장으로 맞추고 br 태그 여백을 영문판과 동일하게 추가했습니다 --- README_ko.md | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/README_ko.md b/README_ko.md index b7f8b147..d75c3daa 100644 --- a/README_ko.md +++ b/README_ko.md @@ -38,8 +38,6 @@ Timo는 할 일을 실행 가능한 시간 단위(타임박스)로 변환해주
-image -
- **투두 리스트만으로는 부족합니다**: 할 일을 적는 것만으로는 실제로 완수하기 어렵습니다. 시간 구조 없이 작성된 목록은 대부분 그날 끝나지 않습니다. @@ -52,44 +50,86 @@ Timo는 할 일을 실행 가능한 시간 단위(타임박스)로 변환해주
+
+ - **📝 투두 + 예상 소요 시간 입력**: 해야 할 일과 예상 소요 시간을 입력하면 타임박스가 생성되어 계획에 반영됩니다. +
+ +
+ image
+
+ - **⏱️ 타이머 실행**: 타임박스를 실행하면 설정한 시간만큼 타이머가 작동해 계획을 수행합니다. +
+ +
+ image
+
+ - **📊 타임라인 기록**: 실제로 수행한 시간만큼 타임라인에 박스 형태로 기록됩니다. +
+ +
+ image
+
+ - **🤖 AI 피드백**: 그동안의 예상 소요 시간과 실제 소요 시간 데이터를 비교해 AI가 가장 적합한 시간을 추천하고 피드백을 제공합니다. +
+ +
+ image
+
+ - **▶️ 다음 타임박스로 자연스러운 전환**: 하나의 타임박스를 완료하면 바로 다음 타임박스가 시작됩니다. +
+ +
+ image
+
+ - **📈 통계**: 하루에 집중한 시간과 예상·실제 소요 시간의 차이를 한눈에 확인할 수 있습니다. +
+ +
+ image
+
+ - **🎯 집중 모드**: 하나의 투두에 집중해서 수행할 수 있는 모드입니다. +
+ +
+ ## 실행 방법 **사전 요구사항** From dbb2704a7cce77ad9aa01df5f50ed98982432dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=95=84?= Date: Fri, 17 Jul 2026 16:52:17 +0900 Subject: [PATCH 06/11] =?UTF-8?q?style(root):=20=EB=A1=9C=EA=B3=A0=20?= =?UTF-8?q?=EC=82=AC=EC=A7=84=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 073bbd5e..2c4b03d5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@
+ image +

Timo

@@ -26,12 +28,20 @@ ## What Is Timo? + +image + +
+ Timo is a timebox-based to-do service that converts tasks into actionable, time-bound blocks — so you actually finish what you plan. Unlike traditional to-do lists, Timo asks you to estimate how long each task will take, then builds your day around those time blocks. As you use it, Timo learns your time patterns and helps you plan more realistically with AI-powered time recommendations. +
+ + ## Why We Built It image From 542494d46dc0aa834a40b173a468e67af400dc7b Mon Sep 17 00:00:00 2001 From: kimminna Date: Fri, 17 Jul 2026 16:54:59 +0900 Subject: [PATCH 07/11] =?UTF-8?q?style(root):=20README=5Fko=20=EB=A1=9C?= =?UTF-8?q?=EA=B3=A0=20=EB=B0=8F=20=EC=86=8C=EA=B0=9C=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=EB=A5=BC=20=EC=98=81=EB=AC=B8=ED=8C=90=EA=B3=BC=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 상단 로고 이미지를 추가했습니다 - Timo란? 섹션에 소개 스크린샷을 추가했습니다 --- README_ko.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README_ko.md b/README_ko.md index d75c3daa..afe27409 100644 --- a/README_ko.md +++ b/README_ko.md @@ -1,4 +1,6 @@

+ image +

Timo

@@ -26,12 +28,18 @@ ## Timo란? +image + +
+ Timo는 할 일을 실행 가능한 시간 단위(타임박스)로 변환해주는 투두 서비스입니다. 단순히 할 일 목록을 나열하는 대신, 각 태스크에 예상 소요 시간을 입력하면 하루 일정이 자동으로 구성됩니다. 반복 사용을 통해 Timo는 개인의 시간 사용 패턴을 학습하고, AI 기반 시간 추천으로 점점 더 현실적인 계획 수립을 돕습니다. +
+ ## 왜 만들었나요? image From bb1246df5e338b8252eba310bde5264420012cf0 Mon Sep 17 00:00:00 2001 From: kimminna Date: Fri, 17 Jul 2026 17:26:07 +0900 Subject: [PATCH 08/11] =?UTF-8?q?fix(web):=20=EC=98=A8=EB=B3=B4=EB=94=A9?= =?UTF-8?q?=20=EB=AF=B8=EC=99=84=EB=A3=8C=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EC=9D=98=20=ED=99=88=20=EC=A0=91=EA=B7=BC=EC=9D=84=20=EC=A0=9C?= =?UTF-8?q?=ED=95=9C=ED=95=9C=EB=8B=A4=20(#272)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 온보딩 미완료 사용자를 /onboarding으로 리다이렉트하는 OnboardingRequiredGuardProvider를 추가했습니다 - (main) 레이아웃에 해당 가드를 적용해 /home 등 메인 라우트 접근을 막았습니다 --- apps/timo-web/app/[locale]/(main)/layout.tsx | 5 ++- .../auth/OnboardingRequiredGuardProvider.tsx | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 apps/timo-web/providers/auth/OnboardingRequiredGuardProvider.tsx diff --git a/apps/timo-web/app/[locale]/(main)/layout.tsx b/apps/timo-web/app/[locale]/(main)/layout.tsx index 88d9c6b0..fcc5efd6 100644 --- a/apps/timo-web/app/[locale]/(main)/layout.tsx +++ b/apps/timo-web/app/[locale]/(main)/layout.tsx @@ -2,6 +2,7 @@ import type { Metadata } from "next"; import { MainShellContainer } from "@/app/[locale]/(main)/_containers/MainShellContainer"; import { AuthGuardProvider } from "@/providers/auth/AuthGuardProvider"; +import { OnboardingRequiredGuardProvider } from "@/providers/auth/OnboardingRequiredGuardProvider"; export const metadata: Metadata = { robots: { @@ -18,7 +19,9 @@ export default function MainLayout({ children }: Readonly) { return (

- {children} + + {children} +
); diff --git a/apps/timo-web/providers/auth/OnboardingRequiredGuardProvider.tsx b/apps/timo-web/providers/auth/OnboardingRequiredGuardProvider.tsx new file mode 100644 index 00000000..38e25e6f --- /dev/null +++ b/apps/timo-web/providers/auth/OnboardingRequiredGuardProvider.tsx @@ -0,0 +1,31 @@ +"use client"; + +import { useEffect } from "react"; + +import { ROUTES } from "@/constants/routes"; +import { useRouter } from "@/i18n/navigation"; +import { useAuthStore } from "@/stores/auth/useAuthStore"; + +interface OnboardingRequiredGuardProviderProps { + children: React.ReactNode; +} + +export const OnboardingRequiredGuardProvider = ({ + children, +}: OnboardingRequiredGuardProviderProps) => { + const onboardingCompleted = useAuthStore( + (state) => state.onboardingCompleted, + ); + const isInitialized = useAuthStore((state) => state.isInitialized); + const router = useRouter(); + + useEffect(() => { + if (isInitialized && !onboardingCompleted) { + router.replace(ROUTES.ONBOARDING); + } + }, [isInitialized, onboardingCompleted, router]); + + if (!isInitialized || !onboardingCompleted) return null; + + return <>{children}; +}; From dbeb28ce0bbe8ddfede281c31c5c42468648c6c4 Mon Sep 17 00:00:00 2001 From: jjangminii Date: Fri, 17 Jul 2026 17:33:15 +0900 Subject: [PATCH 09/11] =?UTF-8?q?feat(ui):=20=EB=A1=9C=EA=B3=A0=20SVG=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=EC=BD=98=20=EC=86=8C=EC=8A=A4=EB=A5=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=9C=EB=8B=A4=20(#271)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 신규 로고 아이콘 SVG 소스를 추가했습니다 --- .../timo-design-system/src/icons/source/logo_timo.svg | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packages/timo-design-system/src/icons/source/logo_timo.svg diff --git a/packages/timo-design-system/src/icons/source/logo_timo.svg b/packages/timo-design-system/src/icons/source/logo_timo.svg new file mode 100644 index 00000000..c0ec5ce6 --- /dev/null +++ b/packages/timo-design-system/src/icons/source/logo_timo.svg @@ -0,0 +1,9 @@ + + + + + + + + + From 1f4275be6306b1b2e90656e872ef3aef9f5c4670 Mon Sep 17 00:00:00 2001 From: jjangminii Date: Fri, 17 Jul 2026 17:33:32 +0900 Subject: [PATCH 10/11] =?UTF-8?q?refactor(web):=20=EC=82=AC=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=EB=B0=94=C2=B7=EB=A1=9C=EA=B7=B8=EC=9D=B8=C2=B7?= =?UTF-8?q?=EC=A0=95=EC=B1=85=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=A1=9C?= =?UTF-8?q?=EA=B3=A0=EB=A5=BC=20SVGR=20=EC=95=84=EC=9D=B4=EC=BD=98?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EA=B5=90=EC=B2=B4=ED=95=9C=EB=8B=A4=20(#2?= =?UTF-8?q?71)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 정적 asset(next/image) 기반 로고를 디자인 시스템의 LogoTimoIcon 컴포넌트로 교체했습니다 - 로고가 링크로 감싸진 위치는 아이콘 대신 링크에 접근성 라벨을 부여했습니다 --- .../[locale]/login/_containers/LoginContainer.tsx | 5 ++--- apps/timo-web/app/[locale]/policy/page.tsx | 7 +++---- .../layout/sidebar/navigation/NavigationSidebar.tsx | 13 +++---------- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/apps/timo-web/app/[locale]/login/_containers/LoginContainer.tsx b/apps/timo-web/app/[locale]/login/_containers/LoginContainer.tsx index ef9dfa1f..8811637b 100644 --- a/apps/timo-web/app/[locale]/login/_containers/LoginContainer.tsx +++ b/apps/timo-web/app/[locale]/login/_containers/LoginContainer.tsx @@ -1,7 +1,6 @@ "use client"; -import timoTextLogo from "@repo/timo-design-system/assets/images/logo/timo-text-logo.svg"; -import Image from "next/image"; +import { LogoTimoIcon } from "@repo/timo-design-system/icons"; import { useTranslations } from "next-intl"; import { OnboardingGoogleButtonContainer } from "@/app/[locale]/onboarding/_containers/OnboardingGoogleButtonContainer"; @@ -23,7 +22,7 @@ export const LoginContainer = () => {
- Timo +

Less Chaos More Focus diff --git a/apps/timo-web/app/[locale]/policy/page.tsx b/apps/timo-web/app/[locale]/policy/page.tsx index 1d55e4bc..3128300b 100644 --- a/apps/timo-web/app/[locale]/policy/page.tsx +++ b/apps/timo-web/app/[locale]/policy/page.tsx @@ -1,5 +1,4 @@ -import timoTextLogo from "@repo/timo-design-system/assets/images/logo/timo-text-logo.svg"; -import Image from "next/image"; +import { LogoTimoIcon } from "@repo/timo-design-system/icons"; import { notFound } from "next/navigation"; import { hasLocale } from "next-intl"; import { getTranslations } from "next-intl/server"; @@ -49,8 +48,8 @@ export default async function PolicyPage({ searchParams }: PolicyPageProps) { return (

- - Timo + +
diff --git a/apps/timo-web/components/layout/sidebar/navigation/NavigationSidebar.tsx b/apps/timo-web/components/layout/sidebar/navigation/NavigationSidebar.tsx index 9dc98759..b81511c3 100644 --- a/apps/timo-web/components/layout/sidebar/navigation/NavigationSidebar.tsx +++ b/apps/timo-web/components/layout/sidebar/navigation/NavigationSidebar.tsx @@ -1,6 +1,5 @@ "use client"; -import timoTextLogo from "@repo/timo-design-system/assets/images/logo/timo-text-logo.svg"; import { ChartHoverIcon, ChartOffIcon, @@ -8,6 +7,7 @@ import { HomeHoverIcon, HomeOffIcon, HomeOnIcon, + LogoTimoIcon, SettingHoverIcon, SettingOffIcon, SettingOnIcon, @@ -20,7 +20,6 @@ import { } from "@repo/timo-design-system/icons"; import { TabButton } from "@repo/timo-design-system/ui"; import { cn } from "@repo/timo-design-system/utils"; -import Image from "next/image"; import { useTranslations } from "next-intl"; import { useNavigationSidebar } from "@/components/layout/sidebar/navigation/NavigationSidebarContext"; @@ -119,14 +118,8 @@ export const NavigationSidebar = () => { )} >
- - Timo + +