Skip to main content

PDF Export

ForgeX generates PDFs directly from the application using two proposal templates: a detailed Classic breakdown and a client-ready Modern proposal. Export complete bids with cost breakdowns, scope summaries, discipline grouping, and editable proposal content.

info

PDF generation happens client-side using jsPDF, ensuring fast exports without server load. All bid data is formatted and styled automatically.

Featuresโ€‹

๐Ÿงพ

Complete Bid Breakdown

Export all scopes, items, and cost summaries in a professional layout

๐Ÿ’ฌ

Customizable Message

Include custom introduction/cover letter for each bid

๐Ÿ›ก๏ธ

Tax & Compliance Flags

Display tax exemption status, certified payroll, insurance type

โœ…

Exclusions List

Automatically include active exclusions from templates

๐Ÿ“„

Proposal Template

A client-ready Proposal with editable Inclusions, Qualifications & Assumptions, and Terms

๐Ÿ—๏ธ

Discipline Grouping

Group scopes into Civil, Structural, Landscape, Architectural, and MEP sections with subtotals


Export Templatesโ€‹

The Export Bid dialog can produce a PDF proposal, a CSV, or an Excel file โ€” plus a Project Management Tracking sheet (a Google Sheet or Excel export with budget-vs-actuals columns). For the PDF, you choose a Proposal Template: Classic or Modern.

The Export Bid dialog in Modern proposal mode, with the live PDF preview on the right

The right-hand pane is the rendered first page of the Modern proposal โ€” it updates live as you edit, and refreshes when you click Generate Preview.

Best for: an internal or detailed cost breakdown.

The Classic template is the detailed export described in What's Included in the Export below โ€” every scope, module, and line item with costs, plus the financial summary, compliance flags, and exclusions. Scope-grouping captions are limited to Civil / Structural.

Proposal Detailsโ€‹

The Proposal Details card holds the header fields that print on the proposal:

  • City, State
  • Valid (e.g., "30 days")
  • GC Name (defaults from the client)
  • Preparer Name and Preparer Email (see Preparer name)
  • Phone
  • Generic โ€” omit GC checkbox (see below)
  • Disclaimer โ€” the line that prints under the totals (e.g., "All pricing includes labor, materials, equipment, overhead, and profit. Tax exempt.")

Inclusions, Qualifications & Termsโ€‹

  • Inclusions and Qualifications & Assumptions are free-text lists (one item per line), pre-filled with standard text and fully editable per export. Empty sections are omitted from the PDF.
  • Terms are a set of labeled blocks โ€” Proposal Validity, Payment Terms, Retainage, Change Orders, Insurance, Schedule โ€” each with its own heading and body. Remove a block with its ร—, or use + Add term for a custom one.
  • Exclusions render from the bid's own active exclusions.

Editable Inclusions and Qualifications & Assumptions lists, plus the labeled Terms blocks โ€” Proposal Validity, Payment Terms, Retainage, Change Orders, Insurance, and Schedule

Line items & hiding a priceโ€‹

The Line Items section is optional โ€” blanks auto-fill from the scope. For each line you can set a Description, Qty, UoM, and Unit $, and toggle "Hide price in proposal." A hidden line still counts toward its caption subtotal and the overall total โ€” useful for allowance or alternate work you don't want to itemize.

Company brandingโ€‹

Choose the brand the proposal is issued under โ€” PSS, PSW, or RSW โ€” which sets the letterhead and branding on the PDF.

Scope grouping by disciplineโ€‹

Scope Grouping tags each scope with a caption to group them into per-caption sections, each with its own subtotal. The Modern template supports five captions โ€” Structural, Civil, Landscape, Architectural, and MEP. Leave every scope set to None for a flat list. Scope Grouping applies to the export only โ€” it's not saved with the bid.

Per-line Hide price in proposal toggles, the Company Branding selector (PSS / PSW / RSW), and the per-scope Scope Grouping caption dropdown

Generic โ€” omit GCโ€‹

A "Generic โ€” omit GC (send to any contractor)" checkbox produces a single, general-contractor-agnostic proposal you can hand to any GC. When checked, the proposal omits the GC from "Submitted To," greys out the GC Name field, and prints a neutral "Accepted By" line instead of the bid's client. It's honored in both the preview and the downloaded PDF.

Preparer nameโ€‹

The proposal's "Prepared by" name uses the Preparer Name you enter in Proposal Details. Leave it blank to fall back to the bid's resolved preparer. (Previously the name always came from whoever last edited the bid.)

Scope line itemsโ€‹

Proposal line items reflect what you entered: descriptions are not auto-filled from the shape (prism / cylinder), an explicitly blank description stays blank, and per-scope line-item overrides flow into the lump-sum table.


What's Included in the Exportโ€‹

Every PDF export contains the following sections:

Header Sectionโ€‹

  • Company branding (Precision Site Services logo)
  • Bid metadata: Job name, client name, location
  • Prepared by: Estimator name
  • Date prepared: Creation/last updated timestamp

The rendered header appears in the proposal preview under Export Templates above.

Bid Summaryโ€‹

Cost rollup showing totals by module:

ModuleDescription
ConcreteTotal concrete items cost
LaborTotal labor cost (including per diem if enabled)
EquipmentTotal equipment rental cost
MaterialsTotal materials cost
SubcontractorTotal subcontractor/sublet cost
MiscellaneousTotal misc items cost

Financial Summary:

Subtotal:        $X,XXX.XX
Overhead (X%): $X,XXX.XX
Profit (X%): $X,XXX.XX
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
Total: $X,XXX.XX

Scope Overviewโ€‹

High-level table showing each scope's cost breakdown:

Scope NameConcreteLaborEquipmentMaterialsSubletMiscTotal
Foundation$10,000$5,000$3,000$2,000$1,500$500$22,000
Driveway (5ร—)$15,000$7,500$4,000$2,500$1,000$0$30,000
note

Scope multipliers are displayed (e.g., "Driveway (5ร—)") to indicate repeated areas.

Detailed Scope Breakdownโ€‹

For each scope, the PDF includes:

Module-Level Detailsโ€‹

Each module shows individual items with descriptions and costs:

Concrete Items:

โ€ข 3000 PSI Slab
100 SF โ€ข 3.70 CY โ€ข 500 lbs rebar โ€ข #4 @ 18"
$2,410.00

โ€ข Foundation Walls
50 SF โ€ข 1.85 CY โ€ข 250 lbs rebar โ€ข #5 @ 12"
$1,850.00

Labor Items:

โ€ข Concrete Finisher
2.0 crew โ€ข 8.0 hrs/day ร— 5.0 days โ€ข $38/hr
$2,052.00

โ€ข Laborer
4.0 crew โ€ข 8.0 hrs/day ร— 5.0 days โ€ข $28/hr
$3,584.00

Equipment Items:

โ€ข Dozer
1.0 units โ€ข 5.0 days โ€ข $931/day โ€ข Delivery $150 โ€ข Fuel $250
$5,055.00

Material Items:

โ€ข Rebar #4
1000.0 LB โ€ข $0.92/LB โ€ข Waste 5.0%
$966.00

Subcontractor Items:

โ€ข Concrete Pumping
1.0 LS โ€ข $2,500/LS โ€ข Buffer 10.0%
$2,750.00

Miscellaneous Items:

โ€ข Permits
1.0 units โ€ข $500/unit
$500.00

This is the Classic per-module detail. The Modern proposal instead renders a Scope of Work & Pricing table โ€” see the Export Templates preview.

Compliance & Flagsโ€‹

The PDF displays important bid flags:

FlagDescription
Tax Exemptโœ… if bid is tax-exempt, โŒ otherwise
Per Diem Enabledโœ… if per diem costs are included
Certified Payrollโœ… if certified payroll required
C3 Requiredโœ… if C3 form required
Drug Testing Requiredโœ… if drug testing required
Insurance TypeCCIP, OCIP, RCIP, or None

Exclusionsโ€‹

If the bid has active exclusions, they're listed at the bottom:

Exclusions:
โ€ข Permits and fees (owner-provided)
โ€ข Site utilities (existing connections assumed)
โ€ข Disposal of hazardous materials
โ€ข Work outside of scope listed above
note

Only active exclusions from templates are included. Inactive exclusions are omitted.

Custom Messageโ€‹

Optional custom message/cover letter at the top of the PDF:

"Thank you for the opportunity to bid on this project. We have reviewed the plans and specifications thoroughly. This proposal includes all labor, materials, and equipment necessary to complete the work as specified. We look forward to working with you."


Generating a PDFโ€‹

1
Open Bid Detail

Navigate to the bid you want to export.

2
Click Export PDF

Click the "Export PDF" button in the top toolbar.

3
Choose a Template

For a PDF, pick Classic (detailed breakdown) or Modern (client-ready proposal). Selecting Modern opens the full editor with the Proposal Details card, editable Inclusions / Qualifications / Terms, Company Branding, per-scope Scope Grouping and hide-price controls, and the Generic โ€” omit GC option. See Export Templates.

4
Review Export Modal

The export modal displays:

  • Scope selection (export all or select specific scopes)
  • Custom message field
  • Preview of financial summary

See the annotated screenshot under Export Templates above.

5
Add Custom Message (Optional)

Enter a custom message to appear at the top of the PDF. This is useful for:

  • Cover letters
  • Special notes to the client
  • Clarifications or assumptions
6
Select Scopes (Optional)

By default, all scopes are exported. Uncheck scopes to exclude them:

  • Useful for partial bids or alternates
  • Excluded scopes won't appear in scope overview or details
  • Financial summary adjusts automatically
7
Generate PDF

Click "Generate PDF".

The browser generates the PDF and prompts you to download:

  • Filename: Bid_[JobName]_[Date].pdf
  • Example: Bid_Commercial_Foundation_2025-01-29.pdf
tip

Save generated PDFs to your bid attachments for easy reference and version tracking.


Customization Optionsโ€‹

Message Customizationโ€‹

The custom message field supports:

  • Plain text (no formatting, line breaks preserved)
  • Multi-paragraph content (separate with blank lines)
  • No length limit (but keep it concise for readability)

Best practices:

  • Keep it professional and concise
  • Use bullet points for clarity (manual formatting)
  • Avoid special characters that may not render correctly

Scope Selectionโ€‹

Use cases for selective scope export:

Bid Alternates

Export separate PDFs for base bid vs. alternate scopes.

Example:

  • Base bid: Foundation + Driveway
  • Alternate 1: Add Sidewalks scope
  • Alternate 2: Add Retaining Wall scope
Phased Proposals

Split large projects into phases:

  • Phase 1 PDF: Excavation + Foundation
  • Phase 2 PDF: Slab + Parking Lot
Client Comparison

Create multiple proposals for the same project with different scope combinations for client to compare options.

Template Variables (Future)โ€‹

warning

Planned Feature: Future versions will support template variables like {{clientName}}, {{bidNumber}}, and {{date}} in custom messages for dynamic content.


PDF Layout & Stylingโ€‹

Page Formatโ€‹

  • Paper size: US Letter (8.5" ร— 11")
  • Orientation: Portrait
  • Margins: 0.5" all sides
  • Font: Helvetica (sans-serif)

Typographyโ€‹

ElementFont SizeStyle
Title (Job Name)20ptBold
Section Headers14ptBold
Subsection Headers12ptBold
Body Text10ptRegular
Item Details9ptRegular, Gray

Color Schemeโ€‹

  • Headers: Dark blue (#1a365d)
  • Body text: Black (#000000)
  • Item details: Gray (#718096)
  • Borders: Light gray (#e2e8f0)

Table Formattingโ€‹

  • Headers: Bold, dark background
  • Rows: Alternating white/light gray for readability
  • Borders: Thin gray lines
  • Alignment: Numbers right-aligned, text left-aligned

A sample rendered first page (Modern proposal) appears in the Export Templates preview above.


API Endpointโ€‹

Generate PDF Dataโ€‹

The backend provides a dedicated endpoint for fetching PDF-ready data:

POST /api/bids/:bidId/pdf-data

Request Body:
{
"scopes": ["scope-id-1", "scope-id-2"], // Optional: filter scopes
"message": "Custom message text", // Optional
"overheadPercent": 10, // Optional: override
"profitPercent": 5 // Optional: override
}

Response:
{
"meta": {
"bidId": "bid-123",
"jobName": "Commercial Foundation",
"clientName": "ABC Construction",
"clientEmail": "contact@abc.com",
"location": "Austin, TX",
"preparedBy": "jmckenzie@precisionsiteservices.com",
"createdAt": "2025-01-15T10:00:00Z",
"updatedAt": "2025-01-29T14:30:00Z"
},
"flags": {
"taxExempt": false,
"perDiemEnabled": true,
"certifiedPayroll": true,
"c3Required": false,
"drugTestingRequired": true
},
"compliance": {
"insuranceType": "CCIP",
"certifiedPayroll": true,
"c3Required": false,
"drugTestingRequired": true
},
"exclusions": [
"Permits and fees (owner-provided)",
"Site utilities (existing connections assumed)"
],
"message": "Custom message text",
"modules": [
{ "key": "concrete", "label": "Concrete", "amount": 40000.00 },
{ "key": "labor", "label": "Labor", "amount": 20000.00 },
...
],
"overview": [
{
"id": "scope-1",
"name": "Foundation",
"totals": {
"concrete": 10000.00,
"labor": 5000.00,
"equipment": 3000.00,
"materials": 2000.00,
"subcontractor": 1500.00,
"misc": 500.00,
"total": 22000.00
},
"multiplier": 1,
"shape": "Slab"
}
],
"scopes": [
{
"id": "scope-1",
"name": "Foundation",
"multiplier": 1,
"shape": "Slab",
"totals": { ... },
"modules": {
"concrete": {
"key": "concrete",
"label": "Concrete",
"total": 10000.00,
"items": [
{
"description": "3000 PSI Slab",
"detail": "100 SF โ€ข 3.70 CY โ€ข 500 lbs rebar โ€ข #4 @ 18\"",
"totalCost": 2410.00
}
]
},
...
}
}
],
"financial": {
"subtotal": 60000.00,
"overheadAmount": 6000.00,
"profitAmount": 3300.00,
"totalCost": 69300.00,
"overheadPercent": 10.0,
"profitPercent": 5.0
}
}
note

The prepareBidPdfPayload function in /services/bids/backend/src/services/pdf/bidPdfData.js handles all data transformation and formatting.


Best Practicesโ€‹

๐Ÿ‘๏ธ

Review Before Exporting

Always review the bid summary in-app before generating PDF to catch errors or missing data.

๐Ÿท๏ธ

Use Descriptive Job Names

Job names appear prominently in the PDF. Use clear, descriptive names for professionalism.

๐Ÿ“‹

Keep Exclusions Updated

Regularly review and update exclusion templates to ensure they're relevant to current bids.

๐Ÿ“Ž

Save PDFs as Attachments

Upload generated PDFs to bid attachments for version tracking and easy sharing.


Troubleshootingโ€‹

Common Issuesโ€‹

IssueCauseSolution
Missing scopes in PDFScopes not linked to bidVerify scope-bid relationships
Zero costs displayedCost rollup not triggeredManually trigger cost rollup before export
Tax amounts incorrectTax rates outdatedUpdate pricing database tax rates
PDF won't downloadBrowser popup blockerAllow popups for ForgeX domain
Custom message cut offMessage too longKeep message under ~500 words

Browser Compatibilityโ€‹

BrowserSupportNotes
Chromeโœ… FullRecommended
Firefoxโœ… Full
Safariโœ… Full
Edgeโœ… Full
IE 11โŒ Not supportedUse modern browser

Future Enhancementsโ€‹

note

Planned features for PDF export:

  • Custom templates: Choose from multiple PDF layouts/styles
  • Template variables: Dynamic content insertion (client name, bid number, etc.)
  • Logo customization: Upload custom company logos
  • Signature fields: Add signature blocks for client approval
  • Attachment embedding: Include photos/plans in PDF
  • Email integration: Send PDF directly to client from ForgeX

Next Stepsโ€‹