와이프가 타임트리 안 보길래 빡쳐서 직접 만든 AI 일정 앱 (feat. Claude 16세션, Play Store 출시 직전)

타임트리에 일정 올려도 와이프가 안 보고....영양제 챙겨먹기로 한 게 매일 까먹고....시우 목욕 시간을 매번 알람 맞추기 귀찮고....구글 킵·삼성 캘린더·타임트리 세 개를 동시에 켜서 보는 게 답답하고....

나름 최강 J 인데!!!!!!!

그래서 진짜로 직접 만들었습니다.

j라는 단어가 적힌 j 앱 로고
파란색 배경에 한국어 단어 j가 표�시됩니다.

💫 결론부터: 이거 만들었습니다 💫

이름: 특급 J

한 줄 설명: "말하면 등록, 찍으면 등록" 되는 AI 일정 앱

도구: Claude

코드량: Dart 6,500줄

상태: Play Store 출시 **D-X일** (개발자 본인인증 대기 중)

---

🌠 왜 만들었나

저는 여러가지 사업을 하다보니, 4가지 일을 동시에 합니다. 일정이 미친 듯이 많습니다.

문제는 이게 다 다른 앱에 흩어져 있었음 입니다.

| 구글 킵 | 할 일 메모, 영양제 챙기기 | 시간 개념 없음. 잊어버림. |

| 삼성 캘린더 | 미팅 약속 | 짧은 할 일 등록하기 너무 거창함 |

| 타임트리 | 가족 일정 | 와이프가 안 봐....... |

| 머릿속 | 시우 목욕·영양제 | 까먹음 |

저는 이걸 한 화면에서 보고 싶었습니다. 그것도 "확정 약속은 시간으로, 나머지는 그때그때, 못 하면 다음 날로 넘어가는" 방식으로. 찾아봤는데 그런 앱이 없었어요.

없으면? 만든다.

---

🌠 그래서 뭘 어떻게 만들었나

구성

- OS: Android 전용 — iOS는 계획 없음

- 언어: Flutter (Dart) — Claude 가 추천. Kotlin/Java 보다 Flutter 가 비개발자에게 쉽다고

- DB: 로컬 SQLite (sqflite) — 모든 데이터 폰 안.

- AI: Google Gemini 2.5 Flash (BYO 키)

- 백업: Google Drive (사용자 본인 드라이브, drive.file 최소 권한)

- 검증 기기: 갤럭시 (Android 16)

### 작업 방식

처음엔 Supabase + 클라우드로 시작했다가 (세션 1~10), "사용자 데이터를 내가 들고 있는 게 부담" + "비용 청구서가 나한테 갑니다" 라는 결론 나와서 세션 11~13 에 통째로 로컬 전환. 데이터는 폰 안에만, AI 는 사용자 본인 키로 — 그러니까 저는 한 푼도 안 나갑니다. 1,900원 결제하면 다 매출.

---

🌠 자랑하고 싶은 기능 BEST 3

🎯 1. 사진 한 장 → 일정 자동 등록 (Gemini Vision)

이게 진짜 좋더라구용. 청첩장 사진, 강의 포스터, 카톡으로 받은 미팅 안내 — 그냥 사진 한 장 고르면 끝.

```

갤러리에서 사진 선택

↓

Gemini 2.5 Flash 멀티모달 API 호출

↓ (2~3초)

title, date, start_time, end_time, memo, category 자동 추출

↓

등록 시트에 프리필 → 확인 버튼만 누름

```

청첩장 받았을 때 "이거 캘린더에 옮기는 거 귀찮은데" → "사진 1장으로 끝나요"

### 🎯 2. 말하면 등록 (홈 위젯 음성 버튼)

위젯에 마이크 버튼 → 누름 → "내일 오후 3시 거래처 미팅" 말하면

Gemini 가 파싱해서 자동 등록 — 일정 화면을 안 켜도 됨.

홈 위젯 자체가 강력함. 잠금화면에서도 오늘 할 일 보고 체크 가능.

### 🎯 3. 로컬-우선 (Local-First) — 데이터 전부 폰 안

- 회원가입 X (이메일·비밀번호 입력 자체가 없음)

- 서버 X (저는 사용자 데이터에 접근할 수도 없음)

- AI 호출 비용은 사용자 본인 Gemini 키로 → 무료 한도 충분

- 백업은 사용자 본인 구글 드라이브

---

🌠 시행착오

😡 1. 타임라인 박스 길이 버그

증상: "지피터스 모각 12:00~19:00" 같은 7시간 일정이 1시간 칸으로만 그려짐. 다른 시간일정은 잘 보이는데 그거만 짧음.

저는 처음에 "빌드 캐시 문제 아닌가?" 의심하고 flutter clean 3번 돌렸어요.

알고 보니 Flutter Stack 의 fit 기본값이 loose 라서 자식 Container 가 자기 child(Column) 크기로만 그려진 거. Positioned 의 height 가 자식까지 전파 안 됨.

Claude 가 처음엔 똑같이 빌드 캐시 의심하다가, "코드 자체에 진짜 문제가 있다" 며 다시 코드 분석 들어가서 잡아냄. 한 시간 헤맸어요

```dart

// 수정 전

return Stack(children: [...]);

// 수정 후

return Stack(fit: StackFit.expand, children: [...]);

// ^^^^^^^^^^^^^^^^^^^^^^ 이 한 줄이 진짜 한 시간 잡아먹음

```

😡 2. 스낵바가 안 사라짐

"되돌리기" 스낵바 만들었는데 **2초 후에도 안 사라지고, 다른 탭으로 가도 그대로**.

duration: 2초 명시했는데 왜 안 사라지냐고 한참 헤맸는데, 원인은 home_shell 의 IndexedStack.

IndexedStack(index: tab, children: pages) — 이거 쓰면 탭 전환 시 dispose 가 호출 안 됨 (페이지들이 다 메모리에 살아 있음). Scaffold 하나만 쓰니까 ScaffoldMessenger 도 하나. 결국 어디 가도 같은 스낵바가 계속 보임.

해결:

1. home_shell.onDestinationSelected 에서 clearSnackBars() 직접 호출

2. 모든 스낵바에 Future.delayed → controller.close() 강제 close 안전망

---

🌠 배운 점 / 통계

16 세션 동안 만든 것 (요약)

| 입력 | 텍스트 자연어 · 음성(STT) · 사진(Vision) · 빈 시간 탭 · 위젯 음성 |

| 표시 | 시간 격자 타임라인 · 캘린더(월/주/년) · 홈 위젯 |

| 안전 | 휴지통 30일 · 구글 드라이브 백업·복원 · iCal 내보내기 |

| AI | 자연어 파싱 · 음성→텍스트 · 사진 분석 · 아침 AI 브리핑 |

| 편의 | 반복(매일/주/월/년/음력) · 우선순위 · 카테고리 · 검색 필터 · 첫 실행 온보딩 |

| 알림 | 아침 요약 · 사전 알림 · 배터리 최적화 가이드 |

비개발자가 claude 로 앱 만들면서 배운 것 5가지

1. PRD 문서가 진짜 진짜 중요함 — Claude 가 매번 세션 부팅할 때 PRD 읽고 시작. 문서 빈약하면 같은 질문 반복. 저는 docs/01_PRD_핸드오프.md 만 44KB 까지 키워뒀습니다.

2. 세션이 끝나면 핸드오프 문서 1개씩 — 세션 14~16 종합 같은 거. 다음 세션이 컨텍스트 0 에서 시작할 수 있게.

3. "빌드 캐시 의심" 함정 조심 — 문제 생기면 코드 진짜 보기 전에 캐시부터 의심하는데, 정작 코드 버그가 진범인 경우 많음.

4. 에러 메시지 친절화 = 사용자 경험의 절반 — STT 가 뱉는 error_no_match 영문 코드를 "음성이 명확하지 않아요. 한 번만 또박또박 다시 말씀해 주세요" 로 매핑한 거.

5. 로컬-우선의 위력 — Supabase + 클라우드 보다 간편해졌었음

---

🌠 출시 계획

- 가격: ₩1,900

- 마케팅: 별도 광고 X.

- 시장: 외식·서비스업 사장님 + AI 일정 관리 관심 일반인

- 다음 기능: 사진→일정 더 정교화 / 습관 통계 / 가족 공유 멀티유저

- SaaS 확장: 외식 프랜차이즈·소상공인용 "매장 일정/할일 SaaS" — FnB AI Lab 본업 + 유튜브 콘텐츠 직결

---

### 나. 비개발자 + Claude 의 진실

저는 코드 한 줄도 직접 안 쓰는 거 아닙니다. Dart 문법 어느 정도는 읽을 줄 알게 됐어요 (자동으로).

근데 진짜로 안 쓴 것:

- 클래스 처음부터 짜기 → Claude 가 함

- 마이그레이션 SQL → Claude 가 함

- AndroidManifest 만지기 → Claude 가 함

- 디자인 컬러 시스템 → Claude 가 함

저는:

- "이거 추가하고 싶어" 라고 말함

- 빌드해서 폰에 깔고 확인

- "이게 잘 안 되네 스크린샷 봐봐" 라고 말함

- 가끔 "이건 그냥 단색으로 하자" 같은 디자인 결정

이게 다임. **시간 가성비가 미친 수준**입니다.

잘 부탁드립니다~ 🙇🙇🙇

---

🌠 부록 — 폴더 구조 (궁금한 분 위해)

```

C:\Automation_erp\

├─ README.md ← 프로젝트 입구

├─ docs/ ← 14개 문서 (PRD·설치·세션 핸드오프 등)

│ ├─ 01_PRD_핸드오프.md (44KB)

│ ├─ 06_기능제안.md (완료/남은 것 분리)

│ ├─ 08_서비스약관.md / 09_개인정보처리방침.md (v2.0 로컬판)

│ ├─ 11_출시_체크리스트_로컬판.md

│ ├─ 12_세션14_16_핸드오프.md

│ └─ 13_향후_작업_리스트.md

├─ app/schedule_erp/ ← Flutter 앱 소스

│ ├─ lib/ (Dart 6,500줄)

│ └─ android/ + key.properties + upload-keystore.jks

├─ teukgeup_j_app_icon_pack/ ← 아이콘 + Play Store 그래픽

└─ supabase/ ← (미사용) 향후 SaaS 전환 시 참고용

```

2
3개의 답글
지피터스 뉴스레터

이번 주 AI, 딱 쓸 것만

매주 월요일 오후,
읽고 바로 써먹을 AI 소식만