# MC Base Currency Implementation Plan ## Overview Switch the Mycelium marketplace from USD to MC (Mycelium Credit) as the base currency while preserving identical UX for USD users through 1:1 exchange rate. ## Critical Requirements - **MC as Base**: All internal calculations use MC as reference currency - **USD UX Preservation**: Users selecting USD get identical experience to current system - **1:1 Exchange Rate**: 1 MC = 1 USD to maintain UX equivalence - **Backward Compatibility**: No breaking changes for existing functionality ## Implementation Phases ### Phase 1: Core Currency Service Overhaul - [ ] Update `CurrencyService::get_supported_currencies()` to make MC base currency - [ ] Change MC `is_base_currency: true` and `exchange_rate_to_base: dec!(1.0)` - [ ] Update USD `is_base_currency: false` and `exchange_rate_to_base: dec!(1.0)` - [ ] Recalculate all other currency rates relative to MC (not USD) - [ ] Update `CurrencyService::get_base_currency()` to return MC - [ ] Update `convert_amount()` method to use MC as base reference - [ ] Update `get_exchange_rate_to_base()` to use MC as base - [ ] Update `get_all_exchange_rates()` to use MC as base - [ ] Update `get_currency_stats()` base currency reporting ### Phase 2: System-Wide Defaults Update - [ ] Change `CurrencyService` default_display_currency from "USD" to "MC" - [ ] Update user preference defaults in `UserPersistentData` from "USD" to "MC" - [ ] Update model builders default currency from "USD" to "MC" - [ ] Update controller response defaults from "USD" to "MC" - [ ] Update template fallback values from "USD" to "MC" - [ ] Update navbar service defaults from "USD" to "MC" ### Phase 3: Service Layer Updates - [ ] Update `UserPersistence` default display_currency from "USD" to "MC" - [ ] Update `AutoTopUpService` USD references to use base currency - [ ] Update `InstantPurchaseService` USD references to use base currency - [ ] Update `OrderService` base currency references - [ ] Update `ProductService` base currency handling - [ ] Update `Wallet` service currency defaults - [ ] Update `PoolService` token references from "USD" to base currency - [ ] Update `ResourceProvider` base currency references ### Phase 4: Controller Updates - [ ] Update `CurrencyController` base currency responses - [ ] Update `DashboardController` currency defaults and responses - [ ] Update `WalletController` currency handling - [ ] Update `OrderController` currency processing - [ ] Update `MarketplaceController` currency defaults - [ ] Update `PoolController` currency references - [ ] Update all hardcoded "USD" strings in controller responses ### Phase 5: Model Updates - [ ] Update `MarketplaceCurrencyConfig` base_currency default - [ ] Update `Product` model base_currency defaults - [ ] Update `Order` model base currency references - [ ] Update `Transaction` model currency defaults - [ ] Update builder patterns to use MC as default - [ ] Update all model default values from "USD" to "MC" ### Phase 6: Template Updates - [ ] Update hardcoded currency defaults in HTML templates - [ ] Update JavaScript currency handling - [ ] Update template variables and fallbacks - [ ] Ensure dynamic currency selectors work with MC base ### Phase 7: Testing & Validation - [ ] Update unit tests to expect MC as base currency - [ ] Update integration tests for currency conversions - [ ] Test USD user experience preservation - [ ] Validate all currency conversion accuracy - [ ] Test edge cases and error handling - [ ] Performance test currency operations ### Phase 8: Documentation & Migration - [ ] Update code comments referencing USD as base - [ ] Update API documentation - [ ] Create migration guide for existing data - [ ] Update configuration examples - [ ] Document exchange rate change process ## UX Preservation Validation Checklist - [ ] USD users see identical prices to current system - [ ] Currency conversion works bidirectionally - [ ] All formatting remains consistent - [ ] User preferences persist correctly - [ ] Wallet balances display correctly - [ ] Transaction history shows correct values - [ ] Checkout process works identically ## Risk Mitigation - **Data Migration**: Ensure existing user data migrates correctly - **API Compatibility**: Maintain backward compatibility - **Performance**: Monitor currency conversion performance - **Error Handling**: Comprehensive error handling for edge cases - **Rollback Plan**: Ability to rollback if issues arise ## Success Criteria - [ ] MC is the internal base currency for all calculations - [ ] USD users experience no functional differences - [ ] All currency conversions work accurately - [ ] System performance remains acceptable - [ ] All tests pass - [ ] Documentation is updated - [ ] No breaking changes for existing integrations ## Future Considerations - Exchange rate flexibility for future changes (1 MC = 10 USD, etc.) - Additional currency support - Multi-currency wallet support - Advanced currency conversion features