11 KiB
OpenRouter-Inspired Marketplace Enhancement Plan
Overview
This document outlines the implementation plan for enhancing the Project Mycelium with OpenRouter-inspired payment features while maintaining all existing functionality. The goal is to add streamlined "buy now" capabilities and improved wallet management alongside the current cart-based shopping experience.
Current System Analysis
Architecture Patterns
- Builder Pattern: Services use
ServiceName::builder().build()
pattern - Service Layer: Clean separation with dedicated services (CurrencyService, WalletController, etc.)
- Controller Pattern: RESTful endpoints with JSON responses
- Template Engine: Tera templating with context-based rendering
- Session Management: Actix-web sessions for user state
- Persistence: UserPersistence service for data management
Current Currency System
- Base Currency: TFP (ThreeFold Points)
- Exchange Rate: 1 TFP = 0.1 USD (configurable)
- Display Options: Currently supports multiple currencies (USD, EUR, TFT, PEAQ)
- User Preferences: Currency preferences stored per user
Current Purchase Flow
- Browse marketplace → Add to cart → Checkout → Purchase
- TFP purchase via wallet page or TFP pools
- TFP pools support trading: TFP/Fiat, TFP/TFT, TFP/PEAQ
Enhancement Goals
1. Currency Display Improvements
- Default Currency: Set USD as default display currency for new users
- TFP Display Option: Add TFP as a display currency choice alongside fiat currencies
- User Choice: Users can choose any supported currency (TFP, USD, CAD, EUR, etc.) for price display
- Internal Processing: All transactions remain TFP-based internally
2. OpenRouter-Style Navbar
Replace simple "Hello, USERNAME" with dropdown menu containing:
- User name/email
- Current wallet balance in user's preferred display currency
- "Top Up Wallet" / "Buy Credits" quick action
- Settings link
- Logout option
3. Enhanced Wallet Top-Up
- Direct Currency Input: "Add $20" converts to TFP automatically
- Quick Amount Buttons: Preset amounts ($10, $20, $50, $100)
- Real-time Conversion: Show TFP equivalent during input
- Streamlined Flow: Fewer steps from intent to completion
4. Buy Now Functionality
- Instant Purchase: "Buy Now" buttons alongside "Add to Cart"
- Direct Deduction: Skip cart, deduct TFP immediately
- Balance Check: Automatic fallback to top-up if insufficient funds
- Immediate Deployment: For applicable services/products
Technical Implementation Plan
Phase 1: Currency Service Enhancement
1.1 Extend CurrencyService
// File: src/services/currency.rs
impl CurrencyService {
pub fn builder() -> CurrencyServiceBuilder {
CurrencyServiceBuilder::new()
.with_default_display_currency("USD")
.with_tfp_display_option(true)
}
}
1.2 Update Currency Models
// File: src/models/currency.rs
// Add TFP as display currency option
// Ensure USD is default for new users
// Maintain configurable TFP exchange rate
1.3 Currency Preference Storage
// File: src/services/user_persistence.rs
// Extend UserPersistentData to include display_currency preference
// Default to "USD" for new users
// Support "TFP", "USD", "CAD", "EUR", etc.
Phase 2: Navbar Enhancement
2.1 Create NavbarService
// File: src/services/navbar.rs
pub struct NavbarService;
impl NavbarService {
pub fn builder() -> NavbarServiceBuilder {
NavbarServiceBuilder::new()
}
pub fn get_user_dropdown_data(&self, session: &Session) -> NavbarDropdownData {
// Get user info, wallet balance in preferred currency, etc.
}
}
2.2 Update Base Template
<!-- File: src/views/base.html -->
<!-- Replace simple greeting with dropdown menu -->
<!-- Include wallet balance, top-up button, settings link -->
Phase 3: Instant Purchase System
3.1 Create InstantPurchaseService
// File: src/services/instant_purchase.rs
pub struct InstantPurchaseService;
impl InstantPurchaseService {
pub fn builder() -> InstantPurchaseServiceBuilder {
InstantPurchaseServiceBuilder::new()
}
pub async fn execute_instant_purchase(&self, request: InstantPurchaseRequest) -> InstantPurchaseResult {
// Check TFP balance
// Deduct amount
// Create transaction
// Trigger deployment/fulfillment
}
}
3.2 Extend WalletController
// File: src/controllers/wallet.rs
impl WalletController {
pub async fn instant_purchase(
request: web::Json<InstantPurchaseRequest>,
session: Session,
) -> Result<impl Responder> {
// Handle buy-now requests
}
pub async fn quick_topup(
request: web::Json<QuickTopupRequest>,
session: Session,
) -> Result<impl Responder> {
// Handle streamlined top-up
}
}
3.3 Update Marketplace Templates
<!-- Add buy-now buttons to all product listings -->
<!-- Maintain existing add-to-cart functionality -->
<!-- Include balance check and top-up prompts -->
Phase 4: Enhanced Wallet Interface
4.1 Wallet Page Improvements
<!-- File: src/views/wallet/index.html -->
<!-- Prominent display of balance in user's preferred currency -->
<!-- Quick top-up with currency input -->
<!-- Preset amount buttons -->
<!-- Real-time conversion display -->
4.2 Currency Settings
<!-- File: src/views/dashboard/settings.html -->
<!-- Add currency preference selection -->
<!-- Include TFP and all supported fiat currencies -->
<!-- Real-time preview of balance in selected currency -->
API Endpoints
New Endpoints
POST /api/wallet/instant-purchase
- Execute buy-now purchasePOST /api/wallet/quick-topup
- Streamlined wallet top-upPUT /api/currency/set-display
- Update user's display currency preferenceGET /api/navbar/dropdown-data
- Get navbar dropdown information
Enhanced Endpoints
GET /api/wallet/info
- Include balance in user's preferred display currencyGET /api/currency/user-preference
- Return current display currency setting
Database Schema Changes
UserPersistentData Extensions
pub struct UserPersistentData {
// ... existing fields ...
pub display_currency: Option<String>, // "USD", "TFP", "CAD", etc.
pub quick_topup_amounts: Option<Vec<Decimal>>, // Customizable preset amounts
}
Transaction Model Extensions
pub struct Transaction {
// ... existing fields ...
pub purchase_type: PurchaseType, // Cart, Instant, TopUp
pub display_currency_used: Option<String>,
pub display_amount: Option<Decimal>,
}
pub enum PurchaseType {
CartPurchase,
InstantPurchase,
WalletTopUp,
PoolExchange,
}
User Experience Flow
Buy Now Flow
- User browses marketplace in their preferred display currency
- Clicks "Buy Now" on a product
- System checks TFP balance
- If sufficient: Immediate purchase and deployment
- If insufficient: Prompt for top-up with exact amount needed
- Top-up in user's preferred currency, convert to TFP
- Complete purchase automatically
Top-Up Flow
- User clicks "Top Up" in navbar dropdown or wallet page
- Enter amount in preferred currency (e.g., "$20")
- System shows TFP conversion (e.g., "= 200 TFP")
- Select payment method
- Process payment and add TFP to wallet
- Update balance display across all interfaces
Backward Compatibility
Preserved Functionality
- Cart System: Remains fully functional
- TFP Pools: All existing pool trading continues to work
- Existing APIs: No breaking changes to current endpoints
- User Data: Existing users retain all data and preferences
- Payment Methods: All current payment options remain available
Migration Strategy
- New users default to USD display currency
- Existing users keep current preferences
- TFP display option added to all currency selectors
- Gradual rollout of buy-now buttons alongside existing cart buttons
Testing Strategy
Integration Tests
- Cart and buy-now flows work together
- Currency conversion accuracy
- Session management with new features
- Backward compatibility with existing data
User Experience Tests
- Navbar dropdown functionality
- Wallet top-up flow
- Buy-now purchase flow
- Currency preference changes
Performance Tests
- Real-time currency conversion
- Balance checks for instant purchases
- Template rendering with new data
Implementation Timeline
Phase 1: Foundation (Week 1)
- Currency service enhancements
- TFP display option
- USD default for new users
Phase 2: UI/UX (Week 2)
- Navbar dropdown implementation
- Wallet page improvements
- Settings page currency selection
Phase 3: Buy Now (Week 3)
- Instant purchase service
- Buy-now buttons in marketplace
- Balance check and top-up integration
Phase 4: Polish & Testing (Week 4)
- Integration testing
- UI/UX refinements
- Performance optimization
- Documentation updates
Success Metrics
User Experience
- Reduced time from product discovery to purchase
- Increased wallet top-up frequency
- Higher conversion rates on marketplace items
Technical
- No regression in existing cart functionality
- Successful currency conversion accuracy
- Stable session management with new features
Business
- Maintained compatibility with TFP pools
- Seamless integration with existing payment systems
- Clear audit trail for all transaction types
Risk Mitigation
Technical Risks
- Currency Conversion Errors: Extensive testing of conversion logic
- Session Management: Careful handling of user state across new features
- Performance Impact: Optimize database queries for balance checks
User Experience Risks
- Confusion Between Flows: Clear UI distinction between cart and buy-now
- Currency Display Issues: Thorough testing of all currency combinations
- Balance Synchronization: Ensure real-time balance updates across interfaces
Business Risks
- Backward Compatibility: Comprehensive testing with existing user data
- TFP Pool Integration: Ensure no conflicts with existing pool functionality
- Payment Processing: Maintain all existing payment method support
Conclusion
This enhancement plan adds OpenRouter-inspired streamlined purchasing while preserving the robust existing marketplace functionality. The modular approach ensures clean integration with the current architecture and provides a foundation for future enhancements.
The key innovation is offering users choice: they can continue using the familiar cart-based shopping experience or opt for the new instant purchase flow, all while viewing prices in their preferred currency (including TFP itself).