[P3] PWA + 모바일 지원 (coordination)

ID: f851fdae-f677-42b7-90ad-12bc32d3acfa

보통 완료

## 목표
PWA 설치 가능 + Capacitor 모바일 앱 기반 구축

## 서브 티켓
1. PWA Core - manifest, service worker, offline, routes, 레이아웃, install prompt
2. Capacitor Setup - npm init, @capacitor/core, capacitor.config.ts

## 관련 기존 티켓
- bb6b65e4: [P3] PWA + 모바일 지원

첨부 이미지

이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)

JPEG, PNG, GIF, WebP / 최대 10MB

담당자: 팀리드
생성일: 2026년 03월 02일 05:01

활동 로그

  • 팀리드 팀 작업 완료 - P3 PWA + 모바일 지원

    2026년 03월 02일 05:14:22

    상세 보기

    ## 완료 항목

    ### PWA Core (pwa-core-dev)
    - `app/views/pwa/manifest.json.erb` - LogBible 브랜딩, #6366f1 테마, 192x192/512x512 아이콘
    - `app/views/pwa/service-worker.js` - Cache First(정적) + Network First(HTML) + Push Notification
    - `app/views/pwa/offline.html.erb` - 오프라인 안내 페이지
    - `app/controllers/pwa_controller.rb` - offline 액션
    - `app/javascript/controllers/pwa_install_controller.js` - beforeinstallprompt Stimulus 컨트롤러
    - `app/views/layouts/application.html.erb` - PWA 메타태그(theme-color, manifest, apple-touch-icon) + Install Banner

    ### 알림 시스템 (scope creep - PWA 연관)
    - `app/services/notification_service.rb` - WebPush + Email 알림 (web-push 조건부 로딩)
    - `app/jobs/notification_cron_job.rb` - 시간대별 알림 크론
    - `app/controllers/push_subscriptions_controller.rb` - 구독 관리
    - `app/models/push_subscription.rb` - 구독 모델
    - `app/mailers/notification_mailer.rb` - 이메일 알림

    ### Capacitor (capacitor-dev)
    - `capacitor.config.ts` - appId: co.kr.logbible, webDir: public
    - `package.json` - @capacitor/core, cli, android, splash-screen, status-bar, browser
    - `android/` + `ios/` 디렉토리 생성 (.gitignore 처리)

    ### 테스트
    - 406 runs, 948 assertions, 0 failures, 0 errors
    - 새 테스트 75개 추가 (이전 331 → 406)

    ## 해결된 문제
    - web-push gem의 openssl 의존성: libssl-dev 없는 WSL2에서 빌드 불가
    → Gemfile에서 push_notifications 그룹으로 분리, 로컬은 bundle without로 제외
    - NotificationService: `require "web_push"` → `begin/rescue LoadError` 조건부 로딩
    - PagesControllerTest: authenticated 루트의 redirect 대신 직접 응답으로 수정

  • 팀리드 상태 변경: 진행 중 → 완료

    2026년 03월 02일 05:14:01

  • 팀리드 위임: capacitor-dev에게 'Capacitor Setup - npm init + 설정 + Android/iOS 기본 구성' 작업 배정

    2026년 03월 02일 05:02:38

  • 팀리드 위임: pwa-core-dev에게 'PWA Core - Manifest + Service Worker + 오프라인 + 레이아웃 + Install Prompt' 작업 배정

    2026년 03월 02일 05:02:21

  • 팀리드 작업 시작 - P3 PWA + 모바일 지원

    2026년 03월 02일 05:01:28

    상세 보기

    ## 작업 계획
    - 목표: PWA 설치 가능 (A2HS) + Service Worker 캐싱 + Capacitor 모바일 앱 기반
    - 접근 방식: 2인 에이전트 팀 (pwa-core-dev, capacitor-dev) worktree 분리

    ## 현재 상태
    - 보드 현황: todo 5 / in_progress 1 / done 17
    - 기존 인프라: Rails PWA 템플릿 존재 (manifest.json.erb, service-worker.js) but 미활성화
    - icon.png, icon.svg 존재 (512x512)
    - Node.js v20.20.0 + npm 10.8.2 사용 가능

    ## 서브 티켓 계획
    1. pwa-core-dev: Manifest 커스터마이징, Service Worker (캐시 전략), 오프라인 페이지, 라우트, 레이아웃 메타 태그, PWA install prompt
    2. capacitor-dev: npm init, Capacitor 설치/설정, capacitor.config.ts, Android/iOS 기본 설정

  • 팀리드 티켓 클레임 완료

    2026년 03월 02일 05:01:18