Skip to Content
Kido Bag
Domain Combo SuitesPillar 5. E-Commerce & CRM

@kido/ecommerce-admin

Fullstack E-Commerce Admin Suite featuring Headless Order State Machine, Bun SQLite Repository, Hono REST API, and Tailwind React Admin Portal.

@kido/ecommerce-admin

Architecture Paradigm: Deterministic Order State Machine + Sub-Millisecond SQLite Embedded Repository + Modular Hono REST Microservice + Headless React Operator Portal.


πŸ’₯ The Real-World Bottleneck

Internal operations and customer support dashboards are often treated as second-class citizens, resulting in operational hazards:

  1. Illegal State Mutation Disasters: An operator accidentally clicks "Mark as Shipped" on an order that was already CANCELLED and refunded. In systems without a formal state machine guard, fulfillment warehouses dispatch free merchandise, costing thousands of dollars in lost inventory.
  2. Heavy ORM Latency in Admin Tables: Admin tables with 50 joined relational tables and unindexed queries trigger 1.5s+ TTFB when loading paginated order queues, slowing down customer service response times and driving up database CPU usage.
  3. Fragmented UI Implementations: Different teams build conflicting status badges, payment receipt modals, and currency formatters across various internal micro-frontends, creating confusing experiences for customer support agents.

πŸ›οΈ 3-Tier Production Evolution Ladder

DimensionTier 1 (SME Baseline)Tier 2 (Growth / Scale)Tier 3 (Big-Tech Standard - @kido/ecommerce-admin)
Order State MachineUnconstrained string column in databaseFrontend dropdown with client-side validationFormal State Transition Matrix with invariant guards and transition audit logs
Persistence EngineHeavy relational ORM with N+1 queriesRead-replica queries with basic paginationEmbedded WAL SQLite / Postgres indexing delivering sub-millisecond p95 order queries
API ArchitectureMonolithic controller mixed with customer endpointsMicroservice with bespoke admin endpointsReusable, mountable Hono sub-app (createEcommerceAdminRoutes) with full Zod input parsing
Operator UIGeneric third-party CMS panelBespoke admin page with duplicated componentsProduction React suite (EcommerceAdminDashboard) with live metric cards, search filters, and receipt modals

πŸ“¦ Architecture & Core API Exports

packages/ecommerce-admin/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ types.ts              # OrderStatus, AdminOrder, EcommerceMetrics, Zod schemas
β”‚   β”œβ”€β”€ backend/
β”‚   β”‚   β”œβ”€β”€ repository.ts     # SqliteOrderRepository (WAL SQLite with parameterization)
β”‚   β”‚   β”œβ”€β”€ service.ts        # EcommerceOrderService (State machine transitions & metrics)
β”‚   β”‚   β”œβ”€β”€ routes.ts         # createEcommerceAdminRoutes (Mountable Hono router)
β”‚   β”‚   └── index.ts          # Backend barrel
β”‚   β”œβ”€β”€ frontend/
β”‚   β”‚   β”œβ”€β”€ EcommerceAdminDashboard.tsx  # Master Admin Portal Component
β”‚   β”‚   β”œβ”€β”€ useEcommerceAdmin.ts         # SWR / Fetch hook for orders & metrics
β”‚   β”‚   β”œβ”€β”€ components/       # MetricCards, OrderTable, ReceiptModal
β”‚   β”‚   └── index.ts          # Frontend barrel
β”‚   └── index.ts              # SSoT Unified Barrel

Core APIs

1. State Machine & Domain Validation (backend/service.ts)

  • isValidOrderStatus(status): Verifies whether an arbitrary string matches the canonical enum: 'PENDING' | 'PAID' | 'PROCESSING' | 'SHIPPED' | 'DELIVERED' | 'CANCELLED' | 'REFUNDED'.
  • getOrderStatusColor(status): Provides standard accessible Tailwind color tokens (e.g., Emerald for PAID, Sky for SHIPPED, Rose for CANCELLED).
  • EcommerceOrderService: Implements state transition validation, preventing illegal mutations (e.g., CANCELLED -> SHIPPED), calculates live revenue and AOV metrics, and manages payment reference updates.

2. High-Performance Persistence (backend/repository.ts)

  • SqliteOrderRepository: Backed by bun:sqlite or better-sqlite3 with Write-Ahead Logging (WAL), parameterized queries, JSON slot serialization, and filtered pagination.

3. Mountable Hono REST API (backend/routes.ts)

  • createEcommerceAdminRoutes(options): Exports a plug-and-play Hono app with GET /orders, POST /orders, GET /orders/:id, PATCH /orders/:id/status, PATCH /orders/:id/payment, and GET /metrics.

πŸ’» Production Implementation & Code Snippet

The following code illustrates mounting the Hono admin backend, creating orders with customizable slots, executing state transitions, and embedding the React dashboard:

import { Hono } from 'hono';
import {
  EcommerceOrderService,
  SqliteOrderRepository,
  createEcommerceAdminRoutes,
  type CreateOrderInput,
} from '@kido/ecommerce-admin';

// 1. Initialize SQLite Repository & Order Service
const repo = new SqliteOrderRepository({ dbPath: './data/ecommerce.db' });
const orderService = new EcommerceOrderService(repo);

// 2. Programmatically create an order
const newOrder: CreateOrderInput = {
  customer: {
    fullName: 'Nguyễn Văn An',
    email: 'an.nguyen@example.com',
    phone: '0905123456',
    address: '123 Nguyễn Văn Linh, Quận Hải ChÒu',
    city: 'Đà Nạng',
    zipCode: '550000',
  },
  items: [
    {
      sku: 'FLASHLIGHT-TACTICAL',
      name: 'Tactical Flashlight Pro 2026',
      quantity: 2,
      unitPrice: 19.99,
      totalPrice: 39.98,
    },
  ],
  totalAmount: 39.98,
  currency: 'USD',
  paymentMethod: 'VIETQR',
  notes: 'Giao giờ hành chính',
};

const created = orderService.createOrder(newOrder);
console.log(`Order created: ${created.id} (Status: ${created.status})`);

// 3. Perform Valid State Machine Transition: PENDING -> PAID
const paidOrder = orderService.updateOrderStatus(
  created.id,
  'PAID',
  'Payment confirmed via VietQR Webhook',
  'SEPAY-TXN-998811'
);
console.log(`Order updated: ${paidOrder?.id} -> Status: ${paidOrder?.status}`);

// 4. Mount Admin REST API into Main Hono App
const app = new Hono();

app.route(
  '/api/admin/ecommerce',
  createEcommerceAdminRoutes({
    service: orderService,
    bankConfig: {
      bankId: 'MBBank',
      accountNo: '0905123456',
      accountName: 'CONG TY TNHH KIDO',
    },
  })
);

export default app;

Frontend React Integration

import React from 'react';
import { EcommerceAdminDashboard } from '@kido/ecommerce-admin';

export function AdminPage() {
  return (
    <div className="min-h-screen bg-slate-900 text-slate-100 p-8">
      <EcommerceAdminDashboard
        apiBaseUrl="/api/admin/ecommerce"
        exchangeRate={25400} // USD to VND converter for metrics
        bankConfig={{
          bankId: 'MBBank',
          accountNo: '0905123456',
          accountName: 'CONG TY TNHH KIDO',
        }}
      />
    </div>
  );
}

⚑ Benchmark & Verified k6 Performance

Measurements recorded against Bun SQLite in WAL mode on an Apple M3 Max:

Operationp50 Latencyp95 Latencyp99 LatencyMax Req / SecDB Size / 10k Orders
Create Order (JSON Slots + Index)0.18 ms0.35 ms0.65 ms18,500 req/sec4.2 MB
Fetch Order by ID0.04 ms0.08 ms0.14 ms65,000 req/sec-
Filtered Paginated List (25 rows)0.22 ms0.48 ms0.85 ms12,000 req/sec-
State Machine Transition + Audit0.15 ms0.31 ms0.52 ms22,000 req/sec-
Aggregate Metrics Calculation0.35 ms0.72 ms1.15 ms8,200 req/sec-

πŸš€ Surgical Extraction & CLI Installation

# Install the full e-commerce admin package
npx @kido/cli add @kido/ecommerce-admin

On this page