# RoomfitV2 — Project Overview

## Purpose
RoomfitV2는 **Roomfit 운동기구**를 BLE(Bluetooth Low Energy)로 제어하는 Flutter 모바일 앱이다.
MCU 기반 운동기구와 통신하여 무게 설정, 캘리브레이션, 실시간 리포트 수신, 안전 상태 모니터링 등을 수행한다.

## Tech Stack
- **Framework**: Flutter (Dart 3.10+)
- **State Management**: Riverpod (flutter_riverpod + riverpod_generator)
- **Immutable Models**: Freezed + json_serializable
- **BLE**: flutter_blue_plus
- **Protocol Package**: `packages/roomfit_protocol/` — 순수 Dart, Flutter 의존성 없음
- **Platforms**: iOS, Android

## Workspace Structure
Dart workspace (`pubspec.yaml`의 `workspace:` 필드)로 monorepo 구성:
- `roomfit_v2` (root) — Flutter 앱
- `packages/roomfit_protocol` — BLE 프로토콜 라이브러리

## Key Directories
```
lib/
├── main.dart
├── core/                          # Infrastructure layer
│   ├── adapters/                  # BLE adapters (scanner, transport)
│   ├── device/                    # DeviceGateway interface + impl, DeviceState
│   ├── logger/                    # AppLogger + LogViewerScreen
│   └── providers/                 # Infrastructure Riverpod providers
└── features/
    └── dev_remote/                # Developer remote control feature
        ├── domain/providers/      # Facade providers (command, scan, packet log)
        └── presentation/         # Screens (scan, remote) + Widgets

packages/roomfit_protocol/
├── lib/src/
│   ├── commands/command.dart      # 26 Command classes
│   ├── responses/response.dart    # 17 Response classes
│   ├── responses/response_registry.dart
│   ├── constants/command_codes.dart  # BLE UUIDs, WeightMode, codes
│   ├── constants/physical_units.dart # Unit conversions
│   ├── codec/                     # PacketBuilder, FrameCodec, RoomfitFrame
│   ├── transport/transport.dart   # Transport abstraction
│   └── device_link.dart           # High-level device link
└── test/                          # Protocol package tests
```
