- Overhaul theme system with Svrnty design and WCAG AAA compliance
- Remove android, macos, and web platform files (iOS-only focus)
- Update components with improved dark mode map and UI refinements
- Enhance settings page with additional configuration options
- Add theme system documentation in lib/theme/README.md
- Update CLAUDE.md with comprehensive theme guidelines
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use protobuf well_known_types Timestamp for gRPC compatibility
- Fix ApiError.network() to include required message parameter
- Complete migration from HTTP to gRPC with cqrs_services proto
- App now successfully connects to gRPC backend at 192.168.88.228:5011
- Mobile UX optimization with toggleable deliveries overlay functional
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Regenerate proto stubs from correct cqrs_services.proto file
- Update GrpcCqrsApiClient to use DynamicQueryService and CommandService
- Fix type conversions for deliveries, routes, and commands
- Convert proto Timestamp to ISO8601 strings for model compatibility
- Convert string amounts to doubles for delivery orders
- Use Int64 for delivery IDs in gRPC commands
Work in progress: Timestamp conversion extension needs finalization.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds gRPC command methods to GrpcCqrsApiClient for delivery operations:
- completeDelivery: Mark delivery as completed with optional timestamp
- markDeliveryAsUncompleted: Revert completed delivery to pending
- skipDelivery: Skip a delivery that cannot be completed
All methods follow the Result<T> pattern for consistent error handling,
check CommandResponse.success flag, and map error messages appropriately.
Co-Authored-By: Claude <noreply@anthropic.com>
Implements the foundational gRPC client class with:
- Lazy ClientChannel initialization with proper credentials
- DeliveryServiceClient lazy initialization
- Authentication via Bearer token in gRPC metadata
- CallOptions builder with token injection
- gRPC error to ApiError mapping (status codes -> HTTP equivalents)
- Token refresh on UNAUTHENTICATED errors (single retry)
- Proper channel shutdown/terminate methods
The core _executeWithAuth and _executeCommandWithAuth methods provide
the foundation for query and command methods in subsequent subtasks.
Co-Authored-By: Claude <noreply@anthropic.com>
Adds GrpcDiscoveryClient for enumerating gRPC services via server reflection.
Includes:
- GrpcDiscoveryClient class with listServices(), discoverAllServices() methods
- Support for getting file descriptors for symbols and filenames
- DiscoveredService and DiscoveredMethod data classes
- Custom exceptions (ReflectionException, ConnectionException)
- Generated proto files for gRPC reflection (fixed for protobuf 6.0.0)
Co-Authored-By: Claude <noreply@anthropic.com>
Add GrpcConfig class following the pattern from ApiClientConfig with:
- Development config: 192.168.88.228:5011 (plaintext/insecure)
- Production config: grpc-route.goutezplanb.com:443 (TLS)
- Host, port, timeout, useTls, and allowSelfSignedCertificate properties
- Address getter for convenience
Co-Authored-By: Claude <noreply@anthropic.com>
Implements complete refactor of Ionic Angular logistics app to Flutter/Dart with:
- Svrnty dark mode console theme (Material Design 3)
- Responsive layouts (mobile, tablet, desktop) following FRONTEND standards
- CQRS API integration with Result<T> error handling
- OAuth2/OIDC authentication support (mocked for initial testing)
- Delivery route and delivery management features
- Multi-language support (EN/FR) with i18n
- Native integrations (camera, phone calls, maps)
- Strict typing throughout codebase
- Mock data for UI testing without backend
Follows all FRONTEND style guides, design patterns, and conventions.
App is running in dark mode and fully responsive across all device sizes.
Co-Authored-By: Claude <noreply@anthropic.com>