MVP Product Requirements Document

Allometry V2

Deployment as an API — Humanoid Execution Layer
Version: 2.0 MVP Date: April 2026 Author: Taylor Gendron Build Time: 2–3 weeks

Table of Contents

  1. MVP Objective
  2. Core Flow
  3. Core Entities
  4. Routes
  5. Screen 1 — Deployment Request
  6. Screen 2 — Underwriting + Pricing
  7. Screen 3 — Orchestration
  8. Screen 4 — Simulation
  9. Screen 5 — Control Tower
  10. Humanoid Supply
  11. Pricing Engine
  12. State Machine
  13. Success Criteria
  14. Demo Flow
  15. What Not to Build
  16. Final Positioning

1. MVP Objective CORE

Prove one thing:

A deployment can be requested, underwritten, priced, and executed without human coordination.

The product must feel like:

2. Core Flow (End-to-End) PIPELINE

Request Deployment ↓ Underwrite (EV + margin + risk) ↓ Dynamic Pricing ↓ Execution Plan (tasks + units) ↓ Simulated Execution (live state changes)

3. Core Entities DATA MODEL

Deployment

type Deployment = {
  id: string
  accountName: string
  status: "draft" | "underwritten" | "approved" | "executing" | "completed"
  locations: Location[]
  price: number
  margin: number
}

Location

type Location = {
  id: string
  address: string
  complexity: "low" | "medium" | "high"
  units: number
  score?: Score
}

Score

type Score = {
  ev: number
  margin: number
  payback: number
  risks: string[]
}

Execution Unit (abstracted humanoid)

type ExecutionUnit = {
  id: string
  type: "unit"   // never "human"
  skills: string[]
  status: "available" | "assigned" | "busy"
  location: string
  reliability: number
}

Task

type Task = {
  id: string
  label: string
  status: "pending" | "assigned" | "in_progress" | "completed"
  assignedUnitId?: string
}

4. Routes (App Structure)

/app
Application shell
/deployments/new
Create a new deployment request
/deployments/[id]/underwrite
Underwriting scores + dynamic pricing
/deployments/[id]/execute
Orchestration engine — task tree + unit allocation
/deployments/[id]/simulate
Simulation timeline + risk signals
/control
System-level control tower

5. Screen 1 — Deployment Request INPUT

Route

/deployments/new

Purpose

Convert intent into a structured deployment request.

Layout

---------------------------------- | Header | ---------------------------------- | Account + Deployment Type | | Locations (list builder) | | SLA / Priority | ---------------------------------- | [Run Underwriting] | ----------------------------------

Components

<DeploymentForm />

<LocationBuilder />

Builds a list of <LocationCard> components, each with address, units, and complexity.

<RunUnderwritingButton />

Triggers: runUnderwriting(deploymentId)

6. Screen 2 — Underwriting + Pricing SCORING

Route

/deployments/[id]/underwrite

Layout

LeftCenterRight
LocationsScoresPricing Panel

Components

<LocationScoreCard />

<PricingPanel />

Logic

// Margin calculation
margin = (price - cost) / price

if (margin < 0.25) → warning
if (payback > 18)   → warning

<PriceSlider />

onChange(price => recalcMetrics(price))

CTA

<Button>Approve & Generate Execution Plan</Button>

7. Screen 3 — Orchestration CORE

Route

/deployments/[id]/execute

Purpose

Show system replacing human coordination.

Layout

LeftCenterRight
Task TreeExecution GraphUnit Allocation

Components

<TaskTree />

Install Unit A
  → Site Prep
  → Install
  → Test

<ExecutionGraph />

Location A
  Task 1 → Assigned → Complete
  Task 2 → Pending

<UnitAllocationPanel />

Assignment Logic

function assignUnits(tasks, units) {
  return tasks.map(task => ({
    ...task,
    assignedUnitId: findBestUnit(task, units)
  }))
}

CTA

<Button>Simulate Execution</Button>
<Button>Execute Deployment</Button>

8. Screen 4 — Simulation LIVE

Route

/deployments/[id]/simulate

Purpose

Make system feel alive.

Components

<Timeline />

Day 1 → Site Prep
Day 3 → Install
Day 5 → Complete

<CostBreakdown />

<RiskPanel />

⚠ Skill scarcity
⚠ Delay probability

Simulation Engine (MVP — Fake)

function simulateExecution(tasks) {
  tasks.forEach((task, i) => {
    setTimeout(() => updateStatus(task.id, "assigned"), i * 1000)
    setTimeout(() => updateStatus(task.id, "in_progress"), i * 2000)
    setTimeout(() => updateStatus(task.id, "completed"), i * 3000)
  })
}

9. Screen 5 — Control Tower SYSTEM

Route

/control

Purpose

Show system-level power.

Layout

TOP: KPI Row CENTER: Active Deployments RIGHT: Alerts

Components

<KPIBar />

<DeploymentCard />

<SystemStatus />

Units Active: 42
Deployments Running: 8
Issues: 2

10. Humanoid Supply (MVP Implementation) ABSTRACTION

Internal Dataset

const executionUnits: ExecutionUnit[] = [
  {
    id: "U1",
    type: "unit",
    skills: ["install"],
    status: "available",
    location: "MTL",
    reliability: 0.92
  }
]

Assignment Logic

function findBestUnit(task, units) {
  return units.find(u =>
    u.skills.includes(task.label) &&
    u.status === "available"
  )
}

UI Rule

Never show:

Only show:

11. Pricing Engine (MVP) ECONOMICS

function calculatePrice(cost, risk, sla) {
  return cost * 1.3 + risk * 1000 + sla * 500
}

12. State Machine

draft underwritten approved executing completed

13. Success Criteria

User must feel:

"This replaces ops"
"I don't need a team to run this"
"This controls execution"

14. Demo Flow CRITICAL

  1. Create deployment — enter account, locations, SLA
  2. Run underwriting — automated scoring per location
  3. Adjust pricing — slider with real-time margin recalc
  4. Approve — generate execution plan
  5. Generate execution — task tree + unit assignment
  6. Simulate execution — watch it come alive

15. What Not to Build SCOPE

Real integrations
Real robotics
Complex backend
Multi-tenant

16. Final Positioning

This MVP communicates:

Deployment is no longer a company function.

It is infrastructure.