{{ viewTitle }}
{{ viewSub }}
{{ flashTag }}
{{ flashMsg }}
{{ pickName }} selected — scroll down and tap a job to assign.
Auto-filter: {{ craneFilterMsg }}
{{ p.trade }}·{{ p.certCount }} certs
No one matches. Clear the filter or widen the trade.
{{ a.name }}
{{ a.type }} · {{ a.tag }} · {{ a.location }}
Certs current
Expiring ≤60d
Expired
Job
Crew — drop workers here
Equipment
{{ j.kind }}
{{ j.code }}
{{ j.name }}
{{ j.client }} · {{ j.site }}
{{ j.dates }}
{{ j.crewLen }} / {{ j.crewSize }} crew
{{ j.kind }}
{{ j.code }}
{{ j.name }}
{{ j.client }} · {{ j.site }}
{{ j.dates }}
{{ j.dates }}
Manpower
{{ j.crewLen }} / {{ j.crewSize }}
Equipment
{{ j.equipLen }}
Material lines
{{ j.matLen }}
{{ j.matSummary }}
Text line · (931) 555-0100
{{ m.from }}
{{ m.photo }}
{{ m.text }}
Simulate an incoming text
Processing pipeline
{{ s.icon }}
{{ s.title }}
{{ s.detail }}
Waiting for an incoming photo.
Employees text a picture of any welding, rigging, or safety card — the office never types a date.
Employees text a picture of any welding, rigging, or safety card — the office never types a date.
{{ intakeResult.title }}
{{ f.k }}
{{ f.v }}
Recent intake: {{ intakeStats }}. Unmatched numbers are held in a review queue; nothing is written to a profile without a confident match on name + card type.
{{ modal.title }}