Will Done
업무 시간(Will)을 설계하고 완료 기록(Done)을 Brag Document로 자동 변환하는 AI 기반 데스크톱 타임 트래커
1. Why this project? (Motivation)
커리어 성장을 위해서는 꾸준한 기록이 필수적이지만, 바쁜 업무 속에서 "오늘 무엇을 했는지"를 매번 정리하는 것은 큰 심리적 부하를 줍니다. 기존의 TODO 앱들은 할 일을 나열하는 데 그칠 뿐, 실제 업무 시간의 유동성을 반영하지 못하고 성과 문서화 단계로 이어지지 못하는 한계가 있었습니다.
- 일정의 경직성: 긴급 회의나 업무가 발생하면 계획된 타임라인이 무너지고, 이를 수동으로 조정하는 데 시간이 낭비됩니다.
- 기억의 휘발성: 이직이나 연봉 협상 시점에 과거의 구체적인 성과와 트러블슈팅 내역을 복기하기 어렵습니다.
이러한 문제를 해결하기 위해 지능형 타임 시프트(Time-Shift)와 AI 기반 Brag Document 자동화를 결합한 도구를 기획했습니다. 또한, 개발 방식에 있어서도 직접 코딩하지 않고 AI 에이전트만을 오케스트레이션하여 제품을 완성하는 "바이브 코딩(Vibe Coding)"을 실증하고자 했습니다.
2. Architecture & Vibe Coding Strategy
Core Engine Architecture
Tauri v2와 Rust를 기반으로 한 로컬 퍼스트 아키텍처를 채택했습니다. 모든 데이터는 SQLite에 저장되어 보안과 속도를 동시에 확보했으며, Rust의 강력한 타입 시스템과 비동기(Tokio) 처리를 통해 복잡한 스케줄링 연산을 안정적으로 수행합니다.
AI Orchestration (Vibe Coding)
직접 코드를 작성하는 대신, Gemini CLI, Antigravity, oh-my-opencode 등 다수의 AI 에이전트를 적재적소에 배치했습니다. 인간의 역할은 구현자가 아닌, 구조화된 레퍼런스(STRUCTURE.md, GUIDE.md)를 설계하고 AI의 작업물을 검증하는 "시스템 설계자"에 집중되었습니다.

3. Problems & Technical Solutions
동적인 업무 환경에서의 스케줄링 붕괴
일반적인 타임 트래커는 고정된 블록 방식을 사용하여 긴급 업무나 조기 종료 시 전체 타임라인을 수동으로 밀거나 당겨야 하는 번거로움이 있었습니다.
Solution: Recursive Scheduling Engine
Unplugged Time이나 긴급 업무 발생 시 기존 블록을 물리적으로 쪼개어(Split) 사이사이에 재배정하는 동적 시프트(Dynamic Shifting)를 수행합니다.- Recursive Block Splitting: 고정된 휴식 시간이나 회의 시간을 피해 업무 블록을 원자 단위로 분할하여 최적 배치
- Dynamic Shifting: 긴급 업무 삽입 시 현재 작업을 즉시
PENDING으로 전환하고 후속 모든 일정의 시작/종료 시각을 연쇄적으로 재계산
API 할당량 초과 및 서버 에러 대응
Gemini API의 Free Tier 사용 시 할당량 제한(429)으로 인해 성과 분석 기능이 중단되는 리스크가 있었습니다.
Solution Implementation: Multi-Model Fallback
로컬 캐시 → flash-lite → flash → pro 순으로 자동 전환하며 재시도하는 복구 로직을 통해, 어떤 상황에서도 성과 분석 서비스가 유지되도록 구축했습니다.for model in models_to_try {
match try_generate_content(&client, &api_key, &model, &prompt).await {
Ok(text) => return Ok(text),
Err(e) => {
eprintln!("Model {} failed: {}", model.name, e);
continue; // 다음 우선순위 모델로 자동 폴백
}
}
}AI 에이전트의 제어 불능 이슈
AI가 여러 작업을 동시에 처리하려다 맥락을 잃거나, 빌드 검증 없이 다음 작업을 진행하여 코드베이스가 오염되는 문제가 빈번했습니다.
Solution: Strict Harness Protocol
STRUCTURE.md를 단일 진실 공급원(SSOT)으로 운영하고, PLANNING.md를 통해 물리적 단일 작업 루프를 강제하며, 빌드/테스트 통과 전에는 절대로 다음 단계로 진행할 수 없도록 Verification Gate를 구축했습니다.- SSOT (Single Source of Truth):
STRUCTURE.md를 통해 프로젝트 현재 상태 실시간 동기화 - Atomic Loop:
PLANNING.md기반으로 한 번에 하나의 작업만 수행하도록 물리적 제약 - Verification Gate: 빌드/테스트 성공 전에는 스테이징 및 다음 단계 진행 불가
4. Project Highlights & Results
Logical Date System
사용자의 실제 생활 패턴을 반영하여, 설정된 dayStartTime을 기준으로 새벽 작업을 전날의 성과로 귀속시키는 논리적 날짜(Logical Date) 시스템을 구축했습니다.
Context-Aware Input
업무 입력 시 몰입을 방해하지 않도록, 포커스 시 부드럽게 확장되는 Task Input Overlay UX를 구현하여 문맥 중심적 인터페이스를 완성했습니다.
Modern Desktop Experience
Tauri의 Overlay Title Bar 기능을 활용하여 OS 경계를 허무는 프레임리스 디자인을 적용, 생산성 도구에 최적화된 심리스한 UX를 제공합니다.
Development Metrics
Total Commits
259+
Lines of Code
9,416
Build Success Rate
100%
Human Coding
0%
5. Lessons Learned
● AI 시대, 개발자의 정의 재정립
코드를 직접 작성하지 않고도 대규모 풀스택 애플리케이션을 성공적으로 구축하며, 미래 개발자의 핵심 역량은 "구현 기술"에서 "시스템 설계력과 AI 오케스트레이션 능력"으로 이동할 것임을 확신하게 되었습니다.
● 엄격한 프로토콜의 중요성
자율성이 높은 AI 에이전트를 제어하기 위해서는 단순한 지시(Prompt)가 아닌, 검증 가능한 시스템(Harness Protocol)이 필수적임을 깨달았습니다. 잘 설계된 제약 조건이 오히려 AI의 생산성을 극대화한다는 역설을 경험했습니다.