The Vivid Market will be a digital asset marketplace that replaces the existing nullspace section. It will:
- Extend the existing loot tokens system to create WIR virtual currency
- Leverage the Scrapyard functionality for asset uploads
- Maintain the current Win98/Web 1.0 aesthetic
- Implement user-driven asset feeds with filtering
- Add collections and wishlist systems
We'll extend the existing ScrapyardItem model with additional fields:
// New fields to add to ScrapyardItem
{
wir_price: Number, // Price in WIR currency
marketplace_status: String, // "available", "sold", "reserved"
collection_id: UUID, // Reference to collection (optional)
views: Number, // Track views for popularity metrics
featured_in_market: Boolean // Featured in Vivid Market specifically
}New Collection model:
{
id: UUID,
name: String,
description: String,
creator: UUID, // Reference to User
items: Array<UUID>, // References to ScrapyardItems
cover_image: String, // Path to cover image
is_public: Boolean, // Whether collection is public
created_at: Timestamp,
updated_at: Timestamp
}New Wishlist model:
{
id: UUID,
user_id: UUID, // Reference to User
items: Array<UUID>, // References to ScrapyardItems
created_at: Timestamp,
updated_at: Timestamp
}New Transaction model:
{
id: UUID,
sender_id: UUID, // Reference to User
receiver_id: UUID, // Reference to User
item_id: UUID, // Reference to ScrapyardItem (optional)
amount: Number, // Amount of WIR
transaction_type: String, // "purchase", "transfer", "reward", etc.
status: String, // "pending", "completed", "failed"
created_at: Timestamp
}New Purchase model:
{
id: UUID,
buyer_id: UUID, // Reference to User
seller_id: UUID, // Reference to User
item_id: UUID, // Reference to ScrapyardItem
transaction_id: UUID, // Reference to Transaction
price: Number, // Price in WIR
status: String, // "completed", "disputed", "refunded"
created_at: Timestamp
}Extend the existing User model:
// New fields to add to User
{
wir_balance: Number, // Balance of WIR currency
wir_transactions: Array<UUID>, // References to Transactions
collections: Array<UUID>, // References to Collections
wishlist_id: UUID, // Reference to Wishlist
selling_items: Array<UUID>, // References to ScrapyardItems being sold
purchased_items: Array<UUID> // References to ScrapyardItems purchased
}- Leverage existing Passport.js authentication
- Add middleware to check WIR balance for purchases
- Add transaction verification middleware
- Extend the existing Scrapyard upload functionality
- Add marketplace-specific metadata fields
- Implement WIR pricing during upload
- Add conversion mechanism between loot tokens and WIR
- Implement exchange rate system (configurable by admin)
- Add transaction history for conversions
GET /market - Main marketplace view
GET /market/browse - Browse all items with filtering
GET /market/item/:id - View specific item
POST /market/item/:id/purchase - Purchase an item
GET /market/collections - View all public collections
GET /market/collections/:id - View specific collection
GET /market/user/selling - View items user is selling
GET /market/user/purchased - View items user has purchased
GET /market/user/collections - View user's collections
GET /market/user/wishlist - View user's wishlist
POST /market/collections/create - Create a new collection
PUT /market/collections/:id - Update a collection
DELETE /market/collections/:id - Delete a collection
POST /market/collections/:id/add/:itemId - Add item to collection
DELETE /market/collections/:id/remove/:itemId - Remove item from collection
POST /market/wishlist/add/:itemId - Add item to wishlist
DELETE /market/wishlist/remove/:itemId - Remove item from wishlist
POST /market/wir/transfer - Transfer WIR to another user
GET /market/wir/transactions - View transaction history
POST /market/wir/convert - Convert loot tokens to WIR
GET /api/market/items - Get marketplace items (with filtering)
GET /api/market/collections - Get collections
GET /api/market/trending - Get trending items
GET /api/market/user/:id/selling - Get items user is selling
GET /api/market/wir/rate - Get current exchange rate
classDiagram
User "1" -- "many" ScrapyardItem : creates
User "1" -- "many" Collection : owns
User "1" -- "1" Wishlist : has
User "1" -- "many" Transaction : participates
ScrapyardItem "many" -- "many" Collection : belongs to
ScrapyardItem "many" -- "many" Wishlist : added to
Transaction "1" -- "0..1" Purchase : creates
class User {
+UUID id
+String username
+String email
+Number lootTokens
+Number wirBalance
+Array~UUID~ collections
+UUID wishlistId
}
class ScrapyardItem {
+UUID id
+String title
+String description
+UUID creator
+String category
+String content
+Number wirPrice
+String marketplaceStatus
+UUID collectionId
}
class Collection {
+UUID id
+String name
+String description
+UUID creator
+Array~UUID~ items
+Boolean isPublic
}
class Wishlist {
+UUID id
+UUID userId
+Array~UUID~ items
}
class Transaction {
+UUID id
+UUID senderId
+UUID receiverId
+UUID itemId
+Number amount
+String transactionType
+String status
}
class Purchase {
+UUID id
+UUID buyerId
+UUID sellerId
+UUID itemId
+UUID transactionId
+Number price
+String status
}
graph TD
A[Market Main Page] --> B[Asset Feed]
A --> C[Featured Collections]
A --> D[Market Stats]
B --> E[Asset Card]
E --> F[Asset Detail Page]
F --> G[Purchase Flow]
F --> H[Add to Wishlist]
F --> I[Add to Collection]
J[User Dashboard] --> K[Selling Items]
J --> L[Purchased Items]
J --> M[Collections Manager]
J --> N[Wishlist Manager]
J --> O[WIR Balance & History]
M --> P[Collection Detail]
P --> Q[Collection Items]
N --> R[Wishlist Items]
- Extend the
Usermodel with WIR-related fields - Extend the
ScrapyardItemmodel with marketplace fields - Create new models:
Collection,Wishlist,Transaction,Purchase - Set up database migrations and initial data
- Implement WIR currency system
- Create marketplace browsing and filtering
- Implement purchase flow
- Add user selling/purchased items views
- Implement collections CRUD operations
- Implement wishlist functionality
- Add collection browsing and discovery features
- Replace nullspace section with Vivid Market in index.html
- Create marketplace browsing interface
- Implement asset detail views
- Add collection and wishlist UI components
- Test all marketplace flows
- Optimize database queries
- Implement caching for popular items and collections
- Performance testing and optimization
- Optimistic UI Updates: Implement optimistic UI updates for better user experience during transactions
- Pagination and Lazy Loading: Use pagination and lazy loading for marketplace browsing
- Real-time Updates: Consider using Supabase's real-time capabilities for live marketplace updates
- Transaction Atomicity: Ensure transaction operations are atomic to prevent data inconsistencies
- Search Optimization: Implement efficient search indexing for marketplace items
- Caching Strategy: Cache popular marketplace items and collections
- Transaction Verification: Implement robust verification for all WIR transactions
- Rate Limiting: Apply rate limiting to prevent abuse of marketplace APIs
- Input Validation: Thorough validation for all marketplace inputs
- Permission Checks: Strict permission checks for collection and item management
- Audit Logging: Log all marketplace transactions for audit purposes