# App Handoff This is a handoff snapshot, not the product SSOT. Product SSOT: mall-docs report-notebooklm docs, snapshot date: 2026-06-03. ## Current State The App is a runnable Phase 1 Flutter shell connected to the backend public seed API. It is not production-ready yet. Implemented: - Five bottom tabs: 推荐, 研报, 机构, 听单, 我的. - API client configured by `RNB_API_BASE`. - API-backed recommended feed, report list, institution list, institution detail, listen list, report detail, and module detail. - Report detail module renderer registry. - Inline module rendering and card-plus-page module preview/detail flow. - Local mini-player UI and player controls. - Login, favorite, outbound, and playback placeholders that make blocked Phase 1 flows visible without pretending they are complete. - Android platform scaffold and debug/release build compatibility. Not implemented: - Auth and real login state. - Server-synced favorites, reading history, saved listens, and playback progress. - Real audio stream from `/audio/{audio_id}/stream`. - Outbound event write before external navigation. - Production API domain. - Release signing. - Final app icon, final brand visuals, privacy copy, and store metadata. ## Important Product Decisions Reflected in App - User-facing product name is `研听`. - Technical identifiers stay `report-notebooklm` / `rnb`. - Phase 1 has no download feature for report interpretation content, audio packages, or PDFs. - Source access is through source/compliance or outbound surfaces, not in-product downloads. - Guest users can browse public content and listen; login is only required for synchronized personal state. - App must not call NotebookLM or any LLM to generate report content. ## Source Tree Map | Path | Purpose | |---|---| | `lib/main.dart` | App entry point and API data source construction. | | `lib/app.dart` | Material app and theme hookup. | | `lib/data/api/` | Backend API client. | | `lib/data/models/` | Typed response models. | | `lib/features/shell_page.dart` | Bottom-tab shell and mini-player state. | | `lib/features/feed/` | Recommended feed. | | `lib/features/reports/` | Report list. | | `lib/features/institutions/` | Institution list and detail. | | `lib/features/listen/` | Listen list. | | `lib/features/profile/` | Guest/login placeholder and personal-state entry points. | | `lib/features/detail/` | Report detail. | | `lib/features/detail/modules/` | Module renderer registry and module detail page. | | `lib/widgets/` | Reusable UI components. | | `lib/theme/` | Design tokens and Flutter theme. | | `android/` | Android platform scaffold. | | `test/` | Widget tests. | ## Suggested Handoff Order 1. Read `docs/PROJECT_BRIEF.md`. 2. Run the backend seed API from `report-notebooklm-api/`. 3. Read `docs/API_CONTRACT_NOTES.md`. 4. Run `flutter analyze` and `flutter test`. 5. Run the App against the backend with `RNB_API_BASE`. 6. Choose the next App/API integration item from the open gaps. ## Next App Work - Wire real auth once backend auth exists. - Replace favorite/history/saved-listen placeholders with API-backed state. - Use backend audio stream endpoint for actual playback URL. - Persist playback progress for logged-in users. - Write outbound event before external navigation. - Add production API config and release signing. - Finalize app icon, privacy wording, store copy, and risk-disclaimer surfaces.