Automate daily construction report generation using n8n workflow automation.
npx skills add https://github.com/datadrivenconstruction/DDC_Skills_for_AI_Agents_in_Construction --skill n8n-daily-report
Daily reports are critical but time-consuming. This n8n workflow automates collection of site data from multiple sources and generates formatted daily reports.
[Site Data Sources] → [n8n Webhook] → [Data Processing] → [Report Generation] → [Distribution]
{
"nodes": [
{
"name": "Daily Schedule",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": {
"interval": [{"field": "cronExpression", "expression": "0 17 * * 1-5"}]
}
}
},
{
"name": "Webhook Input",
"type": "n8n-nodes-base.webhook",
"parameters": {
"httpMethod": "POST",
"path": "daily-report-data"
}
}
]
}
{
"nodes": [
{
"name": "Get Weather Data",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "https://api.openweathermap.org/data/2.5/weather",
"qs": {
"lat": "={{$json.site_lat}}",
"lon": "={{$json.site_lon}}",
"appid": "={{$env.WEATHER_API_KEY}}"
}
}
},
{
"name": "Get Site Photos",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "={{$env.PROCORE_API}}/projects/{{$json.project_id}}/images",
"authentication": "oAuth2"
}
},
{
"name": "Get Labor Data",
"type": "n8n-nodes-base.spreadsheetFile",
"parameters": {
"operation": "read",
"fileFormat": "xlsx"
}
}
]
}
{
"name": "Process Report Data",
"type": "n8n-nodes-base.code",
"parameters": {
"jsCode": "const items = $input.all();\n\nconst weather = items[0].json;\nconst photos = items[1].json;\nconst labor = items[2].json;\n\nconst report = {\n date: new Date().toISOString().split('T')[0],\n project: $('Webhook Input').first().json.project_name,\n weather: {\n condition: weather.weather[0].main,\n temp_high: Math.round(weather.main.temp_max - 273.15),\n temp_low: Math.round(weather.main.temp_min - 273.15)\n },\n labor_summary: {\n total_workers: labor.reduce((sum, l) => sum + l.workers, 0),\n total_hours: labor.reduce((sum, l) => sum + l.hours, 0)\n },\n photo_count: photos.length\n};\n\nreturn [{json: report}];"
}
}
{
"name": "Generate PDF Report",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST",
"url": "={{$env.PDF_SERVICE_URL}}/generate",
"body": {
"template": "daily_report",
"data": "={{$json}}"
}
}
}
{
"nodes": [
{
"name": "Send Email",
"type": "n8n-nodes-base.emailSend",
"parameters": {
"toEmail": "={{$json.distribution_list}}",
"subject": "Daily Report - {{$json.project}} - {{$json.date}}",
"attachments": "={{$node['Generate PDF Report'].json.file}}"
}
},
{
"name": "Upload to SharePoint",
"type": "n8n-nodes-base.microsoftSharePoint",
"parameters": {
"operation": "upload",
"siteId": "={{$env.SHAREPOINT_SITE}}",
"folderId": "/Daily Reports/{{$json.date}}"
}
}
]
}
import requests
from datetime import date
def trigger_daily_report(project_data: dict, webhook_url: str):
"""Trigger n8n daily report workflow."""
payload = {
"project_id": project_data['id'],
"project_name": project_data['name'],
"site_lat": project_data['latitude'],
"site_lon": project_data['longitude'],
"distribution_list": project_data['stakeholder_emails']
}
response = requests.post(webhook_url, json=payload)
return response.status_code == 200
def format_labor_data(labor_entries: list) -> list:
"""Format labor data for n8n processing."""
formatted = []
for entry in labor_entries:
formatted.append({
'trade': entry['trade'],
'company': entry['company'],
'workers': entry['worker_count'],
'hours': entry['total_hours'],
'activities': entry.get('activities', [])
})
return formatted
WEATHER_API_KEYPROCORE_APIPDF_SERVICE_URLSHAREPOINT_SITEExpert startup business analyst specializing in market sizing, financial modeling, competitive analysis, and strategic planning for early-stage companies. Use PROACTIVELY when the user asks about market opportunity, TAM/SAM/SOM, financial projections, unit economics, competitive landscape, team planning, startup metrics, or business strategy for pre-seed through Series A startups.
This skill should be used when the user asks to "plan team structure", "determine hiring needs", "design org chart", "calculate compensation", "plan equity allocation", or requests organizational design and headcount planning for a startup.
End-to-end bulk RNA-seq orchestrator — takes raw FASTQ reads through QC and trimming (FastQC, fastp/Trim Galore), alignment and quantification (STAR, Salmon, featureCounts), assembles a gene-level counts matrix, then hands off to differential expression (pydeseq2), pathway/GSEA enrichment (pathway-enrichment), and publication figures (scientific-visualization). Use whenever the user has bulk RNA-seq reads or quant output and wants a complete, reproducible differential-expression workflow — e.g. "analyze my RNA-seq", "FASTQ to DESeq2", "run nf-core/rnaseq", "STAR/Salmon quantification", "build a counts matrix for DESeq2", or "go from reads to differentially expressed genes and enriched pathways". Routes between an nf-core/rnaseq (Nextflow) path and a standalone STAR/Salmon path, and covers experimental design, strandedness, and QC gates. For single-cell RNA-seq use the scanpy skill instead.
Generate project status reports from Jira issues and publish to Confluence. When an agent needs to: (1) Create a status report for a project, (2) Summarize project progress or updates, (3) Generate weekly/daily reports from Jira, (4) Publish status summaries to Confluence, or (5) Analyze project blockers and completion. Queries Jira issues, categorizes by status/priority, and creates formatted reports for delivery managers and executives.
Evaluates market bubble risk through quantitative data-driven analysis using the revised Minsky/Kindleberger framework v2.1. Prioritizes objective metrics (Put/Call, VIX, margin debt, breadth, IPO data) over subjective impressions. Features strict qualitative adjustment criteria with confirmation bias prevention. Supports practical investment decisions with mandatory data collection and mechanical scoring. Use when user asks about bubble risk, valuation concerns, or profit-taking timing.
Google Workflow: Today's meetings + open tasks as a standup summary.
Read event data from a Google Sheets spreadsheet and create Google Calendar entries for each row.
Create professional, dark-themed SVG diagrams of any type — architecture diagrams, flowcharts, sequence diagrams, structural diagrams, mind maps, timelines, illustrative/conceptual diagrams, and more. Use this skill whenever the user asks for any kind of technical or conceptual diagram, visualization of a system, process flow, data flow, component relationship, network topology, decision tree, org chart, state machine, or any visual representation of structure/logic/process. Also trigger when the user says "画个图" "画一个架构图" "diagram" "flowchart" "sequence diagram" "draw me a ..." or uploads content and asks to visualize it. Output is always a standalone .svg file.
Take datadrivenconstruction/n8n-daily-report from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.