Skip to content

Instantly share code, notes, and snippets.

@tomohisa
Created August 11, 2025 08:10
Show Gist options
  • Save tomohisa/c016df7cdb298baa6b13d20a03374809 to your computer and use it in GitHub Desktop.
Save tomohisa/c016df7cdb298baa6b13d20a03374809 to your computer and use it in GitHub Desktop.

Food Delivery Demo - Event Sourcing with Sekiban

Overview

Build a simple food delivery system demonstrating event sourcing patterns using Sekiban framework, with Domain, API, and Blazor UI layers.

Core Features

  • Single user journey: Browse → Order → Track → Deliver → Review
  • Real-time status updates using event-driven architecture
  • Event history visualization to showcase event sourcing benefits

Domain Events (Keep Simple)

// Essential events only
- MenuItemAddedToCart(OrderId, ItemId, ItemName, Price, Quantity)
- CartCleared(OrderId)
- OrderPlaced(OrderId, Items[], TotalAmount, DeliveryAddress)
- PaymentCompleted(OrderId, PaymentMethod, Amount)
- OrderAccepted(OrderId, EstimatedPrepTime)
- OrderReady(OrderId)
- OrderPickedUp(OrderId, DriverName)
- OrderDelivered(OrderId, DeliveredAt)
- OrderRated(OrderId, Rating, Comment)

Aggregates

  1. Cart - Manages cart operations
  2. Order - Handles order lifecycle
  3. Delivery - Tracks delivery status

Commands

  • AddItemToCart
  • PlaceOrder
  • ProcessPayment
  • UpdateDeliveryStatus
  • SubmitRating

API Endpoints

POST   /api/cart/add-item
POST   /api/cart/clear
POST   /api/order/place
POST   /api/order/pay
PUT    /api/order/{id}/status
POST   /api/order/{id}/rate
GET    /api/order/{id}/events
GET    /api/order/{id}/current-state

Blazor Pages

  1. Menu Page - Simple grid with "Add to Cart" buttons
  2. Cart Page - Show items with total, "Place Order" button
  3. Order Tracking Page - Status progress bar with real-time updates
  4. Order History Page - List past orders with event timeline

Implementation Steps

  1. Use Sekiban Documents MCP to generate domain models
  2. Replace Weather sample with Order domain
  3. Create simple in-memory menu items (no database needed)
  4. Focus on event flow visualization over complex business logic
  5. Use SignalR for real-time status updates

Simplified Scope

  • Skip: Authentication, multiple restaurants, complex pricing
  • Mock: Payment processing, GPS tracking
  • Hardcode: Menu items, delivery times
  • Focus: Event sourcing patterns, state reconstruction, event history

Key Demo Points

  • Show how current state is derived from events
  • Demonstrate event replay to any point in time
  • Highlight audit trail capabilities
  • Display real-time updates through event propagation

Keep it simple enough to code live in 30-45 minutes while effectively demonstrating event sourcing concepts.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment