
오늘 Obsidian에서 사용할 루틴 스트릭 플러그인을 하나 만들었다. 이름은 Routine Streaks.
코덱스와 함께 단 하루만에 release까지 해버렸다. AI 시대 정말 무섭기도 하면서 엄청난 생산성에 놀라움을 감추지 못하겠다. 아래 글도 기능을 설명하는 부분은 AI로 작성되었다.
핵심 아이디어는 간단하다.
루틴 완료 기록의 원본은 플러그인 데이터가 아니라, Daily Note 안의 체크박스여야 한다.
예를 들면 이런 식이다.
- [ ] 물 마시기 #routine/morning
- [x] 일기 쓰기 #routine/evening
Routine Streaks는 Daily Note를 스캔해서 #routine/morning 같은 태그가 붙은 체크박스를 찾고, 해당 날짜의 루틴 완료 여부를 계산한다. 플러그인 내부에는 루틴 설정과 재계산 가능한 캐시만 저장한다.
왜 만들었나
나는 옵시디언을 Second Brain으로 사용하고 있다. 그런데 다른 습관 추적 앱을 사용하자니 분산되는 느낌이 들고, routine 관리하는 앱을 사용하자니 구독료를 요구해서 부담이 되었다. 그래서 그냥 내가 플러그인을 만들자!는 생각이 들었고, 든든한 코덱스와 클로드가 있었기 때문에 만들어보기로 결심했다.
또한, 기존 obsidian plugin들은 위젯들이 연동이 어려워서, 나는 아이폰에서 scriptable이라는 위젯 어플이랑 연동이 편하도록 플러그인을 만들고자 하였다.
습관 관리 앱은 많지만, 나는 완료 기록이 앱 내부 데이터에만 갇히는 방식이 조금 아쉬웠다. Obsidian을 쓰는 이유 중 하나는 기록이 평범한 Markdown 파일로 남는다는 점이다. 그래서 루틴도 똑같이 Markdown 안에 남아야 한다고 생각했다. Daily Note에 체크박스를 쓰고, 거기에 태그만 붙이면 된다. 나중에 플러그인을 지워도 내 기록은 그대로 남는다.
주요 기능
Routine Streaks는 현재 이런 기능을 지원한다.
- Daily Note 체크박스 기반 스트릭 계산
- 루틴별 태그, 스케줄, 템플릿 관리
- 요일별 루틴, 주 N회 루틴, N일/N주 간격 루틴
- 아플 때나 쉬고 싶을 때 사용할 수 있는 freeze / pause 기능
- 현재 노트의 커서 위치에 루틴 템플릿 삽입
- 사이드바 위젯과 Markdown 코드블록 위젯
- iOS Scriptable 위젯 코드 생성
- 오늘 진행 상황에 반응하는 픽셀 pet 카드
Daily Note가 원본이다
이 플러그인에서 가장 중요하게 잡은 설계는 “Daily Note가 원본”이라는 점이다.
플러그인의 data.json에는 완료 기록을 영구 원본처럼 저장하지 않는다. 대신 다음 정도만 저장한다.
- 루틴 정의
- Daily Note 경로/날짜 포맷
- 위젯 설정
- 재계산 가능한 streak cache
즉, 캐시를 지워도 Daily Note만 남아 있으면 다시 계산할 수 있다.
체크박스를 다시 해제하면 다음 재계산 때 완료 기록도 빠진다. 이 점이 마음에 들었다. 실제 기록과 플러그인 상태가 따로 놀지 않는다.
루틴 템플릿 삽입
매일 같은 루틴 항목을 직접 쓰는 건 귀찮다.
그래서 설정에서 루틴별 템플릿을 만들어둘 수 있게 했다. 예를 들어 Morning Routine에 이런 항목을 등록해두면:
Drink water
Open journal
Stretch
명령 팔레트에서 Routine Streaks: Insert routine template을 실행했을 때 현재 커서 위치에 이런 식으로 들어간다.
- [ ] #routine/morning Drink water
- [ ] #routine/morning Open journal
- [ ] #routine/morning Stretch
스케줄과 freeze
루틴마다 스케줄도 다르게 설정할 수 있다.
- 특정 요일
- 주 N회
- N일마다 또는 N주마다 반복
그리고 streak가 너무 빡빡해지지 않도록 freeze와 pause도 넣었다.
예를 들어 오늘은 아프거나 여행 중이라 루틴을 못 할 것 같다면 Freeze today로 오늘 하루를 보호할 수 있다. 더 길게 쉬고 싶다면 Pause routine을 걸고, 완료 시 재개하거나 직접 재개하거나 특정 날짜까지 멈출 수 있다.
위젯
Obsidian 안에서는 사이드바 위젯과 Markdown 코드블록 위젯을 지원한다.
Markdown 안에는 이렇게 넣을 수 있다.
```routine-streaks-widget
title: My routine dashboard
subtitle: Today status
widgets:
- overview: Summary
- today_items: Checklist
- routine_cards: All routines
```
이렇게 하면 노트 안에 루틴 대시보드를 넣을 수 있다.
Scriptable 연동
이번 플러그인에서 개인적으로 가장 마음에 드는 부분은 Scriptable 연동이다.
Obsidian 안에서 계산한 루틴 데이터를 data.json으로 export하고, 플러그인이 iOS Scriptable용 코드를 생성해준다. 그 코드를 Scriptable에 붙여넣으면 iPhone 홈 화면에서 루틴 스트릭 위젯을 볼 수 있다.
즉, 기록은 Obsidian Daily Note에 남기고, 진행 상황은 iPhone 홈 화면에서 바로 확인할 수 있다.
이 연결이 꽤 만족스럽다. Obsidian 안에만 갇힌 루틴 관리가 아니라, 실제 생활에서 자주 보는 화면까지 이어지는 느낌이 든다.
만들면서 느낀 점
처음에는 단순히 “아침 루틴, 저녁 루틴 스트릭만 계산하면 되지 않을까?” 정도로 시작했다.
그런데 만들다 보니 생각보다 고려할 게 많았다.
- 루틴 id를 바꾸면 기존 캐시는 어떻게 할지
- Daily Note가 없는 날은 어떻게 처리할지
- 비예정일에 체크한 항목은 streak에 들어가야 할지
- 주 N회 루틴은 언제 streak가 끊겨야 하는지
- 체크박스를 다시 해제하면 완료도 취소되어야 하는지
- 모바일 위젯에는 어느 정도의 정보를 보여줘야 하는지
이런 것들을 하나씩 결정하면서 플러그인의 방향이 점점 분명해졌다.
결론은 “데이터는 Markdown에, 계산은 플러그인에, 표시는 위젯에”였다.
마무리
Routine Streaks는 내가 Obsidian을 쓰는 방식에 맞춰 만든 플러그인이다.
Obsidian에서 루틴을 관리하고 싶은데, 기록은 계속 Markdown 안에 남기고 싶은 사람에게 잘 맞는 플러그인이 되었으면 좋겠다.
'정보의 샘 - 과학과 기술 > IT, Tech' 카테고리의 다른 글
| [ChatGPT] "css를 테스트하기 위한 마크다운 샘플을 만들어줘" + "이 경험을 바탕으로 블로그 글 써줘" (0) | 2023.10.13 |
|---|---|
| [다과랜드 리뷰] 구글 네스트 오디오 후기 및 사용기 (0) | 2022.03.25 |
| [스마트홈 프로젝트 - 05] Sonoff Zigbee 센서 추가하기 - 2 (0) | 2021.10.31 |
| [스마트홈 프로젝트 - 04] Zigbee 센서 추가하기 - 1 (0) | 2021.10.30 |
| [스마트홈 프로젝트 - 03] 홈어시스턴트(Home assistant) 설치 (0) | 2021.10.29 |