Fix/sonarqube and mobile parity - #9
Merged
Merged
Conversation
Theme: - Create apps/mobile/lib/theme.ts with centralized colors, radius, shadows - Fix white background: add contentStyle to Stack, sceneStyle to Tabs - Replace 21 per-file color objects with single import (-400 lines) Habit interactions: - Replace inline HabitCardMobile with real HabitList component in Today screen - Wire all 13 handlers in HabitList (delete, duplicate, moveParent, skip, forceLogParent, enterSelectMode, toggleSelection, searchQuery) - FAB now triggers setShowCreateModal - HabitList supports scrollEnabled prop for embedding in ScrollView i18n: - Add useTranslation to 10 screens: calendar, achievements, streak, ai-settings, about, upgrade, chat, profile, calendar-sync, advanced - Replace 100+ hardcoded English strings with t() calls - Add calendarSync i18n keys to en.json and pt-BR.json - Tab titles now use i18n Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Introduce a large set of new mobile UI components (chat actions, breakdown suggestion, conflict warning, gamification UI, goal/habit modals & drawers, referral, onboarding flows, various UI atoms) and wire them into the app. Update Today tab to use GoalList, create/log/detail/edit habit modals, trial banner, notification bell, gamification toasts/celebrations and FAB behavior for goals. Enhance Profile and About screens with referral, feature-guide, fresh-start animation and streak badge; add onboarding flow, expiry warning and push prompt into root layout. Adjust app.json to simplify runtimeVersion and disable expo-updates/updates, and apply small UX i18n and theme tweaks (preferences, auth-callback, provider/hooks integrations).
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
thomasluizon
added a commit
that referenced
this pull request
Apr 15, 2026
DraggableFlatList previously had no getItemLayout, so React Native had to measure every row before rendering during initial scroll and drag events. With 40+ habits on mid-tier Android this produces visible jank. Adds an approximate ESTIMATED_HABIT_ITEM_HEIGHT=104 and wires getItemLayout onto the primary DraggableFlatList driver. The value does not need to be perfect: telling RN that rows are of roughly uniform height unlocks scroll-to-offset fast-paths and smoother drag. Covers frontend plan Area C #3 (P0 #9). Note: Splitting habit-list.tsx + habit-card.tsx into smaller files (Area C #1, #2) is deferred as a TODO — it is a large refactor across 2,119 + 1,511 LOC and is better done in a dedicated PR with profiling measurements. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3 tasks
This was referenced Jun 22, 2026
Merged
thomasluizon
added a commit
that referenced
this pull request
Jun 27, 2026
* feat(mobile): opt-in persistent reminder notification (#9) Opt-in (default off) ongoing Android notification showing streak + today's progress, riding the existing widget feed. sticky+autoDismiss:false on a dedicated LOW-importance channel; stable identifier refreshes it in place. Hooks into syncWidgetData's existing log/foreground/boot triggers (no extra fetch); signed-out cancels. Preferences toggle backed by a persisted Zustand store. i18n in both locales. Mobile-only: an ongoing OS notification has no web counterpart (like the Android widget). No backend change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(mobile): dismiss persistent reminder on logout (#328 review) logout() and checkAuth()'s signed-out fast-path now call cancelPersistentReminder() right after clearWidgetToken(), so a signed-out user's streak/progress no longer lingers in the Android tray (the ongoing notification can't be swiped away). Previously dismissal only fired on the next foreground via syncWidgetData(null). Two tests pin both paths. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This was referenced Jun 27, 2026
This was referenced Jul 6, 2026
This was referenced Jul 16, 2026
thomasluizon
added a commit
that referenced
this pull request
Jul 19, 2026
The habit-list empty state's "Ask Astra" (primary) / "Create" (ghost) pills hugged their own content independently, so unequal label lengths made the pair look mismatched even at identical height/padding (defect #9). Adds a new, narrowly-scoped EmptyState prop, matchActionFooterWidth, sanctioned as DESIGN.md's one exception to PillButton's hug-only contract: web uses a CSS grid wrapper (default stretch sizes every track to its widest child), mobile sets the actions View's alignItems to stretch instead of center (Yoga resolves the same way). PillButton itself is untouched; the sizing lives only in the shared wrapper, opt-in per caller. Verified live: both pills render at 177x50px (pt-BR, light+dark) instead of the prior content-driven mismatch. Winning hypothesis: PillButton's documented hug-to-content behavior, not a broken size prop (both were already 'md') - confirmed via getBoundingClientRect measurement before touching any code. Web: lint clean, tsc clean, 49/49 tests pass. Mobile: lint clean, tsc clean, 12/12 tests pass.
This was referenced Jul 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.