KitSmith is a lightweight, browser-based kit and sustainment planner built to align with the Ceradon Architect Stack (Node/UxS/Mesh/Mission/KitSmith). It is a static single-page app that runs on GitHub Pages or any basic static host—no build system or backend required.
- Define mission constraints (duration, environment, team size, per-operator weight, power strategy, notes).
- Apply a global safety factor to battery/consumable needs and show model vs buffered counts.
- Browse inventory from
data/inventory.jsonwith category and text filters. - Build multiple kits (per operator or vehicle), adjust quantities, and see live totals (weight, energy, runtime heuristic).
- Check per-operator weight and highlight overloads with a per-operator rollup.
- Visualize sustainment timelines across 24/48/72h (or mission-defined) windows with battery risk flags.
- Import Node/Platform design JSON and optional Mission metadata to pre-seed kits and constraints, or ingest full MissionProject files with auto-proposed kits by element when none exist.
- Export the current session as JSON or copy a text-based packing checklist.
- Generate printable per-kit checklists with line-item checkboxes.
- Dark, panel-based UI styled after Ceradon UxS Architect for quick adoption in the stack.
- MissionProject sustainment panel surfaces what KitSmith writes (constraints, kits, kitsSummary) and shows a live snippet for downstream tools.
- Clone the repository.
- Serve the files locally with any static server. Examples:
- Python:
python3 -m http.server 8000 - Node:
npx http-server .
- Python:
- Open
http://localhost:8000in your browser. The app fetchesdata/inventory.jsonrelative to the root.
For GitHub Pages, set the branch to publish the root of this repository (e.g., work or main) and browse to the published URL, such as https://nbschultz97.github.io/Ceradon-KitSmith/. All assets are static and will run without additional configuration; if /data/inventory.json cannot be reached, the app will fall back to an embedded starter catalog so the UI still loads on first visit.
data/inventory.json holds the inventory objects. Each item uses:
{
"id": "unique_id",
"name": "Item name",
"category": "Battery | Radio | Node | UxS | Tool | Sustainment | Other",
"weight_g": 0,
"energy_wh": null,
"volume_l": null,
"tags": ["keywords"],
"notes": "optional string"
}energy_whcan benullwhen not applicable.- Add or adjust categories and tags to match your kits; the filters are data-driven.
To seed example kits, edit app.js or extend with data/presets.json. The UI now ships a WHITEFROST Sustainment preset (72h cold-weather recon with layered clothing, battery wraps, water, and spares) and honors MissionProject imports/exports.
KitSmith reads and writes a shared MissionProject JSON envelope (schema v2, documented in docs/mission_project_schema.md). Imports tolerate partial data and tag entities with origin_tool (kit, node, mesh, etc.). You can load:
- Node/Platform design JSON (arrays of
nodes,platforms, orkitswithname,role, anditems: [{"id","qty"}]). - Mission metadata JSON (duration, environment, safety factor, etc.).
- Full MissionProject JSON files for round-tripping across the Architect stack.
- KitSmith anchors to
KITSMITH_SCHEMA_VERSION = 2(exposed inmission_project.js). - The sustainment-focused schema is published at
schema/mission_project_kits_v2.jsonfor downstream validation. - Imports preserve unknown fields and normalize kits/constraints (
items[]or{id: qty}both accepted); exports re-emit the normalized payload with aconstraints.listmirror for legacy stack tools. - KitSmith writes the sustainment scope of MissionProject:
constraints(duration, team size, max weight, safety factor, power strategy),kits.definitions(items, totals, intended role),kits.assignments(operator-to-kit mapping), and a derivedkitsSummaryblock that captures sustainment hours plus per-operator weight deltas. The MissionProject integration panel shows a live JSON snippet of these fields for the active session.
- JSON: Download
kitsmith_export.jsoncontaining constraints (including safety factor), kits with totals, operator loads, sustainment flags, and a timestamp. A nestedmissionProjectblock mirrors the same data for downstream tools. - MissionProject JSON: First-class import/export buttons round-trip the sustainment view while also emitting
kits[],kits_flat[], andconstraints.listfor Architect stack tools. - Text checklist: Builds a plain-text block with mission context and per-kit line items (copy to clipboard).
- Printable checklists: Generates per-kit packing lists with multiple checkboxes per line item; use your browser’s print dialog to produce paper copies.
- ATAK/tactical package: The ATAK zip includes the full export JSON, a MissionProject JSON, GeoJSON, and a CoT-style JSON stub. See
docs/atak_exports.mdfor fields and ingest notes.
- Safety factor: The
safetyFactor(default 1.2x) multiplies modeled battery requirements before rounding up. Summary cards show both the raw model need and the buffered requirement so users see the margin. - Per-person load checking: Each kit is assumed to be carried by one operator. Weight summaries and the per-operator table flag overloads versus the configured
maxWeightPerOperatorKg. - Sustainment timeline: Uses the heuristic baseline draw (higher for RF/UxS/Nodes) to estimate Wh required across 24/48/72h and mission-defined durations. Rows flag red when on-hand battery energy cannot satisfy the safety-adjusted need. Logic is coarse by design and ready for replacement with more precise CSI-driven power models.