Standard Operating Procedures v2.0
Unlikely Professionals | Version 2.0 | March 2026 Prepared by Dustin Thacker, Assoc. AIA inspections@unlikely.pro | 202.873.5555
1. Overview
Unlikely Professionals (formerly blackhouse. LLC) provides third-party structural engineering inspections and certifications for foundation repair contractors. We certify foundation stabilization, structural repair, water management, and encapsulation work across 17 eastern US states, with primary operations in Maryland, Virginia, and Connecticut.
This SOP covers the end-to-end workflow from project intake through certification delivery and invoicing, as managed through the Entirely portal (entirely.it.com).
Certifying Professionals
| Certifier | Credential | Jurisdictions |
|---|---|---|
| Charles Diehl, AIA | MD Architect #21027 (Approval ID: B2022-103) | Anne Arundel County MD, Montgomery County MD |
| John C. Valerio, PE | MD PE #16657 / VA PE #044764 / CT PE #15080 | All other MD, all VA, all CT |
Core Tech Stack
| System | Role |
|---|---|
| Entirely Portal | Operations hub — intake, scheduling, workbench, review, delivery (entirely.it.com) |
| Supabase | Primary data store (sole source of truth for all reads and writes) |
| Local Filesystem | File storage (/data/projects/{record_id}/) |
| Stripe | Invoice creation and payment tracking |
| Gmail | Cert/invoice delivery and client communication |
| Friday AI | Portal AI assistant — analysis, notes, chat context, voice info |
| Claude AI | Certification package generation and workflow automation |
| WhatsApp (Kulu) | Field team daily schedule delivery, AI agent for field ops |
Pipeline Status Flow
Intake → Scheduled → In Progress → Field Complete → Ready for Cert → Certified → Invoiced → Closed
Parallel tracks:
- Cert Status: Not Started → Draft → Approved
- Invoice Status: Not Invoiced → Sent → Paid
- Flags: on_hold, cancelled, needs_return_visit
2. Project Intake
New projects enter through the Entirely Intake Wizard or via email/chat from contractors. The portal auto-enriches submissions with geocoding, jurisdiction lookup, certifier routing, forms detection, and timeline estimation.
| Step | Action | System | Notes |
|---|---|---|---|
| 2.1 | Receive request from contractor with site address, permit number, property owner, and scope of work | Email / Chat / Portal Intake | Client-initiated or scheduler-submitted |
| 2.2 | Submit through Intake Wizard (or create manually) | Entirely Portal | Auto-enrichment: geocoding, jurisdiction, certifier, forms, timeline |
| 2.3 | Duplicate detection runs automatically | Auto | Fuzzy address match against existing projects |
| 2.4 | Create project record with all intake fields populated | Supabase | Status → Intake. Uses supabase_write_service.create_project() |
| 2.5 | Create project folder and upload any permits/plans received | /data/projects/ | Folder: {record_id}/PERMITS/, /PLANS/ |
| 2.6 | Build SOW lines from products requested — one line per product per project | Supabase | Auto-include dependencies (e.g., push piers → backfill, WTR/ENC → parent service) |
| 2.7 | Parse uploaded permits/plans — extract dates, numbers, jurisdiction forms | Auto | Parse-on-upload via document parser |
| 2.8 | Set status to “Scheduled” once date confirmed with client | Supabase | Triggers scheduling phase |
3. Scheduling
Scheduling is managed through the Entirely portal’s Day View (24-hour timeline) and Calendar (month view). Schedulers and assistants manage appointments through the portal — Google Calendar is not connected.
| Step | Action | System | Notes |
|---|---|---|---|
| 3.1 | Client provides preferred inspection date and time | Email / Chat / Portal | Client-driven scheduling |
| 3.2 | Scheduler checks availability via Day View or Calendar | Entirely Portal | 24-hour timeline with hourly gridlines |
| 3.3 | If <24hr notice: flag as rush job, require internal approval | Entirely Portal | Emergency service fee auto-attached |
| 3.4 | Create site visit record linked to project | Supabase | Captures date, time, tech assignment, access instructions |
| 3.5 | Update project status → “Scheduled” | Supabase | Visible on portal Calendar with status/branch coloring |
| 3.6 | Confirm appointment with client via email | Gmail | Include address, date/time, scope |
| 3.7 | Daily schedule auto-delivered to field tech at 6:00 AM ET | WhatsApp (auto) | Next-day appointments with addresses and scope summaries |
4. Field Inspection
The field technician conducts the on-site inspection. Photos and field data are uploaded to the local filesystem via the portal. The Kulu AI agent (WhatsApp) supports the field tech with schedule info, project context, and data submission.
| Step | Action | System | Notes |
|---|---|---|---|
| 4.1 | Tech receives daily schedule via WhatsApp at 6:00 AM | WhatsApp (auto) | Address, scope, contacts for each site |
| 4.2 | Tech arrives on site; checks in and confirms scope with crew | On-site | If unable to inspect: flag as “unable to inspect” with reason |
| 4.3 | Inspect each installed product against the permitted scope and SOW lines | On-site | Note any as-built variances from permit |
| 4.4 | Capture field photos of all inspected products and site conditions | Camera / Phone | Overview + close-up per product |
| 4.5 | Complete driving logs for pier installations | Paper / Phone | Pier location, depth, PSI, extensions, final load |
| 4.6 | Record field technician notes: observations, discrepancies, crew info | WhatsApp / Portal | Captured in project notes |
| 4.7 | Upload photos and field logs to project folder | /data/projects/ | Auto-optimized: 2400px long edge, 85% JPEG, EXIF rotation |
| 4.8 | If work is incomplete, request additional visit — do not mark complete | Portal | Multi-visit loop: reschedule for remaining items |
| 4.9 | Update status → “Field Complete” once all documentation submitted | Supabase | Triggers auto-validation |
5. Auto-Validation & RFI
When a project reaches “Field Complete,” the auto-validation service runs a 10-point checklist. If all checks pass, the project auto-advances to “Ready for Cert.” If gaps are found, an RFI is created automatically.
| Step | Action | System | Notes |
|---|---|---|---|
| 5.1 | Auto-validation runs 10-point checklist on Field Complete projects | Auto | Photos, SOW lines, driving logs, permit data, notes |
| 5.2 | If all checks pass: auto-advance to “Ready for Cert” | Auto | No human intervention needed |
| 5.3 | If gaps found: create RFI specifying exactly what’s missing | Auto / Portal | RFI visible in portal, notification sent |
| 5.4 | RFI escalation chain: scheduler → office mgr → GM | Auto | 6hr → 24hr → 48hr → 72hr hold |
| 5.5 | Contractor provides missing deliverables | Email / WhatsApp | Uploaded to project folder |
| 5.6 | Resolve RFI and re-run validation | Portal | Project advances when all RFIs resolved |
Pipeline Shepherd (Daily Scan)
The Pipeline Shepherd runs daily at 7:45 AM ET and scans all active projects for stuck items:
- Projects stalled >45 days trigger triage alerts
- Auto-sends WhatsApp reminders for missing deliverables
- Auto-validates eligible Field Complete projects
- Generates notifications for projects needing attention
6. Certification
Core deliverable. AI generates the certification package. Confidence-based routing determines whether the cert goes directly to the client or queues for owner review.
Certifier Selection Logic
- MD Anne Arundel + Montgomery → Charles Diehl, AIA
- All other MD, all VA, all CT → John C. Valerio, PE
- Selection is automatic based on jurisdiction
Confidence Routing
- Send Direct: Project total ≤$5K AND no proprietary-form county → cert routes directly to client after generation
- Queue for Review: Project total >$5K OR proprietary-form county (Anne Arundel, Montgomery, Fairfax, Arlington, Stamford) → queues in Owner Review for manual approval
- Owner can always override: approve, request revision, or send direct from the review queue
Brand Rules
- Inspection date before 2026-01-28 → blackhouse. LLC brand
- Inspection date on/after 2026-01-28 → Unlikely Professionals brand
- Brand based on inspection date, not certification date
| Step | Action | System | Notes |
|---|---|---|---|
| 6.1 | Run pre-certification validation: confirm all SOW lines have inspection data and photos | Auto | Cannot proceed if gaps exist |
| 6.2 | Resolve scope: compare permitted quantities vs. as-built (actual installed) | Auto | Cert covers what was actually inspected |
| 6.3 | Determine brand and certifier based on inspection date and jurisdiction | Auto | Automatic routing |
| 6.4 | Generate certification package: cert document, photo sheets, driving logs, county forms | Claude AI | WeasyPrint + Jinja2 templates |
| 6.5 | Confidence routing evaluates guardrails | Auto | ≤$5K + no forms county → send direct; otherwise → owner review |
| 6.6 | If queued: owner reviews in Owner Review page or Admin reviews in Workbench | Entirely Portal | 4-column Kanban: Not Started → Draft → Approved → Sent |
| 6.7 | Approve, request revision, or send direct | Entirely Portal | Revision creates new version (v1.1+) |
| 6.8 | Upload approved cert PDF to project folder | Auto | /data/projects/{id}/CERTS/ |
| 6.9 | Create cert package record with version metadata | Supabase | Version v1.0 = original, v1.1+ = revisions |
| 6.10 | Update cert status → “Approved” | Supabase | Triggers delivery |
7. Invoicing
Runs in parallel with certification — does not wait for cert completion. Invoice generation follows the same confidence-based routing as certification.
| Step | Action | System | Notes |
|---|---|---|---|
| 7.1 | Look up Stripe Customer ID from the project’s linked Account | Supabase → Stripe | Each Account has a Stripe Customer ID |
| 7.2 | Check for existing invoice | Supabase | Don’t duplicate if Stripe Invoice ID exists |
| 7.3 | Build invoice line items from SOW lines: one line per product inspected | Stripe API | Metadata includes record IDs for traceability |
| 7.4 | Add production day charges and admin fees (trip charges, no-show fees) | Stripe API | Auto-calculated from event flags |
| 7.5 | Add custom fields: Permit Number, Property Address, Property Owner | Stripe API | Appears on invoice PDF for client reference |
| 7.6 | Confidence routing: send direct or queue for review | Auto | Same guardrails as cert routing |
| 7.7 | If queued: review in Workbench or Owner Review | Entirely Portal | Approve and send |
| 7.8 | Invoice sent via Stripe to client | Stripe | Stripe emails client directly |
| 7.9 | Invoice PDF auto-uploads to project folder | Auto | /data/projects/{id}/INVOICES/ |
| 7.10 | Update invoice status | Supabase | Not Invoiced → Sent → Paid |
8. Delivery
Certification and invoice delivery are triggered from the portal. Email is sent from dustin@unlikely.pro to the account’s default deliverables email addresses.
| Step | Action | System | Notes |
|---|---|---|---|
| 8.1 | Cert delivery triggered when cert status set to Approved | Auto | Email with cert PDF attached |
| 8.2 | Email sent to Account’s default deliverables email(s) | Gmail | Subject: Certification Package - {Address} - Permit #{Number} |
| 8.3 | Delivery logged in Delivery Ledger | Supabase | Audit trail of all sends with timestamp and recipient |
| 8.4 | Update project status → “Certified” | Supabase | Status depends on invoice state |
| 8.5 | If revision requested: generate new version (v1.1+), re-upload, re-deliver | Claude AI | Version history maintained in cert packages |
| 8.6 | Payment receipt auto-updates invoice status → Paid | Auto | Stripe webhook triggers update |
| 8.7 | Project status → “Invoiced” then “Closed” when both cert and payment complete | Supabase | Terminal state |
9. Payment Reconciliation
The portal includes a Smart Reconciliation system for matching payments to invoices.
| Step | Action | System | Notes |
|---|---|---|---|
| 9.1 | Payments received via Stripe webhook auto-match to invoices | Auto | High-confidence matches close automatically |
| 9.2 | Remittance files (CSV/PDF) uploaded via AP Portal or portal recon page | Entirely Portal | Parser extracts invoice numbers and amounts |
| 9.3 | 3-tier confidence matching: exact → fuzzy → manual | Auto | Auto-close for exact matches |
| 9.4 | Pending matches queued for review | Entirely Portal | Owner reviews in Smart Recon page |
| 9.5 | Reconciliation scanner runs on cron for catchup matching | Auto | Catches payments that arrived without webhook |
| 9.6 | Invoice status updated: Sent → Paid | Supabase | Project advances toward Closed |
10. Edge Cases & Special Handling
Rush / Emergency Jobs (<24hr Notice)
Jobs within 24 hours require internal approval via the portal. Emergency service fee auto-attaches during invoicing. No manual fee calculation needed.
Unable to Inspect / No-Show
Tech arrives but can’t complete (work not ready, access denied, safety). Flag triggers admin/trip charge fee on invoice. Project stays open for rescheduling.
Multi-Visit Projects
Each visit is a separate site visit record linked to the same project. Cert not generated until all SOW lines inspected across all visits. Invoice covers all visits as a single billing unit.
County-Specific Forms (Auto-Appended)
- Anne Arundel County, MD: Forms 210 (Footing), 215 (Backfill), 240
- Montgomery County, MD: Checklist
- Prince William County, VA: Building Inspection form
- Fairfax County, VA: Building + Foundation + Retaining Wall forms
- Arlington County, VA: Final Report of Special Inspections (SSI)
- Stamford, CT: Code Statement + Final SSI
These forms are auto-detected during intake enrichment and auto-appended during cert generation based on jurisdiction and scope.
Permit Expiration Monitoring
T−30 days: warning flag raised. If no exemption set within 24hrs of expiration, escalate to client.
Triage Pipeline
Projects stale >45 days or without assignment enter the Triage Pipeline — a separate 5-column Kanban (Intake → Scheduled → Field Complete → Certification → Closed) managed by the Triage role. Includes intake enrichment, resolution tracking, and archive for >90-day closed projects.
11. Portal Roles
| Role | Default Page | Access Level |
|---|---|---|
| Owner | Command Center | Full access — pipeline, review queue, analytics, Friday AI, reconciliation, audit |
| Admin | Workbench | Cert/invoice queue (4-column Kanban), confidence routing, RFI resolution |
| Scheduler | Day View | 24-hour timeline, calendar, intake wizard, schedule change management |
| Scheduler Assistant | Calendar | Calendar view, project list, schedule change requests |
| General Operations (GOA) | Branch Dashboard | Branch-scoped metrics, needs-attention alerts, team coordination |
| Triage | Triage Pipeline | Stale project investigation, intake, resolution tracking |
| AP (self-service) | AP Portal | Invoice lookup, remittance upload, payment history |
| Field Inspector | WhatsApp + Kulu | Daily schedule at 6 AM, AI agent for field queries (no portal login) |
12. Status Reference
Project Status Flow
Intake → Scheduled → In Progress → Field Complete → Ready for Cert → Certified → Invoiced → Closed
Boolean flags: on_hold, cancelled, needs_return_visit
Cert Status
Not Started → Draft → Approved
Invoice Status
Not Invoiced → Sent → Paid
Confidence Routing Outcomes
Send Direct — low risk, auto-delivered
Queue for Review — guardrails triggered, owner/admin approval required
Revision Requested — sent back for corrections