Skip to content

Fix/sonarqube and mobile parity - #9

Merged
thomasluizon merged 2 commits into
mainfrom
fix/sonarqube-and-mobile-parity
Apr 5, 2026
Merged

Fix/sonarqube and mobile parity#9
thomasluizon merged 2 commits into
mainfrom
fix/sonarqube-and-mobile-parity

Conversation

@thomasluizon

Copy link
Copy Markdown
Owner

No description provided.

thomasluizon and others added 2 commits April 5, 2026 12:52
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).
@vercel

vercel Bot commented Apr 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
orbit-ui-mobile-web Building Building Preview, Comment Apr 5, 2026 5:51pm

@thomasluizon
thomasluizon merged commit 0c190e5 into main Apr 5, 2026
2 of 4 checks passed
@thomasluizon
thomasluizon deleted the fix/sonarqube-and-mobile-parity branch April 5, 2026 17:52
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>
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>
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.
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.

1 participant