# Google TV Family Dashboard App - Project Plan Google TV용 가족 대시보드 앱 구현 계획입니다. TV 화면에서 일일 정보(달력, 날씨, 할일, 성경 말씀)를 표시하고, Flutter 앱을 통해 데이터를 입력/관리할 수 있는 시스템입니다. --- ## System Architecture ``` ┌─────────────────────────────────────────────────────────────────┐ │ Google TV │ │ Flutter TV App (APK) │ └──────────────────────────┬──────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Backend Server │ │ Node.js + Express API │ │ MongoDB │ └──────────────────────────┬──────────────────────────────────────┘ │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ Weather │ │ Bible │ │ Flutter │ │ API │ │ API │ │ Mobile │ └───────────┘ └───────────┘ └───────────┘ ``` --- ## Key Decisions | 항목 | 선택 | 비고 | |------|------|------| | **TV App** | Flutter for Android TV | 모바일 앱과 코드 공유, APK로 TV 설치 | | **DB** | MongoDB | 확장성, 유연한 스키마 | | **Weather API** | OpenWeatherMap | 무료 1000 calls/day, 환경변수로 변경 가능 | | **Bible API** | bible-api.com | 영어+한글 동시 표시, 환경변수로 변경 가능 | | **가족 구성원** | Admin 기능으로 관리 | Flutter 앱 내 설정에서 추가/수정/삭제 | | **사진 갤러리** | Admin에서 업로드 | TV 화면에 랜덤 슬라이드쇼로 표시 | --- ## TV Screen Specifications (43인치 기준) | 항목 | 값 | 설명 | |------|-----|------| | **해상도** | 1920 x 1080 px | Full HD 기준 (4K TV도 호환) | | **화면 비율** | 16:9 | 표준 와이드스크린 | | **실제 크기** | 95.3cm x 53.6cm | 43인치 대각선 기준 | | **Safe Zone** | 90% 영역 사용 | 가장자리 5% 여백 권장 | ### UI 레이아웃 가이드 ``` ┌────────────────────────────────────────────────────────────────────────┐ │ 1920px (16:9 @ 1080p) │ ├────────────────────────────────────────────────────────────────────────┤ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ Safe Zone (90%) │ │ │ │ ┌─────────────────────────────┬──────────────────────────┐ │ │ │ │ │ │ │ │ │ │ │ │ 메인 영역 (65%) │ 사이드바 (35%) │ │ │ │ │ │ 1248px │ 672px │ │ │ │ │ │ │ │ │ │ │ │ │ - 날씨 │ - 월간 달력 │ │ │ │ │ │ - 오늘의 할일 │ - 주간 일정 │ │ │ │ │ │ - 오늘의 말씀 │ - 공지사항 │ │ │ │ │ │ │ │ │ │ │ │ └─────────────────────────────┴──────────────────────────┘ │ │ │ └────────────────────────────────────────────────────────────────┘ │ │ │ 1080px └────────────────────────────────────────────────────────────────────────┘ ``` ### 폰트 크기 권장 (시청 거리 2~3m 기준) | 요소 | 크기 | 용도 | |------|------|------| | 헤더/시간 | 48-64px | 날짜, 현재 시간 | | 제목 | 32-40px | 섹션 제목 | | 본문 | 24-28px | 할일, 일정 내용 | | 보조 텍스트 | 18-20px | 부가 정보 | --- ## TV Display Layout (Single Usage Dashboard) 모든 정보와 기능을 한 화면에서 볼 수 있는 통합 대시보드 레이아웃입니다. ``` ┌────────────────────────────────────────────────────────────────────────┐ │ 📅 2026.01.24 (금) 15:43:36 🌤️ 서울 12°C 맑음 │ ├──────────────────────┬─────────────────────────┬───────────────────────┤ │ [📅 월간 달력] │ [🖼️ 가족 사진 앨범] │ [✅ 오늘의 할일] │ │ │ │ │ │ 1 2 3 4 5 6 7 │ (랜덤 슬라이드쇼) │ 👨 아빠: 마트, 운동 │ │ 8 9 10 11 12 13 14 │ (30초 간격 전환) │ 👩 엄마: 회의 │ │ 15 16 17 18 19 20 21 │ │ 👦 아들: 수학 숙제 │ │ 22 23 24 25 26 27 28 │ │ 👧 딸: 피아노 가기 │ │ 29 30 31 │ │ │ ├──────────────────────┤ ├───────────────────────┤ │ [📋 주간 일정] │ │ [📖 오늘의 말씀] │ │ │ │ │ │ 금: 가족 모임 │ │ "The fear of the LORD │ │ 토: 결혼식 참석 │ │ is the beginning..." │ │ 일: 교회 예배 │ │ │ │ │ │ "여호와를 경외하는..." │ ├──────────────────────┤ │ - 잠언 1:7 │ │ [📢 공지사항] │ │ │ │ • 다음 주 여행 계획 │ │ │ └──────────────────────┴─────────────────────────┴───────────────────────┘ ``` ### 위젯 구성 1. **Header**: 날짜, 시간, 실시간 날씨 (Top Bar) 2. **Left Column (Plan)**: - 월간 달력 (이번 달 전체 뷰) - 주간 주요 일정 (리스트) - 공지사항 (텍스트 롤링) 3. **Center Column (Memory)**: - **가족 사진 위젯**: Admin에서 업로드한 사진들을 랜덤하게 표시 (디지털 액자 기능) 4. **Right Column (Focus)**: - 가족별 오늘의 할일 (아바타와 함께 표시) - 오늘의 말씀 (한글/영어 병기) --- ## MongoDB Collections (Updated) ### photos ```javascript { _id: ObjectId, url: "https://.../photo.jpg", // 또는 base64 (저장 용량 고려 필요) caption: "2025 여름 휴가", active: true, createdAt: Date } ``` ### family_members (기존 동일) ... --- ## API Endpoints (Updated) | Method | Endpoint | Description | |--------|----------|-------------| | GET/POST | `/api/photos` | 사진 목록 조회/업로드 | | DELETE | `/api/photos/:id` | 사진 삭제 | | ... | ... | (기존 API 동일) | ``` bini-google-tv/ ├── docs/ │ └── project-plan.md ├── backend/ │ ├── server.js │ ├── config/ │ │ ├── db.js │ │ └── api.js │ ├── models/ │ │ ├── FamilyMember.js │ │ ├── Todo.js │ │ ├── Schedule.js │ │ ├── Announcement.js │ │ └── Setting.js │ ├── routes/ │ │ ├── family.js │ │ ├── todos.js │ │ ├── schedules.js │ │ ├── announcements.js │ │ ├── weather.js │ │ └── bible.js │ ├── .env.example │ └── package.json └── flutter_app/ ├── lib/ │ ├── main.dart │ ├── config/ │ ├── models/ │ ├── services/ │ ├── screens/ │ │ ├── tv/ │ │ ├── mobile/ │ │ └── admin/ │ └── widgets/ └── pubspec.yaml ``` --- ## MongoDB Collections ### family_members ```javascript { _id: ObjectId, name: "아빠", emoji: "👨", color: "#3498db", order: 1, createdAt: Date } ``` ### todos ```javascript { _id: ObjectId, familyMemberId: ObjectId, title: "마트 장보기", completed: false, dueDate: Date, createdAt: Date } ``` ### schedules ```javascript { _id: ObjectId, title: "가족 모임", description: "할머니 댁 방문", startDate: Date, endDate: Date, familyMemberId: ObjectId, isAllDay: true, createdAt: Date } ``` ### announcements ```javascript { _id: ObjectId, title: "이번 주 외식", content: "금요일 저녁 외식 예정", priority: 1, active: true, createdAt: Date } ``` --- ## API Endpoints | Method | Endpoint | Description | |--------|----------|-------------| | GET/POST | `/api/family` | 가족 구성원 조회/추가 | | GET/PUT/DELETE | `/api/family/:id` | 특정 구성원 조회/수정/삭제 | | GET/POST | `/api/todos` | 할일 조회/추가 | | GET/PUT/DELETE | `/api/todos/:id` | 특정 할일 조회/수정/삭제 | | GET | `/api/todos/today` | 오늘의 할일 조회 | | GET/POST | `/api/schedules` | 일정 조회/추가 | | GET | `/api/schedules/week` | 주간 일정 조회 | | GET | `/api/schedules/month` | 월간 일정 조회 | | GET/POST | `/api/announcements` | 공지사항 조회/추가 | | GET | `/api/weather` | 현재 날씨 조회 | | GET | `/api/bible/today` | 오늘의 말씀 조회 | --- ## Development Phases | Phase | 내용 | 예상 시간 | |-------|------|----------| | 1 | Backend + MongoDB 설정 | 2-3시간 | | 2 | REST API 구현 | 3-4시간 | | 3 | Flutter 공통 구조 + 모델 | 2시간 | | 4 | TV Display 화면 | 3-4시간 | | 5 | Mobile 입력 화면 | 4-5시간 | | 6 | Admin (가족구성원/설정) | 2시간 | | 7 | 통합 + TV APK 빌드 | 2-3시간 | **총 예상 시간: 18-23시간** --- ## TV App Installation 1. **Flutter 빌드**: `flutter build apk --release` 2. **TV에 설치**: - USB로 APK 전송 후 파일 관리자에서 설치 - 또는 ADB 사용: `adb install app-release.apk` 3. **TV 홈에서 앱 실행**