Commit Graph

33 Commits

Author SHA1 Message Date
Trey t
d3caffa792 Add contractor management and integrate with task completions
Features:
- Add full contractor CRUD functionality (Android & iOS)
- Add contractor selection to task completion dialog
- Display contractor info in completion cards
- Add ContractorSpecialty model and API integration
- Add contractors tab to bottom navigation
- Replace hardcoded specialty lists with API data
- Update lookup endpoints to return arrays instead of paginated responses

Changes:
- Add Contractor models (ContractorSummary, ContractorDetail, ContractorCreate/UpdateRequest)
- Add ContractorApi with endpoints for list, detail, create, update, delete, toggle favorite
- Add ContractorViewModel for state management
- Add ContractorsScreen and ContractorDetailScreen for Android
- Add AddContractorDialog with form validation
- Add Contractor views for iOS (list, detail, form)
- Update CompleteTaskDialog to include contractor selection
- Update CompletionCardView to show contractor name and phone
- Add contractor field to TaskCompletion model
- Update LookupsApi to return List<T> instead of paginated responses
- Update LookupsRepository and LookupsViewModel to handle array responses
- Update LookupsManager (iOS) to handle array responses for contractor specialties

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 19:39:41 -06:00
Trey t
e13448083c Modernize remaining views and badge components
Completed modernization of list views and badge components to match the new design system.

ResidencesListView:
- Modern background color from design system
- Improved loading state with text
- Property count display under header
- Modern toolbar icons with primary color
- Consistent spacing and padding

StatusBadge & PriorityBadge:
- Updated to use AppColors for semantic states
- Applied AppTypography for consistent font sizing
- Used AppSpacing for uniform padding
- Applied AppRadius for consistent corner radius
- Color-coded states (success, warning, error)
- Improved icon sizing and weight

All components now fully integrated with the design system:
- AppColors for all colors
- AppTypography for all text
- AppSpacing for all spacing
- AppRadius for all corner radii
- AppShadow for depth and elevation

The iOS app now has a completely modern, cohesive UI across all views.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 11:56:15 -06:00
Trey t
9305371276 Modernize task and residence card components
Applied modern design system to card components for consistent, sleek appearance.

TaskCard Improvements:
- Modern typography with design system fonts
- Pill-style metadata badges with icons
- Color-coded action buttons (success green, warning orange)
- Improved spacing and visual hierarchy
- Enhanced completion section with icon badge
- Redesigned secondary actions with better contrast

ResidenceCard Improvements:
- Gradient icon background for property type
- Star badge for primary residence with accent color
- Location icons for address fields
- Modernized task stats with color coding
- Consistent shadow and corner radius

Both cards now use:
- AppColors for consistent color palette
- AppTypography for font hierarchy
- AppSpacing for consistent spacing
- AppRadius for uniform corner radii
- AppShadow for depth and elevation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 11:53:39 -06:00
Trey t
8e82f43aba Fix SwiftUI type-checker timeout in LoginView
Broke up complex expressions into computed properties and subviews to help the Swift compiler type-check the view hierarchy.

Changes:
- Extracted isFormValid computed property
- Extracted loginButtonContent as separate view
- Extracted loginButtonBackground with @ViewBuilder
- Simplified button disabled condition

This resolves "The compiler is unable to type-check this expression in reasonable time" error.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 11:50:40 -06:00
Trey t
b7e0b6fefc Fix ambiguous Color init(hex:) extension
Removed duplicate Color.init(hex:) extension from AllTasksView.swift as it's now defined in DesignSystem.swift.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 11:48:22 -06:00
Trey t
4c9dc56e64 Implement modern design system for iOS app
Created a comprehensive, modern design system and applied it to key views for a sleek, contemporary look.

Design System Features:
- Modern color palette with blue primary and purple accent colors
- Semantic colors for success, warning, error, and info states
- Typography scale with SF Rounded for headlines
- Spacing and radius systems for consistent layout
- Shadow utilities for depth and elevation
- Reusable button and card styles

Modernized Views:
- LoginView: Card-based layout with gradient app icon, animated focus states, gradient buttons
- HomeScreenView: Personalized greeting, modern navigation cards
- OverviewCard: Stats grid with circular icon badges and dividers
- StatView: Circular backgrounds with modern typography
- HomeNavigationCard: Gradient icon backgrounds with clean hierarchy

Key Improvements:
- Replaced hardcoded colors with design system tokens
- Added gradient accents for visual interest
- Improved spacing and typography hierarchy
- Added subtle shadows for depth
- Implemented animated focus states
- Better disabled and loading states for buttons

Documentation:
- Added DESIGN_SYSTEM.md with comprehensive usage guide
- Documented colors, typography, spacing, and component patterns
- Included migration guide for updating remaining views

All views remain separate files as requested.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 11:45:45 -06:00
Trey t
77a118a6f7 Refactor iOS and Android views into separate files
Organized view components by extracting composables and views into separate files following single responsibility principle.

iOS Changes:
- Split MainTabView → extracted ProfileTabView
- Split CompleteTaskView → extracted ImageThumbnailView, CameraPickerView
- Split ManageUsersView → extracted ShareCodeCard, UserListItem
- Consolidated task action buttons into single TaskActionButtons.swift file
- Split HomeScreenView → extracted OverviewCard, StatView, HomeNavigationCard
- Split AllTasksView → extracted DynamicTaskColumnView, DynamicTaskCard
- Split ContentView → extracted ComposeView, CustomView

Android Changes:
- Split ResetPasswordScreen → extracted RequirementItem component
- Split TasksScreen → extracted TaskPill component
- Created TaskDisplayUtils for shared helper functions (getIconFromName, hexToColor)

All extracted components properly organized in:
- iOS: Subviews/Common, Subviews/Task, Subviews/Residence, Profile
- Android: ui/components/auth, ui/components/task, ui/utils

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 11:38:17 -06:00
Trey t
29b4c99f08 Add residence deletion functionality for iOS and Android
- Add delete residence button to iOS ResidenceDetailView (primary owners only)
- Add delete confirmation alert for iOS with destructive action
- Implement deleteResidence API call in iOS with navigation on success
- Add delete residence button to Android ResidenceDetailScreen (primary owners only)
- Add delete confirmation dialog for Android with error-colored button
- Add deleteResidenceState to ResidenceViewModel with StateFlow
- Implement deleteResidence() and resetDeleteResidenceState() in ViewModel
- Add LaunchedEffect to handle delete success (navigates back) and errors
- Display delete button with red/error styling on both platforms
- Restrict delete functionality to primary owners only

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 10:42:37 -06:00
Trey t
872a7df86f Add camera functionality for task completion photos
- Add camera picker interface to common ImagePicker.kt
- Implement camera capture for Android using ActivityResultContracts.TakePicture
- Implement camera capture for iOS using UIImagePickerController
- Add camera picker stubs for wasmJs, jsMain, and jvmMain platforms
- Update CompleteTaskDialog to show both "Take Photo" and "Choose from Library" buttons
- Add camera permissions to Android manifest (CAMERA permission, camera intent queries)
- Configure Android FileProvider for camera photo sharing
- Add camera and photo library usage descriptions to iOS Info.plist
- Update iOS CompleteTaskView with native camera picker support
- Fix cancel button in CompleteTaskView using @Environment(\.dismiss)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-10 10:25:37 -06:00
Trey t
131637e6f3 Add photo viewer for task completions on iOS and Android
- Add PhotoViewerDialog (Android) and PhotoViewerSheet (iOS) for viewing completion photos
- Add CompletionCardView (iOS) to display completion details with photo button
- Update AllTasksView (iOS) to show full completion details instead of just count
- Update TaskCard (Android) to use CompletionCard component
- Add Coil 3.0.4 image loading library for Android
- Configure ImageLoader in MainActivity with network, memory, and disk caching
- Add getMediaBaseUrl() to ApiClient for loading media files without /api path
- Fix photo viewer background color to match app theme

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 20:42:18 -06:00
Trey t
99228d03b5 Update login and password reset UI across iOS and Android
- Add email/username login support
  - Android: Update LoginScreen with email keyboard type
  - iOS: Update LoginView with email keyboard support

- Refactor iOS password reset screens to use native SwiftUI components
  - Convert ForgotPasswordView to use Form with Sections
  - Convert VerifyResetCodeView to use Form with Sections
  - Convert ResetPasswordView to use Form with Sections
  - Use Label components for error/success messages
  - Add navigation titles and improve iOS-native appearance

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:41:47 -06:00
Trey t
fdcc2a2e16 Add password reset feature for iOS and Android with deep link support
Implemented complete password reset flow with email verification and deep linking:

iOS (SwiftUI):
- PasswordResetViewModel: Manages 3-step flow (request, verify, reset) with deep link support
- ForgotPasswordView: Email entry screen with success/error states
- VerifyResetCodeView: 6-digit code verification with resend option
- ResetPasswordView: Password reset with live validation and strength indicators
- PasswordResetFlow: Container managing navigation between screens
- Deep link handling in iOSApp.swift for mycrib://reset-password?token=xxx
- Info.plist: Added CFBundleURLTypes for deep link scheme

Android (Compose):
- PasswordResetViewModel: StateFlow-based state management with coroutines
- ForgotPasswordScreen: Material3 email entry with auto-navigation
- VerifyResetCodeScreen: Code verification with Material3 design
- ResetPasswordScreen: Password reset with live validation checklist
- Deep link handling in MainActivity.kt and AndroidManifest.xml
- Token cleanup callback to prevent reusing expired deep link tokens
- Shared ViewModel scoping across all password reset screens
- Improved error handling for Django validation errors

Shared:
- Routes: Added ForgotPasswordRoute, VerifyResetCodeRoute, ResetPasswordRoute
- AuthApi: Enhanced resetPassword with Django validation error parsing
- User models: Added password reset request/response models

Security features:
- Deep link tokens expire after use
- Proper token validation on backend
- Session invalidation after password change
- Password strength requirements enforced

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 18:29:29 -06:00
Trey t
e6dc54017b Add PDF maintenance report generation feature for Android and iOS
- Add generateTasksReport API endpoint in ResidenceApi
- Implement report generation button in Android residence detail screen
- Add report generation state management in shared ResidenceViewModel
- Add report generation button to iOS residence detail view toolbar
- Implement iOS-specific report generation logic in ResidenceViewModel
- Display loading spinner and success/error alerts for report generation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-09 10:12:22 -06:00
Trey t
7dce211681 wip 2025-11-08 16:02:01 -06:00
Trey t
97eed0eee9 wip 2025-11-08 10:52:28 -06:00
Trey t
364f98a303 Fix logout, share code display, loading states, and multi-user support
iOS Logout Fix:
- Use @EnvironmentObject in MainTabView and ProfileTabView
- Pass loginViewModel from LoginView to MainTabView
- Handle logout by dismissing main tab when isAuthenticated becomes false
- Logout button now properly returns user to login screen

Share Code UX:
- Clear share code on ManageUsers screen open (iOS & Android)
- Remove auto-loading of share codes
- User must explicitly generate code each time
- Improves security with fresh codes

Loading State Improvements:
- iOS ResidenceDetailView shows loading immediately on navigation
- Android ResidenceDetailScreen enhanced with "Loading residence..." text
- Better user feedback during API calls

Multi-User Support:
- Add isPrimaryOwner and userCount to ResidenceWithTasks model
- Update iOS toResidences() extension to include new fields
- Sync with backend API changes for shared user access

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 10:51:51 -06:00
Trey t
492d8032f4 wip 2025-11-07 15:14:40 -06:00
Trey t
b922c4fb88 wip 2025-11-07 14:53:14 -06:00
Trey t
4e14352cd1 wip 2025-11-07 12:57:25 -06:00
Trey t
1b777049a8 wip 2025-11-07 12:21:48 -06:00
Trey t
66fe773398 wip 2025-11-06 17:53:41 -06:00
Trey t
e24d1d8559 wip 2025-11-06 09:25:21 -06:00
Trey t
e272e45689 wip 2025-11-05 21:35:52 -06:00
Trey t
a8083380aa wip 2025-11-05 20:52:51 -06:00
Trey t
bc289d6c88 wip 2025-11-05 20:31:01 -06:00
Trey t
fe99f67f81 wip 2025-11-05 19:21:46 -06:00
Trey t
6bad8d6b5a wip 2025-11-05 18:16:46 -06:00
Trey t
b2b8cc62de wip 2025-11-05 18:02:34 -06:00
Trey t
86c89121e1 ios ui refactor 2025-11-05 17:15:17 -06:00
Trey t
1d48a9bff1 wip 2025-11-05 15:15:59 -06:00
Trey t
5deac95818 wip 2025-11-05 13:52:02 -06:00
Trey t
2be3a5a3a8 wip 2025-11-05 10:38:46 -06:00
Trey t
78c62cfc52 Initial commit: Kotlin Multiplatform project setup
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 09:15:49 -06:00