chore: prepare yanting monorepo handoff

This commit is contained in:
2026-06-03 10:39:03 +09:00
commit fde51468c6
106 changed files with 8171 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
# 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.