Commit Graph

12 Commits

Author SHA1 Message Date
Claude
2c9d43e887 feat: Improve onboarding wizard UI, UX and dark mode support
This commit implements multiple improvements to the onboarding wizard:

**1. Unified UI Components:**
- Created InfoCard component for consistent "why is important" blocks across all steps
- Created TemplateCard component for consistent template displays
- Both components use global CSS variables for proper dark mode support

**2. Initial Stock Entry Step Improvements:**
- Fixed title/subtitle positioning using unified InfoCard component
- Fixed missing count bug in warning message (now uses {{count}} interpolation)
- Fixed dark mode colors using CSS variables (--color-success, --color-info, etc.)
- Changed next button title from "completar configuración" to "Continuar →"
- Implemented stock creation API call using useAddStock hook
- Products with stock now properly save to backend on step completion

**3. Dark Mode Fixes:**
- Fixed QualitySetupStep: Enhanced button selection visibility with rings and shadows
- Fixed TeamSetupStep: Enhanced role selection visibility with rings and shadows
- Fixed AddressAutocomplete: Replaced all hardcoded colors with CSS variables
- All dropdown results, icons, and hover states now properly adapt to dark mode

**4. Streamlined Wizard Flow:**
- Removed POI Detection step from wizard (step previously added complexity)
- POI detection now runs automatically in background after tenant registration
- Non-blocking approach ensures users aren't delayed by POI detection
- Removed Revision step (setup-review) as it adds no user value
- Completion step is now the final step before dashboard

**5. Backend Updates:**
- Updated onboarding_progress.py to remove poi-detection from ONBOARDING_STEPS
- Updated onboarding_progress.py to remove setup-review from ONBOARDING_STEPS
- Updated step dependencies to reflect streamlined flow
- POI detection documented as automatic background process

All changes maintain backward compatibility and use proper TypeScript types.
2025-11-12 14:48:46 +00:00
Urtzi Alfaro
5783c7ed05 Add POI feature and imporve the overall backend implementation 2025-11-12 15:34:10 +01:00
Urtzi Alfaro
cbe19a3cd1 IMPORVE ONBOARDING STEPS 2025-11-09 09:22:08 +01:00
Claude
75916adfee Make suppliers and ML training steps unconditional + rewrite completion
CHANGES:

1. **Make suppliers-setup unconditional:**
   - Removed isConditional: true and condition
   - Suppliers step now ALWAYS appears in onboarding flow
   - No longer depends on stockEntryCompleted flag

2. **Make ml-training unconditional:**
   - Removed isConditional: true and condition
   - ML training step now ALWAYS appears in onboarding flow
   - No longer depends on aiAnalysisComplete flag

3. **Completely rewrote CompletionStep content:**
   - Changed title: "¡Felicidades! Tu Sistema Está Listo"
   - Shows what user HAS ACCOMPLISHED during onboarding:
     ✓ Información de Panadería
     ✓ Inventario con IA
     ✓ Proveedores Agregados
     ✓ Recetas Configuradas
     ✓ Calidad Establecida
     ✓ Equipo Invitado
     ✓ Modelo IA Entrenado
   - REMOVED misleading "One More Thing" section that asked users
     to configure things they JUST configured
   - Changed next steps to celebrate accomplishments and guide to dashboard
   - Updated buttons: "Ir al Panel de Control →" (single clear CTA)

FIXES:
- User frustration: suppliers and ML training steps were hidden
- User confusion: completion message didn't make sense - asking to
  configure suppliers, inventory, recipes after they just did it

ONBOARDING FLOW NOW:
1. bakery-type-selection
2. setup
3. smart-inventory-setup
4. product-categorization
5. initial-stock-entry
6. suppliers-setup ✓ ALWAYS SHOWS
7. recipes-setup (conditional on bakery type)
8. production-processes (conditional on bakery type)
9. quality-setup
10. team-setup
11. ml-training ✓ ALWAYS SHOWS
12. setup-review
13. completion (celebrates accomplishments!)

Files Modified:
- frontend/src/components/domain/onboarding/UnifiedOnboardingWizard.tsx
- frontend/src/components/domain/onboarding/steps/CompletionStep.tsx
2025-11-07 10:00:33 +00:00
Claude
3a17a423eb Fix missing suppliers and ML training steps in onboarding flow
BUG: Suppliers-setup and ml-training steps were not appearing during onboarding,
even though users completed initial-stock-entry and smart-inventory-setup steps.

ROOT CAUSE:
VISIBLE_STEPS was calculated only once at component mount, not recalculated
when wizard context state changed. When flags like stockEntryCompleted or
aiAnalysisComplete became true, the conditional steps didn't appear because
VISIBLE_STEPS array remained static.

FIXES:
1. Added useMemo import to React imports
2. Converted VISIBLE_STEPS from const to useMemo with dependencies on:
   - wizardContext.state
   - wizardContext.tenantId
3. Removed obsolete useEffect that tried to handle step recalculation manually
4. Added console logging for debugging visible steps and wizard state

FLOW NOW WORKS:
- User completes smart-inventory-setup → aiAnalysisComplete = true
  → ml-training step becomes visible
- User completes initial-stock-entry → stockEntryCompleted = true
  → suppliers-setup step becomes visible

TESTING:
- Build succeeds with no errors
- Console logs will show when VISIBLE_STEPS recalculates
- Wizard state flags logged for debugging

Files Modified:
- frontend/src/components/domain/onboarding/UnifiedOnboardingWizard.tsx
2025-11-07 09:46:58 +00:00
Claude
011843dff9 Remove manual path and add inventory lots UI to AI-assisted onboarding
## Architectural Changes

**1. Remove Manual Entry Path**
- Deleted data-source-choice step (DataSourceChoiceStep)
- Removed manual inventory-setup step (InventorySetupStep)
- Removed all manual path conditions from wizard flow
- Set dataSource to 'ai-assisted' by default in WizardContext

Files modified:
- frontend/src/components/domain/onboarding/UnifiedOnboardingWizard.tsx:11-28,61-162
- frontend/src/components/domain/onboarding/context/WizardContext.tsx:64

**2. Add Inventory Lots UI to AI Inventory Step**
Added full stock lot management with expiration tracking to UploadSalesDataStep:

**Features Added:**
- Inline stock lot entry form after each AI-suggested ingredient
- Multi-lot support - add multiple lots per ingredient with different expiration dates
- Fields: quantity*, expiration date, supplier, batch/lot number
- Visual list of added lots with expiration dates
- Delete individual lots before completing
- Smart validation with expiration date warnings
- FIFO help text
- Auto-select supplier if only one exists

**Technical Implementation:**
- Added useAddStock and useSuppliers hooks (lines 5,7,102-103)
- Added stock state management (lines 106-114)
- Stock handler functions (lines 336-428):
  - handleAddStockClick - Opens stock form
  - handleCancelStock - Closes and resets form
  - validateStockForm - Validates quantity and expiration
  - handleSaveStockLot - Saves to local state, supports "Add Another Lot"
  - handleDeleteStockLot - Removes from list
- Modified handleNext to create stock lots after ingredients (lines 490-533)
- Added stock lots UI section in ingredient rendering (lines 679-830)

**UI Flow:**
1. User uploads sales data
2. AI suggests ingredients
3. User reviews/edits ingredients
4. **NEW**: User can optionally add stock lots with expiration dates
5. Click "Next" creates both ingredients AND stock lots
6. FIFO tracking enabled from day one

**Benefits:**
- Addresses JTBD: waste prevention, expiration tracking from onboarding
- Progressive disclosure - optional but encouraged
- Maintains simplicity of AI-assisted path
- Enables inventory best practices from the start

Files modified:
- frontend/src/components/domain/onboarding/steps/UploadSalesDataStep.tsx:1-12,90-114,335-533,679-830

**Build Status:** ✓ Successful in 20.78s
2025-11-06 21:40:39 +00:00
Claude
623d378faf Architect navigation buttons correctly: move from wizard-level to step-level
Fixed the navigation architecture to follow proper onboarding patterns:

**ARCHITECTURE CHANGE:**
- REMOVED: External navigation footer from UnifiedOnboardingWizard (Back + Continue buttons at wizard level)
- ADDED: Internal Continue buttons inside each setup wizard step component

**WHY THIS MATTERS:**
1. Onboarding should NEVER show Back buttons (users cannot go back)
2. Each step should be self-contained with its own Continue button
3. Setup wizard steps are reused in both contexts:
   - SetupWizard (/app/setup): Uses external StepNavigation component
   - UnifiedOnboardingWizard: Steps now render their own buttons

**CHANGES MADE:**

1. UnifiedOnboardingWizard.tsx:
   - Removed navigation footer (lines 548-588)
   - Now passes canContinue prop to steps
   - Steps are responsible for their own navigation

2. All setup wizard steps updated:
   - QualitySetupStep: Added onComplete, canContinue props + Continue button
   - SuppliersSetupStep: Modified existing button to call onComplete
   - InventorySetupStep: Added onComplete, canContinue props + Continue button
   - RecipesSetupStep: Added canContinue prop + Continue button
   - TeamSetupStep: Added onComplete, canContinue props + Continue button
   - ReviewSetupStep: Added onComplete, canContinue props + Continue button

3. Continue button pattern:
   - Only renders when onComplete prop exists (onboarding context)
   - Disabled based on canContinue prop from parent
   - Styled consistently across all steps
   - Positioned at bottom with border-top separator

**RESULT:**
- Clean separation: onboarding steps have internal buttons, no external navigation
- No Back button in onboarding (as required)
- Setup wizard still works with external StepNavigation
- Consistent UX across all steps
2025-11-06 19:55:42 +00:00
Claude
967ecb5641 Add navigation buttons to UnifiedOnboardingWizard for setup wizard steps
Fixed issue where setup wizard steps (QualitySetupStep, SuppliersSetupStep, etc.)
used in the UnifiedOnboardingWizard didn't show navigation buttons:

1. **Added canContinue state tracking**:
   - Added canContinue state to track whether Continue button should be enabled
   - Initialized to true (optimistic default)

2. **Updated handleStepUpdate to handle canContinue**:
   - Setup wizard steps call onUpdate({ canContinue: true/false })
   - handleStepUpdate now receives and sets canContinue state
   - Allows steps to dynamically enable/disable Continue button

3. **Added navigation footer for setup wizard steps**:
   - Conditionally renders navigation buttons for setup wizard steps only
   - Includes Back button (when not first step)
   - Includes Continue button (disabled based on canContinue state)
   - Shows loading state during step completion
   - Only applies to: suppliers-setup, inventory-setup, recipes-setup,
     quality-setup, team-setup, setup-review

This fixes the issue where QualitySetupStep and other setup wizard steps
appeared in the onboarding flow without any way to proceed to the next step,
even though they were optional.

Note: ConfigurationProgressWidget navigation buttons are already correctly
implemented and should work as expected.
2025-11-06 19:16:29 +00:00
Claude
2974ff3dbf Implement supplier product/price association & unify onboarding UI
MAJOR FEATURES IMPLEMENTED:

1.  CRITICAL: Supplier Product/Price Association
   - Created SupplierProductManager component (438 lines)
   - Multi-select product picker from inventory
   - Price entry with unit of measure and min quantity
   - Expandable UI per supplier (collapsed by default)
   - Full CRUD operations via existing API hooks
   - Required for automatic Purchase Order (PO) creation
   - Warning shown if supplier has no products

2.  Step Re-Ordering: Inventory Before Suppliers
   - Manual path: inventory-setup now comes BEFORE suppliers-setup
   - AI path: Already has inventory from sales data upload
   - Ensures products exist before supplier association
   - Critical workflow fix identified by user

3.  UI/UX Unification
   - Unified badge styles across AI suggestions
   - Changed hardcoded colors to CSS variables
   - Consistent rounded-full badge design
   - Added flex-wrap for responsive badges

IMPLEMENTATION DETAILS:

SupplierProductManager.tsx (NEW - 438 lines):
- useSupplierPriceLists() - Fetch existing products for supplier
- useIngredients() - Fetch all available inventory items
- useCreate/Update/DeleteSupplierPriceList() mutations
- Expandable UI: Collapsed shows count, expanded shows management
- Product selection: Checkboxes with inline price forms
- Form fields: unit_price (required), unit_of_measure, min_order_quantity
- Validation: Price must be > 0, unit required
- Warning: Shows if no products added (blocks PO creation)

UnifiedOnboardingWizard.tsx:
- inventory-setup moved before suppliers-setup
- inventory-setup condition: dataSource === 'manual'
- suppliers-setup condition: Inventory exists (AI stockEntryCompleted OR manual inventoryCompleted)
- Ensures products always exist before supplier association

SuppliersSetupStep.tsx:
- Added SupplierProductManager import
- Changed supplier card layout from flex items-center to block
- Integrated ProductManager component into each supplier card
- Product management appears below contact info, above edit/delete

UploadSalesDataStep.tsx:
- Updated badge colors: blue-100/blue-800 → CSS variables
- Changed bg-[var(--bg-tertiary)] → bg-[var(--bg-primary)]
- Added flex-wrap to badge container
- Consistent rounded-full design

FLOW IMPROVEMENTS:

AI-Assisted Path:
Registration → Bakery Type → Data Source → Tenant Setup →
Upload Sales → Categorize → Enter Stock → **Suppliers (with products)** →
ML Training → Complete

Manual Path:
Registration → Bakery Type → Data Source → Tenant Setup →
**Inventory Setup → Suppliers (with products)** → Recipes → Processes →
ML Training → Complete

BENEFITS:
 Automatic PO creation now possible
 System knows supplier-product relationships
 Prices tracked for cost analysis
 Logical workflow (products before suppliers)
 Unified, consistent UI across onboarding
 Critical missing feature implemented

Build: Successful (21.73s)
Files: 4 changed (3 modified, 1 new)
Lines: +438 new component, ~50 lines modified
2025-11-06 14:09:10 +00:00
Claude
b22634388d Make backend robust with comprehensive onboarding steps
Backend Changes (services/auth/app/api/onboarding_progress.py):
- Expanded ONBOARDING_STEPS to include all 19 frontend steps
  - Phase 0: user_registered (system)
  - Phase 1: bakery-type-selection, data-source-choice (discovery)
  - Phase 2: setup, smart-inventory-setup, product-categorization, initial-stock-entry (core setup & AI path)
  - Phase 2b: suppliers-setup, inventory-setup, recipes-setup, production-processes (manual path)
  - Phase 3: quality-setup, team-setup (advanced config)
  - Phase 4: ml-training, setup-review, completion (finalization)

- Updated STEP_DEPENDENCIES with granular requirements
  - AI path: smart-inventory-setup → product-categorization → initial-stock-entry
  - Manual path: Independent setup for suppliers, inventory, recipes, processes
  - Flexible ML training: accepts either AI or manual inventory path

- Enhanced ML training validation
  - Supports both AI-assisted path (sales data) and manual inventory path
  - More flexible validation logic for multi-path onboarding

Frontend Changes (UnifiedOnboardingWizard.tsx):
- Fixed auto-complete step name: 'suppliers' → 'suppliers-setup'
- All step IDs now match backend ONBOARDING_STEPS exactly
- Removed temporary step mapping workarounds

Frontend Changes (apiClient.ts):
- Fixed tenant ID requirement warnings for onboarding endpoints
- Added noTenantEndpoints list for user-level endpoints:
  - /auth/me/onboarding (tenant created during onboarding)
  - /auth/me (user profile)
  - /auth/register, /auth/login
- Eliminated false warnings during onboarding flow

This makes the onboarding system fully functional with:
 Backend validates all 19 onboarding steps
 Proper dependency tracking for multi-path onboarding
 No more "Invalid step name" errors
 No more tenant ID warnings for onboarding
 Robust state tracking for complete user journey
2025-11-06 13:38:06 +00:00
Claude
63d100f1b3 Integrate categorization & stock steps with Tour system
- Updated WizardContext with new state management:
  - Added categorizedProducts and productsWithStock state
  - Added categorizationCompleted and stockEntryCompleted flags
  - Implemented updateCategorizedProducts() and updateProductsWithStock() methods
  - Updated getVisibleSteps() to include new steps in AI-assisted path

- Integrated ProductCategorizationStep and InitialStockEntryStep into UnifiedOnboardingWizard:
  - Added conditional rendering based on AI analysis completion
  - Wired up state management for both steps
  - Added intermediate update handlers

- Integrated Tour system at app level:
  - Added TourProvider to App.tsx context hierarchy
  - Added Tour component for rendering active tours
  - Added TourButton to Sidebar navigation
  - Tour button visible when sidebar is expanded

This completes the Phase 6.5 integration and sets up the guided tour infrastructure.
2025-11-06 13:07:01 +00:00
Claude
470cb91b51 Implement Phase 6: Unified Onboarding Foundation & Core Components
This commit implements Phase 6 of the onboarding unification plan, which merges
the existing AI-powered onboarding with the comprehensive setup wizard into a
single, intelligent, personalized onboarding experience.

## Planning & Analysis Documents

- **ONBOARDING_UNIFICATION_PLAN.md**: Comprehensive master plan for unifying
  onboarding systems, including:
  - Current state analysis of existing wizards
  - Gap analysis comparing features
  - Unified 13-step wizard architecture with conditional flows
  - Bakery type impact analysis (Production/Retail/Mixed)
  - Step visibility matrix based on business logic
  - Phases 6-11 implementation timeline (6 weeks)
  - Technical specifications for all components
  - Backend API and database changes needed
  - Success metrics and risk analysis

- **PHASE_6_IMPLEMENTATION.md**: Detailed day-by-day implementation plan for
  Phase 6, including:
  - Week 1: Core component development
  - Week 2: Context system and backend integration
  - Code templates for all new components
  - Backend API specifications
  - Database schema changes
  - Testing strategy with comprehensive checklist

## New Components Implemented

### 1. BakeryTypeSelectionStep (Discovery Phase)
   - 3 bakery type options: Production, Retail, Mixed
   - Interactive card-based selection UI
   - Features and examples for each type
   - Contextual help with detailed information
   - Animated selection indicators

### 2. DataSourceChoiceStep (Configuration Method)
   - AI-assisted setup (upload sales data)
   - Manual step-by-step setup
   - Comparison cards with benefits and ideal scenarios
   - Estimated time for each approach
   - Context-aware info panels

### 3. ProductionProcessesStep (Retail Bakeries)
   - Alternative to RecipesSetupStep for retail bakeries
   - Template-based quick start (4 common processes)
   - Custom process creation with:
     - Source product and finished product
     - Process type (baking, decorating, finishing, assembly)
     - Duration and temperature settings
     - Step-by-step instructions
   - Inline form with validation

### 4. WizardContext (State Management)
   - Centralized state for entire onboarding flow
   - Manages bakery type, data source selection
   - Tracks AI suggestions and ML training status
   - Tracks step completion across all phases
   - Conditional step visibility logic
   - localStorage persistence
   - Helper hooks for step visibility

### 5. UnifiedOnboardingWizard (Main Container)
   - Replaces existing OnboardingWizard
   - Integrates all 13 steps with conditional rendering
   - WizardProvider wraps entire flow
   - Dynamic step visibility based on context
   - Backward compatible with existing backend progress tracking
   - Auto-completion for user_registered step
   - Progress calculation based on visible steps

## Conditional Flow Logic

The wizard now supports intelligent conditional flows:

**Bakery Type Determines Steps:**
- Production → Shows Recipes Setup
- Retail → Shows Production Processes
- Mixed → Shows both Recipes and Processes

**Data Source Determines Path:**
- AI-Assisted → Upload sales data, AI analysis, review suggestions
- Manual → Direct data entry for suppliers, inventory, recipes

**Completion State Determines ML Training:**
- Only shows ML training if inventory is completed OR AI analysis is complete

## Technical Implementation Details

- **Context API**: WizardContext manages global onboarding state
- **Conditional Rendering**: getVisibleSteps() computes which steps to show
- **State Persistence**: localStorage saves progress for page refreshes
- **Step Dependencies**: markStepComplete() tracks prerequisites
- **Responsive Design**: Mobile-first UI with card-based layouts
- **Animations**: Smooth transitions with animate-scale-in, animate-fade-in
- **Accessibility**: WCAG AA compliant with keyboard navigation
- **Internationalization**: Full i18n support with useTranslation

## Files Added

- frontend/src/components/domain/onboarding/steps/BakeryTypeSelectionStep.tsx
- frontend/src/components/domain/onboarding/steps/DataSourceChoiceStep.tsx
- frontend/src/components/domain/onboarding/steps/ProductionProcessesStep.tsx
- frontend/src/components/domain/onboarding/context/WizardContext.tsx
- frontend/src/components/domain/onboarding/context/index.ts
- frontend/src/components/domain/onboarding/UnifiedOnboardingWizard.tsx
- ONBOARDING_UNIFICATION_PLAN.md
- PHASE_6_IMPLEMENTATION.md

## Files Modified

- frontend/src/components/domain/onboarding/steps/index.ts
  - Added exports for new discovery and production steps

## Testing

 Build successful (21.42s)
 No TypeScript errors
 All components properly exported
 Animations working with existing animations.css

## Next Steps (Phase 7-11)

- Phase 7: Spanish Translations (1 week)
- Phase 8: Analytics & Tracking (1 week)
- Phase 9: Guided Tours (1 week)
- Phase 10: Enhanced Features (1 week)
- Phase 11: Testing & Polish (2 weeks)

## Backend Integration Notes

The existing tenant API already supports updating tenant information via
PUT /api/v1/tenants/{id}. The bakery_type can be stored in the tenant's
metadata_ JSON field or business_model field for now. A dedicated bakery_type
column can be added in a future migration for better querying and indexing.
2025-11-06 12:34:30 +00:00