# Project Mycelium Credits System - Complete Refactor Plan ## Overview This document outlines the complete transformation of the Project Mycelium from a TFP-based system to a simplified USD credits system inspired by OpenRouter's user experience. This is a major refactor that will become the new standard for the marketplace. ## Current State vs Desired State ### Current State (TFP System) - **Currency**: TFP (ThreeFold Points) with 1 TFP = 0.1 USD - **Complexity**: Multi-currency display (USD, EUR, CAD, TFP) - **Trading**: Complex Pools page with TFP/TFT/PEAQ trading - **UX**: Crypto-like terminology and fractional pricing - **Purchase Flow**: Add to cart → checkout (Buy Now exists but broken) - **Top-up**: Manual wallet top-up with currency conversion - **Pricing**: Products cost 50 TFP for $5 item (confusing) ### Desired State (USD Credits System) - **Currency**: USD Credits with 1 Credit = $1 USD - **Simplicity**: Pure USD pricing throughout - **No Trading**: Hide Pools page (keep code for future) - **UX**: Clean "credits" terminology like mainstream SaaS - **Purchase Flow**: Seamless Buy Now + Add to Cart options - **Auto Top-up**: OpenRouter-style automatic credit purchasing - **Pricing**: Products cost $5 for $5 item (intuitive) ## Detailed Transformation Plan ### 1. Currency System Transformation #### Current TFP System ```rust // Current: 1 TFP = 0.1 USD let tfp_amount = usd_amount * 10; // $5 = 50 TFP ``` #### New USD Credits System ```rust // New: 1 Credit = 1 USD let credit_amount = usd_amount; // $5 = 5 Credits ``` #### Implementation Changes - **Currency Service**: Update exchange rate from 0.1 to 1.0 - **Display Logic**: Remove TFP terminology, use "Credits" and "$" symbols - **Database**: Store amounts as USD credits (multiply existing TFP by 10) - **API Responses**: Return credit amounts instead of TFP amounts ### 2. User Interface Transformation #### Navigation & Terminology - **Backend/Routes**: Keep "Wallet" terminology (`/dashboard/wallet`) - **UI Labels**: Use "Credits" terminology in content - **Example**: Sidebar shows "Wallet", page content shows "Buy Credits" #### Wallet Page Changes **Before:** ``` Wallet Balance: 150.5 TFP ≈ $15.05 USD Quick Top-up: - Add 100 TFP ($10) - Add 250 TFP ($25) ``` **After:** ``` Credit Balance: $25.00 Buy Credits: - Add $10 Credits - Add $25 Credits - Add $50 Credits - Custom Amount: $____ Auto Top-up: ☐ Enable Auto Top-up When credits are below: $10 Purchase this amount: $25 ``` #### Marketplace Pricing **Before:** ``` VM Instance: 50.0 TFP/month ≈ $5.00 USD/month ``` **After:** ``` VM Instance: $5.00/month ``` ### 3. Auto Top-up Implementation #### OpenRouter-Style Configuration ``` Auto Top-up Settings: ☐ Enable auto top-up When credits are below: $ [10] Purchase this amount: $ [25] Payment Method: [Credit Card ****1234] [Change] [Save Settings] ``` #### Technical Implementation ```rust #[derive(Debug, Serialize, Deserialize)] pub struct AutoTopUpSettings { pub enabled: bool, pub threshold_amount: Decimal, // USD amount pub topup_amount: Decimal, // USD amount pub payment_method_id: String, pub daily_limit: Option, pub monthly_limit: Option, } ``` #### Auto Top-up Flow 1. **Trigger Check**: Before any purchase, check if balance < threshold 2. **Automatic Purchase**: If enabled, automatically buy credits 3. **Fallback**: If auto top-up fails, prompt user for manual top-up 4. **Limits**: Respect daily/monthly spending limits for security ### 4. Buy Now Functionality Fix #### Current Issue - Buy Now buttons exist in marketplace templates - JavaScript event handlers are missing - Backend instant purchase API exists but not connected #### Solution Implementation ```javascript // Fix: Add proper event handlers document.addEventListener('DOMContentLoaded', function() { document.querySelectorAll('.buy-now-btn').forEach(button => { button.addEventListener('click', async function() { const productId = this.dataset.productId; const productName = this.dataset.productName; const unitPrice = parseFloat(this.dataset.unitPrice); await buyNow(productId, productName, 'compute', 1, unitPrice); }); }); }); // Enhanced buyNow function with auto top-up integration window.buyNow = async function(productId, productName, category, quantity, unitPrice) { try { // Check balance and trigger auto top-up if needed const affordabilityCheck = await fetch(`/api/wallet/check-affordability?amount=${unitPrice * quantity}`); const result = await affordabilityCheck.json(); if (!result.can_afford) { const autoTopUpResult = await handleInsufficientBalance(result.shortfall_info); if (!autoTopUpResult.success) return; } // Proceed with instant purchase const purchaseResponse = await fetch('/api/wallet/instant-purchase', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ product_id: productId, product_name: productName, quantity: quantity, unit_price_usd: unitPrice }) }); const purchaseResult = await purchaseResponse.json(); handlePurchaseResult(purchaseResult); } catch (error) { console.error('Purchase failed:', error); showErrorMessage('Purchase failed. Please try again.'); } }; ``` ### 5. Burn Rate Tracking #### User Dashboard Enhancement ``` Credit Usage Overview: Current Balance: $47.50 Monthly Burn Rate: $23.00/month ├── VM-Production: $15.00/month ├── Gateway-EU: $5.00/month └── Storage-Backup: $3.00/month Projected Balance in 30 days: $24.50 ⚠️ Consider enabling auto top-up Auto Top-up Status: ✅ Enabled Next top-up triggers at: $10.00 ``` #### Implementation ```rust #[derive(Debug, Serialize)] pub struct BurnRateAnalysis { pub monthly_burn_rate: Decimal, pub daily_burn_rate: Decimal, pub deployments: Vec, pub projected_balance_30_days: Decimal, pub days_until_empty: Option, } #[derive(Debug, Serialize)] pub struct DeploymentBurnRate { pub deployment_id: String, pub deployment_name: String, pub monthly_cost: Decimal, pub daily_cost: Decimal, pub status: String, } ``` ### 6. Pools Page Strategy #### Current Pools Functionality - TFP ↔ USD/EUR/CAD trading - TFP ↔ TFT/PEAQ crypto trading - Staking with marketplace benefits - Complex liquidity pool management #### New Strategy: Hide but Preserve - **Hide**: Remove Pools from main navigation - **Preserve**: Keep all code and functionality intact - **Access**: Add hidden route for future use - **Rationale**: Credits system eliminates need for trading, but keep for potential future features #### Implementation ```rust // Hide pools route from main navigation // Comment out in routes/mod.rs: // .route("/dashboard/pools", web::get().to(DashboardController::pools)) // Keep as hidden route for admin/future use: // .route("/dashboard/pools-advanced", web::get().to(DashboardController::pools)) ``` ### 7. Database Schema Updates #### UserPersistentData Changes ```rust pub struct UserPersistentData { // Change from TFP to USD credits pub wallet_balance: Decimal, // Now in USD (multiply existing TFP by 10) // Remove TFP-specific fields // pub display_currency: Option, // Remove - always USD now // Add auto top-up settings pub auto_topup_settings: Option, // Update transaction amounts to USD pub transactions: Vec, // Keep existing fields pub user_email: String, pub services: Vec, // ... other fields unchanged } ``` #### Transaction Model Updates ```rust pub enum TransactionType { // Update existing types to use USD Purchase { product_id: String, amount_usd: Decimal }, TopUp { amount_usd: Decimal, payment_method: String }, // Add new auto top-up type AutoTopUp { triggered_by_purchase: Option, threshold_amount: Decimal, amount_usd: Decimal, payment_method: String }, // Keep existing types but update amounts to USD Transfer { to_user: String, amount_usd: Decimal }, Earning { source: String, amount_usd: Decimal }, } ``` ### 8. API Endpoint Updates #### New Auto Top-up Endpoints ```rust // Auto top-up configuration POST /api/wallet/auto-topup/configure GET /api/wallet/auto-topup/status POST /api/wallet/auto-topup/trigger // Enhanced purchase with auto top-up POST /api/wallet/purchase-with-topup GET /api/wallet/burn-rate-analysis ``` #### Updated Existing Endpoints ```rust // Wallet info now returns USD credits GET /api/wallet/info // Response: { "balance": 25.00, "currency": "USD", "auto_topup_enabled": true, "auto_topup_threshold": 10.00 } // Navbar data with credits GET /api/navbar/dropdown-data // Response: { "wallet_balance_formatted": "$25.00", "display_currency": "USD", "auto_topup_enabled": true, "auto_topup_status": "Active" } ``` ### 9. Migration Strategy #### Data Migration ```rust // Convert existing TFP balances to USD credits fn migrate_tfp_to_usd_credits(user_data: &mut UserPersistentData) { // 1 TFP = 0.1 USD, so multiply by 10 to get USD credits user_data.wallet_balance = user_data.wallet_balance * dec!(10); // Update all transaction amounts for transaction in &mut user_data.transactions { match &mut transaction.transaction_type { TransactionType::Purchase { amount, .. } => *amount *= dec!(10), TransactionType::TopUp { amount, .. } => *amount *= dec!(10), // ... update other transaction types } } } ``` #### Deployment Strategy 1. **Phase 1**: Deploy new code with migration logic 2. **Phase 2**: Run migration script on user data 3. **Phase 3**: Update frontend templates and JavaScript 4. **Phase 4**: Hide pools page and update navigation ### 10. User Experience Flow #### New User Journey 1. **Registration**: User creates account 2. **Wallet Setup**: Sees "$0.00" credit balance 3. **Browse Marketplace**: Products priced in clear USD amounts 4. **First Purchase**: - Clicks "Buy Now" on $5 VM - Prompted to "Buy Credits" (insufficient balance) - Buys $25 credits via credit card - Purchase completes automatically 5. **Auto Top-up Setup**: - Configures auto top-up: "When below $10, buy $25" - Enables for seamless future purchases 6. **Ongoing Usage**: - Monitors burn rate dashboard - Auto top-up handles low balances - Focuses on using services, not managing credits #### Purchase Flow Comparison **Before (TFP):** ``` 1. See "VM: 50 TFP/month (≈$5 USD)" 2. Check wallet: "15.5 TFP (≈$1.55)" 3. Calculate: Need 34.5 more TFP 4. Go to wallet, buy TFP in preferred currency 5. Convert currency to TFP 6. Return to marketplace 7. Add to cart and checkout ``` **After (USD Credits):** ``` 1. See "VM: $5.00/month" 2. Click "Buy Now" 3. Auto top-up triggers: Buys $25 credits 4. Purchase completes: VM deployed 5. Balance: $20.00 remaining ``` ### 11. Implementation Timeline #### Week 1: Core System Changes - Update currency service (TFP → USD credits) - Modify database schema and migration scripts - Update wallet controller and API endpoints - Test data migration with mock data #### Week 2: Auto Top-up Implementation - Implement auto top-up service and settings - Add auto top-up configuration UI - Integrate auto top-up with purchase flow - Add burn rate calculation and display #### Week 3: UI/UX Updates - Update all templates (wallet, marketplace, navbar) - Fix Buy Now JavaScript event handlers - Hide pools page and update navigation - Add burn rate dashboard #### Week 4: Testing and Polish - End-to-end testing of purchase flows - Auto top-up testing with various scenarios - Performance testing and optimization - Documentation and deployment ### 12. Success Metrics #### User Experience Metrics - **Purchase Completion Rate**: Target 95%+ (vs current cart abandonment) - **Time to First Purchase**: Target <2 minutes from registration - **Auto Top-up Adoption**: Target 40% of active users - **Support Tickets**: Reduce currency/balance related tickets by 80% #### Technical Metrics - **Buy Now Success Rate**: Target 99%+ (currently 0% due to broken JS) - **Auto Top-up Success Rate**: Target 98%+ - **Page Load Performance**: Maintain <500ms for wallet/marketplace pages - **API Response Times**: <200ms for balance checks and purchases #### Business Metrics - **Average Purchase Size**: Expect increase due to easier purchasing - **Purchase Frequency**: Expect increase due to auto top-up - **User Retention**: Expect improvement due to better UX - **Revenue per User**: Expect increase due to reduced friction ### 13. Risk Mitigation #### Technical Risks - **Data Migration**: Comprehensive testing with backup/rollback plan - **Payment Integration**: Multiple payment method support and fallbacks - **Auto Top-up Failures**: Graceful degradation and user notification - **Performance Impact**: Load testing and database optimization #### User Experience Risks - **Change Management**: Clear communication about improvements - **Learning Curve**: Intuitive design minimizes confusion - **Trust Issues**: Transparent pricing and clear auto top-up controls - **Edge Cases**: Comprehensive error handling and user guidance #### Business Risks - **Revenue Disruption**: Phased rollout with monitoring - **Regulatory Compliance**: Ensure auto top-up meets financial regulations - **Competitive Position**: Align with industry standards (OpenRouter model) - **Technical Debt**: Clean implementation to avoid future issues ### 14. Testing Strategy #### Unit Tests - Currency conversion accuracy (TFP → USD credits) - Auto top-up trigger logic and limits - Purchase flow with insufficient balance scenarios - Burn rate calculation accuracy #### Integration Tests - End-to-end purchase flow (Browse → Buy Now → Auto Top-up → Success) - Auto top-up configuration and execution - Wallet balance updates across all interfaces - Cross-browser JavaScript functionality #### User Acceptance Tests - New user onboarding flow - Existing user experience with migrated data - Auto top-up configuration and usage - Mobile responsiveness and accessibility ### 15. Monitoring and Analytics #### Key Performance Indicators - **Credit Purchase Volume**: Daily/monthly credit sales - **Auto Top-up Usage**: Frequency and amounts - **Purchase Success Rates**: Buy Now vs Add to Cart - **User Engagement**: Time spent in marketplace - **Error Rates**: Failed purchases, auto top-ups, payments #### Alerting System - **High Error Rates**: >5% purchase failures - **Auto Top-up Issues**: >10% auto top-up failures - **Performance Degradation**: >1s response times - **Payment Problems**: Payment processor issues #### Analytics Dashboard - **Real-time Metrics**: Active users, current purchases, credit balances - **Trend Analysis**: Purchase patterns, auto top-up adoption, user growth - **Financial Tracking**: Revenue, credit sales, burn rates - **User Behavior**: Most popular products, purchase paths, drop-off points ## Conclusion This refactor transforms the Project Mycelium from a complex crypto-like TFP system to a clean, intuitive USD credits system that matches modern SaaS expectations. The OpenRouter-inspired approach eliminates currency confusion, enables seamless purchasing, and provides automatic balance management through auto top-up. Key benefits: - **Simplified UX**: Clear USD pricing eliminates confusion - **Reduced Friction**: Buy Now + Auto Top-up enables instant purchases - **Better Retention**: Easier purchasing leads to higher engagement - **Scalable Foundation**: Clean architecture supports future enhancements The implementation maintains backward compatibility where possible while providing a clear migration path to the new system. By hiding rather than removing the Pools functionality, we preserve advanced features for potential future use while focusing on the core marketplace experience. This refactor positions Project Mycelium as a modern, user-friendly platform that competes effectively with established SaaS providers while maintaining the unique value proposition of the ThreeFold ecosystem. ## Documentation Updates ### Current Documentation State The marketplace includes comprehensive documentation at `/docs` covering: - **TFP System**: Detailed explanation of ThreeFold Points (1 TFP = 0.1 USD) - **Getting Started**: Wallet setup with TFP terminology - **Marketplace Categories**: All sections reference TFP-based transactions - **Core Concepts**: TFP as the fundamental value exchange mechanism ### Required Documentation Changes #### 1. TFP → USD Credits Terminology Update **Files to Update:** - `/docs/tfp.html` → Rename to `/docs/credits.html` - `/docs/index.html` → Update all TFP references - `/docs/getting_started.html` → Update wallet setup instructions - All marketplace category docs (compute, 3nodes, gateways, applications, services) #### 2. Key Content Updates **TFP Documentation Page (`/docs/tfp.html` → `/docs/credits.html`):** ```html

ThreeFold Points (TFP)

TFP maintains a consistent value of 0.1 USD

USD Credits

Credits maintain a 1:1 value with USD ($1 = 1 Credit)

``` **Getting Started Page:** ```html

Step 2: Setup Your TFP Wallet

You'll need a ThreeFold Points (TFP) wallet

  • Add TFP to your wallet through one of the available methods
  • Step 2: Setup Your Wallet

    You'll need to add USD credits to your wallet

  • Buy credits through the simple top-up interface
  • ``` **Main Documentation Index:** ```html TFP transferred based on resource utilization TFP transferred based on hardware value USD credits charged based on resource utilization USD credits charged based on hardware value ``` #### 3. Navigation Updates **Documentation Sidebar (`/docs/layout.html`):** ```html ThreeFold Points (TFP) USD Credits ``` #### 4. New Documentation Sections **Auto Top-Up Documentation:** ```html

    Auto Top-Up

    Automatically purchase credits when your balance falls below a threshold:

    • Set your preferred threshold (e.g., $10)
    • Configure top-up amount (e.g., $25)
    • Choose payment method
    • Enable with a simple toggle
    ``` **Buy Now Documentation:** ```html

    Instant Purchase

    Skip the cart and buy instantly:

    1. Click "Buy Now" on any product
    2. Auto top-up triggers if balance is low
    3. Purchase completes immediately
    4. Service deploys automatically
    ``` #### 5. Implementation Timeline for Documentation **Week 3: Documentation Updates (alongside UI/UX updates)** - Update all TFP references to USD credits - Add auto top-up and buy now documentation - Update getting started guide - Refresh all code examples and screenshots - Update navigation and cross-references **Week 4: Documentation Testing** - Review all documentation for consistency - Test all internal links and references - Ensure screenshots match new UI - Validate code examples work with new system #### 6. Documentation Migration Strategy **Content Audit:** ```bash # Search for all TFP references in documentation grep -r "TFP\|ThreeFold Points" projectmycelium/src/views/docs/ # Update patterns: # "TFP" → "USD credits" or "credits" # "ThreeFold Points" → "USD credits" # "0.1 USD" → "1 USD" # "50 TFP" → "$5.00" ``` **URL Redirects:** ```rust // Add redirect for old TFP documentation .route("/docs/tfp", web::get().to(|| async { HttpResponse::MovedPermanently() .append_header(("Location", "/docs/credits")) .finish() })) ``` This ensures that the documentation accurately reflects the new USD credits system and provides users with up-to-date information about the simplified marketplace experience.