UNPKG

oneie

Version:

Build apps, websites, and AI agents in English. Zero-interaction setup for AI agents (Claude Code, Cursor, Windsurf). Download to your computer, run in the cloud, deploy to the edge. Open source and free forever.

570 lines (476 loc) 17.5 kB
--- title: Todo Ecommerce dimension: things primary_dimension: things category: todo-ecommerce.md tags: agent, ai, blockchain, cycle, ontology related_dimensions: connections, events, groups, knowledge, people scope: global created: 2025-11-03 updated: 2025-11-03 version: 1.0.0 ai_context: | This document is part of the things dimension in the todo-ecommerce.md category. Location: one/things/todo-ecommerce.md Purpose: Documents one platform: e-commerce & monetization v1.0.0 Related dimensions: connections, events, groups, knowledge, people For AI agents: Read this to understand todo ecommerce. --- # ONE Platform: E-Commerce & Monetization v1.0.0 **Focus:** Product marketplace, shopping cart, X402 checkout, revenue tracking **Process:** `Cycle 1-100 cycle sequence` **Timeline:** 8-12 cycles per specialist per day **Target:** Revenue generation (Wave 3 - Parallel with API + Features) --- ## PHASE 1: FOUNDATION & SETUP (Cycle 1-10) **Purpose:** Validate e-commerce requirements, map to ontology, plan implementation ### Cycle 1: Define Product Types - [ ] **Courses:** Video lessons bundled (monthly/one-time) - [ ] **Digital Products:** Templates, assets, tools (one-time purchase) - [ ] **Memberships:** Tiered access + recurring revenue (monthly/yearly) - [ ] **1:1 Consultations:** Personal sessions with creator (booked + paid) - [ ] **NFTs:** Digital collectibles (one-time, blockchain) - [ ] **API Access:** Agent/workflow execution (pay-per-use via X402) - [ ] **Custom Services:** Bespoke products defined by creator - [ ] For each type, define: - [ ] Pricing model - [ ] Delivery method - [ ] Refund policy - [ ] Digital vs physical ### Cycle 2: Map E-Commerce to 6-Dimension Ontology - [ ] **Groups:** Creator's business group - [ ] **People:** Creator (seller), customer (buyer), platform (facilitator) - [ ] **Things:** product, shopping_cart, order, payment, subscription - [ ] **Connections:** - [ ] creator → product (owns) - [ ] customer → product (purchased) - [ ] customer → subscription (subscribed_to) - [ ] product → payment (transacted) - [ ] **Events:** - [ ] product_created, product_updated, product_deleted - [ ] cart_created, item_added, item_removed - [ ] checkout_initiated, payment_processed, order_completed - [ ] subscription_started, subscription_renewed, subscription_cancelled - [ ] **Knowledge:** product_category, price_tier, access_level labels ### Cycle 3: Review X402 Integration (from todo-x402) - [ ] Understand X402 payment flow (402 → payment → settled) - [ ] Identify how X402 applies to checkout: - [ ] Primary: Crypto payments (USDC on Base) - [ ] Support: Traditional (Stripe) as fallback (future) - [ ] Plan X402 as default payment for digital products - [ ] Plan traditional payment for higher-value items (consultations) - [ ] Map payment to events: payment_processed → order_completed ### Cycle 4: Define Shopping Cart Requirements - [ ] Cart functionality: - [ ] Add/remove items - [ ] Update quantities (for subscriptions, bundles) - [ ] Apply discount codes (future) - [ ] Calculate taxes (future: US sales tax) - [ ] Show subtotal + total - [ ] Persistent (save across sessions) - [ ] Share cart link (for wishlists) - [ ] Cart storage: - [ ] localStorage (client-side before purchase) - [ ] Convex (after purchase → order) - [ ] Abandoned cart: - [ ] Email reminder after 24 hours (future) - [ ] Track in analytics ### Cycle 5: Define Checkout Flow - [ ] Steps: 1. Review cart + total 2. Enter shipping/billing (if physical) 3. Select payment method (X402 for crypto, Stripe for fiat) 4. Review order summary 5. Confirm payment 6. Show order confirmation + receipt 7. Email receipt to buyer - [ ] Guest checkout allowed (no login required) - [ ] Time limit: 15 minutes to complete - [ ] Mobile-optimized (80% of users on mobile) ### Cycle 6: Define Subscription Model - [ ] Types: - [ ] **Monthly subscription** ($X/month, auto-renews) - [ ] **Yearly subscription** ($X/year, cheaper per month) - [ ] **Lifetime access** (one-time, highest price) - [ ] Features: - [ ] Auto-renewal with X402 (permit-based recurring) - [ ] Cancel anytime - [ ] Upgrade/downgrade within billing cycle - [ ] Pause subscription (temporary hold) - [ ] Manage from account settings - [ ] Events: - [ ] subscription_started - [ ] subscription_renewed - [ ] subscription_paused - [ ] subscription_resumed - [ ] subscription_cancelled ### Cycle 7: Define Refund + Dispute Policy - [ ] Refund policy: - [ ] 7-day money-back guarantee for courses - [ ] No refund for instantly downloadable digital products - [ ] No refund for consultations after 24 hours - [ ] Automatic refund in original payment method - [ ] Dispute resolution (future): - [ ] Customer initiates refund request - [ ] Creator has 48 hours to respond - [ ] Platform mediates if disagreement - [ ] Escalate to platform owner if needed ### Cycle 8: Define Revenue Split - [ ] Creator earnings: - [ ] Product price - platform fee - payment processor fee - [ ] Platform fee: 5% (vs Stripe's ~3% + $0.30) - [ ] X402 gas cost: Minimal on Base (~$0.0001) - [ ] Example: $10 course → $9.50 to creator - [ ] Payout: - [ ] Weekly automatic payout to creator's wallet - [ ] Creator must have connected wallet - [ ] Minimum $5 threshold before payout - [ ] Events: - [ ] revenue_earned (daily, per creator) - [ ] payout_processed (weekly) - [ ] payout_failed (if wallet invalid) ### Cycle 9: Identify Analytics Needs - [ ] For creators (seller view): - [ ] Total revenue (all-time, year, month, week) - [ ] Sales by product - [ ] Sales by channel (direct, referral, marketplace) - [ ] Conversion rate (visitors → purchasers) - [ ] Customer lifetime value - [ ] Most popular products - [ ] Recent sales + notifications - [ ] For platform (admin view): - [ ] Total platform revenue - [ ] Revenue by creator - [ ] Payment method breakdown (X402 vs Stripe) - [ ] Refund rate - [ ] Dispute rate - [ ] Geographic distribution ### Cycle 10: Define Success Metrics - [ ] E-commerce complete when: - [ ] [ ] Product creation working - [ ] [ ] Shopping cart functional - [ ] [ ] Checkout with X402 working - [ ] [ ] Order confirmation + email - [ ] [ ] Creator can view sales - [ ] [ ] Revenue tracking accurate - [ ] [ ] Subscription auto-renewal working - [ ] [ ] Payout processing tested - [ ] [ ] Analytics dashboard functional - [ ] [ ] First creator earns first $100 --- ## PHASE 2: BACKEND SCHEMA & SERVICES (Cycle 11-20) **Purpose:** Create product + order schema in Convex ### Cycle 11: Extend Product Thing Type - [ ] Update `backend/convex/schema.ts`: ```typescript { type: 'digital_product' | 'membership' | 'consultation' | 'nft', properties: { // Identification creatorId: Id<'things'>, // Owner name: string, slug: string, // URL: one.ie/product/slug description: string, thumbnail: string, // Product image images: string[], // Gallery // Pricing price: number, // In cents ($0.01 = 1) currency: 'USD' | 'USDC', // USD = Stripe, USDC = X402 discountPrice: number, // Sale price if any taxable: boolean, // Product type specific type: 'course' | 'template' | 'membership' | 'consultation' | 'nft', // For courses lessons: number, duration: number, // Minutes // For memberships billingCycle: 'monthly' | 'yearly' | 'lifetime', trialDays: number, // Free trial period // For consultations duration: number, // Session minutes calendarUrl: string, // Scheduling tool // Availability status: 'draft' | 'published' | 'archived', publishedAt: number, visibility: 'public' | 'unlisted' | 'private', // Stats totalSales: number, totalRevenue: number, averageRating: number, reviewCount: number, // Content delivery contentUrl: string, // Link to course, files, etc contentType: 'url' | 'video' | 'document' | 'zip', // Settings allowRefunds: boolean, refundWindow: number, // Days digitalDownload: boolean, } } ``` ### Cycle 12: Create Shopping Cart Thing Type - [ ] New thing type: ```typescript { type: 'shopping_cart', properties: { customerId: Id<'things'>, // Who owns cart items: [{ productId: Id<'things'>, quantity: number, price: number, // Price at time added addedAt: number, }], subtotal: number, tax: number, discount: number, total: number, status: 'active' | 'abandoned' | 'purchased', createdAt: number, expiresAt: number, // 30 days } } ``` ### Cycle 13: Create Order Thing Type - [ ] New thing type: ```typescript { type: 'order', properties: { customerId: Id<'things'>, // Buyer creatorId: Id<'things'>, // Seller cartId: Id<'things'>, // Associated cart orderNumber: string, // Unique: ORD-202501-001 items: [{ productId: Id<'things'>, productName: string, quantity: number, price: number, total: number, }], subtotal: number, tax: number, discount: number, total: number, paymentId: string, // X402 payment ID or Stripe charge ID paymentMethod: 'x402' | 'stripe' | 'paypal', paymentStatus: 'pending' | 'completed' | 'failed', status: 'processing' | 'completed' | 'fulfilled' | 'cancelled', deliveryMethod: 'email' | 'download' | 'link', deliveryStatus: 'pending' | 'sent' | 'downloaded', shippingAddress: { street, city, state, zip, country }, // If physical billingAddress: { street, city, state, zip, country }, createdAt: number, completedAt: number, notes: string, // Internal notes } } ``` ### Cycle 14: Create Subscription Thing Type - [ ] New thing type: ```typescript { type: 'subscription', properties: { customerId: Id<'things'>, creatorId: Id<'things'>, productId: Id<'things'>, // Course/membership plan: 'monthly' | 'yearly' | 'lifetime', price: number, status: 'active' | 'paused' | 'cancelled' | 'expired', startDate: number, renewDate: number, // Next auto-renewal cancelDate: number, pausedUntil: number, // If paused trialEndsAt: number, // If in trial paymentMethodId: string, // For recurring X402 lastPaymentDate: number, lastPaymentId: string, totalPayments: number, autoRenew: boolean, cancelReason: string, // Why cancelled } } ``` ### Cycle 15: Create Payment Thing Type Extension - [ ] Extend payment thing from todo-x402: ```typescript { type: 'payment', properties: { // ... existing X402 fields ... // E-commerce specific orderId: Id<'things'>, // Associated order creatorId: Id<'things'>, // Product owner productId: Id<'things'>, // What was sold metadata: { productType: 'course' | 'template' | 'membership' | etc, quantity: number, refunded: boolean, refundDate: number, refundAmount: number, refundReason: string, } } } ``` ### Cycle 16: Create E-Commerce Service (Effect.ts) - [ ] Service methods: - [ ] `createProduct(creator, productData)` → productId - [ ] `addToCart(customer, productId, quantity)` → cartId - [ ] `removeFromCart(cartId, productId)` → void - [ ] `checkout(customer, cartId)` → order + payment request - [ ] `processPayment(orderId, paymentPayload)` → payment verified - [ ] `completeOrder(orderId)` → deliver content - [ ] `cancelOrder(orderId, reason)` → process refund - [ ] `createSubscription(customer, productId, plan)` → subscriptionId ### Cycle 17: Create Convex Mutations for Products - [ ] `mutations/products.ts`: - [ ] `createProduct(creatorId, data)` → productId - [ ] `updateProduct(productId, data)` → updated - [ ] `publishProduct(productId)` → published - [ ] `archiveProduct(productId)` → archived - [ ] `deleteProduct(productId)` → deleted ### Cycle 18: Create Convex Mutations for Orders - [ ] `mutations/orders.ts`: - [ ] `createOrder(customerId, items)` → orderId - [ ] `updateOrderStatus(orderId, status)` → updated - [ ] `completeOrder(orderId)` → completed + deliver - [ ] `refundOrder(orderId, reason)` → refunded - [ ] `cancelOrder(orderId, reason)` → cancelled ### Cycle 19: Create Convex Queries - [ ] `queries/products.ts`: - [ ] `listProductsForCreator(creatorId)` → products[] - [ ] `getProductBySlug(slug)` → product - [ ] `searchProducts(query)` → products[] - [ ] `listFeaturedProducts()` → products[] - [ ] `queries/orders.ts`: - [ ] `getOrdersForCustomer(customerId)` → orders[] - [ ] `getOrdersForCreator(creatorId)` → orders[] - [ ] `getOrder(orderId)` → order details ### Cycle 20: Create Revenue Tracking Service - [ ] Service to track creator earnings: - [ ] `trackSale(orderId, amount)` → log event - [ ] `getCreatorRevenue(creatorId, period)` → total - [ ] `getCreatorStats(creatorId)` → {totalSales, totalRevenue, topProduct} - [ ] `processWeeklyPayouts()` → send to wallets --- ## PHASE 3: FRONTEND COMPONENTS & PAGES (Cycle 21-30) **Purpose:** Build shopping experience in React/Astro ### Cycle 21: Create ProductCard Component - [ ] Reusable card showing: - [ ] Product image - [ ] Product name + creator name - [ ] Brief description (100 chars) - [ ] Rating (stars + count) - [ ] Price - [ ] "View Details" or "Add to Cart" button - [ ] Responsive: Works on mobile, tablet, desktop ### Cycle 22: Create ProductGallery Component - [ ] Multi-image gallery: - [ ] Thumbnail strip on side/bottom - [ ] Click to view full size - [ ] Keyboard nav (arrows) - [ ] Mobile: Swipe to change ### Cycle 23: Create ShoppingCart Component - [ ] Display: - [ ] Items list (product name, price, qty) - [ ] Remove item button - [ ] Quantity selector - [ ] Subtotal, tax, total - [ ] Checkout button - [ ] Continue shopping link - [ ] Empty state: Suggest products ### Cycle 24: Create CheckoutForm Component - [ ] Multi-step form: - [ ] Step 1: Cart review - [ ] Step 2: Email confirmation - [ ] Step 3: Payment method selector - [ ] Step 4: Confirm + pay - [ ] Payment method: - [ ] X402 (crypto) - primary - [ ] Stripe (card) - fallback - [ ] Show payment processing spinner ### Cycle 25: Create OrderConfirmation Component - [ ] Show: - [ ] Order number (ORD-202501-001) - [ ] Items purchased - [ ] Total paid - [ ] Delivery method - [ ] "Download" or "View Course" button - [ ] Email receipt link - [ ] Actions: - [ ] Download invoice PDF - [ ] Share with friend (referral) - [ ] Browse more products ### Cycle 26: Create ProductPage (Astro) - [ ] Page: `/products/[slug]` - [ ] Sections: - [ ] Product image gallery - [ ] Product name, creator, rating - [ ] Price + variants (if applicable) - [ ] Description - [ ] Features list - [ ] Reviews section - [ ] "Add to Cart" button - [ ] Related products ### Cycle 27: Create MarketplaceListingPage - [ ] Page: `/marketplace` or `/shop` - [ ] Features: - [ ] Product grid - [ ] Filters (category, price, rating) - [ ] Sort (newest, popular, price) - [ ] Search bar - [ ] Pagination - [ ] Cart icon (show count) ### Cycle 28: Create CartPage (Astro) - [ ] Page: `/cart` - [ ] Show: - [ ] Shopping cart component - [ ] Continue shopping link - [ ] Checkout button - [ ] Saved cart (if returning user) ### Cycle 29: Create CheckoutPage (Astro) - [ ] Page: `/checkout` - [ ] Multi-step form (from component) - [ ] Protect: Require items in cart - [ ] Save form progress (localStorage) - [ ] Show estimated delivery time ### Cycle 30: Create OrderHistoryPage - [ ] Page: `/orders` (logged in only) - [ ] Show: - [ ] All orders (paginated) - [ ] Order number, date, total, status - [ ] Click to view details - [ ] Download invoice - [ ] Access download link (for digital) - [ ] Leave review - [ ] Request refund button --- ## PHASE 4-10: CONTINUATION [Abbreviated for space - Full structure continues with: - Phase 4: API routes for checkout, orders, products - Phase 5: Testing (unit, integration, E2E payment flow) - Phase 6: Design + UX finalization - Phase 7: Performance + Stripe integration (future) - Phase 8: Deployment + monitoring - Phase 9: Documentation - Phase 10: Lessons learned] --- ## SUCCESS CRITERIA E-commerce is complete when: - ✅ Creator can create products (courses, templates, memberships) - ✅ Customer can browse products - ✅ Shopping cart working (add, remove, quantities) - ✅ Checkout flow with X402 payment working - ✅ Order confirmation + email sent - ✅ Digital products delivered (via email or download) - ✅ Subscription auto-renewal via X402 - ✅ Creator can view sales + revenue - ✅ Weekly payouts processed to creator wallets - ✅ Analytics dashboard shows revenue trends - ✅ First $1000 in revenue processed - ✅ Refund process tested (7-day guarantee) --- **Status:** Wave 3 - Monetization (Parallel with API + Features) **Next:** todo-api.md (Wave 3), todo-features.md (Wave 3)