Shared flow for poster and contractor roles. Unified settings hub with account, notifications, privacy, appearance, and support.
SettingsHub screen. Shared layout, role badge adapts to poster/contractor. useAuth() for role, useQuery(api.users.*.me) for profile.
Contractor variant shows Service Area and Payouts sections. Role badge is terracotta. Same component, conditional sections via userRole.
Permanently remove your account and all associated data. This action cannot be undone.
AccountSettings screen. Email/phone edits trigger verification. useMutation(api.users.*.updateProfile) for contact, Clerk for auth.
NotificationPreferences screen. Per-category matrix of push/email/SMS. useQuery(api.*.settings.getNotificationPreferences), useMutation(api.*.settings.updateNotificationPreferences).
PrivacySecurity screen. Sessions from Clerk, blocked users from Convex. useClerk().sessions, useQuery(api.users.*.getBlockedUsers).
AppearanceSettings screen. Theme stored in AsyncStorage. useTheme() from ThemeContext, persisted via AsyncStorage.setItem('theme').
Tap the "Post a Job" button on your home screen. Fill in the project details, upload photos if needed, and submit. You'll start receiving bids within hours.
HelpSupport screen. FAQ from static data, diagnostics from device info. useDeviceInfo() hook, useMutation(api.support.submitBugReport).
AboutLegal screen. Version from app.json, links open in-app browser. Constants.expoConfig.version, Linking.openURL() for external.
DeleteAccountModal bottom sheet. Button disabled until "DELETE" is typed. useMutation(api.users.*.deleteAccount), Clerk signOut().
Confirmed state: "DELETE" fully typed, button becomes active. String comparison enables submit. 30-day grace period before permanent deletion.