Skip to content

fix(calendar): remove false offline indicator and reduce spacing - #23

Merged
Gabry848 merged 37 commits into
masterfrom
feature/subscriptions-ui-refactor
May 14, 2026
Merged

fix(calendar): remove false offline indicator and reduce spacing#23
Gabry848 merged 37 commits into
masterfrom
feature/subscriptions-ui-refactor

Conversation

@Gabry848

Copy link
Copy Markdown
Collaborator

Remove offline StatusChip from CalendarView that showed false negatives. NetworkService now pings backend /support/health instead of google.com with 2-consecutive-failure threshold. Move hardcoded secrets to env vars.

Gabry848 added 30 commits April 17, 2026 19:53
…afe area

CategoryLimitError thrown on POST /categories 403 — shows upgrade
alert instead of generic error.

QuickAddButton and AddTaskButton now respect bottom safe area inset
so buttons don't overlap home indicator on notched devices.

SafeAreaView on Home now excludes bottom edge to avoid double inset
with tab bar.
GET /auth/me now returns monthly limits for text and voice.
UserSubscription gains chat_text_monthly_limit,
chat_voice_monthly_limit, chat_voice_daily_limit.

WS close code 4029 (monthly voice quota exhausted) no longer
triggers reconnect — fires onVoiceMonthlyLimitReached instead.
Code 4003 stays for plans without voice.

POST /billing/cancel wired via cancelSubscription() in planService.

Voice display in AISettings/Settings switches from enabled/disabled
boolean to monthly quota number (or Unlimited).

Locales: daily instead of monthly for text quota; new keys for
voice monthly limit alert.
…gration

- Install react-native-purchases for Play Store IAP
- Add planLimits.ts with tier limits and product IDs
- Create revenueCatService.ts singleton (configure, getOfferings, purchasePlan, restorePurchases)
- Add SubscriptionPlans screen with plan cards (Free/Pro/Premium)
- Wire upgrade buttons in Settings/AISettings to navigate
- Implement purchase, cancel, and restore flows
- Add EN/IT localization for subscriptionPlans
- Navigation: add SubscriptionPlans to RootStackParamList

Note: User must add REVENUECAT_ANDROID_PUBLIC_KEY to .env before build
- Remove test buttons and render local plans properly
- Map real prices from RevenueCat when available
- Show offline warning and placeholder price ('--') when RevenueCat fetch fails
- Improve UI with modern layout, shadows, colors, and feature checkmarks
- Replace navigation.navigate with navigation.reset in Login to prevent
  back gesture returning to login screen
- Force dismiss WebBrowser after Google OAuth to prevent browser tab
  remaining in Android back stack
- Set showInRecents to false on auth session
Document duplicated UI patterns across Categories, TaskList, Calendar, Calendar20, and Home, and mark task 1.1 as completed to establish the migration baseline.

Made-with: Cursor
Establish the shared naming rules and folder responsibilities for `src/theme` and `src/components/UI/foundation`, and mark task 1.2 as completed.

Made-with: Cursor
Add a reusable UI validation checklist for Categories, TaskList, Calendar, and Home, and mark task 1.3 as completed.

Made-with: Cursor
Introduce spacing, radius, elevation, color, and typography tokens in `src/theme/tokens.ts` and mark task 2.1 as completed for the foundation rollout.

Made-with: Cursor
Introduce the reusable `AppText` component backed by shared typography tokens and mark tasks 2.2 and 6.1 as completed.

Made-with: Cursor
Create `ScreenContainer` and `ContentContainer` for shared background/padding behavior and mark tasks 2.3, 6.2, and 6.3 as completed.

Made-with: Cursor
Implement `ScreenHeader` with title, right action slot, and alignment variants, and mark tasks 2.4 and 6.4 as completed.

Made-with: Cursor
Add reusable card surface variants with accent border support and mark tasks 2.5 and 6.5 as completed.

Made-with: Cursor
…l, and input primitives

Implement composable UI building blocks for section headers, status chips, loading states, empty states, modal shell, input shell, and icon action button, then mark tasks 3.1-3.6 and 6.6-6.12 as completed.

Made-with: Cursor
Migrate Categories screen to `ScreenContainer`, `ScreenHeader`, and `ContentContainer` while preserving existing behavior, and mark task 4.1 as completed.

Made-with: Cursor
Commit the remaining OpenSpec change artifacts so the reusable UI foundation plan is fully tracked in git.

Made-with: Cursor
…patterns

Adopt `CardSurface` in `CategoryCard` and `SectionHeader` in category empty state to align category UI with reusable foundation components, and mark task 4.2 as completed.

Made-with: Cursor
…mitives

Replace custom dot animation with shared LoadingState (dots variant),
inline empty view with EmptyState, and section title with SectionHeader.
Remove unused loadingStyles, TaskListHeader import.
Replace hardcoded card shell with CardSurface (interactive + accent border),
Text elements with AppText variants, and category/status badges with StatusChip.
…ation primitives

Replace custom LoadingComponent with LoadingState (dots), inline sync
indicators with StatusChip (neutral/danger/warning tones), empty tasks
view with EmptyState, header title with AppText subtitle.
…ngState

Use shared LoadingState spinner instead of raw ActivityIndicator in
Calendar20View. Container background already matches tokens.
Replace mainTitle Text with AppText display variant, swap hardcoded hex
colors with token references (backgrounds, borders, text, icons). Chat
loading bubble preserved as-is (chat-specific UX pattern).
Gabry848 and others added 7 commits April 28, 2026 16:23
…wrapper

Replace Text mainTitle with AppText display (weight 200), swap hardcoded
hex colors with token references. Cleanup 5.2 — remove inline duplicates.
…t guide

Document all 12 foundation primitives with usage examples, token table,
and composition guidelines to prevent new macro-components.
Add PurchasesPackage type annotations to .find() callbacks, fix
formatFeatureLimit param types to match isUnlimitedPlan signature,
and rename i18n {{count}} to {{num}} to avoid Intl.PluralRules
which is unavailable in Hermes engine on Android.
Remove offline StatusChip from CalendarView that showed false negatives.
NetworkService now pings backend /support/health instead of google.com
with 2-consecutive-failure threshold. Move hardcoded secrets to env vars.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…e badge with price

- Move Active badge from title row to price row on the right side
- Restructure dark card with top row containing left (title+trial) and right (price+badge+period)
- Use plan-specific offerings lookup instead of current offering
- Simplify price calculation by removing monthly equivalent logic
- Show warning only when both pro and premium offerings are missing
- Remove unused darkCardHeader and darkCardTitleRow styles

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@Gabry848
Gabry848 merged commit b16b01c into master May 14, 2026
1 check failed
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