BowlerKitBowlerKit
Features

Settings

10/11/2026

Local preferences, Account synchronization, appearance, notifications, and security settings.

Settings ownership

The Expo settings screens use store/preferences-store.ts and constants/theme-context.tsx. Every profile persists its local settings. Account projects additionally debounce and sync supported values to Laravel/Go through the /api/v1/app contract.

Available preferences

  • Language — en and id are bundled; the device locale is used as the initial choice.
  • Region and timezone — stored locally and synchronized for Account users.
  • Appearance — brightness, theme, primary/accent colors, text sizing, motion reduction, and compact mode.
  • Privacy — usage-data and personalized-experience toggles. These values are local in Guest mode and remote-synced in Account mode.
  • Notifications — push-enabled, promotions, and tips/updates toggles. Account values use /app/notifications/preferences; Guest values remain local.
  • Onboarding — completion is persisted locally so startup can choose the correct route.

Account-only settings

Authenticated users also see connected Google/Apple accounts, password change, active sessions, login history, account deletion, and billing/entitlement status. The root layout redirects these routes when IS_GUEST_LOCAL is true.

The biometric and two-factor switches on the security screen are currently UI state toggles. They are not a native biometric gate or a server-side 2FA implementation.

Adding a preference

  1. Add the field and default to store/preferences-store.ts.
  2. Persist it through services/storage.ts.
  3. Add a setter and, for Account data, include it in preferences-sync.ts and the backend contract.
  4. Guard remote work with IS_GUEST_LOCAL.
  5. Add translation keys to both locales/en.json and locales/id.json.

Relevant files

  • app/settings/ — settings screens.
  • store/preferences-store.ts — local state and persistence.
  • store/preferences-sync.ts — Account-only debounced synchronization.
  • constants/theme-context.tsx and constants/themes/ — appearance system.
  • services/i18n.ts — locale initialization.