09 · 개인 사이드 프로젝트 · 프론트엔드·앱 개발
1Day 1Streak
매일 한 가지를 기록하고 스트릭을 이어 가는 습관·챌린지 서비스입니다. Flutter 앱, Next.js 웹, React 디자인 시스템을 나누어 iOS·Android·Web을 함께 운영합니다.
배경
습관 앱은 기능이 많은 것보다 하루의 기록, 연속성, 실패 복구, 관계, 보상이 하나의 흐름으로 연결되는 것이 중요했습니다. 일상에서 매일 쓸 수 있는 제품을 만들고, 앱스토어·플레이스토어·웹 배포까지 제품의 전 주기를 직접 운영하고자 시작했습니다.
문제
앱·웹·디자인 시스템을 별도 저장소로 운영하면서도 URL, API, 시각 언어가 갈라지지 않아야 했습니다. 또 계정 전환 후 provider·STOMP 세션·캐시가 남는 상태 누수와 푸시 알림 종류가 늘어날수록 커지는 클라이언트 분기를 해결해야 했습니다.
접근
- 앱·웹·디자인 시스템의 저장소 경계를 나누고 같은 API·URL 계약으로 연결
- 2026년 8월 앱의 웹뷰 셸을 제거하고 핵심 경로를 Flutter 네이티브 화면으로 전환
- 챌린지, 목표 포함 일지, 스트릭·프리즈, 레벨·보상, 친구·투표·채팅·알림 기능 구현
- 푸시 payload에 앱·웹 공통 URL을 담아 알림 종류가 늘어나도 클라이언트 분기를 최소화
- 계정 전환 시 provider·STOMP 세션·캐시를 함께 초기화하는 사용자 스코프 규칙 수립
- Storybook으로 검증하고 npm으로 배포하는 공용 디자인 시스템 구축
- 온보딩·가이드 모션을 실제 제품 컴포넌트로 구성하고 동작 줄이기 환경을 지원
성과
- iOS·Android·Web을 하나의 제품 규칙으로 운영
- 앱 스토어 배포, flavor, 빌드 번호, 회귀 테스트까지 전 주기를 직접 관리
돌아보며
코드 공유보다 중요한 것은 플랫폼 사이에 경로·토큰·API 계약을 공유하는 일이었습니다. 계정 전환 상태 누수를 일회성 버그 수정으로 끝내지 않고 초기화 규칙과 테스트로 남기며, 오래 운영할 수 있는 제품 구조를 배웠습니다.
다음 작업Laiteu →웹툰·만화 창작자의 포트폴리오와 채용·협업을 연결하는 플랫폼

