| name | project-data-intel |
| description | Comprehensive Project Data Intelligence dashboard — the single source of truth for ALL extracted project data. Template-based architecture with 40+ sections covering building data, quantities, financials, specifications, project controls, spatial analysis, and AI rendering. Triggers: "/data", "show me all the data", "project intelligence", "room browser", "quantity dashboard", "material calculator", "bid comparison", "project brain dashboard", "show everything we know", "data dashboard", "what data do we have".
|
| version | 3.0.0 |
Project Data Intelligence (v3.0) — SKILL Documentation
Overview
Comprehensive extraction and intelligence system for construction project documents.
1. Philosophy: "No Data Left Behind"
The project-data-intel skill is the single source of truth for all extracted construction project data. It operates on a universal principle: every piece of information captured during project setup, document processing, and field operations should be searchable, viewable, and actionable from a single, role-aware interface.
Key design principles:
- Template-based architecture: Static HTML template ships with the plugin, dynamic data is injected
- Project-agnostic: Works for any building type (senior care, office, industrial, healthcare, etc.)
- Incremental updates: Only changed data is re-serialized; unchanged sections remain cached
- Role-aware rendering: Superintendent, PM, Owner, and Architect each see customized views
- AI-native: Chatbot and rendering system leverage Anthropic API for context-aware insights
- Offline-capable: Keyword search fallback when API unavailable
2. Architecture: Template + Data Injection
The v3.0 dashboard uses a separation of concerns model:
File Structure
AI - Project Brain/
├── {PROJECT_CODE}_Data_Intel.html ← Static template (10,000+ lines, generated once)
├── {PROJECT_CODE}_data.js ← Dynamic data payload (regenerated each run)
├── references/
│ └── data-intel-template.html ← Master template in plugin (never regenerated)
└── logs/
└── data-intel-generation.log ← Audit trail
Template Lifecycle
- First run: Copy
data-intel-template.html from plugin → {PROJECT_CODE}_Data_Intel.html
- Subsequent runs: Never touch the HTML file; only regenerate
{PROJECT_CODE}_data.js
- Rationale: Template is stable (~10,000 lines), data evolves rapidly. Decoupled updates reduce file size and generation time.
Data Payload Structure (data.js)
const PROJECT_DATA = {
config: {
projectCode, projectName, address, buildingType, occupancy,
company, startDate, endDate, architect, pm, super, status
},
spatial: {
gridLines: { x: [...], y: [...] },
buildingAreas: { footprint, perimeter, floors, zones },
rooms: [{id, name, area, type, occupancy, finishes, doors, equipment}],
floorPlans: [{floor, gridRef, area, roomCount}]
},
specs: {
building: {structure, foundation, roof, exterior, interior},
pemb: {supplier, model, dimensions, frames, reactions, design_loads},
cfs: {profile, gauge, spacing, height},
concrete: {bearing, sog_interior, sog_exterior, rebar, mixes, anchor_bolts, testing},
mep: {
equipment: [
{
id: "RTU-1", tag: "RTU-1", type: "Rooftop Unit",
discipline: "mechanical",
system: "hvac",
description: "10-Ton Rooftop Unit",
location: { grid: "C-D/3-4", room: null, mounting: "Roof" },
: { : , : , : },
: { : , : , : , : },
: [,,],
: , : ,
: , :
}
],
: [{
: , : ,
: , : , : ,
: , : ,
: , : , : ,
: [{: , : , : , : , : , : }],
: {: , : , : , : }
}],
: {
: {: , : , : },
: {: , : },
: [], : [],
: , : , :
},
: {
: [{: , : , : , : , : , : , : }],
: [{: , : , : , : , : , : , : , : }]
},
: {
: [{: , : , : , : }],
: [{: , : , : }]
},
: {
: , : , : ,
: {: , : }, : {: , : },
: [{: , : , : , : }],
:
},
: [{: , : , : , : , : }],
: [],
: {
: [],
: ,
:
}
},
: {flooring, wall_finishes, ceiling, paint, acoustical},
: [{opening, type, material, hardware, schedule, supplier}],
: [{opening, type, material, schedule, supplier}],
: [{id, location, type, material, supplier}]
},
: {
: [{task, duration, start, finish, preds, slack, critical}],
: [{event, plannedDate, actualDate, status}],
: [],
: {},
: [{item, supplier, orderDate, deliveryDate, duration}]
},
: {
: [{name, role, phone, email, address}],
: [{name, company, phone, email}],
: [{name, company, phone, email}],
: [{discipline, name, company, phone, email}],
: [{trade, company, name, phone, email, contract}],
: [{category, name, contact, phone, email, terms}],
: [{agency, contact, phone, email}],
: [{equipment, name, phone, license}]
},
: {
: {pending, review, approved, rejected, deferred},
: [{id, item, supplier, submitted, days_in_review, status, approver, notes}]
},
: {
: [{po_number, supplier, item, quantity, unit_price, total, date, status}],
: [{item, po, location, delivery_date, received, notes}],
: [{item, : [{name, price, delivery, lead_time}]}],
: [{priority, item, issue, action_required, due_date}]
},
: {
: [{hp_id, description, trigger, responsible, status, date_completed}],
: [{test_id, type, location, result, pass_fail, engineer, date}],
: [{agency, type, scope, inspection_date, result, notes}],
: [{id, location, date, category, photographer, notes}]
},
: [{date, superintendent, weather, temp, crew_size, work_summary, issues, safety_events}],
: {
: [{rfi_id, date_submitted, question, submitted_by, assigned_to, days_open, response, date_resolved}],
: {design, constructability, materials, coordination, other}
},
: [{date, type, attendees, agenda, decisions, action_items}],
: [{co_id, description, cost_impact, schedule_impact, status, date, approvals}],
: [{id, event, cause, trade, duration_days, impact, mitigation, status}],
: {
: {total_contract, total_completed, percent_complete, total_invoiced, retainage},
: [{period, contractor, amount, completed_value, retainage, approved_date}]
},
: [{id, location, item, trade, priority, assigned_to, status, due_date}],
: {
: [{date, location, category, photographer, file_reference}],
: [{date, phase, photographer, file_reference}],
: [{drawing, date, marked_up_by, file_reference}]
},
: [{prompt, type, model, generated_date, ai_image_reference}]
};
= {
: process.. || ,
: process.. || ,
: process.. ||
};
= ;
= {
: ,
: ,
: ,
: {
: {: , : , : },
: {: , : , : },
: {: , : , : },
},
: {
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
: ,
}
};
3. Incremental Update System
The dashboard uses smart regeneration to minimize file I/O and improve performance:
Update Algorithm
function updateProjectData(projectPath, sourceFiles) {
// Step 1: Check if data.js exists
if (NOT EXISTS data.js) {
// Full generation path
generateAllJSON(sourceFiles) → data.js
copyTemplate(plugin/references/data-intel-template.html) → {PROJECT_CODE}_Data_Intel.html
return "NEW_DASHBOARD_CREATED"
}
// Step 2: Load existing manifest
manifest = parseManifest(data.js)
// Step 3: Compute MD5 for each source
for each sourceFile in [config, spatial, specs, schedule, directory, ...]:
currentHash = MD5(sourceFile)
storedHash = manifest.files[sourceFile.name].md5
if (currentHash !== storedHash) {
CHANGED_FILES.push(sourceFile)
}
// Step 4: Selective serialization
if (CHANGED_FILES.length === 0) {
return "NO_CHANGES_DETECTED"
}
// Step 5: Regenerate only changed sections
for each changedFile in CHANGED_FILES:
re_parse(changedFile) → update PROJECT_DATA[section]
update manifest.files[changedFile.name].md5
log("Updated: " + changedFile.name)
// Step 6: Write data.js
serializeToJS(PROJECT_DATA, API_KEYS, ACTIVE_ROLE, manifest) → data.js
updateGenerationLog()
return "UPDATED: " + CHANGED_FILES.length + " sections"
}
Fallback: Corrupted Manifest
If DATA_MANIFEST is invalid, the system falls back to full regeneration with validation:
- Parse all JSON source files fresh
- Validate schema against PROJECT_DATA structure
- Recompute all MD5 hashes
- Regenerate data.js
- Log warning in generation log
Extended reference: Detailed examples, templates, scoring rubrics, and best practices are in references/skill-detail.md.