본문으로 건너뛰기
Side Project

두딘캘린더

일정·기록·사진을 둘이 함께 관리하는 비공개 캘린더

담당 역할
기획·UX/UI·개발·운영
WebFrontendDesign

만든 이유

여자친구와 둘이 실제로 사용하는 비공개 캘린더입니다. 함께할 일정과 할 일, 다녀온 날의 기록과 사진을 한곳에서 이어 보고 싶어 만들었습니다. 기념일과 메모도 함께 관리하며, 직접 사용하면서 필요한 기능과 불편한 흐름을 계속 다듬고 있습니다.

구현할 때 정한 것

  • 두 사람이 쓰는 비공개 서비스

    접근을 제한하면서 여러 기기에서 사용하도록 PWA와 Cloudflare 기반으로 구성했습니다. 텍스트는 브라우저에서 암호화하고 사진·동영상 원본은 인증 API와 비공개 R2 저장소로 보호합니다. 날짜와 종류처럼 조회에 필요한 정보는 서버가 다루도록 구분했습니다.

  • 일정에서 기록으로 이어지는 흐름

    일정 메모를 다시 입력하지 않도록 기록으로 전환할 때 초기 내용으로 가져왔습니다. 전환 후에는 각각 수정할 수 있도록 분리했습니다. 데이터 조회와 갱신은 TanStack Query, 날짜·필터·상세 대상은 URL, 저장 전 입력은 React Hook Form에서 관리합니다.

  • 저장 충돌과 불필요한 요청 처리

    두 사람이 같은 내용을 수정할 때는 버전을 비교해 충돌을 확인하고, 저장 응답이 유실돼 생성 요청을 다시 보내도 항목이 중복되지 않도록 처리했습니다. 홈 사진과 썸네일은 세션별 메모리 캐시에서 재사용해 구도만 바뀌었을 때 파일을 다시 요청하지 않도록 했습니다. 연결 해제 시 캐시를 정리하고 이동할 화면의 기본 구조도 미리 불러옵니다.

사용 기술

언어·프레임워크

ReactTypeScriptVinext

상태·데이터

TanStack QueryReact Hook FormZod

화면·인터랙션

Tailwind CSS

배포·도구

Cloudflare Workers · D1 · R2Cloudflare AccessPWA
TanStack Query · React Hook Form
서버의 조회·갱신 상태와 저장 전 입력을 분리했습니다.
Cloudflare · PWA
접근을 제한하면서 여러 기기에서 사용할 수 있도록 구성했습니다.

함께 쓰면서 바꾼 부분

실제 사용에서 시작한 개선

둘이 직접 사용하면서 편집 흐름을 정리했고, 받은 피드백을 바탕으로 댓글·반응과 알림 기능을 추가했습니다.