release: seal Focus Seed 1.0.0
@@ -0,0 +1,84 @@
|
||||
# Focus Seed Architecture
|
||||
|
||||
Status: refactored from single-file prototype into modular Flutter structure.
|
||||
|
||||
## Directory Layout
|
||||
|
||||
```text
|
||||
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
|
||||
```
|
||||
|
||||
## 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/features/*`: screen-level UI and user flows.
|
||||
- `src/widgets`: reusable UI components and dialogs.
|
||||
- `src/core`: framework-light utilities.
|
||||
|
||||
## 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.
|
||||
|
||||
## 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.
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -0,0 +1,100 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Focus Seed Privacy Policy</title>
|
||||
<style>
|
||||
:root {
|
||||
color-scheme: light dark;
|
||||
--primary: #2e7d6b;
|
||||
--bg: #f7f8f5;
|
||||
--text: #17211e;
|
||||
--muted: #5d6b66;
|
||||
--card: #ffffff;
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--bg: #101816;
|
||||
--text: #eef5f1;
|
||||
--muted: #b6c4bf;
|
||||
--card: #1b2522;
|
||||
}
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
line-height: 1.6;
|
||||
}
|
||||
main {
|
||||
max-width: 820px;
|
||||
margin: 0 auto;
|
||||
padding: 40px 20px 56px;
|
||||
}
|
||||
article {
|
||||
background: var(--card);
|
||||
border-radius: 8px;
|
||||
padding: 28px;
|
||||
}
|
||||
h1, h2 {
|
||||
line-height: 1.2;
|
||||
}
|
||||
h1 {
|
||||
color: var(--primary);
|
||||
margin-top: 0;
|
||||
}
|
||||
h2 {
|
||||
margin-top: 28px;
|
||||
}
|
||||
.muted {
|
||||
color: var(--muted);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<article>
|
||||
<h1>Focus Seed Privacy Policy</h1>
|
||||
<p class="muted">Effective date: June 9, 2026</p>
|
||||
|
||||
<p>Focus Seed is designed to work privately on your device.</p>
|
||||
|
||||
<h2>Data We Collect</h2>
|
||||
<p>Focus Seed V1 does not collect personal data through a server, account system, advertising SDK, analytics SDK, or billing SDK.</p>
|
||||
|
||||
<h2>Local Data Stored On Your Device</h2>
|
||||
<p>The app stores the following data locally on your device:</p>
|
||||
<ul>
|
||||
<li>Today anchor task</li>
|
||||
<li>Habit names and completion dates</li>
|
||||
<li>Focus session completion time and duration</li>
|
||||
<li>Reflection notes and mood tags</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>
|
||||
|
||||
<h2>Ads, Analytics, And Purchases</h2>
|
||||
<p>Focus Seed V1 does not include advertising SDKs, analytics SDKs, or in-app purchase SDKs.</p>
|
||||
|
||||
<h2>Children</h2>
|
||||
<p>Focus Seed is not directed to children.</p>
|
||||
|
||||
<h2>Changes</h2>
|
||||
<p>If this policy changes, the updated version will be made available in the app listing and, where appropriate, inside the app.</p>
|
||||
|
||||
<h2>Contact</h2>
|
||||
<p>Contact email: leavysong@gmail.com</p>
|
||||
</article>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,47 @@
|
||||
# Privacy Policy
|
||||
|
||||
Effective date: 2026-06-09
|
||||
|
||||
Focus Seed is designed to work privately on your device.
|
||||
|
||||
## Data We Collect
|
||||
|
||||
Focus Seed V1 does not collect personal data through a server, account system, advertising SDK, analytics SDK, or billing SDK.
|
||||
|
||||
## Local Data Stored On Your Device
|
||||
|
||||
The app stores the following data locally on your device:
|
||||
|
||||
- Today anchor task
|
||||
- Habit names and completion dates
|
||||
- Focus session completion time and duration
|
||||
- Reflection notes and mood tags
|
||||
- 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.
|
||||
|
||||
## Ads, Analytics, And Purchases
|
||||
|
||||
Focus Seed V1 does not include advertising SDKs, analytics SDKs, or in-app purchase SDKs.
|
||||
|
||||
## Children
|
||||
|
||||
Focus Seed is not directed to children.
|
||||
|
||||
## Changes
|
||||
|
||||
If this policy changes, the updated version will be made available in the app listing and, where appropriate, inside the app.
|
||||
|
||||
## Contact
|
||||
|
||||
Contact email: leavysong@gmail.com
|
||||
@@ -0,0 +1,64 @@
|
||||
# Focus Seed Product Brief
|
||||
|
||||
Status: V1 release candidate
|
||||
|
||||
## Positioning
|
||||
|
||||
Focus Seed is a private, offline-first focus timer, habit tracker, and one-minute reflection app for people who want a quiet daily productivity loop without accounts, feeds, or setup friction.
|
||||
|
||||
## V1 Scope
|
||||
|
||||
- Today anchor task.
|
||||
- 15 / 25 / 45 minute focus timer.
|
||||
- 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.
|
||||
- No-op monetization and analytics interfaces.
|
||||
- English-only UI and store listing for the first launch wave.
|
||||
|
||||
## V1 Exclusions
|
||||
|
||||
- No account sign-in.
|
||||
- No server.
|
||||
- No cloud sync.
|
||||
- No real ad SDK.
|
||||
- No billing SDK.
|
||||
- No analytics SDK.
|
||||
- No push notifications.
|
||||
- No sensitive permissions.
|
||||
- No Korean, Japanese, EU/EEA-specific, or other regional localization in V1.
|
||||
|
||||
## Region Strategy
|
||||
|
||||
Focus Seed is designed as a global product, but V1 should launch in a controlled English-first set of markets instead of every country.
|
||||
|
||||
Recommended first countries/regions for production or closed testing:
|
||||
|
||||
- United States
|
||||
- Canada
|
||||
- Australia
|
||||
- New Zealand
|
||||
- Singapore
|
||||
- India
|
||||
- Philippines
|
||||
- Malaysia
|
||||
|
||||
Defer EU/EEA, United Kingdom, Switzerland, South Korea, Japan, Brazil/LATAM, and MENA until localization, privacy wording, cultural QA, and any monetization requirements are reviewed for those regions.
|
||||
|
||||
## 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.
|
||||
- Free core loop remains usable.
|
||||
|
||||
## App IDs
|
||||
|
||||
- App name: Focus Seed
|
||||
- Developer / brand: leavysong
|
||||
- Support email: leavysong@gmail.com
|
||||
- Package/application ID: `com.dailyanchor.focusseed`
|
||||
- Version: `1.0.0+1`
|
||||
- Android min SDK: 26
|
||||
- Android target SDK: 35
|
||||
@@ -0,0 +1,38 @@
|
||||
# Focus Seed 1.0.0 Release Record
|
||||
|
||||
Release status: sealed Google Play testing build.
|
||||
|
||||
## Identity
|
||||
|
||||
- Version name: `1.0.0`
|
||||
- Version code: `1`
|
||||
- Package ID: `com.dailyanchor.focusseed`
|
||||
- Git tag: `v1.0.0`
|
||||
- Android min SDK: `26`
|
||||
- Android target SDK: `35`
|
||||
|
||||
## Artifact
|
||||
|
||||
- Local path: `build/app/outputs/bundle/release/app-release.aab`
|
||||
- Size: `22,168,710` bytes
|
||||
- SHA-256: `2987C5403C88CA7A37FD05C5C77C285B650F21056450690360633242D6B92385`
|
||||
|
||||
The AAB is intentionally not stored in Git. Verify any archived copy against this checksum before uploading or retaining it as the sealed 1.0.0 artifact.
|
||||
|
||||
## Verification
|
||||
|
||||
- `flutter analyze`: passed
|
||||
- `flutter test`: passed
|
||||
- `flutter build appbundle --release`: passed
|
||||
- Android 14 release smoke test: passed
|
||||
- Real-device screenshots captured
|
||||
- Manifest permission review: passed
|
||||
|
||||
## Privacy And Monetization
|
||||
|
||||
- No account or server
|
||||
- No ads or Advertising ID
|
||||
- No billing or purchases
|
||||
- No analytics or crash-reporting SDK
|
||||
- No network permission
|
||||
- Local-only user data with user-controlled export
|
||||
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 143 KiB |
|
After Width: | Height: | Size: 167 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 43 KiB |
@@ -0,0 +1,47 @@
|
||||
# Screenshot Plan
|
||||
|
||||
Use real app screenshots from the release build.
|
||||
|
||||
Captured on MT2110 / Android 14:
|
||||
|
||||
- `device-01-today.png`
|
||||
- `device-02-timer.png`
|
||||
- `device-03-habits.png`
|
||||
- `device-04-reflect.png`
|
||||
- `device-05-settings-clean.png`
|
||||
|
||||
Use these as the first Play Console screenshot candidates. Avoid older `device-05-settings.png` because it showed internal monetization placeholder wording that has now been removed from the app.
|
||||
|
||||
Recommended phone screenshots:
|
||||
|
||||
1. Today screen with anchor task and daily metrics.
|
||||
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.
|
||||
|
||||
Suggested captions:
|
||||
|
||||
- Plan one clear task for today.
|
||||
- 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.
|
||||
|
||||
Feature graphic direction:
|
||||
|
||||
- Size: 1024x500.
|
||||
- Visual: calm green/teal background, Focus Seed name, simple phone mockup showing timer/progress.
|
||||
- Copy: "Focus. Track. Reflect."
|
||||
- Generated asset: `launch/screenshots/focus-seed-feature-graphic-1024x500.png`
|
||||
|
||||
Icon:
|
||||
|
||||
- Generated 512x512 asset: `launch/screenshots/focus-seed-icon-512.png`
|
||||
- Play Console listing icon without transparent corners: `launch/screenshots/focus-seed-icon-512-play.png`
|
||||
|
||||
Avoid:
|
||||
|
||||
- Claims about medical benefit.
|
||||
- Subscription or ad messaging in V1 screenshots.
|
||||
- Screens that show fake cloud sync or features not in the app.
|
||||