首次远程推送
This commit is contained in:
+54
-60
@@ -1,6 +1,6 @@
|
||||
# Focus Seed Architecture
|
||||
|
||||
Status: refactored from single-file prototype into modular Flutter structure.
|
||||
Status: current release architecture for Focus Seed 1.0.2.
|
||||
|
||||
## Directory Layout
|
||||
|
||||
@@ -8,77 +8,71 @@ Status: refactored from single-file prototype into modular Flutter structure.
|
||||
lib/
|
||||
main.dart
|
||||
src/
|
||||
app/
|
||||
focus_seed_app.dart
|
||||
app_theme.dart
|
||||
core/
|
||||
date_keys.dart
|
||||
iterable_extensions.dart
|
||||
json_utils.dart
|
||||
data/
|
||||
focus_seed_store.dart
|
||||
models/
|
||||
app_state.dart
|
||||
focus_session.dart
|
||||
habit.dart
|
||||
mood.dart
|
||||
reflection_entry.dart
|
||||
services/
|
||||
analytics_provider.dart
|
||||
monetization_provider.dart
|
||||
features/
|
||||
shell/
|
||||
focus_seed_home.dart
|
||||
home/
|
||||
home_screen.dart
|
||||
timer/
|
||||
timer_screen.dart
|
||||
habits/
|
||||
habits_screen.dart
|
||||
reflection/
|
||||
reflection_screen.dart
|
||||
settings/
|
||||
settings_screen.dart
|
||||
widgets/
|
||||
app_scaffold.dart
|
||||
dialogs.dart
|
||||
empty_state.dart
|
||||
habit_row.dart
|
||||
inline_editable_text.dart
|
||||
loading_view.dart
|
||||
metric_tile.dart
|
||||
section_label.dart
|
||||
seed_card.dart
|
||||
settings_tile.dart
|
||||
weekly_progress.dart
|
||||
app/ app shell, theme, ambience, localization setup
|
||||
application/ product controllers and timer lifecycle
|
||||
core/ date keys, focus durations, ambience, utilities
|
||||
data/ local persistence boundary
|
||||
data/local/ Drift SQLite database
|
||||
models/ immutable product models and derived state
|
||||
services/ no-op analytics and monetization interfaces
|
||||
features/ Today, Focus, Records, Me, habits, onboarding, reflection, shell
|
||||
widgets/ reusable panels, dialogs, headers, loading, illustrations
|
||||
```
|
||||
|
||||
## Responsibility Boundaries
|
||||
|
||||
- `main.dart`: process entry only.
|
||||
- `src/app`: app shell and theme.
|
||||
- `src/models`: serializable domain objects.
|
||||
- `src/data`: persistence boundary using `shared_preferences`.
|
||||
- `src/services`: no-op interfaces for analytics and monetization.
|
||||
- `src/features/shell`: state orchestration and feature routing.
|
||||
- `src/app`: app-level theme, locale policy, ambience updates, and shell bootstrapping.
|
||||
- `src/application`: user commands, save rollback, local analytics events, and timer lifecycle.
|
||||
- `src/core`: framework-light utilities and product constants.
|
||||
- `src/data`: persistence boundary used by controllers.
|
||||
- `src/data/local`: Drift tables, SQLite connection, and product-data clearing.
|
||||
- `src/models`: product snapshots, sessions, habits, reflections, mood, records, and progress models.
|
||||
- `src/services`: SDK-light interfaces with no-op implementations.
|
||||
- `src/features/shell`: top-level navigation and controller wiring.
|
||||
- `src/features/*`: screen-level UI and user flows.
|
||||
- `src/widgets`: reusable UI components and dialogs.
|
||||
- `src/core`: framework-light utilities.
|
||||
- `src/widgets`: reusable UI primitives.
|
||||
|
||||
Widgets render state and forward intent. Controllers own commands. `FocusSeedStore` is the durable persistence boundary. Feature UI does not write to SQLite directly.
|
||||
|
||||
## Current Product Structure
|
||||
|
||||
Primary destinations:
|
||||
|
||||
- Today: daily focus, timer entry, habit summary, reflection prompt, and loop progress.
|
||||
- Focus: immersive timer and active-session context.
|
||||
- Records: completed focus sessions, reflections, and lightweight history.
|
||||
- Me: preferences, privacy, local data controls, and about/legal surfaces.
|
||||
|
||||
Habits are a Today support flow, not a primary tab. Growth/Journey was removed from the V1 primary surface; review belongs in Records until a future feature has enough depth to justify a dedicated destination.
|
||||
|
||||
## Persistence
|
||||
|
||||
Focus Seed is offline-first and stores product data locally with Drift/SQLite:
|
||||
|
||||
- `daily_intentions`
|
||||
- `focus_sessions`
|
||||
- `habits`
|
||||
- `habit_logs`
|
||||
- `reflections`
|
||||
- `app_settings`
|
||||
|
||||
The current user-facing app exposes no manual data transfer tools. Existing legacy local preference data is migrated once into SQLite when present, then removed. Small app preferences such as appearance and development language selection remain local preferences.
|
||||
|
||||
## Current Design Decisions
|
||||
|
||||
- No real ad SDK in V1.
|
||||
- No real billing SDK in V1.
|
||||
- No analytics SDK in V1.
|
||||
- No network dependency.
|
||||
- JSON import/export uses copy/paste to avoid file permissions.
|
||||
- Shell owns state until a future state-management package is justified.
|
||||
- No account, server, or network dependency.
|
||||
- Default focus duration is a user-facing local setting.
|
||||
- Clear today resets only today's loop.
|
||||
- Delete all data clears local product records while preserving app preference behavior where appropriate.
|
||||
|
||||
## Upgrade Path
|
||||
|
||||
Next modularization steps when needed:
|
||||
|
||||
- Move `src/app`, `src/core`, `src/models`, `src/services`, and `src/widgets` into shared packages.
|
||||
- Replace shell state with Riverpod once multiple apps/features share the same state patterns.
|
||||
- Add real `AnalyticsProvider`, `MonetizationProvider`, and remote config implementations only with privacy/Data safety updates.
|
||||
- Add golden tests for key screens before scaling the app factory.
|
||||
- Keep Drift as the local source of truth while the product remains offline-first.
|
||||
- Add DAO-style query methods before history grows large enough to make whole-snapshot writes inefficient.
|
||||
- Add Riverpod or a repository package only when multiple apps or features need shared state patterns.
|
||||
- Add real analytics, ads, billing, remote config, or sync only with privacy, Data safety, policy, and tests in the same release.
|
||||
- Add golden or screenshot tests before scaling launch screenshots or visual variants.
|
||||
|
||||
@@ -31,11 +31,11 @@ Official references:
|
||||
|
||||
2. Publish an internal testing release.
|
||||
- Upload `build/app/outputs/bundle/release/app-release.aab`.
|
||||
- Use release name `1.0.0 internal`.
|
||||
- Use release name `1.0.2 internal`.
|
||||
- Release notes:
|
||||
```text
|
||||
First internal test release.
|
||||
Includes focus timer, habit tracking, daily reflection, local progress stats, JSON export/import, and local privacy controls.
|
||||
Internal test release for Focus Seed.
|
||||
Includes focus timer, habit tracking, daily reflection, local progress stats, default focus duration, and local privacy controls.
|
||||
```
|
||||
- Add yourself and one or two trusted accounts if available.
|
||||
- Use this to confirm Play delivery and installation.
|
||||
@@ -45,11 +45,11 @@ Official references:
|
||||
- Create track name: `Focus Seed V1 closed test`.
|
||||
- Countries/regions: use English-first regions from `region-localization-strategy.md`.
|
||||
- Upload the same AAB.
|
||||
- Release name: `1.0.0 closed test`.
|
||||
- Use release name `1.0.2 closed test`.
|
||||
- Release notes:
|
||||
```text
|
||||
First closed test release for Focus Seed.
|
||||
Please test the Today, Timer, Habits, Reflect, Settings, Export JSON, Import JSON, and Clear local data flows.
|
||||
Closed test release for Focus Seed.
|
||||
Please test Today, Focus, Records, Me, habit management from Today, default focus duration, clear today's loop, delete local records, and privacy information.
|
||||
```
|
||||
|
||||
4. Add testers.
|
||||
@@ -58,11 +58,11 @@ Official references:
|
||||
- Minimum passing target: 12 opted-in testers.
|
||||
- Tester emails must be Google accounts that can access Google Play.
|
||||
- Adding emails is not enough. Each tester must open the opt-in link and join the test.
|
||||
- If uploading CSV, use one email address per line with no comma and no header row. Use `tester-email-list-no-header.csv` as the safer template.
|
||||
- If uploading CSV, use one email address per line with no comma and no header row.
|
||||
|
||||
5. Send tester instructions.
|
||||
- Send the opt-in link from Play Console.
|
||||
- Ask each tester to confirm after they see the "You're a tester" or equivalent joined state.
|
||||
- Ask each tester to confirm after they see the joined tester state.
|
||||
- Ask each tester to install and open the app at least once.
|
||||
|
||||
6. Track 14 days.
|
||||
@@ -74,14 +74,14 @@ Official references:
|
||||
- Apply from the Play Console dashboard when eligible.
|
||||
- Answer questions using the notes in this file.
|
||||
|
||||
## 12 Tester Strategy For A Solo Developer
|
||||
## Tester Strategy For A Solo Developer
|
||||
|
||||
Best compliant sources:
|
||||
|
||||
- Friends and family with Android phones and Google accounts.
|
||||
- Former classmates, coworkers, or community contacts.
|
||||
- Small indie developer groups where members exchange real testing help.
|
||||
- Productivity/focus communities where you honestly ask for feedback.
|
||||
- Productivity or focus communities where you honestly ask for feedback.
|
||||
- Existing users from your personal network.
|
||||
|
||||
Recommended count:
|
||||
@@ -108,35 +108,7 @@ Tester success checklist:
|
||||
- Tester tries at least one real flow.
|
||||
- Tester sends short feedback privately.
|
||||
|
||||
## Tester Invitation Message - Chinese
|
||||
|
||||
```text
|
||||
我在 Google Play 上做一个新的 Android 应用封闭测试,名字是 Focus Seed。
|
||||
它是一个轻量的专注计时、习惯追踪和每日反思工具,不需要账号、不收费、没有广告。
|
||||
|
||||
能麻烦你帮我测试一下吗?
|
||||
|
||||
步骤:
|
||||
1. 用你的 Android 手机打开这个测试链接:
|
||||
[粘贴 Play Console opt-in 链接]
|
||||
2. 确认加入测试。
|
||||
3. 从 Google Play 安装 Focus Seed。
|
||||
4. 打开 App,试一下:
|
||||
- Today 页面设置一个今日重点
|
||||
- Timer 页面启动或完成一次专注
|
||||
- Habits 页面勾选一个习惯
|
||||
- Reflect 页面写一句反思
|
||||
- Settings 页面看一下隐私/导出入口
|
||||
5. 测完后告诉我:
|
||||
- 是否能正常安装和打开
|
||||
- 哪个页面最不清楚
|
||||
- 有没有崩溃、卡顿、文字看不清或按钮点不了
|
||||
|
||||
这个测试需要保持加入状态 14 天。你不需要每天使用,但请不要退出测试。
|
||||
谢谢!
|
||||
```
|
||||
|
||||
## Tester Invitation Message - English
|
||||
## Tester Invitation Message
|
||||
|
||||
```text
|
||||
I am running a closed Google Play test for a new Android app called Focus Seed.
|
||||
@@ -150,11 +122,13 @@ Steps:
|
||||
2. Join the test.
|
||||
3. Install Focus Seed from Google Play.
|
||||
4. Try these flows:
|
||||
- Set a daily anchor on Today
|
||||
- Set today's focus on Today
|
||||
- Start or complete a focus timer
|
||||
- Check off a habit
|
||||
- Save a short reflection
|
||||
- Open Settings and review privacy/export controls
|
||||
- Open Records and view progress/history
|
||||
- Open Me and change the default focus duration
|
||||
- Review privacy information and local data controls
|
||||
5. Send me quick feedback:
|
||||
- Did install/open work?
|
||||
- Was any screen confusing?
|
||||
@@ -166,23 +140,20 @@ Thank you!
|
||||
|
||||
## Quick Feedback Questions
|
||||
|
||||
Send these as a message or simple form:
|
||||
|
||||
```text
|
||||
1. Your phone model:
|
||||
2. Android version, if known:
|
||||
3. Did the app install from Google Play? Yes / No
|
||||
4. Did the app open successfully? Yes / No
|
||||
5. Which screen did you try? Today / Timer / Habits / Reflect / Settings
|
||||
6. Any crash, freeze, lag, or layout issue?
|
||||
7. What felt confusing?
|
||||
8. One thing you would improve:
|
||||
5. Which screen did you try? Today / Focus / Records / Me / habit manager
|
||||
6. Did default focus duration work as expected?
|
||||
7. Any crash, freeze, lag, or layout issue?
|
||||
8. What felt confusing?
|
||||
9. One thing you would improve:
|
||||
```
|
||||
|
||||
## Tester Tracking Table
|
||||
|
||||
Use a spreadsheet or notes app:
|
||||
|
||||
```text
|
||||
Tester name | Google account email | Invited | Opted in | Installed | Opened app | Feedback received | Still opted in day 14
|
||||
```
|
||||
@@ -199,8 +170,8 @@ Target:
|
||||
Use these points when Play Console asks about the closed test:
|
||||
|
||||
- App purpose: Focus Seed is a private focus timer, habit tracker, and daily reflection app.
|
||||
- Test scope: Today anchor, timer, habits, reflection, settings, export/import, and local data deletion.
|
||||
- Test scope: Today focus, timer, habits, reflection, Records/history, Me/settings, default focus duration, clear today's loop, delete local records, and privacy information.
|
||||
- Tester recruitment: invited trusted Android users through direct email/message using the Play Console opt-in link.
|
||||
- Feedback collected: installation success, first-run clarity, timer usability, habit check-off, reflection save flow, settings/privacy clarity, layout or crash reports.
|
||||
- Actions taken: fixed native Android launch package path, removed unfinished ads/subscription placeholders from settings, verified release build on Android 14.
|
||||
- Actions taken: verified local-only storage, removed obsolete data-transfer wording, added default focus duration, and checked release-sensitive privacy wording.
|
||||
- Readiness: no account, no server, no ads, no billing, no analytics SDK, no sensitive permissions, privacy policy and Data safety match the shipped app.
|
||||
|
||||
@@ -8,8 +8,8 @@ This guidance assumes the submitted build is the current Focus Seed V1:
|
||||
- No analytics SDK.
|
||||
- No billing SDK.
|
||||
- No network permission.
|
||||
- Data stored locally with `shared_preferences`.
|
||||
- Export/import is user-controlled copy/paste JSON.
|
||||
- Data stored locally with Drift/SQLite plus small local preferences.
|
||||
- User can clear today's loop or delete local app records from settings.
|
||||
|
||||
## Suggested Data Safety Answers
|
||||
|
||||
|
||||
@@ -10,9 +10,9 @@ Private focus timer, habit tracker, and one-minute daily reflection.
|
||||
|
||||
## Full Description
|
||||
|
||||
Focus Seed helps you turn each day into a small, trackable win. Choose today’s anchor task, start a focused timer, mark habits as done, and write a short reflection when you finish.
|
||||
Focus Seed helps you turn each day into a small, trackable win. Choose today's anchor task, start a focused timer, mark habits as done, and write a short reflection when you finish.
|
||||
|
||||
Everything works locally on your device. No account is required, and your focus sessions, habits, and reflections stay on your phone unless you choose to export them.
|
||||
Everything works locally on your device. No account is required, and your focus sessions, habits, reflections, and preferences stay on your phone.
|
||||
|
||||
Features:
|
||||
|
||||
@@ -22,7 +22,7 @@ Features:
|
||||
- One-minute reflection log
|
||||
- Mood tags
|
||||
- Local 7-day progress view
|
||||
- JSON export and import
|
||||
- Default focus duration preference
|
||||
- Clear local-data privacy controls
|
||||
|
||||
Focus Seed is designed for people who want a lightweight productivity tool without accounts, feeds, or complicated setup.
|
||||
@@ -47,11 +47,11 @@ focus timer, habit tracker, reflection, productivity, offline, private, daily ro
|
||||
|
||||
## Release Notes
|
||||
|
||||
First release:
|
||||
Current release:
|
||||
|
||||
- Focus timer
|
||||
- Habit tracker
|
||||
- Daily reflection
|
||||
- Local progress stats
|
||||
- Local JSON export/import
|
||||
- Default focus duration setting
|
||||
- In-app privacy controls
|
||||
|
||||
@@ -71,17 +71,15 @@
|
||||
<li>Habit names and completion dates</li>
|
||||
<li>Focus session completion time and duration</li>
|
||||
<li>Reflection notes and mood tags</li>
|
||||
<li>App preferences such as appearance and default focus duration</li>
|
||||
<li>Basic app state needed for the app to work</li>
|
||||
</ul>
|
||||
|
||||
<h2>Data Sharing</h2>
|
||||
<p>Focus Seed V1 does not share your app data with the developer or third parties.</p>
|
||||
|
||||
<h2>Export And Import</h2>
|
||||
<p>You can export your local data as JSON from the app settings. You control where that exported text is copied or stored. You can also paste a previous JSON export into the app to import it.</p>
|
||||
|
||||
<h2>Data Deletion</h2>
|
||||
<p>You can clear local app data from Settings. You can also remove data by uninstalling the app or clearing app storage in Android settings.</p>
|
||||
<p>You can clear today's loop or delete local app records from Settings. You can also remove data by uninstalling the app or clearing app storage in Android settings.</p>
|
||||
|
||||
<h2>Ads, Analytics, And Purchases</h2>
|
||||
<p>Focus Seed V1 does not include advertising SDKs, analytics SDKs, or in-app purchase SDKs.</p>
|
||||
|
||||
@@ -16,19 +16,16 @@ The app stores the following data locally on your device:
|
||||
- Habit names and completion dates
|
||||
- Focus session completion time and duration
|
||||
- Reflection notes and mood tags
|
||||
- App preferences such as appearance and default focus duration
|
||||
- Basic app state needed for the app to work
|
||||
|
||||
## Data Sharing
|
||||
|
||||
Focus Seed V1 does not share your app data with the developer or third parties.
|
||||
|
||||
## Export And Import
|
||||
|
||||
You can export your local data as JSON from the app settings. You control where that exported text is copied or stored. You can also paste a previous JSON export into the app to import it.
|
||||
|
||||
## Data Deletion
|
||||
|
||||
You can clear local app data from Settings. You can also remove data by uninstalling the app or clearing app storage in Android settings.
|
||||
You can clear today's loop or delete local app records from Settings. You can also remove data by uninstalling the app or clearing app storage in Android settings.
|
||||
|
||||
## Ads, Analytics, And Purchases
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Focus Seed Product Brief
|
||||
|
||||
Status: V1 release candidate
|
||||
Status: historical release reference. Superseded for active product decisions by `docs/product-current-baseline.md`.
|
||||
|
||||
## Positioning
|
||||
|
||||
@@ -13,10 +13,11 @@ Focus Seed is a private, offline-first focus timer, habit tracker, and one-minut
|
||||
- Habit creation, rename, delete, and daily check-off.
|
||||
- One-minute reflection with mood tag.
|
||||
- 7-day progress pulse.
|
||||
- Local JSON export and import by copy/paste.
|
||||
- In-app privacy explanation.
|
||||
- Local data controls: clear today's loop or delete all local records.
|
||||
- User-facing settings for appearance and default focus duration.
|
||||
- No-op monetization and analytics interfaces.
|
||||
- English-only UI and store listing for the first launch wave.
|
||||
- Release defaults to English UI and English store listing for the first launch wave. Chinese remains development/testing support only.
|
||||
|
||||
## V1 Exclusions
|
||||
|
||||
@@ -50,7 +51,7 @@ Defer EU/EEA, United Kingdom, Switzerland, South Korea, Japan, Brazil/LATAM, and
|
||||
## Future Revenue Path
|
||||
|
||||
- V2/V3: optional low-interruption ads after retention validation.
|
||||
- V4/V5: one-time unlock or subscription for advanced statistics, themes, export templates, widgets, and backup/sync.
|
||||
- V4/V5: one-time unlock or subscription for advanced statistics, premium themes, widgets, and backup/sync.
|
||||
- Free core loop remains usable.
|
||||
|
||||
## App IDs
|
||||
@@ -59,6 +60,6 @@ Defer EU/EEA, United Kingdom, Switzerland, South Korea, Japan, Brazil/LATAM, and
|
||||
- Developer / brand: leavysong
|
||||
- Support email: leavysong@gmail.com
|
||||
- Package/application ID: `com.dailyanchor.focusseed`
|
||||
- Version: `1.0.0+1`
|
||||
- Version: `1.0.2+3`
|
||||
- Android min SDK: 26
|
||||
- Android target SDK: 35
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# Focus Seed 1.0.1 Experience Brief
|
||||
|
||||
Status: approved product and design principles, visual route not yet selected.
|
||||
Status: historical experience reference. Superseded for active product direction by `../../docs/product-current-baseline.md`.
|
||||
|
||||
Previous status: approved product and design principles, visual route not yet selected.
|
||||
|
||||
## Product Intent
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ Recommended phone screenshots:
|
||||
2. Focus timer with progress ring.
|
||||
3. Habits screen with completed and pending habits.
|
||||
4. Reflection screen with mood tags and text area.
|
||||
5. Settings screen showing local data export/import and privacy.
|
||||
5. Settings screen showing appearance, default focus duration, local data controls, and privacy.
|
||||
|
||||
Suggested captions:
|
||||
|
||||
@@ -26,7 +26,7 @@ Suggested captions:
|
||||
- Start a calm focus session.
|
||||
- Track tiny habits without an account.
|
||||
- Finish with a one-minute reflection.
|
||||
- Keep your data local and export when needed.
|
||||
- Keep your records local and under your control.
|
||||
|
||||
Feature graphic direction:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user