Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
163 commits
Select commit Hold shift + click to select a range
8d62eb8
chore: 프로젝트 생성 및 세팅
snughnu Jul 1, 2026
83a4166
chore: 기본 PR 템플릿, ci, README 수정
snughnu Jul 1, 2026
1b31838
Merge pull request #1 from snughnu/feature/project-base-setting
snughnu Jul 1, 2026
7fa8a96
chore: claude 코드 리뷰 ci 작성
snughnu Jul 1, 2026
d30aa2f
Merge pull request #2 from snughnu/feature/project-base-setting
snughnu Jul 1, 2026
2c9d21f
chore: 아키텍처 기본 구조 수정
snughnu Jul 1, 2026
16d61b4
chore: 클로드 리뷰 스크립트 수정
snughnu Jul 1, 2026
a1aaf79
chore: 클로드 리뷰 스크립트 수정
snughnu Jul 1, 2026
25b47e7
Merge pull request #3 from snughnu/feature/project-base-setting
snughnu Jul 1, 2026
d53cb67
chore: 클로드 리뷰를 위한 empty 파일 추가
snughnu Jul 1, 2026
b4ad82f
chore: 클로드 코드 스크립트 수정
snughnu Jul 1, 2026
9e7aff0
Merge pull request #4 from snughnu/feature/project-base-setting
snughnu Jul 1, 2026
ff0404a
chore: 클로드 리뷰를 위한 empty 파일 추가
snughnu Jul 1, 2026
67ca31e
Merge pull request #5 from snughnu/feature/project-base-setting
snughnu Jul 1, 2026
ccb191a
chore: Presentation 폴더링
snughnu Jul 1, 2026
cd0e9bb
feat: 컬러 셋 정의
snughnu Jul 1, 2026
64811fd
feat: IconCircleView 컴포넌트 구현
snughnu Jul 1, 2026
4be73a8
feat: MonthSelectorView 컴포넌트 구현
snughnu Jul 1, 2026
84eb40a
feat: ExpenseCell 컴포넌트 구현
snughnu Jul 1, 2026
6ad783b
feat: CategoryItemView 컴포넌트 구현
snughnu Jul 1, 2026
58f156e
feat: 시스템 Tabbar 구현
snughnu Jul 1, 2026
898d9dd
rename: DesignSystem 폴더명 Common으로 변경
snughnu Jul 1, 2026
5cc84b6
fix: 컬러셋 수정
snughnu Jul 1, 2026
99ee7af
feat: 도메인 엔티티 추가
snughnu Jul 1, 2026
ab72b20
feat: MockRepository 구현
snughnu Jul 1, 2026
7e3f5d9
feat: FetchExpensesUseCase 구현
snughnu Jul 1, 2026
dcf91ba
fix: ExpenseCell CollectionViewCell로 수정
snughnu Jul 1, 2026
554d108
fix: MonthSelectorView 주입 클로저 추가 및 정리
snughnu Jul 1, 2026
3a2a8c4
feat: CalendarDayCell 구현
snughnu Jul 1, 2026
a260b97
feat: CalendarWeekdayHeader 구현
snughnu Jul 1, 2026
643aede
feat: HomeViewModel 구현
snughnu Jul 1, 2026
ba91ccb
feat: MockData 비동기 호출로 변경
snughnu Jul 1, 2026
bc108d3
feat: MonthYearPickerViewController 구현
snughnu Jul 1, 2026
e23ff99
feat: HomeViewController 구현
snughnu Jul 1, 2026
9183aaf
feat: AddExpenseViewController 화면 전환 구현
snughnu Jul 1, 2026
26a56af
feat: 지출 삭제 플로우 구현
snughnu Jul 1, 2026
9514ccf
fix: Label 텍스트 수정
snughnu Jul 1, 2026
cd86c6e
feat: UseCase 테스트코드 작성
snughnu Jul 1, 2026
69362d7
feat: HomeViewModel 12->1월, 1->12월 로직 검증 테스트코드 추가
snughnu Jul 1, 2026
c53f427
Merge pull request #6 from snughnu/feat/Design
snughnu Jul 1, 2026
e151f3f
feat: AddExpenseViewModel 구현
snughnu Jul 1, 2026
39d657f
feat: CategoryCell 구현
snughnu Jul 1, 2026
7038b6c
feat: 지출 추가 플로우 구현
snughnu Jul 2, 2026
5524db2
feat: 지출 수정 플로우 구현
snughnu Jul 2, 2026
2d29d30
fix: 카테고리 선택 컬렉션뷰 높이 수정
snughnu Jul 2, 2026
6b0c57f
fix: 카테고리 선택 컬렉션뷰 셀 수정
snughnu Jul 2, 2026
60b2f83
feat: CustomNavigationBar 적용
snughnu Jul 2, 2026
33ad769
fix: 키보드 타이밍 수정
snughnu Jul 2, 2026
a8a2b18
fix: 일부 레이아웃 수정
snughnu Jul 2, 2026
1e5f8cc
feat: NewExpenseViewModelTests 추가
snughnu Jul 2, 2026
fb05f77
chore: ci 스크립트 수정
snughnu Jul 2, 2026
6877bad
Merge pull request #7 from snughnu/feat/Design-Input
snughnu Jul 2, 2026
79fce7f
remove: aiComment 제거
snughnu Jul 2, 2026
559539f
fix: 통계 -> AI
snughnu Jul 2, 2026
d9217f6
fix: ExpenseCell의 Separator 바깥으로 이동
snughnu Jul 2, 2026
9cbeb2a
feat: ExpenseModel 구현
snughnu Jul 2, 2026
b75c18d
feat: SwiftData 연동
snughnu Jul 2, 2026
943ed38
feat: 달력 amountLabel minimumScaleFactor 적용
snughnu Jul 2, 2026
b87cfd2
fix: 레이아웃 수정
snughnu Jul 2, 2026
f38c3d8
feat: ExpenseUseCaseTests 구현
snughnu Jul 2, 2026
76fe663
fix: 크래시 가능성 수정
snughnu Jul 2, 2026
56347b8
fix: Repository 탐색 속도 개선
snughnu Jul 2, 2026
6c3b150
Merge pull request #8 from snughnu/feat/Repo
snughnu Jul 2, 2026
e560f8a
fix: 카테고리 이모지로 변경
snughnu Jul 2, 2026
62e26ad
feat: CategoryModel 구현
snughnu Jul 2, 2026
2f42d9b
feat: 카테고리 커스텀 기능 추가
snughnu Jul 2, 2026
fdb8a3d
feat: SettingViewController 구현
snughnu Jul 2, 2026
7c5a339
feat: 카테고리 수정 화면 변경
snughnu Jul 2, 2026
26da49c
fix: CategoryManageViewController 스크롤뷰 구현
snughnu Jul 2, 2026
4b1f437
fix: CategoryEditViewController 레이아웃 수정
snughnu Jul 2, 2026
e3a375f
feat: CategoryEditViewController 이모지 유효성 검증 추가
snughnu Jul 2, 2026
27615b2
feat: CategoryEditViewController 키보드 내리는 로직 추가
snughnu Jul 2, 2026
4edddb9
feat: 카테고리 정렬 추가
snughnu Jul 2, 2026
93b869a
fix: 카테고리 row 아이콘 설정
snughnu Jul 2, 2026
8b22db5
feat: SettingsCategoryCell 재사용 수정
snughnu Jul 2, 2026
c845dfe
feat: 카테고리 삭제 시 기타로 전환
snughnu Jul 2, 2026
5d61747
fix: 이모지 유효검사 수정
snughnu Jul 2, 2026
1026aa0
feat: 카테고리 편집모드 설정
snughnu Jul 2, 2026
c3dd16a
fix: CategorySelectViewController 스크롤 수정
snughnu Jul 2, 2026
2e74681
fix: 카테고리 스크롤 수정
snughnu Jul 2, 2026
bbbd3f4
remove: 사용하지 않는 로컬 변수 삭제
snughnu Jul 2, 2026
62f29bd
feat: 테스트코드 수정 및 추가
snughnu Jul 2, 2026
cc35f83
fix: 불필요 인스턴스 생성 수정
snughnu Jul 3, 2026
370287e
refactor: 지출 매핑 카테고리명 -> 카테고리 ID 수정
snughnu Jul 3, 2026
befb603
feat: 에러 핸들링 추가
snughnu Jul 3, 2026
498ab48
feat: 카테고리명 중복생성 방지코드 추가
snughnu Jul 3, 2026
fe33c2c
fix: 카테고리 정렬 수정
snughnu Jul 3, 2026
1e67fa9
fix: 카테고리 편집 수정
snughnu Jul 3, 2026
4eac8c1
fix: 레이아웃 수정
snughnu Jul 3, 2026
7026bca
fix: 카테고리 순서 저장 함수 수정
snughnu Jul 3, 2026
b77799a
fix: 카테고리 재설정 수정
snughnu Jul 3, 2026
1c6bb85
fix: 레이아웃 수정
snughnu Jul 3, 2026
812c200
fix: SettingsCategoryCell prepareForReuse 수정
snughnu Jul 3, 2026
035bdca
Merge pull request #9 from snughnu/feat/setting
snughnu Jul 3, 2026
61adbb3
feat: AIStatusView 구현
snughnu Jul 3, 2026
a1c9fe0
fix: 컬러셋 수정
snughnu Jul 8, 2026
82ba2c6
feat: AIInsightView 추가
snughnu Jul 8, 2026
69e8bfb
feat: AICategoryPredictionView 헤더 구현
snughnu Jul 8, 2026
3d3c7de
fix: 타이틀 text 통일
snughnu Jul 8, 2026
81bc1c4
refactor: AI탭 SwiftUI로 변경
snughnu Jul 8, 2026
533f8b4
feat: 예측 차트 추가
snughnu Jul 9, 2026
6ad2611
fix: RuleMark 수정
snughnu Jul 9, 2026
5b02b6c
feat: 예측 총 PointMark 추가
snughnu Jul 9, 2026
2b6e58d
feat: 오늘 날짜 PointMark 추가
snughnu Jul 9, 2026
87f5d95
feat: EmptyView 추가
snughnu Jul 9, 2026
112948d
fix: 카테고리 예측 카드뷰 헤더 수정
snughnu Jul 9, 2026
0ea6710
fix: Mock 주입 변경
snughnu Jul 9, 2026
884e79b
feat: 카테고리 카드뷰 EmptyView 분기 구현
snughnu Jul 9, 2026
09b5ec2
fix: 예측 카드 뷰 데이터 구조 변환
snughnu Jul 9, 2026
ecbc6d0
feat: 카테고리 카드 chart 구현
snughnu Jul 9, 2026
acaeb85
feat: 카테고리 차트 수정
snughnu Jul 9, 2026
7764c64
fix: AIView 순서 수정
snughnu Jul 9, 2026
0656685
feat: 카테고리 전체보기 버튼 추가
snughnu Jul 9, 2026
d0e6a57
feat: 예측 모델 없을 때 수정
snughnu Jul 9, 2026
b62ae97
fix: AIView 수정
snughnu Jul 9, 2026
6cac631
feat: 모델 생성하기 얼럿 추가
snughnu Jul 9, 2026
f97a543
feat: AIModelSelectView 구현
snughnu Jul 9, 2026
32db11e
feat: 라이트모드 고정
snughnu Jul 9, 2026
23663e0
Merge pull request #10 from snughnu/feat/AI-view
snughnu Jul 10, 2026
8e8eca0
feat: AIModelMetadata 엔티티 생성
snughnu Jul 14, 2026
1ddbe11
feat: AI UseCase, Repository 프로토콜 구현
snughnu Jul 14, 2026
3791f65
feat: AIViewModel 데이터 바인딩
snughnu Jul 14, 2026
ad67a2c
fix: 카테고리 예측 카드 뷰 전체보기 버튼 수정
snughnu Jul 14, 2026
95ef272
fix: 불필요한 중복 모델 제거
snughnu Jul 14, 2026
dda7248
feat: AIStatusCardView 모델 없을 때 대응
snughnu Jul 14, 2026
29984d5
feat: 모델 없을 때의 토스트 추가
snughnu Jul 14, 2026
f6646ed
feat: 인사이트 Mock Repo 등록
snughnu Jul 14, 2026
c884224
feat: 뷰의 모델 도메인 모델로 이동
snughnu Jul 14, 2026
c4edd1b
fix 누적을 담는 모델로 변경
snughnu Jul 14, 2026
0163b8b
fix: 뷰모델 로직으로 이동할거 처리
snughnu Jul 14, 2026
b55aa3b
feat: AIUseCaseTests 테스트코드 추가
snughnu Jul 14, 2026
72f69ed
feat: AIViewModel 테스트코드 추가
snughnu Jul 14, 2026
afd6eb9
fix: chart 오늘 날짜까지만 보이도록 수정
snughnu Jul 14, 2026
6d843d6
Merge pull request #11 from snughnu/feat/AI-View-Data-Binding
snughnu Jul 14, 2026
31f6404
feat: PredictionStrategy 구현
snughnu Jul 14, 2026
72e6f94
feat: StatisticsPredictionStrategy 구현
snughnu Jul 14, 2026
106eaed
feat: ExpenseRepositoryProtocol에 전체 기간 조회 추가
snughnu Jul 14, 2026
b83ec21
feat: StatisticsAIRepository 구현
snughnu Jul 14, 2026
ad01366
feat: AIModelCreationError 추가
snughnu Jul 14, 2026
7402112
feat: AI 통계 모델 데이터 연결
snughnu Jul 14, 2026
e7f676e
feat: 모델 교체 플로우 구현
snughnu Jul 14, 2026
469e3d0
fix: 테스트 코드 stub spy 수정
snughnu Jul 14, 2026
992b876
Merge pull request #12 from snughnu/feat/Prediction-Strategy
snughnu Jul 14, 2026
a7704bd
feat: 모델 삭제 Data 계층 구현
snughnu Jul 14, 2026
57f672d
feat: 예측 모델 삭제 Presentation 레이어 구현
snughnu Jul 14, 2026
8cadd66
fix: PredictionStrategy 비동기로 전환
snughnu Jul 15, 2026
bca43e2
fix: AI -> Prediction 수정, 인사이트 제거
snughnu Jul 15, 2026
00e950c
remove: 불필요 추상화 제거, 파일 제거
snughnu Jul 15, 2026
8923d06
feat: 통계 예측 방법 수정
snughnu Jul 15, 2026
55f08d5
fix: 예측 모델 개념 제거
snughnu Jul 15, 2026
ee9aa5f
fix: BarMark 수정
snughnu Jul 15, 2026
3b03275
fix: 테스트코드 수정
snughnu Jul 15, 2026
95a27ed
fix: 예측 BarMark 수정
snughnu Jul 15, 2026
8e3f64a
fix: 예측 항상 가능하게 수정
snughnu Jul 15, 2026
1fbf56e
fix: 데이터 사용 개수 수정
snughnu Jul 15, 2026
8383718
fix: Mock Repo 대치
snughnu Jul 15, 2026
60e7b16
feat: 초기화 추가
snughnu Jul 15, 2026
8ac4ba3
feat: 카테고리 차트 수정
snughnu Jul 15, 2026
39c83b9
chore: 앱아이콘 추가
snughnu Jul 15, 2026
81ae5c9
chore: 앱버전, 이름 설정
snughnu Jul 15, 2026
e0754e8
fix: 정확도 계산 수정
snughnu Jul 15, 2026
1c158cd
fix: 테스트 코드 수정
snughnu Jul 15, 2026
b309fb0
Merge pull request #13 from snughnu/feat/Prediction
snughnu Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## Situation

## Task

## Action

## Result
48 changes: 48 additions & 0 deletions .github/workflows/code-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Claude Code Review

on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]

jobs:
claude-review:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude'))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
issues: write
id-token: write
steps:
- uses: actions/checkout@v4

- uses: anthropics/claude-code-action@beta
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
model: "claude-sonnet-4-6"
custom_instructions: |
당신은 iOS/Swift 전문 코드 리뷰어입니다. 한국어로 리뷰를 작성하세요.

## 리뷰 기준
- 잠재적 버그 및 로직 오류
- 성능 이슈 (불필요한 연산, 메모리 누수, 비효율적인 데이터 처리 등)
- Swift/iOS 안티패턴
- SwiftData, Vision Framework 등 프레임워크 오용

## Pn 룰 적용
모든 리뷰 코멘트에 아래 우선순위를 명시하세요.
- P1: 반드시 수정 필요 (버그, 크래시 가능성)
- P2: 적극적으로 수정 권장
- P3: 웬만하면 반영 권장
- P4: 반영해도 좋고 넘어가도 좋음
- P5: 사소한 의견

## 형식
각 코멘트를 `[P1]`, `[P2]` 등으로 시작하고, 이유와 개선 방법을 함께 작성하세요.
해결 방법이 여러 개인 경우, 각 방법을 간단히 나열하고 장단점을 요약한 뒤 추천 방법을 명시하세요.
코드를 직접 수정하거나 커밋하지 말고, 제안만 간단하게 작성하세요.
코드 제안 시 함수나 의미있는 블록 단위로 코드 블록을 제공하세요.
73 changes: 73 additions & 0 deletions .github/workflows/ios-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: iOS CI

on:
push:
branches: [ main, dev ]
pull_request:
branches: [ main, dev ]

jobs:
build-and-test:
name: Build and Test
runs-on: macos-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable

- name: Show Xcode version
run: xcodebuild -version

- name: Find latest iOS Simulator
id: find-simulator
run: |
ALL_DEVICES=$(xcrun simctl list devices available | grep "iPhone")

NUMBERED_IPHONES=$(echo "$ALL_DEVICES" | grep -E "iPhone [0-9]+" | sed -E 's/.*iPhone ([0-9]+).*/\1/' | sort -n -u)
LATEST_NUMBER=$(echo "$NUMBERED_IPHONES" | tail -1)

echo "최신 iPhone 버전: $LATEST_NUMBER"

SIMULATOR_ID=""
for MODEL in "iPhone $LATEST_NUMBER Pro Max" "iPhone $LATEST_NUMBER Pro" "iPhone $LATEST_NUMBER Plus" "iPhone $LATEST_NUMBER"; do
FOUND=$(echo "$ALL_DEVICES" | grep "$MODEL" | tail -1)
if [ -n "$FOUND" ]; then
SIMULATOR_ID=$(echo "$FOUND" | grep -oE '[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}')
SIMULATOR_NAME=$(echo "$FOUND" | sed -E 's/^[[:space:]]*([^(]+).*/\1/' | xargs)
echo "simulator_id=$SIMULATOR_ID" >> $GITHUB_OUTPUT
echo "simulator_name=$SIMULATOR_NAME" >> $GITHUB_OUTPUT
echo "선택된 시뮬레이터: $SIMULATOR_NAME ($SIMULATOR_ID)"
break
fi
done

if [ -z "$SIMULATOR_ID" ]; then
echo "사용 가능한 iPhone 시뮬레이터를 찾을 수 없습니다."
xcrun simctl list devices available
exit 1
fi

- name: Build SpendLearning
run: |
cd SpendLearning
xcodebuild clean build \
-project SpendLearning.xcodeproj \
-scheme SpendLearning \
-destination "platform=iOS Simulator,id=${{ steps.find-simulator.outputs.simulator_id }}" \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGNING_REQUIRED=NO

- name: Test SpendLearning
run: |
cd SpendLearning
xcodebuild test \
-project SpendLearning.xcodeproj \
-scheme SpendLearning \
-destination "platform=iOS Simulator,id=${{ steps.find-simulator.outputs.simulator_id }}" \
CODE_SIGNING_ALLOWED=NO \
CODE_SIGNING_REQUIRED=NO \
84 changes: 66 additions & 18 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,62 +1,110 @@
# Created by https://www.toptal.com/developers/gitignore/api/swift,xcode,macos
# Edit at https://www.toptal.com/developers/gitignore?templates=swift,xcode,macos
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### macOS Patch ###
# iCloud generated files
*.icloud
### Swift ###
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

## User settings
*.xcuserstate
*.xcuserdatad
xcuserdata/

## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
## Obj-C/Swift specific
*.hmap

## App packaging
*.ipa
*.dSYM.zip
*.dSYM

## Playgrounds
timeline.xctimeline
playground.xcworkspace

# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
# .swiftpm

.build/

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build/

# Accio dependency management
Dependencies/
.accio/
# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control

fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
# Code Injection
# After new code Injection tools there’s a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
### Xcode ###
## Xcode 8 and earlier
### Xcode Patch ###
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcodeproj/project.xcworkspace/
!*.xcworkspace/contents.xcworkspacedata
/*.gcno
**/xcshareddata/WorkspaceSettings.xcsettings

# End of https://www.toptal.com/developers/gitignore/api/swift,xcode,macos

38 changes: 37 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,38 @@
# SpendLearning
소비학습 - 돈을 쓸 때마다 똑똑해지는, 나를 위한 지출 전용 머신러닝 가계부

소비 전용 가계부 앱. 지출만 기록하고, 소비 패턴을 학습해 피드백을 제공한다.

---

## 주요 기능

### 소비 기록
- 달력 화면에서 날짜 선택 후 소비 기록
- 금액, 카테고리, 메모(선택) 입력
- 최근 기록 빠른 입력 지원

### 통계
- 카테고리별 비율 (원그래프)
- 이번 달 / 이번 년도 / 저번 년도 전환 가능
- 이번 달·년도는 직전 기간 대비 증감 표시

### AI 피드백
- 소비 패턴을 학습해 피드백 제공
- 카테고리 이상 지출 감지
- 고정 지출 패턴 알림
- 절약 성공 칭찬
- 이번 달 소비 예측
- 메인 화면 상단 카드 + 푸시 알림으로 노출

### 토스 캡쳐 자동 기록
- 토스 거래내역 캡쳐 후 앱에서 불러오면 OCR로 자동 파싱
- 내용 확인 및 카테고리 선택 후 기록 완료

### 카테고리
- 기본 제공: 식비, 카페/디저트, 교통, 쇼핑, 구독, 의료/건강, 여가/문화, 기타
- 사용자 커스텀 추가 가능

### 기타
- iCloud 백업/복원
- 소비 기록 수정/삭제
- 첫 실행 온보딩 (카테고리 설정, 토스 캡쳐 기능 안내)
Loading
Loading