Skip to content

Develop - #882

Merged
tentamdin merged 63 commits into
mainfrom
develop
Sep 30, 2026
Merged

tentamdin merged 63 commits into
mainfrom
develop

Conversation

@tentamdin

Copy link
Copy Markdown
Member
  • ✏️ Edit or delete your prayer requests and intentions
  • 📖 Added Yigchung
  • 🔔 Group chat notifications now off by default (you choose to turn them on)
  • 💬 New feedback option on the home screen
  • 📅 Event page polish — reorganized organizer/join layout, cleaner prayer requests
  • 🌐 Improved translations and language handling in the reader
  • 🐛 Various fixes and refinements to onboarding and events

dhakar66 and others added 30 commits September 29, 2026 12:42
- Introduced a new feedback button in the HomeSharePrompt widget that opens a feedback URL.
- Refactored the share button into a more generic PromptButton to accommodate both sharing and feedback actions.
- Updated the build method to include localized labels for the new buttons.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Added a new feedback system that allows users to submit feedback via a Discord webhook.
- Introduced a feedback sheet UI for users to enter their feedback and attach images.
- Updated localization files to support feedback-related strings in multiple languages.
- Created a DiscordFeedbackClient to handle the submission of feedback reports.
- Integrated feedback functionality into the HomeSharePrompt for easy access.
- Introduced a new localized string for "home_share_support" with the message "Your support helps our community grow."
- Updated localization files for English, Hindi, Mongolian, Nepali, and Chinese to include the new string.
- Modified the HomeSharePrompt widget to display the new support message below the share prompt.
- Updated the Android and iOS build workflows to include the DISCORD_FEEDBACK_WEBHOOK_URL secret.
- Modified the create_env_files.sh script to output the DISCORD_FEEDBACK_WEBHOOK_URL in the .env files for development, staging, and production environments.
- Enhanced the FeedbackSheet widget to ensure proper layout and usability when the keyboard is displayed, improving user experience for feedback submission.
- Added unit tests for the FeedbackSheet to verify functionality and layout under various conditions.
- Added a new localized string for "feedback_images" across various languages including English, Hindi, Mongolian, Nepali, Chinese, and Tibetan.
- Updated existing localization files to reflect the new string and modified related feedback UI components to incorporate the label.
- Enhanced the FeedbackSheet widget to improve user experience by displaying the new feedback images label.
…guages

- Added localized strings for "home_share_support" in Tibetan, Hindi, Mongolian, Nepali, and Chinese.
- Updated the corresponding localization files to reflect the new translations.
- Ensured the HomeSharePrompt widget displays the updated support message in each language.
…nt list's language

Issue #855 (Tara event translation settings).

- A translated edition opened under its original (the Tara event's
  English and Chinese plans, most chant lists) is now this visit's
  default, not an override. A saved "translation off" stays off, and a
  remembered translation language or edition replaces the opened one.
- In an event, a translated edition keeps the original on, following
  the event rule. Plans and chants still show the translation alone by
  default.
- A chant picked in a language, from the chant list or a collection
  item, shows that language whatever the app language. The picked
  edition's layer stays on until the person changes that switch in the
  sheet.
- Version resolving prefers the remembered edition, then the opened
  one, then the first.
- Reader README updated. Settings stay on the device; syncing them
  across devices needs a backend endpoint.
Greptile review on #868: only readerOpenedTranslationNeedsRefill was
tested, not the refill it triggers.

- Split ReaderInitialLayoutApplier.maybeApply: it reads the loaded text
  and hands off to applyForText (@VisibleForTesting), so tests can run
  the applier without building a ReaderNotifier. Behaviour unchanged.
- Widget tests open the English edition under its Tibetan root from an
  event and run the applier: nothing saved keeps it; a saved edition or
  language replaces it; a saved "translation off" stays off; a saved
  language with nothing to show puts the opened edition back.
- Moved the in-memory settings datasource to
  test/features/reader/fakes/ so both test files share it.
Review fixes on #868.

- A chant opened from a language list is pinned to that language as soon
  as the translated edition opens, not once the text's languages load,
  so a saved "translation off" no longer shows the Tibetan first.
- fillSecondaryWithLanguages keeps a slot already in the candidate's
  language unless the remembered edition is offered in that language;
  re-resolving would only clear the slot and put the same edition back.
…55-develop

fix(reader): keep saved picks on translated editions and show the chant list's language
… live-sync reader

The missed-days count runs from Day 1 regardless of when someone joined,
so late joiners of the Tara event saw a backlog of days they never signed
up for. PlanDetails now leaves the badge out whenever it was opened from
an event, for both the online layout under the stream and the in-person
plain layout. My Plans and the home series rows keep it.

Picking a search result replaced the reader route without the event, so
the live pill, prayer requests and the follow position all vanished.
ReaderAppBarOverlay takes an optional search callback and hides the
button when it is null; ReaderScreen passes null only while the reader
follows a live recitation, so online attendees and ordinary readers keep
search.

Tests: the live-event PlanDetails test takes a start date, completion
map, optional event id and view size, with three new cases (online,
in-person, and the same plan outside an event still counting); a new
ReaderAppBarOverlay test covers the bar with and without search.
… repeat

The Tolgee pull put the zh translation of connect_event_about_empty into the English file, and translated connect_event_every_date in zh as "Enter {date}".
Stripping ":00" from the formatted time turned "15:00" into a bare "15" in zh and mn. Drop the minutes from the locale's pattern instead, and only for clocks with a day period.
…omers

Follow the new event design: the when/where card sits above the
description in About, Online is always link-coloured, and tabs read
Accumulations, About, Videos. The opening tab is About for newcomers and
the accumulation for users who have already joined (is_joined), fixed on
first load so joining on the page doesn't switch tabs.
Chore: localization pull from tolgee
- Added new localization strings for language selection and onboarding descriptions across multiple languages.
- Updated onboarding screen layouts to improve user experience, including the addition of practice and connection features.
- Refactored onboarding screen components for better code organization and readability.
dhakar66 and others added 22 commits September 30, 2026 15:17
…ed layout

- Updated OnboardingScreen5 to use CustomScrollView, enhancing the layout structure.
- Maintained existing features while improving scroll behavior and overall user experience.
The Tolgee Sync workflow ran the new `intentions` step before `pull`, so a
timeout or error from GET /intentions failed the job and skipped the pull
and the sync PR even when Tolgee was healthy. The step is now
continue-on-error: the pull and PR go ahead and the missing keys are
created on the next run. docs/tolgee.md says the same.

The missed-days tests built their start date by subtracting 72 hours from
now, which can land on another calendar date across a daylight-saving
change. They now step back three calendar days.

Both from the Greptile review of #879. Its third finding, that existing
intention translations would disappear, does not apply: the old
English-text keys held only stale English values and no other language,
and the slug keys are already published in all six.
- Live count is auto-disposed and restarts from a newer server count
- Delete confirm and failure use prayer request wording
- Save stays disabled until an edit changes something
- Supporters sheet shows the request's latest text and intention
The intentions step is continue-on-error so an API outage cannot block the pull and the sync PR. That also let a failed key creation pass unnoticed. A final step now fails the run when that step failed, after the pull and the PR have gone out, and the doc says so.
Chore: Prayer request edit and delete
When the yigchung request is slow or fails, the page opens without marks.
It was then cached for the full 48h, so the marks stayed missing on later
opens. Such pages are now flagged partial and cached for 5 minutes: still
served offline, refetched whole soon after when online.
A page saved without its yigchung marks was cached for 5 minutes, and
expired entries are deleted on app start, so it was gone for offline
reading after a restart. Save it for the usual 48h with an is_partial
flag instead; while online, opening it fetches the whole page, falling
back to the saved one if that fails.
A saved page without yigchung marks made the reader wait on a full
network fetch before showing it. It now opens straight away and is
refreshed in the background (one refresh per page at a time).

A page fetched without marks no longer replaces a live saved page that
has them, so a slower refresh finishing last cannot wipe the marks.
- Tradition step uses checkboxes: pick one or more; "Show me everything"
  checks every path. Each checked tradition is saved; a retry after a
  partial failure only resends the ones that failed.
- Guard page advances per page so a double tap cannot skip a step, and
  block repeat taps on the language Continue while it saves.
- Let the welcome screen scroll when it cannot fit.
- Remove the unused how-it-works screen, old onboarding widgets and
  their l10n keys; regenerate l10n.
- Freeze tradition choices while a save is in flight, so a late check or
  uncheck cannot be skipped by the save and still advance the flow.
- On retry, delete traditions this flow saved that the user has since
  unchecked, so they do not stay on the server.
…ified

chore(onboarding): enhance onboarding language and tradition screens
fix(events): Tara event card — hide missed days, drop live-reader search, translate prayer intentions by slug
# Conflicts:
#	lib/features/group_chat/presentation/widgets/new_prayer_request_sheet.dart
fix: padding on the poem and red dot time
@greptile-apps

greptile-apps Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 3/5

[High risk] Adds Discord webhook integration and updates build configuration.

The PR is not ready to merge because the feedback webhook still ships in app builds.

Findings

  1. P1 Security Feedback credential ships in builds ▶
  2. P2 Hindi supporter count disappears ▶
  3. P2 Prayer count shows a hash ▶
  4. P2 Search stays hidden after recitation ▶
  5. P2 Feedback uploads lack a test ▶
Fix with agent prompt
### Issue 1
ci/scripts/create_env_files.sh:undefined-72
The build writes the Discord webhook URL into the `.env` files bundled with the app. Anyone with a build can extract that URL and post directly to the feedback channel without using the app. Keep the webhook on a server and send feedback through that server.

**How this was verified:** The build bundles the webhook URL as an asset, and the feedback client posts directly to that URL.

### Issue 2
lib/core/l10n/app_hi.arb:1176
When two or more people support a prayer request, the Hindi `event_prayer_people_praying` message uses an empty `other` branch. The request tile and supporters sheet then show no count. Give that branch a message that includes the count.

```suggestion
  "event_prayer_people_praying": "{count, plural,\none {# व्यक्ति प्रार्थना कर रहा है}\nother {{count} व्यक्ति प्रार्थना कर रहे हैं}\n}",
```

### Issue 3
lib/core/l10n/app_bo.arb:1167
The new prayer-count messages use `#` where the number should go in Tibetan, Chinese, Mongolian, and Nepali. Their generated text keeps the hash mark, so readers see `#` instead of the number of people praying. Use the `{count}` placeholder in these messages.

### Issue 4
lib/features/reader/presentation/screens/reader_screen.dart:771-772
The reader hides search whenever it was opened for a live recitation. Ending that session does not change `_liveEventId`, so someone who keeps reading still cannot search the text. Show search once the reader no longer follows the live session.

### Issue 5
lib/features/feedback/data/discord_feedback_client.dart:80-87
The new tests check the payload and an unset webhook, but none calls `send` with a configured webhook and images. Add a test that checks the form the client posts and how it reads error responses. Otherwise, a broken upload or error message could pass the tests unnoticed.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Reviews (2) · Last reviewed commit: "fix:synced with tolgee"

echo "CLARITY_ENABLED=${CLARITY_ENABLED-}"
# All flavors post to the same channel; the message carries no environment
# tag, so feedback from a test build is indistinguishable from a real one.
echo "DISCORD_FEEDBACK_WEBHOOK_URL=${DISCORD_FEEDBACK_WEBHOOK_URL-}"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 security Feedback credential ships in builds

The build writes the Discord webhook URL into the .env files bundled with the app. Anyone with a build can extract that URL and post directly to the feedback channel without using the app. Keep the webhook on a server and send feedback through that server.

How this was verified: The build bundles the webhook URL as an asset, and the feedback client posts directly to that URL.

Prompt To Fix With AI
This is a comment left during a code review.
Path: ci/scripts/create_env_files.sh
Line: 72

Comment:
**Feedback credential ships in builds**

The build writes the Discord webhook URL into the `.env` files bundled with the app. Anyone with a build can extract that URL and post directly to the feedback channel without using the app. Keep the webhook on a server and send feedback through that server.

**How this was verified:** The build bundles the webhook URL as an asset, and the feedback client posts directly to that URL.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Comment on lines +771 to +772
onSearchPressed:
liveEventId == null ? () => _handleSearch(context, state) : null,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Search stays hidden after recitation

The reader hides search whenever it was opened for a live recitation. Ending that session does not change _liveEventId, so someone who keeps reading still cannot search the text. Show search once the reader no longer follows the live session.

Prompt To Fix With AI
This is a comment left during a code review.
Path: lib/features/reader/presentation/screens/reader_screen.dart
Line: 771-772

Comment:
**Search stays hidden after recitation**

The reader hides search whenever it was opened for a live recitation. Ending that session does not change `_liveEventId`, so someone who keeps reading still cannot search the text. Show search once the reader no longer follows the live session.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Comment on lines +80 to +87
try {
await _dio.post<void>(
url,
data: form,
queryParameters: const {'wait': 'true'},
);
} on DioException catch (e) {
throw FeedbackException(_classify(e), e);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Feedback uploads lack a test

The new tests check the payload and an unset webhook, but none calls send with a configured webhook and images. Add a test that checks the form the client posts and how it reads error responses. Otherwise, a broken upload or error message could pass the tests unnoticed.

Prompt To Fix With AI
This is a comment left during a code review.
Path: lib/features/feedback/data/discord_feedback_client.dart
Line: 80-87

Comment:
**Feedback uploads lack a test**

The new tests check the payload and an unset webhook, but none calls `send` with a configured webhook and images. Add a test that checks the form the client posts and how it reads error responses. Otherwise, a broken upload or error message could pass the tests unnoticed.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@tentamdin
tentamdin merged commit e6b12a5 into main Sep 30, 2026
1 of 5 checks passed
Comment thread lib/core/l10n/app_hi.arb
}
}
},
"event_prayer_people_praying": "{count, plural,\none {# व्यक्ति प्रार्थना कर रहा है}\nother {}\n}",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Hindi supporter count disappears

When two or more people support a prayer request, the Hindi event_prayer_people_praying message uses an empty other branch. The request tile and supporters sheet then show no count. Give that branch a message that includes the count.

Suggested change
"event_prayer_people_praying": "{count, plural,\none {# व्यक्ति प्रार्थना कर रहा है}\nother {}\n}",
"event_prayer_people_praying": "{count, plural,\none {# व्यक्ति प्रार्थना कर रहा है}\nother {{count} व्यक्ति प्रार्थना कर रहे हैं}\n}",
Prompt To Fix With AI
This is a comment left during a code review.
Path: lib/core/l10n/app_hi.arb
Line: 1176

Comment:
**Hindi supporter count disappears**

When two or more people support a prayer request, the Hindi `event_prayer_people_praying` message uses an empty `other` branch. The request tile and supporters sheet then show no count. Give that branch a message that includes the count.

```suggestion
  "event_prayer_people_praying": "{count, plural,\none {# व्यक्ति प्रार्थना कर रहा है}\nother {{count} व्यक्ति प्रार्थना कर रहे हैं}\n}",
```

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Comment thread lib/core/l10n/app_bo.arb
}
}
},
"event_prayer_people_praying": "{count, plural,\nother {# མིས་སྨོན་ལམ་འདེབས་བཞིན་ཡོད}\n}",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Prayer count shows a hash

The new prayer-count messages use # where the number should go in Tibetan, Chinese, Mongolian, and Nepali. Their generated text keeps the hash mark, so readers see # instead of the number of people praying. Use the {count} placeholder in these messages.

Prompt To Fix With AI
This is a comment left during a code review.
Path: lib/core/l10n/app_bo.arb
Line: 1167

Comment:
**Prayer count shows a hash**

The new prayer-count messages use `#` where the number should go in Tibetan, Chinese, Mongolian, and Nepali. Their generated text keeps the hash mark, so readers see `#` instead of the number of people praying. Use the `{count}` placeholder in these messages.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

@greptile-apps

greptile-apps Bot commented Sep 30, 2026

Copy link
Copy Markdown
Contributor

Want your agent to iterate on Greptile's feedback? Try greploops.

This branch was successfully deployed

No deployments
development — 84283310 Deployed Sep 30, 2026 by tentamdin via ios / iOS • dev #215
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants