Platform Architecture · Build Specification · v1.0

SiteCap
Architecture.

SiteCap is an AI-native construction super app built on Pulse AI — combining the four workflows every mid-market GC actually uses (RFIs, submittals, change orders, daily logs) with real-time budget management, live bid management, and native LiDAR reality capture using the iPhone’s built-in LiDAR sensor. Seven modules. One platform. Built to replace Procore for every contractor doing $5M–$150M in annual volume.

TFSF Ventures FZ-LLC License 47013955
RAKEZ · Ras Al Khaimah · UAE
support@tfsfventures.com
──────────────────
Target Domain sitecap.io
──────────────────
Stack Pulse AI · React · TypeScript
Tailwind CSS · Vite · GitHub
Supabase (DB + Auth + Storage + Realtime)
Vercel (Hosting + Edge Functions)
Resend (Transactional Email + Inbound)
Stripe (Billing + Webhooks)
Anthropic API (AI Engine + Computer Use)
Playwright (Procore Migration Agent)
ARKit + RealityKit (LiDAR Capture)
model-viewer (WebXR 3D Render)
Puppeteer (PDF Generation)
──────────────────
Version 1.0 · March 2026
Build Kickoff: April 22, 2026
MVP Target: June 1, 2026
Confidential
01 Product Overview The super app thesis

SiteCap is a seven-module AI-native construction platform built to replace Procore for every mid-market GC doing $5M–$150M in annual volume. Four core workflows every contractor runs daily — RFIs, submittals, change orders, and daily logs — combined with budget management that updates in real time as bids and COs come in, on-platform bid management, and native LiDAR reality capture using the iPhone’s built-in sensor. Seven modules. One platform. Published flat pricing. No ACV calculation, no demo required to see a number.

Target Segment
$5M–$150M
Annual construction volume. General contractors and specialty contractors being overcharged or underserved by Procore.
Modules at Launch
7
RFI, Submittal, Change Orders, Daily Logs, Budget Management, Bid Management, Reality Capture. One integrated platform.
Pulse AI Agents
24
24 purpose-built agents across 5 pillars: platform intelligence, research, sales, conversion, and retention. Acquisition swarm runs from Week 6 of the build.
Build Window
10–12
6 weeks on Pulse AI from April 22 to June 1 MVP. Budget engine, bid module, LiDAR integration, Procore Migration Agent, and all 24 Pulse AI agents ship by launch.
The differentiation in one sentence: SiteCap is the only construction platform where a contractor can scan a room with their iPhone LiDAR, log a daily note by voice, receive a subcontractor bid, approve a change order, watch the budget update automatically, and close out an RFI — all without leaving the app or talking to a sales rep to get a price.
vs. Procore
7 modules for $399/mo avg
Procore charges $76K–$150K/year for enterprise software most contractors use for 4 features. SiteCap delivers 7 focused modules at $399/mo average. Published pricing. No custom quote.
vs. Third-Party Scan Tools
Scans linked to project data
Third-party scan tools give you 3D captures with no connection to RFIs, submittals, or change orders. SiteCap links every scan to the live project record — photos become documentation, not archives.
vs. Spreadsheet Budgets
Live budget, not static sheet
Every approved CO, every bid award, every scope change hits the budget in real time. No manual reconciliation. No end-of-month surprise. The budget is always current because the platform updates it automatically.
02 Module Architecture Seven integrated modules

Each module is a standalone workflow that also feeds data into every other module. An RFI resolved by a sub generates a potential change order. A change order approved updates the budget instantly. A budget line item triggers a bid request. A bid award closes that budget line. A daily log photo can be linked to a LiDAR scan of the same area. The modules are designed to talk to each other — not operate in silos.

📋
01 — RFI ENGINE
Create, route, track, and close. Architects and engineers reply from email — no login required. Pulse AI auto-drafts from field photos in 15 seconds. Overdue RFIs trigger automatic escalation sequences.
📁
02 — SUBMITTAL TRACKER
Upload spec book → submittal log generated in 60 seconds. Distribute, track review, mark approved/rejected. Full audit trail with timestamped actions for every reviewer in the chain.
🔄
03 — CHANGE ORDERS
Create from RFI, bid, or field event. Price it. Send for approval. Budget updates the instant it's signed. Change order patterns flagged by Pulse AI before they become budget problems.
📝
04 — DAILY LOGS
Voice or text in 30 seconds. AI generates formatted, timestamped daily log. Photos auto-tag to cost code and scan location. Crew can log from the field without opening a laptop.
💰
05 — BUDGET MANAGEMENT
Original budget entry by cost code. Every CO, bid award, and scope change updates it automatically. Budget vs. actual dashboard always current. Cost-to-complete projections updated in real time.
🏷️
06 — BID MANAGEMENT
Invite subs to bid on scoped packages. Receive, compare, and award bids on platform. Bid award auto-creates contract, purchase order, and budget line update. No email chains, no spreadsheet comparisons.
📐
07 — REALITY CAPTURE
iPhone LiDAR scans embedded in the project record. Scan locations linked to RFIs, daily logs, change orders. Progress documentation immutable and timestamped. Visual punch list generation from scan deltas.
Cross-Module Data Flow
  • RFI → Change Order
    Any RFI that results in a scope change can spawn a CO with one click. Pre-populated from the RFI data — no re-entry.
  • Change Order → Budget
    Every approved CO hits the budget ledger automatically. Owner-approved COs update the contract value. Internal COs update cost-to-complete.
  • Bid Award → Budget + PO
    Awarding a bid closes the budget line, generates a purchase order, and creates a subcontractor record — all in one action.
  • Scan → RFI / Daily Log
    LiDAR scan points can be linked to open RFIs or included in daily log entries. Field crew taps a scan location to attach documentation.
  • Budget Alert → Bid Request
    When a budget line is at risk (Pulse AI flags cost overrun trajectory), the platform can auto-generate a bid request for re-scoping that package.
  • Daily Log → Progress Scan Delta
    Daily log entries tied to scan locations create a visual progress timeline — what was documented vs. what was captured in the scan.
03 RFI Engine Module 01 · Core workflow

The most-used feature in every construction project. SiteCap's RFI engine is built around two principles: zero friction for the responder (architects and engineers reply from email — no account required) and AI-assisted drafting (upload a field photo, get a complete RFI draft in 15 seconds). Every RFI is logged, routed, tracked, and closed with a full audit trail.

Creation Workflow
  • Manual creation
    Title, description, spec section reference, drawing reference, discipline, priority, due date, and assignee. All fields pre-validated on save.
  • Photo-to-RFI (Pulse AI)
    Field crew uploads a photo of the issue. Pulse AI identifies the spec section, drafts a description, suggests discipline routing, and proposes a due date based on project schedule. PM reviews and sends.
  • Spawn from Change Order
    A CO can generate an RFI to the design team requesting clarification before pricing. Pre-populated from the CO record.
  • Spawn from LiDAR scan
    Tap a location in a 3D scan to open a new RFI pre-tagged with that scan location, floor, and area. Photo from scan auto-attached.
Routing & Response
  • Email-native response
    Architect, engineer, or owner receives a formatted email with the RFI details. They reply in plain email — response is captured automatically. No login, no portal, no friction.
  • Multi-party routing
    Route to primary reviewer plus CC list. Responses from all parties tracked individually. Final disposition logged against the original RFI.
  • Overdue escalation
    Pulse AI sends reminder sequences at 24h before due, on due date, and 24h overdue. PM notified if no response after 48h past due.
  • Closeout and audit trail
    PM marks RFI closed with disposition (approved, approved as noted, revise and resubmit, rejected). Full history immutable and exportable as PDF.
Pulse AI Draft Speed
15 seconds
Photo upload to complete RFI draft. Spec section identification, issue description, and routing suggestion all AI-generated. PM reviews and sends.
Responder Friction
Zero logins
Architects and engineers reply from their existing email client. No portal account, no password, no training required for external parties.
RFI-to-CO Pipeline
One click
Any RFI disposition that results in scope change spawns a pre-populated CO. No re-entry of description, drawing ref, or spec section.
Complete RFI Data Model — Every Field Pulse AI Must Build
FieldTypeRequiredDescription / Validation
RFI NumberAuto-assignedIntegerAutoSequential per project. Format: RFI-001, RFI-002. Cannot be edited. Displayed on all exports.
TitleStringRequiredMax 120 characters. Plain text. Shown in email subject line: "RFI-{n}: {title} — {project name}".
DescriptionTextRequiredRich text. Min 20 characters. AI-drafted from photo upload. PM edits before send. Included in full in the routing email.
Spec SectionStringRecommendedCSI MasterFormat section reference (e.g., "03 30 00 Cast-in-Place Concrete"). AI suggests from description. Free-text entry also supported.
Drawing ReferenceStringOptionalDrawing sheet number and detail reference (e.g., "S-201, Detail 4"). Free text.
DisciplineEnumRequiredValues: Architectural, Structural, Mechanical, Electrical, Plumbing, Civil, Landscape, Other. Routes to the correct reviewer by default.
PriorityEnumRequiredValues: Standard (7 business days), Urgent (3 business days), Critical (24 hours). Displayed on email with color coding. Affects Pulse AI escalation timing.
Assignee (Primary)EmailRequiredPrimary reviewer email. Receives the routing email. Must provide disposition to close. Can be internal or external — no account required for external.
CC ListEmail[]OptionalAdditional recipients who receive the routing email for visibility. Responses from CC list are captured and logged but do not constitute a disposition.
Due DateDateRequiredCalculated automatically from Priority (Standard = today + 7 bd, Urgent = today + 3 bd, Critical = today + 1 bd). PM can override. Displayed prominently in routing email.
AttachmentsFile[]OptionalPhotos, PDFs, drawings. Stored in Supabase Storage. Max 25MB per file, max 10 files per RFI. Thumbnails displayed in UI. Included as attachments in routing email.
Scan TagUUIDOptionalReference to a scan_tags record. Links this RFI to a specific 3D location in a LiDAR scan. Shown as a map pin in the scan viewer when viewing this RFI.
StatusEnumAutoValues: Draft, Open (sent), Under Review, Overdue, Closed. Status transitions: Draft → Open on send. Open → Under Review on any response received. → Overdue automatically after due date. → Closed on PM disposition.
DispositionEnumOn closeValues: Approved, Approved as Noted, Revise and Resubmit, Rejected, For Information Only. Set by PM on closeout. Stored with timestamp and PM user ID.
CO SpawnedBoolean + UUIDAutoTrue if a change order was spawned from this RFI. Stores the CO UUID. Displayed on the RFI record as a linked CO badge. PM can spawn CO from any open or closed RFI.
Email Routing Template — What the Architect Receives
Subject: RFI-{n}: {title} — {project name} [Due: {due_date}]

Body structure:
1. Header — project name, RFI number, priority badge (color-coded)
2. RFI description — full text from the RFI record
3. Spec section and drawing reference if provided
4. Attachments as inline images (photos) + download links (PDFs)
5. LiDAR scan location link if scan tag is attached
6. Due date — prominent, bold, red if urgent/critical
7. Response instruction — plain English: "Reply to this email with your response"
8. Footer — project address, GC company name, SiteCap branding
Response Capture — How Email Replies Are Processed
  • Resend inbound webhook
    Resend captures inbound reply to the unique per-RFI reply-to address. Webhook fires to Vercel edge function on receipt. Response body parsed and stored in rfi_responses table within seconds.
  • Unique reply-to per RFI
    Each routing email uses a unique reply-to address: rfi-{uuid}@reply.sitecap.io. This routes responses to the correct RFI record without any login or portal interaction from the respondent.
  • Attachments in replies captured
    If the architect attaches a redlined drawing or supplemental sketch to their email reply, the attachment is captured and stored in Supabase Storage linked to the RFI response record.
  • PM notification on response
    PM receives a push notification and email summary when any response is received. Notification includes the responder name, first 200 characters of response, and a deep link to the RFI record in the app.
04 Submittal Tracker Module 02 · Document control

Submittal management is the second-most-used Procore feature — and the most painful to migrate off of because of the document volume. SiteCap's approach: upload the spec book, generate the submittal log in 60 seconds, then manage the full distribute-review-approve cycle with the same email-native routing as RFIs.

Workflow Stage Description Pulse AI Role
Spec Book UploadLog generation PM uploads the project spec book (PDF). Pulse AI parses each section, identifies submittable items, and generates a complete submittal log with section references, submittal types, and initial due dates based on the project schedule. 60 secSpec book → full submittal log
Submittal CreationManual or AI-generated Each submittal item is a record with spec section, description, required copies, action required, and assignee. Created from the log or manually. Shop drawings, product data, and samples each have type-specific fields. Auto-tagSpec section + submittal type AI-identified
DistributionEmail-native Submittals distributed to architect/engineer via email with document attached. Reviewer receives a structured email with action required, due date, and one-click response options (Approved / Approved as Noted / Revise and Resubmit / Rejected). Zero loginReviewer responds from email
Review TrackingLive status PM sees real-time status of every submittal: submitted, under review, overdue, returned, approved. Overdue items trigger reminder sequences. Returned submittals automatically generate a resubmittal record linked to the original. EscalationOverdue reminders at 24h / 48h / 72h
Closeout PackageExport At project completion, generate a full submittal closeout package: all approved submittals, review history, and audit trail. PDF export for owner turnover or archival. One click. Auto-compileFull closeout package in one action
05 Change Order Management Module 03 · Budget-integrated

Change orders are the financial heart of every construction project — and the source of most disputes. SiteCap tracks every CO from inception through approval and links each one directly to the project budget. Approved COs update the budget instantly. Pulse AI flags CO patterns that suggest scope creep before they compound.

CO Lifecycle
  • CO creation — four paths
    1) Manual from PM. 2) Spawned from RFI disposition. 3) Spawned from bid variance (bid comes in over budget). 4) Spawned from Pulse AI pattern detection (multiple RFIs on same spec section flagged as potential CO).
  • Internal pricing workflow
    PM prices the CO with line items, labor rates, materials, and margin. Internal approval required before sending to owner. Audit trail on every edit.
  • Owner approval — email or in-app
    Owner receives CO via email with scope description, pricing, and approval links. Can approve, reject, or request revision without logging into the platform.
  • Budget update on approval
    Approved CO immediately updates the project budget: contract value (owner-facing) and cost-to-complete (internal). Zero manual reconciliation required.
CO Intelligence (Pulse AI)
  • Pattern detection
    Pulse AI monitors RFI volume by spec section and discipline. When a section generates more than 3 RFIs in 14 days, it flags a potential scope issue and suggests a CO before the PM has to figure it out manually.
  • Bid variance alerts
    When a subcontractor bid exceeds the budget line by more than 10%, Pulse AI flags it, calculates the CO impact on the project total, and surfaces it for the PM before the bid is awarded.
  • CO risk scoring
    Each open CO is scored for approval likelihood based on project type, owner history, and CO description. Low-likelihood COs are flagged so PMs can resolve them proactively before they age into disputes.
  • Monthly CO report
    Pulse AI generates a monthly CO summary: total approved value, total pending, total rejected, average approval time. Delivered to PM inbox automatically.
06 Daily Logs Module 04 · Field-first

Daily logs are the legal record of the project. Most PMs and superintendents spend 15–30 minutes per day writing them — or don't write them at all, which creates liability exposure. SiteCap reduces that to 30 seconds through voice-to-log on mobile, with Pulse AI generating the formatted entry from a spoken or typed note.

Log Entry Methods
  • Voice input (mobile)
    Superintendent speaks a 30–60 second summary of the day. Pulse AI converts to formatted daily log: crew count, weather, work completed, delays, visitors, safety observations. Reviewed and approved by PM before submission.
  • Photo-first entry
    Upload photos from the field. Pulse AI generates a log entry from the photos, tagging each photo to the cost code and area where it was taken. Field crew adds notes to each photo.
  • Scan-linked entry
    Tap a LiDAR scan location on the mobile app and create a daily log entry linked to that exact location. Photo and voice note both attached to the scan point.
  • Structured form (desktop)
    Full structured form for PM completion: crew by trade, equipment on site, work in place by cost code, material deliveries, inspections, weather, delays. Standard construction daily log format.
Log Data & Output
  • Automatic field capture
    Weather auto-pulled from location data. Date, time, and crew count pre-populated. Superintendent only needs to describe what happened — the platform fills in the rest.
  • Timestamped and immutable
    Once submitted, daily log entries cannot be edited. Corrections are added as amendments to the original. Full timestamp and submitter identity logged for legal defensibility.
  • Delay documentation
    Delays flagged in a daily log automatically generate a notification to the PM for review as a potential CO or schedule impact. Creates the documentation trail for delay claims.
  • PDF export and owner sharing
    Daily logs exportable as formatted PDFs. Owner sharing can be configured — specific logs or all logs auto-shared with the owner's email on submission.
07 Budget Management Module 05 · Live financial control

The budget module is the financial spine of the project — and the financial spine of every project. It starts with the original estimate, is structured by cost code, and updates automatically as bids are awarded, change orders are approved, and actual costs come in. The goal is a budget that is always current without any manual reconciliation.

Budget Architecture
Layer Description Auto-Update Trigger
Original BudgetLocked on approval PM enters the original budget by cost code (CSI MasterFormat or custom codes). Once owner-approved and locked, the original budget is immutable — all changes are tracked as variances against it. Budget can be imported from CSV or entered line by line. Manual entryLocked on PM approval
Revised BudgetLive contract value Original budget plus all approved change orders (owner-facing). This is the current contract value. Updates instantly when a CO is approved. Separate from cost-to-complete — this is what the owner owes, not what it will cost. CO approvalInstant on owner sign-off
Projected CostCost-to-complete Actual costs incurred + estimated cost to complete for each budget line. Updated by bid awards, purchase orders, and manual actual cost entries. Pulse AI projects cost-to-complete for open budget lines based on bid activity and historical patterns. Bid award / PO+ manual actual entries
Variance TrackingBudget vs. projected Every budget line shows: original, revised, projected, actual-to-date, and variance. Red/yellow/green coded. Lines over 10% variance flagged. Budget summary dashboard shows project-level exposure at a glance. Real-timeDashboard always current
Draw ScheduleOwner billing Schedule of values by cost code for monthly owner billing. AIA G702/G703 format generation. Percentage-complete tracking per line item. Retainage calculation and tracking. Applications for payment exportable as PDF or sent directly to owner from the platform. PM inputMonthly billing cycle
Budget Import
CSV / manual
Import original budget from Excel/CSV with cost code mapping. Or enter line by line. CSI MasterFormat divisions supported natively. Custom code structures supported.
Live Update Sources
4 auto-triggers
Budget updates automatically on: (1) CO approval, (2) bid award, (3) PO creation, (4) actual cost entry. No manual reconciliation needed for any of these events.
Pulse AI Forecasting
Cost-to-complete
Pulse AI projects final cost for each open budget line using bid activity, historical data, and percentage complete. Flags lines trending over budget 30 days before they breach.
Budget integrity rule: The original budget is locked and immutable once PM-approved. All changes are tracked as variances. This creates a clean audit trail for any owner dispute and makes the budget a legal document, not a working spreadsheet. PMs who need to "adjust" the original budget must create a formal budget amendment with a reason code — this is logged and never hidden.
Budget Line Data Model — Every Field Pulse AI Must Build
FieldTypeUpdate TriggerDescription
Cost CodePrimary key per lineStringManual entryCSI MasterFormat division code or custom code. Examples: "03 30 00" (Concrete), "05 10 00" (Steel), "DIV-16" (Electrical). Used as the join key between budget, bids, and COs.
DescriptionStringManual entryHuman-readable description of the scope covered by this budget line. E.g. "Cast-in-Place Concrete — All Structural Slabs". Max 200 characters.
Original BudgetLocked on PM approvalDecimalManual entry only
Immutable after lock
The original estimated cost for this scope. Set at project initiation. Immutable once the project budget is locked by PM. Never changes — all future changes are recorded as variances against this value.
Approved COsOwner-signed COs onlyDecimalCO approval eventSum of all owner-approved change order amounts that impact this cost code. Updated instantly when a CO is marked approved. Revised Budget = Original + Approved COs.
Revised BudgetCurrent contract valueComputedAuto (CO approval)= Original Budget + Approved COs. This is what the owner has agreed to pay for this scope. Displayed on the owner-facing budget summary. Never manually editable.
Awarded ContractBid award valueDecimalBid award eventThe amount awarded to the winning subcontractor for this scope. Set when a bid is awarded in the Bid Management module. May differ from Original Budget — variance is flagged and must be reviewed.
Actual Cost to DateDecimalManual entry / POCosts actually invoiced and approved against this line to date. Updated by PM manually or via purchase order records. Used in cost-to-complete calculation and draw schedule.
Projected Final CostPulse AI estimateComputedPulse AI / manual= Actual Cost to Date + Estimated Cost to Complete. Pulse AI calculates cost-to-complete from awarded contract, percentage complete, and pending COs. PM can override. Compared to Revised Budget to calculate variance.
VarianceComputedAuto (real-time)= Revised Budget − Projected Final Cost. Positive = under budget. Negative = over budget. Color coded: green (>0), yellow (0 to −10%), red (<−10%). Dashboard filters by worst variance lines.
% CompleteDecimal 0–100Manual entryPM-entered percentage of this scope complete as of the most recent site observation. Used in draw schedule (Schedule of Values), cost-to-complete calculation, and AIA G702 generation.
Draw Amount (current)ComputedAuto (% complete)= (% Complete / 100) × Revised Budget − Previously Billed. The amount to bill the owner for this line in the current Application for Payment. Included in the AIA G702/G703 export.
Retainage %DecimalProject-level settingRetainage percentage withheld from each draw (typically 5–10%). Set at project level, can be overridden per line. Retainage balance tracked separately and released on substantial completion per contract terms.
Budget Dashboard — Required Views
  • Project summary bar
    Top of every project: Original Budget total / Approved COs total / Revised Budget total / Projected Final Cost / Overall Variance. Color-coded status indicator (green/yellow/red).
  • Line-item table
    All budget lines with all columns visible. Sortable by any column. Filterable by cost code, variance status (over/under/at budget), and discipline. Export to CSV and PDF.
  • Variance waterfall
    Visual waterfall chart showing the 10 worst-variance lines by dollar amount. Pulse AI flags lines where trajectory suggests they'll breach budget within 30 days.
  • CO impact log
    Chronological list of every approved CO and its dollar impact on each budget line. Running total of approved CO value vs. original budget. Owner-facing version available for sharing.
AIA G702 / G703 Generation — Build Requirements
  • G702 — Application for Payment
    Cover page with: project name/number, owner, architect, contractor, application number, period to, contract date. Dollar fields: original contract sum, net COs, adjusted contract sum, work completed to date, retainage, total earned less retainage, less previous certificates, current payment due. PM certifies and signs.
  • G703 — Continuation Sheet
    Line-by-line schedule of values: item number, description of work, scheduled value, work completed (previous / this period), materials stored, total completed + stored, % complete, balance to finish, retainage. All values pulled from budget_lines table. Each line = one cost code.
  • PDF generation
    Server-side PDF generation via Puppeteer or equivalent. Official AIA format reproduced exactly. PM reviews in-app before finalizing. Finalized application locked and stored in Supabase Storage. Sent to owner via Resend with one click.
  • Application numbering
    Sequential per project (Application No. 1, 2, 3…). Each application stores the period it covers, the date submitted, and the date certified by architect. Full history of all applications accessible from the project.
08 Bid Management Module 06 · On-platform bidding

Bid management closes the loop between the budget and the cost. GCs spend enormous time managing subcontractor bids through email chains, spreadsheets, and phone calls. SiteCap brings the entire bid process — invitation, document distribution, question and answer, bid receipt, comparison, and award — onto the platform. Bid award triggers an automatic budget update, PO generation, and subcontractor record creation.

Bid Package Creation
  • Scope of work definition
    PM defines the bid package: scope description, CSI division, drawings included, specifications included, bid form, and bond requirements. All documents attached from the project document library.
  • Sub invitation
    Invite from the platform's sub database or by email. Subs receive a formatted invitation with scope, due date, and secure document download link. No login required to download bid documents.
  • Bid Q&A
    Subs submit questions through a structured form (or email, captured automatically). All questions and answers are logged and distributed to all bidders simultaneously to ensure equal access to information. Becomes the RFI log for pre-bid clarifications.
  • Addenda management
    PM issues addenda through the platform. All invited subs notified immediately. Addenda acknowledgment tracked — unacknowledged addenda flagged before bid due date.
Bid Receipt & Award
  • Online bid submission
    Subs submit bids through a structured online form or by emailing a completed bid form. Bids received and logged with timestamp. All bids locked at the due date — no late submissions accepted without PM override.
  • Bid comparison table
    All received bids displayed in a side-by-side comparison table with line-item breakdown. Budget line shown alongside bids. Pulse AI highlights the lowest compliant bid and flags bids that appear incomplete or non-responsive.
  • Bid leveling
    PM can add leveling notes to each bid (inclusions, exclusions, clarifications, alternates). Leveled bids re-sorted by adjusted value. Leveling notes exported with the bid tabulation.
  • Award — one action, four outcomes
    Click Award: (1) Budget line closes and updates, (2) Purchase order generated, (3) Subcontractor record created with contract amount, (4) Non-awarded subs notified. All in one action.
Bid Storage
Supabase
All bid documents, bid forms, Q&A records, and award decisions stored in Supabase with full audit trail. Retrievable for years after project closeout.
Budget Integration
Instant on award
Bid award closes the budget line at the awarded amount. Variance vs. original budget automatically calculated and flagged if over 10%.
Sub Notifications
Resend
All sub communications via Resend — invitations, addenda, Q&A distributions, award notifications, and non-award notices. Full delivery tracking.
Pulse AI Role
Bid intelligence
Flags incomplete bids, identifies the lowest compliant bid, detects bids that appear materially unbalanced, and monitors sub response rates.
Complete Bid Data Model — Tables and Fields Pulse AI Must Build
bid_packages table
  • id, project_id, budget_line_id
    UUID primary key. Foreign keys to projects and budget_lines tables. One package can span multiple budget lines (stored as budget_line_ids array).
  • title, scope_description
    Package name (e.g., "Concrete Package — All Foundations") and full scope of work. Rich text. Distributed to all invited subs in the invitation email.
  • csi_division, documents[]
    CSI division for routing defaults. Array of Supabase Storage file references for all bid documents (drawings, specs, bid form template).
  • due_date, pre_bid_meeting
    Bid submission deadline. Optional pre-bid meeting date, time, and location — included in invitation email if set.
  • status
    Enum: Draft, Open (invitations sent), Closed (past due date), Awarded, Cancelled. Transitions enforced — cannot award a Draft package.
  • bond_required, insurance_required
    Boolean fields. If true, bid submission form includes bond amount field and insurance certificate upload requirement.
bids table + subcontractors table
  • bids: id, package_id, sub_id
    One bid record per subcontractor per package. Links to bid_packages and subcontractors. Locked on submission — cannot be edited by sub after due date without PM override.
  • bids: base_amount, line_items[]
    Total bid amount and optional line-item breakdown. Line items: description, quantity, unit, unit price, extension. Used for bid leveling in the comparison table.
  • bids: alternates[], exclusions, inclusions
    Alternates priced separately from base bid. Inclusions and exclusions as text — captured for leveling notes and bid tabulation export.
  • bids: awarded, awarded_at, award_notes
    Boolean award flag. Timestamp and PM user ID on award. Award notes for internal record. Non-awarded subs automatically notified via Resend when any bid in the package is awarded.
  • subcontractors: company, contact, email, phone, csi_divisions[], license_number
    Reusable sub database per GC account. CSI divisions indicate what packages to auto-invite them to. License number stored for compliance documentation.
  • bid_qa: id, package_id, question, asker_email, answer, distributed_at
    Q&A thread per package. Each question from any sub is answered by PM and distributed to ALL invited subs simultaneously. Becomes the pre-bid clarification record.
Bid Award — Four Simultaneous Actions (One Button)
  • 01
    Budget Line Update
    The budget_line record for the associated cost code is updated: awarded_contract = bid.base_amount. Variance is immediately calculated (Awarded Contract vs. Original Budget). If variance > 10%, a warning is shown to the PM before confirming the award but does not block it.
    UPDATE budget_lines SET awarded_contract = bid.base_amount WHERE id = package.budget_line_id
  • 02
    Purchase Order Generation
    A purchase order record is auto-created: PO number (sequential), sub company name, scope description from bid package, amount from bid, project reference, and budget line reference. PO exported as PDF and can be sent to sub via Resend. PM can edit PO terms before sending.
    INSERT INTO purchase_orders (project_id, sub_id, bid_id, amount, budget_line_id, status: 'pending_send')
  • 03
    Subcontractor Record Created
    If the sub is not already in the project's subcontractor list, a project_subcontractors record is created: sub company, contact, CSI division, contract amount. This feeds into the sub management view where PM tracks all subs on the project by trade, contract value, and percent complete.
    INSERT INTO project_subcontractors (project_id, sub_id, csi_division, contract_amount, status: 'under_contract')
  • 04
    Non-Award Notifications
    All other subs who submitted bids on this package are notified via Resend that the package has been awarded. Email subject: "{Package title} — Award Notification". Body: "Thank you for submitting. This package has been awarded. We appreciate your participation and look forward to future opportunities." No pricing disclosed to non-awarded subs.
    Resend batch send to all bids WHERE package_id = X AND awarded = false AND submitted_at IS NOT NULL
09 Reality Capture — Native LiDAR Module 07 · iPhone LiDAR · No third-party API

SiteCap’s reality capture module uses the LiDAR scanner built directly into iPhone Pro models (iPhone 12 Pro and newer). There is no third-party scan service, no external SDK, and no hardware purchase required. Every iPhone Pro contractor already owns the capture device. SiteCap accesses the LiDAR sensor through iOS device APIs, generates a 3D point cloud of the scanned space, and saves it directly into the project record — all within the SiteCap PWA.

Why this matters competitively: Dedicated 3D scan cameras require a $2,495–$3,595 purchase plus a monthly subscription. SiteCap requires an iPhone Pro the contractor already has in their pocket. Zero additional hardware cost. Zero third-party account. The LiDAR sensor in iPhone 12 Pro and newer has accuracy within 1% at typical construction distances — more than sufficient for RFI documentation, progress reporting, and punch list generation.
LiDAR Capture Workflow
  • Open camera in SiteCap mobile PWA
    Contractor opens the scan module from any project page. The app requests camera and LiDAR permissions on first use. iPhone’s ARKit framework initializes the LiDAR sensor and depth camera simultaneously.
  • Scan the room — guided capture
    On-screen guide instructs the contractor to slowly pan the iPhone around the space. ARKit builds the 3D point cloud in real time. Scan completion detected automatically when sufficient coverage is achieved. Typical room scan: 60–90 seconds.
  • Point cloud processed and saved
    Scan data processed on-device via ARKit. Point cloud compressed and uploaded to Supabase Storage. A navigable 3D thumbnail renders in the project record within seconds of upload. Scan is automatically timestamped, labeled with floor and area, and linked to the project.
  • Tag locations to project records
    Contractor taps any point in the 3D scan to place a tag. Tag links to: an RFI, a daily log entry, a change order, or a punch list item. Tags visible in both the scan viewer and the linked record. Scan becomes living project documentation.
Documentation Links — Scan to Record
  • RFI → scan location
    Every RFI can include a scan tag showing the exact 3D location of the issue. The architect’s routing email includes a rendered screenshot from the scan at that point. Eliminates the “where exactly?” back-and-forth that kills RFI response time.
  • Daily log → scan point
    Superintendent taps a scan location, speaks a 30-second note. Daily log entry is linked to that exact location — timestamped, spatially referenced, immutable. Voice note transcribed via Anthropic API and attached as text.
  • Punch list from scan delta
    Two scans of the same space compared. Pulse AI Scan Progress Agent identifies areas of change. PM taps changed areas to create punch list items linked to the exact 3D location. Punch list PDF exported with scan screenshots per item.
  • Owner progress sharing
    Owner given a read-only link to view the latest scan for their project — a 3D walkthrough of progress without stepping on site. Configurable per project. No owner account required.
Hardware Required
iPhone Pro
iPhone 12 Pro or newer. LiDAR sensor built in. No additional hardware purchase. No camera rental. No dedicated scan device. Every contractor already has it.
Third-Party API
Zero
No third-party scan service. No OAuth2 connection. No monthly scan subscription. LiDAR data stays entirely within SiteCap and Supabase.
Capture Time
60–90 sec
Typical room scan. Full floor: 10–15 minutes. Contractor scans during site walk — no separate scan session required. Scan uploads automatically on WiFi or LTE.
Framework
ARKit + RealityKit
Apple’s ARKit for LiDAR depth sensing and point cloud generation. RealityKit for 3D rendering in the scan viewer. All native iOS APIs — no third-party SDK.
LiDAR Integration — Technical Stack Capture: ARKit ARWorldTrackingConfiguration + LiDAR depth map
Processing: RealityKit on-device mesh generation from point cloud
Compression:USDZ format for 3D model · JPEG for scan screenshots
Upload: Supabase Storage /scan-captures/{project_id}/{scan_id}
Viewer: model-viewer web component (WebXR/WebGL) for browser 3D render
Tags: scan_tags table: {id, project_id, scan_id, x, y, z, linked_type, linked_id}
Delta: Pulse AI compares mesh snapshots between scans for progress detection
──────────────────────────────────────────────────────
Devices: iPhone 12 Pro+ · iPad Pro 2020+ (also has LiDAR)
Android: Phase 2 — Android depth API (Samsung S series, Pixel) planned post-MVP
Fallback: iPhone without LiDAR can still capture photos/video tagged to room — no 3D model
09b Procore Migration Agent Pulse AI · Headless browser · No Procore API required

The single biggest objection every Procore customer has when evaluating a switch is: “All our project data is in there.” SiteCap eliminates that objection with the Procore Migration Agent — a Pulse AI agent that logs into Procore with the contractor’s credentials, extracts all live project data across four layers, and imports it directly into SiteCap. No API key. No Procore cooperation. No manual export. The contractor provides their login. Pulse AI does the extraction. SiteCap is fully populated in approximately 20 minutes.

Why no API? Procore’s official API requires a developer app approval process taking weeks and is designed for enterprise integrations — not customer data portability. The Migration Agent bypasses this by using the same authenticated browser session a normal user would use. Pulse AI navigates the Procore UI, reads the rendered data, and structures it for SiteCap. This is the exact workflow a contractor would do manually — automated by Pulse AI at scale.
Extraction Layer 1 — RFIs and Submittal Log
  • RFI extraction — all statuses
    Pulse AI navigates to the RFI log in each active Procore project. Extracts: number, title, description, spec section, drawing reference, discipline, assigned reviewer, status, due date, all responses and reply text, and attached files. Creates matching RFI records in SiteCap with full history intact.
  • Submittal log extraction
    Reads the submittal log from each project. Extracts: submittal number, spec section, type, description, status, reviewer, due date, return date, and disposition. Resubmittals linked to originals. Full submittal history transferred to SiteCap’s tracker.
  • File attachment migration
    Attached PDFs, drawings, and photos on RFIs and submittals downloaded from Procore and re-uploaded to SiteCap’s Supabase Storage. Linked to the correct records. No document left behind — full attachment history migrates.
Extraction Layer 2 — Budget, Cost Codes, and SOV
  • Budget / Schedule of Values
    Reads the project budget or SOV from Procore. Extracts: cost code, description, original budget, approved CO adjustments, revised budget, actual costs to date, and percentage complete per line. Populates SiteCap budget_lines table with the complete cost structure from day one.
  • Change order history
    All approved COs extracted with number, description, amount, status, and budget line impact. Imported as approved COs in SiteCap — the revised budget immediately reflects all historical COs from Procore.
  • Prior Applications for Payment
    Past AIA G702/G703 applications imported with application number, period, amount billed, retainage, and certification status. SiteCap’s draw schedule starts from the correct billing position — not from zero.
Extraction Layer 3 — Bids, Subcontractors, and Daily Logs
  • Active bid packages
    Any open bid packages extracted: title, scope, invited bidders, received bids, and status. Migrated to SiteCap’s bid module so procurement continues without interruption during the switchover.
  • Subcontractor database
    All sub and vendor records: company, contact, email, phone, CSI divisions, contract amounts on active projects, payment status. Imported into SiteCap’s subcontractor database. Existing sub relationships preserved from day one.
  • Daily log history
    Daily logs for all active projects: date, crew count, weather, work description, delay notes, and photos. Imported as locked historical records — the complete daily log history comes over intact for claims defensibility.
Security Architecture — Credential Handling
  • Ephemeral credential session
    Procore credentials entered in an encrypted session. Never written to any database, log file, or storage system. Exist only in memory for the duration of the extraction. Session terminated immediately on completion.
  • Real-time progress notifications
    Contractor notified of extraction start, per-module progress, and completion in real time via push notification. Full audit log of what was extracted (not credentials) stored for the contractor’s records.
  • Rollback on failure
    If extraction fails mid-process (session timeout, Procore UI change, network issue), all partial imports roll back. SiteCap database remains clean. Contractor notified with specific failure point. Re-run is safe.
  • Import summary report
    On completion: records migrated per module, files transferred, any items requiring manual review. Exported as PDF for contractor records. PM reviews before going live on SiteCap.
Extraction Time
~20 minutes
Per active project. Multiple projects run sequentially. A GC with 5 active projects: approximately 90–120 minutes total migration time.
API Required
Zero
No Procore developer app. No API key. No Procore cooperation. Pulse AI uses the authenticated browser session the same way a human user would.
Credential Storage
Zero
Credentials never written to disk, database, or logs. Memory-only for the duration of the session. Purged on completion.
AI Engine
Pulse AI
Pulse AI handles navigation, data extraction, and schema mapping. Computer use capability for headless browser control. Vercel edge function orchestration.
Migration Agent — Technical Architecture Trigger: POST /api/migration/start {procore_email, procore_password, project_ids[]}
Session: Playwright headless browser launched in Vercel serverless function
Auth: Pulse AI navigates login.procore.com, enters credentials, captures session cookie
Extract: Per project: /rfis → /submittals → /budget → /change-orders → /bids → /daily-logs
Structure: Pulse AI parses rendered HTML/JSON, maps fields to SiteCap schema
Import: Supabase batch inserts with RLS enforced. Files uploaded to Storage.
Cleanup: Credentials purged from memory. Session terminated. Audit log written.
──────────────────────────────────────────────────────
Stack: Playwright + Anthropic API (computer use) + Supabase batch + Vercel
Error: Any failure triggers full rollback via Supabase transaction
Note: Procore UI changes may require agent prompt updates — monitor monthly
10 Pulse AI Agent Architecture 24 agents · 4 pillars

SiteCap runs 24 purpose-built Pulse AI agents across four pillars: platform intelligence (agents that make the product smarter), acquisition (agents that hunt Procore contractors), conversion (agents that turn trials into paying accounts), and retention (agents that keep accounts and grow revenue). The 17 acquisition agents run the full sales cycle from prospect identification through paid conversion. 7 new agents are added for budget, bid, and reality capture intelligence.

Pillar 1 — Platform Intelligence Agents (7 new agents)
Budget Watch Agent
Monitors all budget lines continuously. Flags lines tracking over budget 30 days before projected breach. Calculates cost-to-complete for open lines using bid activity and percent complete. Generates weekly budget health report to PM inbox.
Bid Intelligence Agent
Analyzes all received bids for completeness, responsiveness, and material unbalancing. Flags the lowest compliant bid. Identifies subs who haven't responded to invitations and sends reminder sequences. Monitors bid due dates.
CO Risk Agent
Monitors RFI volume by spec section and discipline. When a pattern suggests an undocumented scope issue, generates a CO alert for the PM. Scores every open CO for approval likelihood. Flags COs aging past 14 days without response.
Scan Progress Agent
Compares sequential LiDAR scans and identifies areas of change between scans. Surfaces delta areas as potential daily log entries or punch list items. Monitors scan cadence — alerts PM if no new scan has been uploaded in the scheduled scan interval.
Document Completeness Agent
Tracks submittal log completeness against the spec book. Identifies submittals required but not yet created, submitted but not yet returned, and returned but not yet resolved. Weekly completeness report with open items by due date.
Schedule Impact Agent
Monitors overdue RFIs and submittals for schedule impact indicators. Flags items whose delay could affect the project critical path. Links delay documentation from daily logs to open RFIs and submittals for claims management support.
Closeout Prep Agent
Beginning at 90% project completion, monitors open items across all modules. Generates a closeout checklist: open RFIs, unresolved submittals, open punch list items, unsigned COs, missing O&M documents. Weekly closeout status to PM and owner.
Procore Migration Agent
Pulse AI logs into Procore with contractor credentials via Playwright headless browser. Extracts RFIs, submittals, budget/SOV, change orders, bids, subcontractors, and daily logs. Imports directly into SiteCap. No API. ~20 minutes per project. Credentials never stored.
Pillars 2–4 — Acquisition, Conversion & Retention Agents (17 agents)
Pillar 2 — Acquisition (10 agents)
  • Procore User Detector
    AGC directories, ENR Top 400, LinkedIn. 88% success rate.
  • Renewal Interception Agent
    Monitors renewal signals. 62% success rate.
  • Complaint Signal Agent
    G2, Reddit, Capterra monitoring. 91% success rate.
  • Contractor Cost Profiler
    Decision-maker dossier + savings calc. 74% success rate.
  • Market Intelligence Agent
    Procore earnings + pricing news. 85% success rate.
  • Outreach Sequence Agent
    7-touch personalized email. 41% open rate.
  • LinkedIn Outreach Agent
    VP Ops, PM, IT Director targeting. 55% success rate.
  • Objection Handler Agent
    Under-60-second response. 78% success rate.
  • Demo Prep Agent
    Pre-loads demo with prospect's project data. 82% success rate.
  • Association Partnership Agent
    AGC/NAHB/ABC chapter channel. 38% success rate.
Pillar 3 — Conversion (2 agents)
  • Trial Activation Agent
    Behavior-triggered conversion. 84% success rate. Fires on second project, team invite, or drawing upload.
  • Procore Cost Comparison Agent
    Personalized savings calculation. 89% success rate. "$68K/year to SiteCap $X" closes deals.
Pillar 4 — Retention (5 agents)
  • Onboarding Agent
    Platform setup + first project live within 48h. 87% success rate.
  • Follow-Up Cadence Agent
    Re-engages stalled trials. 66% success rate.
  • Expansion Agent
    Monitors growth signals for tier upgrades. 58% success rate.
  • Churn Prevention Agent
    30-day early warning on declining usage. 76% success rate.
  • Content & SEO Agent
    5 posts/week + 2 press releases. Page 1 SEO by Month 12.
Swarm Summary
Total Agents
24
Platform Intelligence
7 agents
New for SiteCap. Budget, bid, CO, scan, doc, schedule, closeout.
Acquisition + Conversion + Retention
17 agents
Running from Week 6 of the build.
11 Technical Infrastructure Full stack · Every layer

SiteCap is built on a modern, production-grade stack where every layer has a specific job. No unnecessary services. No vendor lock-in beyond the core three (Supabase, Vercel, Anthropic). Every component listed below is in active use — not aspirational.

Build Platform
Pulse AI
SiteCap is built inside Pulse AI — TFSF’s proprietary AI build platform. Full-stack React/TypeScript/Tailwind. Supabase backend auto-provisioned. GitHub sync. Vercel auto-deploy on push to main.
Frontend Framework
React + TypeScript + Tailwind
Component-based architecture. TypeScript throughout — no untyped JS. Tailwind for responsive styling. Vite as the build tool. React Router for navigation. React Query for server state management. Supabase Realtime hooks for live dashboard updates.
Progressive Web App
PWA — iOS + Android
Installable to home screen on iOS and Android. Runs in browser — no app store. Service worker for offline daily log entry when connectivity is poor. Web Push API (VAPID keys) for push notifications. Camera + microphone access for LiDAR capture and voice logging.
Database + Auth + Storage
Supabase
PostgreSQL for all project data. Row-level security on every table — users only see projects they’re assigned to, enforced at database level. Supabase Auth for user management and JWT tokens. Supabase Storage for all files (attachments, PDFs, USDZ scans, photos). Supabase Realtime for live dashboard subscriptions (budget lines, RFI status, CO status, bid count).
Hosting + Edge Functions
Vercel
Web app and PWA hosted on Vercel. All API routes run as Vercel Edge Functions — serverless, auto-scaling, zero cold start on most routes. CDN for static assets and document delivery. Preview deployments for every PR. Custom domain: sitecap.io via GoDaddy CNAME → cname.vercel-dns.com.
Version Control + CI/CD
GitHub → Vercel
Private GitHub repo under TFSF organization. Pulse AI publishes directly to GitHub on every save. Vercel auto-deploys on push to main. Branch protection on main. Preview deploys on every PR. Zero manual deploy steps after initial Vercel project setup.
Transactional Email + Inbound
Resend
All outbound email: RFI routing, submittal distribution, CO approval requests, bid invitations, addenda, award notifications, daily log sharing, Pulse AI agent outreach sequences. Inbound email: Resend captures replies to unique per-RFI and per-submittal reply-to addresses via inbound webhook → Vercel edge function → Supabase record update. Full delivery tracking.
Subscription Billing
Stripe
Subscription billing at $299/$499/$799/mo. Stripe Customer Portal for self-service plan management and payment updates. Webhooks: checkout.session.completed (activate account), customer.subscription.updated (tier change), customer.subscription.deleted (disable access after period end). Annual plan discount available. All webhook events handled by Vercel edge function.
Web Push Notifications
Web Push API (VAPID)
Push subscriptions stored in Supabase keyed to user_id and device fingerprint. VAPID keys generated at setup. Notification delivery via Vercel edge function triggered by Supabase database webhooks on key events (CO approval, RFI response, bid received, budget alert). Email fallback via Resend for critical events when push delivery fails.
AI Engine — All Modules
Pulse AI — AI Engine
Pulse AI powers every AI feature in SiteCap: RFI photo-to-draft (vision), voice-to-daily-log (audio transcription), spec-book-to-submittal-log (PDF parsing), bid intelligence analysis, budget cost-to-complete projection, CO risk scoring, and all 24 Pulse AI agent outreach sequences. Auto-routed by complexity — Haiku for high-volume sequences, Sonnet for reasoning tasks.
Procore Migration Agent
Pulse AI — Migration Agent
Playwright headless browser launched in Vercel serverless function. Pulse AI Computer Use navigates the Procore UI, authenticates with contractor credentials, and extracts data from 4 layers (RFIs, budget/SOV, bids/subs, daily logs). Credentials memory-only, purged on completion. Supabase batch inserts with full rollback on failure. migration_jobs and migration_audit tables track every run.
PDF Generation
Puppeteer (server-side)
Server-side PDF generation via Puppeteer running in Vercel serverless. Used for: AIA G702/G703 Applications for Payment, RFI closeout packages, submittal logs, bid tabulations, daily log reports, punch list exports, and import summary reports from the Migration Agent. PDFs stored in Supabase Storage and delivered via Resend.
LiDAR Capture + Processing
ARKit + RealityKit
Apple ARKit for LiDAR depth sensing and point cloud generation from iPhone 12 Pro and newer. RealityKit for on-device mesh generation from the point cloud. ARWorldTrackingConfiguration with scene depth enabled. Scan processing happens on-device — no server compute required for capture. Output: USDZ format for 3D model, JPEG screenshots per scan location.
3D Viewer (Browser)
model-viewer (WebXR/WebGL)
Google’s model-viewer web component renders USDZ files in the browser via WebGL. No native app required — 3D scan viewer runs inside the SiteCap PWA on any device. Scan tag pins rendered as overlays on the 3D model. AR mode available on compatible iOS and Android devices for on-site walkthrough.
Scan Storage + Delivery
Supabase Storage + Vercel CDN
USDZ files and scan thumbnails stored in Supabase Storage bucket /scan-captures/{project_id}/{scan_id}. Served via Vercel CDN for low-latency delivery. lidar_scans table: id, project_id, usdz_url, thumbnail_url, label, floor, area, scan_date, is_latest. scan_tags table: id, scan_id, x, y, z coordinates, linked_type, linked_id.
Supabase Schema — Complete Table List
20 Core Tables projects id, name, address, type, owner_name, owner_email, status, budget_locked, lidar_scan_ids[]
project_users id, project_id, user_id, role (pm|super|estimator|viewer), invited_at, accepted_at
rfis id, project_id, number, title, description, spec_ref, drawing_ref, discipline, priority, assignee_email, cc_emails[], due_date, status, disposition, co_id, scan_tag_id, attachments[]
rfi_responses id, rfi_id, responder_email, body, attachments[], received_at
submittals id, project_id, number, spec_section, type, description, status, reviewer_email, due_date, returned_at, disposition
submittal_responses id, submittal_id, responder_email, disposition, notes, attachments[], received_at
change_orders id, project_id, number, rfi_id, bid_id, description, amount, status, budget_line_id, owner_email, approved_at
daily_logs id, project_id, date, super_id, crew_count, weather, entry_text, delay_flag, photos[], scan_tag_id, submitted_at, locked
budget_lines id, project_id, cost_code, description, original, approved_cos, revised, awarded_contract, actual_to_date, projected_final, pct_complete, variance, retainage_pct
budget_amendments id, project_id, reason_code, old_value, new_value, affected_line_id, approved_by, approved_at
draw_schedule id, project_id, application_number, period_start, period_end, status, submitted_at, certified_at, pdf_url
bid_packages id, project_id, title, scope_description, csi_division, budget_line_ids[], documents[], due_date, status, bond_required
bids id, package_id, sub_id, base_amount, line_items[], alternates[], submitted_at, awarded, awarded_at
bid_qa id, package_id, asker_email, question, answer, distributed_at
subcontractors id, account_id, company, contact_name, email, phone, csi_divisions[], license_number
purchase_orders id, project_id, sub_id, bid_id, budget_line_id, po_number, amount, status, pdf_url
lidar_scans id, project_id, usdz_url, thumbnail_url, label, floor, area, scan_date, is_latest
scan_tags id, project_id, scan_id, x, y, z, linked_type (rfi|log|co|punch), linked_id, label
migration_jobs id, account_id, procore_project_ids[], status, started_at, completed_at, records_imported, errors[]
notifications id, user_id, project_id, type, title, body, read, deep_link, created_at
────────────────────────────────────────────────────────────
RLS: Row-level security enforced on all tables at database layer
Realtime: budget_lines, rfis, change_orders, bids — live subscriptions for dashboard updates
Storage: /rfi-attachments · /submittal-docs · /daily-log-photos · /bid-documents · /scan-captures · /pdf-exports
Auth: Supabase Auth with JWT · Email invite flow · Row-level security tied to auth.uid()
Vercel Edge Functions — Complete API Route List
RouteMethodPurpose
/api/rfi/createPOSTCreate RFI, assign number, send routing email via Resend with unique reply-to, create scan_tag if provided.
/api/rfi/reply-webhookPOSTResend inbound webhook. Parse reply email, store rfi_responses record, update RFI status, notify PM.
/api/rfi/ai-draftPOSTAccept photo upload, Pulse AI identifies spec section and drafts RFI description from photo. Return draft JSON.
/api/submittal/spec-parsePOSTAccept spec book PDF, Pulse AI extracts all submittable items per section. Return submittal log array for PM review.
/api/co/approvePOSTToken-based owner approval. Atomic: update CO status + add amount to budget_line.approved_cos + recalculate revised + audit log.
/api/log/voicePOSTAccept audio file, Pulse AI transcribes and structures the entry, returns draft daily log for PM approval before submit.
/api/budget/csv-importPOSTAccept CSV, validate cost codes, preview before insert, batch create budget_lines records.
/api/budget/g702-exportPOSTGenerate AIA G702/G703 PDF via Puppeteer from budget_lines data. Store in Supabase Storage. Return PDF URL.
/api/bid/awardPOSTAtomic award: update budget_line + create purchase_order + create project_sub + send non-award emails. Rollback on any failure.
/api/lidar/uploadPOSTAccept USDZ + metadata from iOS PWA. Upload to Supabase Storage. Create lidar_scans record. Return scan_id and embed URL.
/api/lidar/tagPOSTCreate scan_tags record linking x,y,z coordinates to an RFI, CO, daily log, or punch list item.
/api/migration/startPOSTLaunch Playwright session with Procore credentials. Extract 4 layers. Import to Supabase. Purge credentials on complete.
/api/migration/statusGETPoll migration job by job_id. Return module progress, records imported, estimated completion for real-time UI.
/api/stripe/webhookPOSTHandle Stripe events: checkout completed (activate), subscription updated (tier change), deleted (disable access).
/api/notify/pushPOSTSend Web Push notification to user’s devices via VAPID. Called by Supabase database webhooks on key events.
/api/pdf/exportPOSTGeneric PDF export via Puppeteer. Accepts template type (rfi-log, submittal-log, bid-tab, daily-log, punch-list) + project_id.
Supabase
$25–$100/mo
Pro plan at launch ($25). Scales to Team at higher storage. PostgreSQL, Auth, Storage, Realtime all included.
Vercel + Resend + Stripe
$60–$140/mo
Vercel Pro $20–40. Resend $20–50 (email volume). Stripe 2.9% + $0.30 per transaction (no monthly fee).
Anthropic API + Playwright
$200–$600/mo
Pulse AI scales with usage. Lightweight model tier for high-volume outreach sequences. Playwright serverless runs only during migration jobs.
Total Infrastructure
$285–$840/mo
At launch. Scales to ~$2,400/mo at 59 accounts (base case Month 12). 97%+ gross margin throughout. No fixed headcount required to operate.
id="s12">
12 Build Timeline Build begins April 22  ·  MVP target June 1
Build Kickoff
April 22, 2026
Stack locked. Supabase provisioned. ARKit LiDAR integration scoped. All 7 module schemas confirmed. Pulse AI workspace opened. Procore Migration Agent architecture scoped. Build begins.
MVP Target
June 1, 2026
All 7 modules functional. Procore Migration Agent live. 24 Pulse AI agents deployed. First beta GC accounts on real active projects. Stripe live. QA complete. First paying accounts targeted by June 1.
Build Window
6 weeks
April 22 → June 1 = 6 weeks on Pulse AI. Aggressive but achievable: Pulse AI can ship a complete module per week at full build velocity. Modules 1–4 ship Week 2–4. Budget + Bid Week 5. Reality Capture + Migration Agent Week 6.

SiteCap’s 7 modules are built in dependency order — the four core modules (RFI, submittal, change orders, daily logs) ship first because budget and bid management reference their data. The Procore Migration Agent ships last because it needs all destination tables populated first. First beta contractors onboarded during Week 5 on real active projects. Full QA gate before June 1 launch.

  • WK 1–2
    Apr 22–May 3
    Stack Lock + Full Schema
    Supabase provisioned with all 9 core tables. Vercel project live. Resend domain verified. ARKit LiDAR integration scoped and tested on device. Stripe products and pricing configured ($299/$499/$799). Pulse AI workspace opened. Data model reviewed and locked before build begins.
    SupabaseVercelStripeARKit LiDAR
  • WK 3–4
    May 4–17
    RFI Engine + Submittal Tracker
    Full RFI creation, routing, and closeout workflow. Email-native response via Resend. Pulse AI photo-to-RFI draft. Submittal log generation from spec book upload. Distribute-review-approve cycle. Overdue escalation sequences. Both workflows tested on real project data internally.
    RFISubmittalEmail routingPulse AI drafting
  • WK 5
    May 18–24
    Change Orders + Daily Logs
    CO creation (manual, from RFI, from bid variance). Owner approval workflow via email. Budget integration on approval (budget lines update). Daily log voice-to-text. Photo auto-tagging. Delay documentation and CO spawn from log. Mobile PWA tested on real devices.
    Change OrdersDaily LogsMobile PWA
  • WK 6
    May 25–31
    Budget Management Module
    Original budget entry by cost code. CSV import. Budget locked on PM approval. Revised budget auto-updates on CO approval. Cost-to-complete tracking. Variance calculation and dashboard. Schedule of values and draw schedule. AIA G702/G703 PDF export. Budget Watch Agent deployed.
    Budget ModuleBudget Watch AgentAIA G702/G703
  • WK 7
    Jun 1
    Bid Management Module
    Bid package creation. Sub invitation and document distribution. Q&A workflow. Addenda management and acknowledgment tracking. Online bid submission. Side-by-side comparison table. Bid leveling. Award action (budget update + PO + sub record + notifications). Bid Intelligence Agent deployed.
    Bid ModuleBid Intelligence AgentPO generation
  • WK 8
    MVP 🎯
    Reality Capture Integration
    ARKit LiDAR capture workflow. Scan upload to Supabase Storage. 3D viewer embed with model-viewer. Location tag creation linked to RFIs, logs, COs, and punch list items. Progress delta comparison. Punch list from scan workflow. Owner scan sharing configuration. Scan Progress Agent deployed. Mobile scan tag interface tested on device.
    LiDAR CaptureScan Progress AgentPunch list
  • WK 9
    Post-MVP
    All 24 Pulse AI Agents Deployed
    All 7 platform intelligence agents live. All 17 acquisition/conversion/retention agents deployed for SiteCap. Contractor database seeded: AGC directories, ENR Top 400, LinkedIn. First 1,000+ Procore contractors profiled. Outreach sequences running. Content engine publishing "Procore alternative" SEO content Week 1.
    24 agents liveOutreach activeSEO publishing
  • WK 10–11
    Hardening
    Full QA + Legal + Payments
    End-to-end QA on all 7 modules: RFI → submittal → CO → log → budget → bid → scan. Cross-module data flow verified (CO-to-budget, bid award-to-budget, scan-to-log). Stripe payment integration live. TOS and Privacy Policy. SiteCap trademark filing. Three beta GCs complete a full 3-week project cycle on real active jobs. Zero critical bugs gate before launch.
    Full QAStripe liveTOS/PPBeta GCs
  • WK 12
    Scale
    Soft Launch — First Paying Accounts
    First 20–30 GC accounts onboarded on live active projects through warm industry introductions. Real-world feedback loop open. Pulse AI agents tuned on live construction data. First paying contracts by end of Week 12. Renewal Interception Agent running at full volume targeting Procore contractors within 90 days of renewal.
    First paying accountsWarm networkFull swarm active
  • MO 4+
    Full Throttle
    Full Throttle — Swarm at Scale + Phase 2
    200+ Procore outreach sequences/day. SEO climbing for "Procore alternative" and "construction project management software" terms. AGC chapter partnerships generating referrals. Phase 2 roadmap: QuickBooks/Sage ERP integration, drawing version control, inspection module, owner portal with live budget dashboard.
    200+ sequences/dayERP Phase 2Drawing mgmt Phase 2
13 Pricing Model Published flat · No custom quote

All pricing published on sitecap.io before a prospect talks to anyone. No ACV calculation, no demo required to see a number. Three tiers based on project count and feature depth. Blended average approximately $499/mo.

Tier Price Target Includes vs. Procore
StarterEntry tier $299/mo$3,588/yr GCs $5M–$25M annual volume. Up to 3 active projects. 1–3 users. All 7 modules. Up to 3 named users. Pulse AI RFI drafting and log generation. Basic budget management. Bid management up to 3 active packages. LiDAR reality capture up to 5 scans per project. Procore charges $30K–$50K/year here.
SiteCap: $3,588.
Annual savings: $26K–$46K.
ProExpected avg $499/mo$5,988/yr GCs $25M–$80M volume. Up to 10 active projects. Unlimited users. Everything in Starter plus unlimited users, unlimited LiDAR scans, advanced budget analytics, full Pulse AI agent suite, priority support, AIA G702/G703 export, custom cost code structure, sub database. Procore charges $60K–$100K/year here.
SiteCap: $5,988.
Annual savings: $54K–$94K.
TeamMulti-office $799/mo$9,588/yr GCs $80M–$150M volume. Unlimited projects. Multiple offices. Everything in Pro plus multi-office management, advanced reporting, API access, dedicated onboarding, SLA, custom integrations, portfolio-level budget dashboard, white-label owner portal. Procore charges $80K–$150K+ here.
SiteCap: $9,588.
Up to 15× savings.
Breakeven
4
Paying accounts at $299/mo covers all infrastructure. 3 accounts at $499/mo blended = breakeven. Profitable from Month 1.
Steady State MRR (base case)
$29,451
~59 accounts at $499/mo average by Month 12. $353,412 ARR. 97%+ gross margin against ~$2,400/mo infrastructure cost.
Gross Margin
97%
Infrastructure scales to ~$2,400/mo at 59 accounts. SiteCap runs $500–$1,400/mo at launch. 97%+ gross margin at full scale.
Additional Hardware Required
$0
LiDAR is built into every iPhone 12 Pro and newer. The device contractors already carry IS the scanner. LiDAR is included in Pro and Team tiers at no extra charge.
id="s14">
14 Planned Deployments GitHub · Vercel · sitecap.io
Document / DeploymentURLAccessStatus
Marketing Site
Pricing, features, Procore comparison, trial signup
sitecap.io Public ● Planned — post-build
Platform Application
Full SiteCap app — all 7 modules
app.sitecap.io Authenticated ● Planned — Week 12
JV Brief
Full JV presentation, feasibility index, pricing & exit
cleardeck.tfsfventures.com Confidential ● Live — SiteCap JV Brief
Platform Architecture Spec
This document — full build specification
sitestack.tfsfventures.com Confidential ● Build complete — deploy to subdomain
LiDAR Scan Demo
Live demo of iPhone LiDAR scan → RFI/log linking workflow
demo.sitecap.io Invite only ● Planned — Week 10
Beta Contractor Portal
First 20–30 beta accounts — live projects
app.sitecap.io Beta access ● Planned — Week 11
Domain Status
sitecap.io
Zero existing use in construction software. No trademark conflicts identified. Register immediately via Namecheap or GoDaddy. Point to Vercel via CNAME on registration.
GitHub Repo
Private · TFSF
Private repo under the TFSF GitHub organization. Pulse AI builds to GitHub. Vercel connected for automatic deploy on push to main. Branch protection on main.
Version Control
GitHub → Vercel
Pulse AI publishes directly to GitHub on every save. Vercel auto-deploys on push. Preview deployments for every PR. No manual deploy steps after initial Vercel project setup.
First action: Register sitecap.io before this document is shared with anyone. Domain availability verified — zero existing construction software use. GoDaddy or Namecheap. Point CNAME to cname.vercel-dns.com once Vercel project is live.
15 User Roles & Permissions Multi-tenant · Row-level security

SiteCap is multi-tenant — each GC account is isolated. Within an account, projects have role-based access. Users are assigned roles per project, not per account. This means a PM can be admin on Project A and viewer on Project B. External parties (owners, architects, subs) interact via email — they never have platform accounts.

RoleAssigned ToCan DoCannot Do
Account OwnerBilling adminThe GC who created the account. One per account.All project permissions. Manage billing. Create/delete projects. Invite/remove users. Account analytics.Nothing — full access.
Project ManagerDefault PMSenior PMs. Assigned per project.Create/edit/delete all records in assigned project. Lock budget. Approve COs and draw schedule. Award bids. Configure owner and architect routing.Cannot access unassigned projects. Cannot manage billing. Cannot delete project.
SuperintendentField roleField supers, foremen. Mobile-primary.Create daily logs (voice, photo, structured). View open RFIs. Draft RFIs. Initiate LiDAR scans from mobile. Create scan tags. View budget summary.Cannot send RFIs, approve COs, access bid management, edit budget, or see financial details.
EstimatorBid-focusedPreconstruction staff.Full Bid Management access. Create/manage bid packages. View and edit budget lines. View RFIs and submittals (read only).Cannot send RFIs, approve COs, or manage daily logs.
ViewerRead onlyExecutives, silent stakeholders.Read-only on all project data. Budget summary, RFI log, submittal log, CO log, daily logs.Cannot create, edit, send, or approve anything.
OwnerEmail only — no accountProperty owner, developer.Receives COs for approval via signed email token. Receives draw schedule for review. Optionally receives daily logs and scan link.Cannot log into platform. No access to budget detail, bid management, or internal records.
Architect/EngineerEmail only — no accountDesign team members.Receives RFIs and submittals via email. Responds via email reply — no login, no portal. Attachments in replies captured automatically.Cannot log into platform. No access to budget, bids, or internal project data.
Supabase RLS Implementation
Database-level enforcement
Every table has RLS enabled. Policy: SELECT/INSERT/UPDATE allowed only if auth.uid() has a matching project_users record for the relevant project_id with the required role. Enforced at the database layer — application bugs cannot expose cross-account data.
External Party Tokens
Signed URL tokens
External parties receive time-limited signed URL tokens embedded in emails. Clicking "Approve" fires a Vercel edge function with the token — no login required. Tokens expire after 30 days or on disposition. HMAC-SHA256 signed, stored in tokens table with expiry and used_at timestamp.
User Invitation Flow
Email-based invite
PM enters email + selects role. Resend delivers invite with signup link pre-scoped to project. New users complete Supabase Auth signup. Existing users clicking the link are auto-added to the project. project_users record created on acceptance.
16 Notifications & Real-Time Updates Resend · Supabase Realtime · Web Push

SiteCap is a platform where critical events happen outside the app — an architect replies to an RFI, an owner approves a CO, a sub submits a bid. Every external event must generate an in-app notification and, where needed, an email alert. This section defines every trigger, recipient, channel, and message content.

Event TriggerRecipientChannelMessage Content & Deep Link
RFI response receivedAssigned PMPush + Email"{Responder} replied to RFI-{n}: {title}." First 200 chars of response body. Deep link to RFI record.
RFI overduePM + Assignee (external)Push + Email"RFI-{n} is {x} days overdue." Pulse AI also sends reminder to external assignee at +24h, +48h past due date.
Submittal returnedPMPush + Email"Submittal {num} returned — {disposition} by {reviewer}." If Revise and Resubmit, PM prompted to create resubmittal.
CO approved by ownerPM + Account OwnerPush + Email"CO-{n} approved — ${amount} added to contract." Budget update shown. Deep link to CO and updated budget line.
CO rejected by ownerPMPush + Email"CO-{n} rejected by owner." Owner rejection notes (if any) included. PM prompted to revise or close.
Budget line exceeds variance thresholdPM + Account OwnerPush + Email"Budget alert: {cost_code} projecting ${amount} over budget." Pulse AI Budget Watch Agent trigger. Deep link to budget line.
Bid submitted by subPM + EstimatorPush"{Company} bid ${amount} for {package}. {x} of {y} subs have responded." Deep link to bid package.
Bid due in 24hPM + EstimatorPush + Email"Bid deadline in 24h: {package}. {n} of {y} subs have responded." Lists non-responding subs for follow-up.
Daily log not submitted by 4pmSuperintendentPush"Reminder: Daily log for {date} not submitted for {project}." Configurable per project. Sent only on working days.
New LiDAR scan uploadedPMPush"New scan: {label} — {date}." If delta detected vs. previous scan: "Changes detected in {n} areas." Deep link to scan viewer.
Punch list item completed by subPMPush"{Sub} marked punch item #{n} complete. {x}/{y} punch items resolved." Deep link to punch list.
New user joined projectPMPush"{Name} accepted their invitation and joined {project} as {role}."
Supabase Realtime — Live In-App Updates
  • Budget dashboard (budget_lines table)
    Any budget_line update (CO approval, bid award, actual cost) is reflected immediately on all connected PM sessions without page refresh. Variance calculations re-run client-side on the received payload.
  • RFI list (rfis table)
    Status column changes (Open → Under Review on response received) update in real-time in the RFI list view. Red overdue indicator appears live when due_date passes.
  • CO list (change_orders table)
    Owner approval via email token triggers CO status update. PM watching the CO list sees it flip to Approved instantly. Budget line variance indicator updates simultaneously.
  • Bid count (bids table)
    When a sub submits via online form, bid count on the package increments in real-time. PM watching the bid package sees "3 of 7 bids received" update live without refresh.
Push Notification Architecture (PWA)
  • Web Push API with VAPID keys
    PWA uses Web Push API for iOS and Android push delivery. VAPID keys generated at app setup. Push subscriptions stored in push_subscriptions table keyed to user_id and device fingerprint.
  • Permission request timing
    Notification permission prompt shown after first successful project action (e.g., after first RFI is sent), not on install. Context-aware prompt improves grant rate. Users who deny can re-enable in settings.
  • Preference control
    Per-user, per-project notification preferences stored in user_notification_prefs: all / critical_only / none per notification type. Super defaults: daily log reminders + RFI mentions only.
  • Email fallback for critical events
    If push delivery fails (browser closed, permissions revoked), CO approvals, budget alerts, and overdue RFIs fall back to email via Resend. Standard notifications are push-only.