release: seal Focus Seed 1.0.0

This commit is contained in:
2026-06-11 00:10:50 +08:00
commit 67ecb15c03
121 changed files with 5253 additions and 0 deletions
+206
View File
@@ -0,0 +1,206 @@
# Closed Testing Plan
Status: Required for this personal developer account before production access.
Official baseline:
- Minimum 12 testers.
- Testers must opt in to the closed test.
- At least 12 testers must remain opted in for 14 continuous days before applying for production access.
- Internal testing is optional and fast, but it does not replace the required closed test.
Official references:
- https://support.google.com/googleplay/android-developer/answer/14151465
- https://support.google.com/googleplay/android-developer/answer/9845334
## Immediate Flow
1. Finish App setup.
- Privacy policy URL
- App access: no login required
- Ads: no ads
- Content rating
- Target audience
- Data safety
- Government app: no
- Financial products and services: no
- Health: no
- App category and contact details
- Store listing
2. Publish an internal testing release.
- Upload `build/app/outputs/bundle/release/app-release.aab`.
- Use release name `1.0.0 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.
```
- Add yourself and one or two trusted accounts if available.
- Use this to confirm Play delivery and installation.
3. Create a closed testing track.
- Play Console > Testing > Closed testing.
- 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`.
- 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.
```
4. Add testers.
- Use email list or Google Group.
- Recommended target: 15-20 invited testers, not exactly 12.
- 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.
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 install and open the app at least once.
6. Track 14 days.
- Day 0 starts when at least 12 testers have opted in.
- Keep at least 12 opted in continuously for 14 days.
- If the opted-in count drops below 12, recruit replacements immediately and expect the qualifying window may be affected.
7. Apply for production access.
- Apply from the Play Console dashboard when eligible.
- Answer questions using the notes in this file.
## 12 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.
- Existing users from your personal network.
Recommended count:
- Invite 20 people.
- Aim for 15 opted-in.
- Keep a buffer above 12 because some people will forget, use the wrong account, or fail to install.
Do not:
- Use fake Google accounts.
- Buy bot installs.
- Promise paid reviews or fake ratings.
- Ask testers to leave public reviews during closed testing.
- Misrepresent who tested or what feedback you received.
Tester success checklist:
- Tester email is added to the closed test email list or Google Group.
- Tester opens the opt-in link while signed into the same Google account.
- Tester joins the test.
- Tester installs from Google Play.
- Tester opens the app.
- 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
```text
I am running a closed Google Play test for a new Android app called Focus Seed.
It is a lightweight focus timer, habit tracker, and one-minute reflection app. It does not require an account, does not include ads, and does not include payments.
Could you help me test it?
Steps:
1. Open this test link on your Android phone:
[Paste Play Console opt-in link]
2. Join the test.
3. Install Focus Seed from Google Play.
4. Try these flows:
- Set a daily anchor on Today
- Start or complete a focus timer
- Check off a habit
- Save a short reflection
- Open Settings and review privacy/export controls
5. Send me quick feedback:
- Did install/open work?
- Was any screen confusing?
- Any crash, lag, unreadable text, or button issue?
The test needs testers to stay opted in for 14 days. You do not need to use it every day, but please do not leave the test during that period.
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:
```
## 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
```
Target:
- Invited: 20
- Opted in: 15+
- Installed/opened: 12+
- Feedback: 8+
## Production Access Application Notes
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.
- 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.
- Readiness: no account, no server, no ads, no billing, no analytics SDK, no sensitive permissions, privacy policy and Data safety match the shipped app.
+30
View File
@@ -0,0 +1,30 @@
# Data Safety Guidance
This guidance assumes the submitted build is the current Focus Seed V1:
- No account.
- No server.
- No ad SDK.
- No analytics SDK.
- No billing SDK.
- No network permission.
- Data stored locally with `shared_preferences`.
- Export/import is user-controlled copy/paste JSON.
## Suggested Data Safety Answers
- Does your app collect or share any of the required user data types? No, if no SDKs are added before upload.
- Is all user data collected by your app encrypted in transit? Not applicable for V1 because the app does not transmit user data.
- Do users have a way to request that their data is deleted? Yes. Users can clear local data in app settings or clear/uninstall app storage.
- Does your app share user data with third parties? No, if no SDKs are added before upload.
## App Content Notes
- Ads: No.
- In-app purchases: No.
- Target audience: Adults/general productivity users. Do not mark as children-directed.
- Content rating: Productivity app, no UGC, no violence, no medical/financial claims.
## Important
If you add ads, analytics, cloud sync, billing, crash reporting, file upload, or account sign-in before uploading, update this guidance, the privacy policy, and Play Console Data safety answers.
@@ -0,0 +1,128 @@
# Region And Localization Strategy
Status: V1 launch guardrail for Focus Seed.
## Principle
Focus Seed is intended to become a global productivity app, but V1 should not open every country by default. The first release is for account rescue, policy safety, and product validation. Availability, language, privacy wording, and monetization should expand by region only when the app has the right local readiness.
Google Play country targeting is based on the user's Play country, not the user's current physical location. Internal testing is the exception: internal testers can receive the app even if their country is not selected for production/open/closed tracks.
## V1 Recommended Launch Scope
Use English-only store listing and app UI.
Recommended first production or closed-test countries/regions:
- United States
- Canada
- Australia
- New Zealand
- Singapore
- India
- Philippines
- Malaysia
Rationale:
- English is broadly usable in these markets.
- The app is culturally neutral: focus timer, habit tracking, local reflection.
- V1 has no account, no server, no ads, no analytics, no billing, and no sensitive permissions.
- This avoids adding rushed EU/EEA, Korean, Japanese, or other local-language obligations during the dormant-account rescue window.
If only internal testing is used for urgent account activity, do not over-optimize regions yet. Upload the AAB, finish required declarations, and keep the country plan ready for the first closed/open/production rollout.
## Regions To Defer
Defer EU / EEA until a later release unless there is a clear need:
- Add EU/EEA privacy wording and legal review.
- Confirm trader / non-trader presentation requirements shown in Play Console.
- Review geo-blocking and country availability choices.
- Confirm consent flow if ads, analytics, remote config, crash reporting, or cloud sync are added later.
Defer United Kingdom and Switzerland if the goal is the simplest possible legal surface. They are English-friendly but should still get region-specific privacy review before paid or data-collecting features.
Defer South Korea:
- No Korean localization in V1.
- Review local rating, local store expectations, and translated listing before launch.
Defer Japan:
- No Japanese localization in V1.
- Productivity apps can work there, but store conversion and support quality need Japanese copy.
Defer Brazil / LATAM:
- Add Portuguese or Spanish listing and privacy/support wording first.
Defer Middle East / North Africa:
- Keep the app culturally neutral, but review local listing language and screenshots before expansion.
## Store Listing Language
V1:
- Default language: English (United States).
- Do not add machine-translated Korean, Japanese, German, French, Spanish, or Portuguese just to look global.
- Do not claim local-language support that the app does not provide.
Wave 2:
- English variants for UK/Australia only if those regions are opened.
- Spanish or Portuguese only after translated screenshots and support text exist.
Wave 3:
- Japanese and Korean only after native-quality listing, screenshots, and cultural QA.
## Privacy And Data Safety
V1 privacy posture:
- No account.
- No server.
- No analytics SDK.
- No ad SDK.
- No billing SDK.
- No network permission.
- Local-only user-controlled data.
Even when no data is collected, Google Play still requires accurate Data safety answers and a privacy policy for published/testing apps outside internal-only use. Do not use region selection as an excuse to make inaccurate privacy statements.
If any of the following are added, revisit every target region before release:
- Ads
- Analytics
- Crash reporting
- Remote config
- Billing or subscriptions
- Cloud backup/sync
- Login/account creation
- Push notifications
- Location, contacts, calendar, storage, health, finance, or other sensitive data
## Culture And Content Guardrails
Keep V1 content neutral:
- No religious, political, medical, financial, gambling, dating, or adult claims.
- No children-directed positioning.
- No culturally specific imagery or slogans in screenshots.
- No productivity claims that imply clinical treatment or guaranteed outcomes.
- Use plain, calm English and avoid idioms that translate poorly.
## Expansion Checklist
Before adding a new region:
1. Confirm the app UI language and store listing language fit the region.
2. Confirm privacy policy and support email wording fit the region.
3. Confirm Data safety answers still match the shipped build.
4. Confirm content rating and target audience are appropriate.
5. Confirm screenshots do not include culturally sensitive text or imagery.
6. Confirm ads/subscriptions, if added, are available and priced correctly for that country.
7. Run at least one smoke test for the exact build being released.
+109
View File
@@ -0,0 +1,109 @@
# Release Checklist
## Dormant Account Rescue Priority
Google Play warning shown by account owner:
- Risk: developer account may be closed because it is dormant / unused.
- Fix deadline: 2026-06-14.
- Current date when recorded: 2026-06-09.
Google's official inactive-account guidance says the account owner should complete both actions before the deadline:
1. Verify Play developer account contact email and phone number.
2. Create and publish an app, publish an update, or safely upload through internal testing / closed testing if the app is not ready for public production.
For this project, the fastest low-risk route is:
1. Verify account email and phone in Play Console account details.
2. Create the Focus Seed app record.
3. Upload the signed AAB to internal testing first.
4. Complete required App content sections: privacy policy, Data safety, content rating, target audience, ads declaration, app access.
5. Add store listing text, screenshots, icon, and feature graphic.
6. Send changes for review as soon as Play Console allows submission.
7. If production access is not available, keep the internal/closed testing upload as the activity evidence and follow any Play Console testing requirement shown in the account.
Do not create a new developer account while this warning is active. Resolve this account directly.
## Required Closed Test For This Account
Play Console indicates production access is locked for this personal developer account.
- Internal testing is optional and fast, but does not unlock production access.
- Closed testing is required before applying for production.
- Minimum: 12 opted-in testers for at least 14 continuous days.
- Recommended: invite 20 people and aim for 15+ opted-in testers to keep a buffer.
- Use `closed-testing-plan.md` for tester recruitment messages, checklist, tracking table, and production access application notes.
## Region And Localization Gate
Use `region-localization-strategy.md` before selecting countries/regions in Play Console.
V1 recommendation:
- Do not select all countries by default.
- Use English-only listing and UI.
- For production or closed testing, start with English-first countries/regions: United States, Canada, Australia, New Zealand, Singapore, India, Philippines, and Malaysia.
- Defer EU/EEA, United Kingdom, Switzerland, South Korea, Japan, Brazil/LATAM, and MENA until the matching privacy wording, localization, cultural QA, and monetization checks are complete.
- If only internal testing is used for urgent account rescue, upload first; internal testing is not constrained the same way as production/open/closed country targeting.
## Build Evidence
- App Bundle: `build/app/outputs/bundle/release/app-release.aab`
- Size: about 21.1 MB
- Version: `1.0.0+1`
- Package ID: `com.dailyanchor.focusseed`
- minSdk: 26
- targetSdk: 35
- Release signing: local upload key configured
- 512x512 Play listing icon: `launch/screenshots/focus-seed-icon-512-play.png`
## Verification Completed
- `flutter analyze`: passed
- `flutter test`: passed
- `flutter build appbundle --release`: passed
- Modular architecture refactor: passed analyze/test/build after splitting `main.dart` into app, models, data, services, features, and widgets.
- Web visual smoke test: passed for Today and Timer screens.
- Android release smoke test: passed on MT2110 / Android 14 after fixing native `MainActivity` package path to match `com.dailyanchor.focusseed`.
- Real device screenshots captured: `device-01-today.png`, `device-02-timer.png`, `device-03-habits.png`, `device-04-reflect.png`, `device-05-settings-clean.png`.
- V1 settings screen hides unfinished ads/subscription placeholders; monetization remains code-level no-op infrastructure only.
- Manifest reviewed: no INTERNET, AD_ID, location, camera, contacts, SMS, or storage permissions.
- V1 contains no real ad, billing, analytics, or remote config SDK.
## Manifest Notes
Merged manifest includes:
- `android:minSdkVersion="26"`
- `android:targetSdkVersion="35"`
- Flutter text processing query
- AndroidX signature-level dynamic receiver permission
No dangerous user-data permissions are declared.
## Before Upload
1. Publish the privacy policy at a public URL.
2. Confirm support email `leavysong@gmail.com` is correct and accessible.
3. Add the privacy policy URL in Play Console.
4. Confirm account eligibility:
- If production access exists, upload to internal testing first, then production.
- If this is a new personal developer account created after 2023-11-13, create a closed test with at least 12 testers for 14 days before production access.
5. Prepare real screenshots from the app.
6. Replace launcher icon if desired.
7. Choose countries/regions using `region-localization-strategy.md`.
8. Keep `android/focus-seed-upload.jks` and `android/key.properties` safe. You need the same upload key for future updates.
## Upload Steps
1. Create app in Play Console.
2. Fill app details and App content sections.
3. Upload `app-release.aab`.
4. Complete Data safety using `data-safety-guide.md`.
5. Complete content rating questionnaire.
6. Add privacy policy URL.
7. Add store listing text from `store-listing.md`.
8. Select countries/regions according to the V1 region strategy.
9. Add screenshots and feature graphic.
10. Submit to internal testing first when possible.
+57
View File
@@ -0,0 +1,57 @@
# Google Play Store Listing
## App Name
Focus Seed
## Short Description
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.
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.
Features:
- Simple 15, 25, and 45 minute focus timer
- Daily anchor task
- Habit tracking
- One-minute reflection log
- Mood tags
- Local 7-day progress view
- JSON export and import
- Clear local-data privacy controls
Focus Seed is designed for people who want a lightweight productivity tool without accounts, feeds, or complicated setup.
## Category
Productivity
## Developer / Support
- Developer / brand: leavysong
- Support email: leavysong@gmail.com
## Graphic Assets
- Play listing icon: `launch/screenshots/focus-seed-icon-512-play.png`
- Feature graphic: `launch/screenshots/focus-seed-feature-graphic-1024x500.png`
## Tags / Positioning Keywords
focus timer, habit tracker, reflection, productivity, offline, private, daily routine
## Release Notes
First release:
- Focus timer
- Habit tracker
- Daily reflection
- Local progress stats
- Local JSON export/import
- In-app privacy controls
+32
View File
@@ -0,0 +1,32 @@
# Upload Key Notes
An upload keystore was generated for this app:
```text
android/focus-seed-upload.jks
```
Gradle signing config:
```text
android/key.properties
```
Alias:
```text
focusseed_upload
```
SHA-256 fingerprint:
```text
BA:5D:72:B4:8F:03:E4:92:99:E1:01:9F:F7:E6:40:61:54:22:73:0D:6A:E1:C2:7B:34:E2:66:73:80:99:30:DA
```
Important:
- Keep this keystore safe.
- Do not publish it publicly.
- Do not lose it after uploading the app; future updates need the same upload key unless you reset it in Play Console.
- For a real brand, you may regenerate the upload key before the first Play upload.