Skip to main content
← 홈

블로그

Fecit을 만들며 배운 이야기들.

프로젝트는 법인 같은 거야

'나'와 '프로젝트'를 오가는 전환 버튼 하나를 만들다가, 프로젝트가 폴더가 아니라 워크스페이스라는 걸 알게 됐다. 멤버 가시성, 공유 필터, 그리고 '보이면 소식도 와야 한다'는 불변식까지.

표는 욕심을 부린다 — 데스크톱 테이블 뷰

데스크톱에 테이블 뷰를 만들었다. 셀 인라인 편집에서 시작해 컬럼 리사이즈·순서 변경·표시 설정·헤더 정렬과 필터·저장 필터 칩까지, 표 하나가 하루를 다 먹은 이야기.

스크롤을 못 따라오던 sticky 헤더 — UI 스레드로 옮기기

긴 태스크 폼에 sticky 필드 헤더를 붙였다. 잘 동작했는데, fling을 하면 얼었다가 점프했다. 답은 로직을 더 짜는 게 아니라, 스크롤을 JS 스레드에서 빼는 것이었다.

21만 줄 — 여기까지 왔구나

Fecit이 몇 줄인지 세어봤다. 약 21만 줄. 많지 않은 손으로 만든 것치고는, 잠깐 뿌듯해도 되지 않을까.

SSE에서 WebSocket으로 — 받은 메시지를 버리지 못해서

실시간 동기화를 SSE로 잘 만들어 뒀는데, XHR이 받은 걸 전부 쌓아두는 바람에 메모리가 샜다. 그래서 WebSocket으로 갈아탄 이야기.

메모도 배운다

기록이 템플릿을 가르치는 되먹임 루프를 메모로 넓혔습니다. 메모는 본문 하나뿐인 더 단순한 존재라, 오히려 이 루프가 더 깔끔하게 들어맞았습니다 — 그리고 어려운 알고리즘은 한 줄도 다시 쓰지 않았습니다.

해 보고 나서야, 템플릿이 배운다

템플릿에서 발화한 기록을 실제로 해 보면 으레 뭔가 달라집니다 — 재료 하나를 더 챙기고, 단계 하나를 빼고. 원할 때 그 차이를 템플릿에 되돌려, 청사진이 현실을 따라 배우게 했습니다.

힌트 바 — 답 대신 질문을 건네기로 했다

필드를 누르면 질문 하나가 뜨는 힌트 바. 버튼은 눌리는데 힌트가 안 뜨고, AI는 자꾸 제목 얘기만 하던 이야기.

앱스토어 밖에서, 다나를 사는 법

모바일엔 인앱 결제가 있지만, 웹과 데스크톱엔 상점이 없습니다. 그래서 결제의 다른 문을 열었습니다 — 결제는 브라우저에서 끝나고, 다나 적립은 Polar가 보내오는 웹훅으로 마무리됩니다.

이번엔 별이 되묻는다

필드의 질문을 정적인 한 줄에서 꺼내, 당신이 쓴 것을 보고 더 날카롭게 되묻게 만들기까지 — 그리고 그 질문에 값을 매기는 일.

이걸 실패하면 뭘 잃나요 — '위험 부담' 칸을 더했습니다

Task 와 Project 에 '위험 부담(stakes)' 칸을 추가했습니다. 난관(obstacle)이 '진행을 막는 것'이라면, 위험 부담은 '실패하면 무엇을 잃고, 그래도 갈 가치가 있는가' — 계획이 아니라 결정을 돕는 칸입니다.

필드를 누르면 떠오르는 작은 질문

가이드를 '모드'에서 꺼내 보면서 — 별 하나, 토글 하나, 그리고 입력창 두 개가 만들어 낸 깜빡임 버그.

비어있는 description, AI 가 대신 써줍니다

Task 의 title, 의도, 기대 결과를 바탕으로 AI 가 description 본문을 만들어주는 기능. 가벼운 제목엔 짧게, 진지한 작업엔 구체적으로 — 결과가 한 줄씩 나타나는 경험까지.

같은 시계, 다른 의도

focused task에서는 압박감 때문에 경과 시간을 숨겼는데, active now 바에는 다시 넣었다. 같은 데이터가 한쪽에선 부담이고 다른 쪽에선 핵심 컨텍스트가 되는 이유.

X 상황이 오면 Y 라고 적어두기

Gollwitzer가 30년 전에 보여준 if-then plan을 태스크 옆에 끼워 넣으면서 정리한 결정들 — 태스크 단위에 두는 이유, 카드의 구조, Rich Text를 쓴 이유.

집중 바가 25분을 세기 시작했다

이미 있던 한 칸에 정식 뽀모도로를 얹으며 한 결정들 — 표준 사이클을 그대로 둔 이유, setInterval을 안 쓴 이유, 그리고 포커스가 풀리면 같이 풀려야 한다는 결.

칸반 보드를 만든 이야기

카드 끌어다 놓는 것 하나에 이렇게 많은 결정이 필요할 줄은 몰랐습니다.

메모 — 생각을 털어놓는 곳

할 일도 아니고 일기도 아닌 것, 어디에 적어야 할까. Fecit 에 메모 탭을 만든 이유.

칸반을 Tasks의 sub-view로

칸반을 별도 탭으로 만들지 않고 Tasks 안의 sub-view 중 하나로 넣은 이유.

count랑 language만 보내자 — Public Library를 매일 새벽 AI가 채우게 만들기

Fecit Public Library가 텅 빈 느낌이 들면 안 된다는 문제에서 시작했어요. admin이 토픽 리스트를 직접 보내던 batch endpoint에서, count·language만 받고 나머지는 AI가 결정하는 endpoint를 거쳐, 매일 새벽 03:00에 자동으로 굴러가는 잡까지. 인터페이스를 좁히는 만큼 AI에게 맡길 수 있는 게 늘어났습니다.

이미 정의된 dirty 플래그를 안 보던 자리 — 편집 중 draft가 사라지던 버그

Desktop에서 task 편집 중 첨부 같은 다른 곳을 누르면 작성하던 내용이 사라진다는 제보. 원인은 sync useEffect가 currentTask 변할 때마다 모든 local draft를 무조건 리셋하던 코드. 같은 파일 안에 이미 dirty 플래그가 정의되어 있었는데 그걸 안 보고 있었어요.

흩뿌림이 비용이 아니라 형태였다 — template cache를 record와 정확히 같게

어제 만든 template cache는 record cache와 '거의 같다'고 정리했지만 의도적 제외 네 가지를 두고 있었어요. 사용자의 '그냥 record랑 같게' 한 마디로 그 제외들이 다 풀렸고, record를 다시 들여다보니 102곳에 한 줄씩 흩뿌려진 형태가 비용이 아니라 답이었어요.

Record cache를 template에 — 빼는 것이 추가만큼이다

Library 탭의 spinner를 지우려고 SQLite cache 패턴을 record에서 template으로 옮긴 하루. 그대로 복사하는 게 아니라 사진·assignee·current_sub_task·상태 필드들을 빼고, 두 가지 정책(사진은 lazy, owner만 캐시)에 맞춰 다시 그린 작업.

처음 설계가 과했다 — 개선 제안 시스템 단순화와 위치 정보

Trigger 네 종류, signal spec 추상화, 모든 record 재평가. 그렇게 잘 설계한 줄 알았는데 사용해 보니 무한 cycle을 만드는 시스템이었다. 처음부터 다시 줄이고, 그 다음에 정확도를 더한 하루.

사라진 시트, 가둬진 화면 — iOS Modal 스태킹 버그를 좁히기

Template task를 완료하면 만족도 시트가 사라진 직후 화면 전체가 동결되는 증상. 애니메이션은 계속 도는데 터치는 다 먹힘. 가설 여러 개를 거치고 마지막에 진짜 원인을 찾은 디버깅 기록.

진행 중을 어떻게 보여줄까 — 알람부터 끝까지

focus가 파란 외곽 wrap이라면, '진행 중'은 어떻게 표시할까. STARTED 한 줄로 끝날 줄 알았는데, 등장 시점이 어디인지부터 한참을 이야기한 하루.

할 일의 변경을 템플릿에 반영하기

템플릿은 미래의 할 일을 위한 형이지만, 같은 템플릿으로 할 일을 여러 번 만들다 보면 템플릿이 못 따라잡는 순간이 옵니다. 그 학습을 어디서, 어떻게 받을지 — push에서 pull로 옮긴 하루.

템플릿 제안을 embedding으로 — 한국어 동의어와 마주한 하루

정확히 같은 제목 두 번 쳐야 뜨던 "Template으로 만들까요?" 제안을, 의미가 비슷하면 잡도록 바꾸는 과정. M0 free tier 한도, 차원 통일, 호출 1회 재사용, 그리고 한국어에서 드러난 모델의 한계까지.

첫 5분의 마찰 — 입력은 줄이고, 다음 행동은 보이게

신규가 머물지 않고 떠나는 시기에 손댄 작은 일들 — 랜덤 닉네임, 서베이 직후 ‘이게 뭘 의미하는지’ 미리보기, 그리고 빈 화면에서 깜빡이는 +.

‘gap’에서 ‘준비’로 — 랜딩 카피를 정체성에 맞추기

‘차이를 보고 좁혀라’에서 ‘필요한 도구는 모두 준비되어 있다’로. 한 단어를 바꾸는 일이 어디까지 번지는지에 대한 기록.

할 일 목록 위에 떠 있는 작은 빨간 줄

‘지금 뭐 해야 하지?’에 답하는 한 칸을 만들면서 짚어 본 것들 — 분 단위 타이머, 데스크톱 포팅, 그리고 그 사이에 발견한 같은 모양의 버그 두 개.

하루치 UX 다듬기

어디서 덜컥거리는지 들으면서, 하루 동안 작은 결정 여러 개를 고쳤다. 작은 변화가 모이는 기록.

달력이 멈추지 않았다

필터를 유지하려다 서버를 도배할 뻔한 이야기.

사이드바를 위로 옮기다

데스크탑은 모바일을 키운 게 아니었습니다.

별이 춤춘다

태스크 옆 별에 두 가지 움직임을 더했습니다 — 평소의 반짝임과 완료의 춤.

키보드로 달력을 움직인다

데스크탑 달력에 단축키를 붙이고 나서야 발견한 작은 버그 하나.

어색함을 신뢰한다는 것

위저드를 만들었다 폐기하고, Event 엔티티를 시작했다 폐기했다. 0명 사용자 상태에서 "어색하다" 는 느낌이 거의 유일한 검증 신호인 이유와, 그것을 신뢰해서 멈추는 일에 대해.

Journey 엔티티를 만들었다가 폐기했다

흩어진 항목을 묶을 새 엔티티 Journey를 80%까지 만들고 폐기한 이야기. 엔티티의 경계는 격리해서는 안 보이고, 다른 것과 연결할 때 비로소 드러난다는 깨달음.

알림 시스템에서 진짜 일은 '안 보내는' 쪽이다

팔로우, 좋아요, 댓글, 북마크 — 이벤트마다 알림을 다 보내고 싶다. 근데 사용자 입장에선 그게 재앙이다. 오늘 만든 알림 시스템은 보내는 것보다 거르는 데 더 신경 썼다.

별이 자란다

태스크의 깊이를 시각적으로 보여주는 fidelity 시스템.

다나 — Fecit의 작은 화폐

사용자 간 가치를 주고받기 위한 가상 화폐를 도입했습니다. 첫 보상은 Public Library에 Overview를 등록하는 일입니다.

Market을 열다

Public Library가 공유의 자리였다면, Market은 거래의 자리입니다. 다나가 점수에서 화폐로 바뀌는 지점.

구조에 기억을 더한다는 것

사람들이 더 쉽게 성취하게 하려면 뭘 해야 할까? 며칠을 돌고 돌아 결국 'Fecit이 갖고 있는 구조에 시간을 붙이는 일'이라는 답에 도달했습니다.

한 단계의 모달이 만든 다섯 가지 문제

가이드 모드의 만족도 단계가 모달이라는 이유로, 그 위로 다섯 개의 문제가 줄줄이 따라왔습니다. 우여곡절 끝에 결국 RN Modal을 바꿨습니다.

좋아요와 프로필, 그리고 작은 UX 보정

커뮤니티에 좋아요 기능과 다른 유저 프로필 보기를 한 번에 붙였습니다. 그 사이사이 작은 결정들과, 마지막에 한 번 되돌린 결정에 대해.

팔로우는 구독이다 — 그래서 비대칭

팔로우는 한 단어 안에 두 가지 다른 의미가 섞여 있다. 콘텐츠 구독과 사회적 신호. 어느 쪽인지 정하면 — 디자인이 따라온다.

보이는 문제는 미리 갈아엎는다

북마크 기능이 잘 돌아가긴 했다. 그런데 북마크가 수천 개 쌓인 사용자에게서 망가질 것이 보였다. 그래서 그 자리에서 갈아엎었다.

Daily/Weekly 루틴을 나누고, 캘린더 일자별 화면에 깔았다

1179줄짜리 화면을 둘로 쪼개면서 공유 utility를 추출했고, 그 결과로 캘린더 일자별 화면에 routine 배경 표시도 자연스럽게 들어갔습니다.

커뮤니티 탭을 사이드 메뉴로 다시 정리했다

Filter 버튼 하나 치우는 걸로 시작했는데, 결국 사이드 메뉴 + 섹션 전환 구조까지 갔습니다. 그리고 자유 게시판 이름도 바꿨습니다.

원래 자리 찾아주기

"나" 탭에 잡다하게 모여 있던 메뉴들을 캘린더와 체크리스트의 자기 자리로 옮겼습니다.

Hey Siri, Fecit에 할 일 만들기

iOS Shortcuts와 App Intents를 붙여서, 앱을 열지 않고도 음성 한 마디로 할 일을 추가할 수 있게 만들었습니다.

기본값을 뒤집은 날

리스트 아이템 레이아웃 애니메이션을 예외적으로 끄는 방향에서, 기본적으로 꺼져 있고 변경 대상만 켜는 방향으로 뒤집은 과정을 기록합니다.

기각의 기록, 하루 더

어제에 이어 오늘도 포커스 슬롯을 눈에 띄게 하려고 많은 것을 만들었다가 지웠습니다. 오늘의 삽질을 기록합니다.

하루의 매듭을 짓는 알림 — 매일 회고 리마인더 구현기

매일 22시에 회고를 권하는 알림을 만들면서 마주친 선택들 — 로컬 vs 서버 푸시, 완료 신호의 정의, 언어 설정의 숨은 빈 틈.

기술 한계를 인정받는 방식

AI에게 '이건 이 도구로는 안 돼'라는 답을 받는 건 어려운 일이에요. AI는 기본적으로 '할 수 있다'고 말하려는 경향이 있거든요. 한계를 제대로 인정받는 것도 기술이었습니다.

실패한 시도들의 가치

AI와 같이 일하면 실패한 시도가 엄청 많이 쌓입니다. 버려진 시도들이 쓸모없는 낭비가 아니라, 남길 것의 윤곽을 드러내는 정보라는 이야기.

대화가 질문이 되는 순간

AI와의 대화는 지시로 시작해서 질문으로 끝나요. 내가 AI에게 묻는 게 아니라, AI가 만든 제안이 나 자신에게 '너는 왜 이걸 원하는가'를 묻게 되는 순간들에 대해서.

제안을 어떻게 거부하는가

AI와 제품을 만들면서 배운 건 제안을 빨리 받아들이는 기술이 아니라, 대부분을 거부하는 근거를 가지는 일이었어요. 거부의 근거가 곧 제품 철학이었습니다.

정렬의 언어

Task Record List에 우선순위·난이도·만족도 정렬을 추가했습니다. 정렬만 더한 게 아니라 각 축에 맞는 시각 언어를 입혔고, 그러면서 그룹 접기 기능도 자연스럽게 따라왔어요.

기대와 실제 사이

회고 섹션에 Result 필드를 더했습니다. 단순한 입력칸 하나가 아니라, Intention의 Expectation과 짝을 이루는 구조적 보완이었어요.

focused task를 더 돋보이게 하고 싶었다

focus된 태스크를 시각적으로 강조하려고 애니메이션 여섯 개를 만들었다가 전부 지우고, 결국 preference 토글로 착지한 하루의 기록입니다.

기각의 기록

포커스 아이템을 더 도드라지게 하려고 이런저런 시도를 했고, 대부분 지웠습니다. 오늘의 시도들을 기록합니다.

체크리스트를 넘어서는 태스크 관리 앱 5선 (2026)

체크만 하면 끝나지 않는 태스크를 위해. 할 일을 항목 이상으로 다루는 다섯 가지 앱을 살펴봅니다.

계속 미루는 할 일, 어떻게 시작할까

왜 어떤 태스크는 몇 주째 목록에 남아있는지, 그리고 막연한 의도를 실행 가능한 계획으로 바꾸는 네 가지 질문.

Todoist vs Fecit — 어떤 앱이 당신의 사고방식에 맞을까?

Todoist와 Fecit의 상세 비교. 둘 다 태스크를 관리하지만, '일을 끝내는 과정'에 대한 접근이 근본적으로 다릅니다.

시작하면 집중한다 — 자동 포커스의 UX

태스크를 시작하면 자동으로 상단에 고정되는 자동 포커스 기능의 설계 의도와 사용자 경험을 이야기합니다.

0.4초의 차이 — 자동 포커스 구현기

태스크 시작 시 자동 포커스, 완료 시 자동 해제를 구현하면서 마주친 타이밍, 애니메이션, 상태 동기화 문제들을 다룹니다.

회고 표시 바 하나 넣으려다 — 노랑 팔레트 교체부터 API 버그까지

태스크 리스트에 '이 태스크는 회고가 작성됐다'는 작은 표시 하나 넣으려다 SECONDARY 팔레트를 갈아엎고 API 버그까지 고친 이야기.

이야기가 없는 랜딩페이지

좋은 조각들은 있었지만 구조가 없었다. 섹션을 추가하고, 카피를 다시 쓰고, 랜딩페이지가 목록이 아니라 대화라는 걸 배운 이야기.

금요일에 만들었는데 수요일에 등록되는 시간표

아들 앞에서 시연하다 발견한 요일 버그. 출근길이 길었습니다.

디자이너 없이 앱스토어 스크린샷 20장 만들기

Claude와 Python Pillow로 앱스토어 스크린샷을 직접 만든 과정. 배경 그라디언트, 로고, 카피까지.

AI 서브태스크가 하나씩 나타나기까지

OpenAI 스트리밍 응답을 실시간으로 파싱하고, SSE로 클라이언트에 전달해서 서브태스크가 하나씩 생겨나는 경험을 만든 이야기.

첫 번째 사용자를 찾는 여정 — 설명하기 어려운 앱을 마케팅하기

의도적으로 복잡한 태스크 앱의 사용자를 찾으려는 솔직한 이야기. Reddit 필터, Google Ads, 그리고 Fecit이 어떤 앱인지 정직하게 말하는 법을 배우는 과정.

ASO 삽질기 — 앱 이름부터 설명까지 다시 쓰다

fecit의 앱스토어 제목, 부제, 키워드, 설명을 처음부터 다시 정리한 과정. Claude Code와 함께한 ASO 작업 기록.

가이드 모드 애니메이션 — 뿅 하고 나타나고, 뿅 하고 사라지고 싶었을 뿐인데

GuideBar에 슬라이드 애니메이션을 넣으려다 SafeArea, 키보드, 마운트/언마운트와 싸운 이야기.

앱이 말을 걸다 — 대화형 가이드 모드

태스크 작성을 대화처럼 안내하는 가이드 모드 구현기입니다. fecit 아이콘이 말풍선으로 질문하고, 격려하고, 마무리까지.

준비물에 비용을 — Preparation 섹션 강화

준비물 항목에 비용 추적 기능을 추가한 구현기입니다. 단가/총액 선택, 통화 자유입력, 자동 계산까지.

지금 어디를 편집하고 있지?

문서형 태스크 에디터에서 편집 중인 필드를 시각적으로 강조하는 포커스 하이라이트 구현기입니다.

네트워크가 끊겨도 내 글은 사라지지 않는다

API 호출 실패로 사용자의 콘텐츠가 증발하는 문제를 AsyncStorage 기반 임시저장으로 해결한 이야기.

여러 날에 걸친 일정, 타임라인에서 어떻게 드래그할까

일일 타임라인 뷰에서 여러 날짜에 걸친 일정 블록의 드래그 드랍을 개선한 과정. 클램핑, 리사이즈 핸들, 시각적 피드백까지.

하루는 항상 86,400초일까?

Hermes 엔진 크래시인 줄 알았던 버그의 진짜 원인은 addDays 함수 한 줄이었습니다.

현재와 기대 사이, 세 줄이면 충분합니다

Gap Analysis라는 거창한 이름이 붙어 있지만, 실은 세 가지 질문이 전부입니다.

아이콘 하나, 댓글 한 줄

필드 레이블에 아이콘을 붙이고, Task에 댓글 기능을 추가한 이야기.

알림 기능, 생각보다 쉬웠다

할 일 시작 전에 알림을 보내는 기능. 어려울 줄 알았는데 계산된 필드 하나로 끝났습니다.

드래그 중 자동 스크롤, 생각보다 어렵다

ScrollView 안에서 드래그 드랍하면서 자동 스크롤을 구현하는 과정. 세 번 실패하고 네 번째에 성공한 이야기.

3월 업데이트: 심사 대응, 캘린더 크래시, 그리고 Desktop 개선

애플 심사 거절 대응부터 Hermes GC 크래시 디버깅, Desktop UI 대폭 개선까지. 이틀간의 기록.

첫 번째 마일스톤 완료 — AI가 본 Fecit의 현재

Claude Code의 시선에서 바라본 Fecit. 코드베이스를 탐색하고, 함께 만들고, 때로는 실수하면서 도달한 첫 번째 마일스톤.

준비 항목에 사진을 붙이다

재료, 도구, 장소에 사진을 첨부할 수 있게 했습니다. 기존 첨부파일 패턴을 재사용하면서, 준비 항목이라는 새로운 맥락에 맞게 조정한 과정.

섹션을 보이고 숨기는 설정을 만들다

섹션이 많아서 복잡하다는 문제의 답을 구현했습니다. 문서별 설정, 기본값 설정, 그리고 준비 카테고리까지.

준비 섹션을 다듬다 — 공유 모델에서 카테고리별 분리까지

하나의 PreparationItemModel로 다섯 카테고리를 다루던 구조를 분리했습니다. 모델, 화면, 컴포넌트를 각각 독립시키고, 캐시 버그를 잡기까지.

준비 섹션을 만들었더니 섹션이 너무 많아졌다

할 일을 깊게 관리하고 싶어서 분석, 준비, 회고 섹션을 만들었습니다. 그랬더니 화면이 복잡해졌습니다. 가벼움과 깊이 사이의 줄다리기.

프로젝트 담당자 기능을 만들다

서버는 이미 준비되어 있었습니다. UI를 붙이고, 검색 화면을 만들고, 빠진 데이터를 채우기까지.

Tauri 삽질기 2탄 — DMG 하나 만드는 게 이렇게 어려울 줄이야

빌드는 됐는데 DMG가 안 만들어지고, 만들어졌는데 아이콘이 사라지고, 열었더니 damaged. Tauri 데스크톱 앱 배포까지의 여정.

Weekly Routine 알림이 오지 않았던 이유

Daily는 되는데 Weekly만 안 됐습니다. 원인은 빈 칸 하나였습니다.

주소 입력 UI를 갈아엎다

이틀 동안 열 가지 방법을 시도한 끝에, 문제를 해결하는 대신 문제 자체를 없애기로 했습니다.

주소 자동완성과 키보드의 전쟁

React Native에서 키보드가 올라간 상태로 드롭다운을 탭하는 것이 왜 이렇게 어려운지에 대한 기록.

SSE 실시간 동기화 구현기

FastAPI 서버에 SSE를 붙이고, 데스크톱과 모바일 클라이언트를 연결하기까지 부딪힌 문제들.

모바일과 데스크톱, 실시간으로 동기화검토

같은 API를 공유하는 두 클라이언트를 SSE로 연결하기까지의 고민 과정.

데스크탑 캘린더에 생명을 불어넣다

세 가지 뷰에 걸친 드래그앤드롭, 커서를 따라가는 가이드 라인, 낙관적 업데이트, 그리고 가독성을 바꾼 디자인 전환.

할 일에 장소를 붙였습니다

Apple Maps API로 주소 자동완성을 만들고, 지도 미리보기까지. 간단할 줄 알았는데 아니었습니다.

꼬리표라는 분류

할 일이 늘어나면 분류가 필요해집니다. 프로젝트와는 다른, 가볍고 유연한 분류 도구를 만든 이야기.

다듬고, 다듬고, 다듬는다

랜딩페이지 문구 하나를 몇 번이고 고치는 이야기. 완성은 없고, 다듬기만 있다.

이어주는 것, 그리고 도전

쉬운 일과 어려운 일을. 혼자와 함께를. 익숙한 것과 새로운 것을. 하나의 앱으로 이어줄 수 있을까?

랜딩 페이지 메시지를 다시 정렬하다

할 일 앱은 많다. 그중에 왜 Fecit인가? 이 질문에 답하기 위해 랜딩 페이지 전체를 다시 썼다.

Tauri로 데스크톱 앱 만들기 — 3시간의 절망

아이콘이 왜 이렇게 크지? 창은 왜 안 움직이지? Tauri로 데스크톱 앱을 만들면서 겪은 가장 절망적인 3시간.

Fecit 웹 버전을 배포하기까지

모바일 앱을 웹으로 옮기면서 겪은 서버 설정, 프록시, Apple/Google 로그인 삽질기.

바운스율 75%, 랜딩 페이지를 뜯어고친 하루

방문자 139명, 바운스율 75%. 전환율을 높이기 위해 하루 동안 랜딩 페이지를 어떻게 바꿨는지에 대한 기록.

할 일 앱, 뭘 써야 할까?

Todoist, TickTick, Things 3, Microsoft To Do, Apple 미리알림. 그리고 Fecit. 직접 써보고 느낀 것들.

습관에 요일을 붙였습니다

매일 반복하는 습관에서 요일별 루틴으로. 주간 습관를 만들면서 고민했던 것들.

Claude Code와 함께 개발하기

AI와 페어 프로그래밍을 하고 있습니다. 실제로 어떻게 쓰고 있는지, 뭐가 좋고 뭐가 아쉬운지에 대한 이야기.

AI 활용기

Fecit에서 AI가 하는 일들. 추천, 생성, 제안. 아직 실험 중인 것들에 대한 이야기.

할 일 하나를 끝내기까지

제목 하나로 시작해서 회고까지. 하나의 할 일이 만들어지는 과정에 대한 이야기.

드래그 앤 드롭 캘린더를 직접 만들었습니다

라이브러리 없이 캘린더를 처음부터. 무한 스크롤, 타임라인, 드래그 앤 드롭 일정 관리까지.

스텝 인디케이터 — 리스트 안의 작은 지도

서브태스크 목록에 git-graph 스타일의 흐름도를 넣으려고 했습니다. 레인, 베지어 곡선, 파란 점. 삽질의 기록.

서브태스크 그래프를 만들기까지

할 일의 흐름을 눈으로 볼 수 있다면? 노드와 엣지로 이루어진 그래프 에디터를 만들면서 겪은 이야기.

필요할 때 필요한 만큼 — Fecit의 설계 철학

제목 하나면 충분하되, 원하면 끝까지 깊어질 수 있는 구조를 만들기 위해 고민한 이야기.

템플릿이라는 도구

할 일을 끝낼 때마다 얻는 경험을 어디에 쌓을 것인가. 템플릿이라는 도구를 만들기까지의 이야기.

Fecit에 대해 — 해냈다!

Fecit은 라틴어로 '해냈다'라는 뜻입니다. 이 앱이 왜 만들어졌는지, 어디를 향해 가고 있는지에 대한 이야기.

VauDium 시작하겠습니다!

VolunTas에서 VauDium으로. 도메인 하나 못 사서 시작된 이름 바꾸기가, 회사의 방향을 바꿨습니다.