성장 과정은 하나의 라이브 서비스가 업데이트되며 완성도를 높여가는 흐름과 닮아 있다고 생각했습니다.
문제를 만났던 순간, 새롭게 시도했던 선택, 개선의 결과를 Patch Notes로 남겼습니다.
첫 가설을 재측정으로 기각한 뒤 Vercel Function과 Supabase의 리전 불일치를 발견해, 통제된 환경의 LCP 중앙값을 1.99초에서 0.83초로 약 58% 단축했습니다.
56개 음식과 100개 매장을 타입 기반 카탈로그로 분리하고 검색·필터·정렬·ETA를 파생 계산하도록 구성했습니다.
세션·커뮤니티·도메인 데이터가 집중된 단일 UI를 app, widgets, features, entities, shared 레이어로 분리했습니다.
기록을 로컬에 먼저 저장하고 익명 인증 뒤 idempotent upsert로 동기화해 네트워크 실패가 핵심 흐름을 막지 않도록 설계했습니다.
핵심 라우트와 이미지의 사전 캐시, 캐시 갱신, 앱 셸 fallback을 작은 서비스 워커로 구현했습니다.
Bubblewrap와 Digital Asset Links를 이용해 웹 코드베이스를 유지하면서 Android 설치·배포 구조를 구성했습니다.
이용규칙 동의, 서버 필터, RLS, 중복 방지 제약, 신고 임계치와 사용자 차단을 조합해 익명 리뷰의 안전 경계를 설계했습니다.
클라이언트 경계에만 의존하지 않고 API 사용자 조건, FK·RLS 정책과 계정 삭제 RPC를 결합해 여러 계층에서 소유권을 보장했습니다.
브라우저에 세션을 먼저 저장한 뒤 서버 ID를 보강하고, 시작 시각과 연장 기준 시각을 분리해 재진입과 연장 시간을 정확히 복원했습니다.
로그인 전 온보딩 선택을 브라우저 draft로 보존하고 Kakao OAuth callback 이후 인증 API에 제출하며 내부 redirect만 허용했습니다.
정적 앱 셸과 API의 캐시 요구사항을 분리하고 버전 정리·개발 환경 해제·API no-store 정책으로 오래된 데이터 노출을 막았습니다.
불안정한 이동·삭제 효과를 안전한 아이템 지급으로 대체하고 이동 기능은 실후원 미적용 수동 실험으로 격리했습니다.