Selvage Home Services Admin

Adagreement-efb.html — Exterior Fence Builders, Inc. Your Heading Text Here

Agreement – Exterior Fence Builders, Inc.

Exterior Fence Builders, Inc.
Service Agreement

Legal Entity: Exterior Fence Builders, Inc.
Jurisdiction: Georgia
This Agreement applies to all services selected within the quote.

1. Scope of Work – Written Only

This Agreement is based solely on the written scope of work listed on the associated quote. No verbal approvals, promises, or understandings will be honored. Any task not written on the quote is not included.

All additional work, changes, add-ons, or requests must be added in writing and approved by the customer with updated pricing before any additional work is performed.

2. Customer Responsibilities

  • Ensure property lines are correctly marked before installation.
  • Provide access to the work area at scheduled times.
  • Disclose underground utilities not recorded with 811.
  • Remove personal items or obstructions from the work zone.

3. Payment Terms

  • 50% deposit required before materials are ordered.
  • Remaining 50% due immediately upon completion.
  • Materials are ordered specifically for each job and cannot be returned once purchased.
  • Deposit becomes non-refundable once materials are ordered.

4. Change Orders & Add-On Work

Any service not written in the original scope must be written and approved as a Change Order. No additional tasks will be performed for free.

5. Cancellation Policy

  • Cancellation before material purchase: deposit refunded minus administrative time.
  • Cancellation after material purchase: deposit forfeited in full.
  • Customer responsible for any manufacturer restocking or freight fees.

6. Warranty

Exterior Fence Builders provides a 1-year workmanship warranty. This warranty does not cover:

  • Storm, wind, weather events
  • Falling trees, limbs, or debris
  • Ground movement, erosion, or flooding
  • Customer misuse
  • Damage after installation

7. Service-Specific Sections

A. Fence Installation

  • Post depth, spacing, material type, and layout follow industry standards unless otherwise stated in writing.
  • Wood is a natural product and may warp, twist, check, crack, or discolor.
  • Vinyl and aluminum materials follow manufacturer specifications.

B. Fence Repair

  • Repairs apply only to the section(s) listed in the written quote.
  • Existing materials may not match new materials in appearance or aging.

C. Gate Installation / Repair

  • Gate adjustments after settlement are not covered under warranty unless noted.
  • Ground heaving may require future adjustments billed as new service.

D. Commercial Fence Work

  • Customer must provide approved site plans and commercial specifications.
  • Security-grade hardware may require lead times.

E. Fence Removal / Haul-Off Only

  • Customer agrees removed fence materials may contain nails, staples, rust, or hazards.
  • BHJR may handle certain disposal tasks via subcontract.

8. Completion Standards

Job is considered complete when all items listed on the written quote are finished, regardless of optional extras not approved in writing.

9. Photo Authorization

Company may photograph completed work for documentation and portfolio purposes.

10. Signatures

Customer approval of the quote constitutes acceptance of this Agreement.

EFB UNIVERSAL AGREEMENT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

agreement-iabf.html — It’s About FencesAdd Your Heading Text Here

Agreement – It’s About Fences

It’s About Fences
Service Agreement

Jurisdiction: Mississippi

1. Written Scope Only

No verbal agreements are binding. All work must be written on the quote.

2. Payment Terms

  • 50% deposit required before materials are ordered.
  • Balance due immediately upon completion.
  • Deposit becomes non-refundable once materials are purchased.

3. Warranty

1-year workmanship warranty; materials follow manufacturer warranty.

4. Service-Specific Sections

A. Fence Installation

Material and installation terms follow MS state guidelines.

B. Fence Repair

Repairs limited to written sections.

C. Gate Installation/Repair

Gate adjustments due to soil movement not covered.

D. Removal Only

Customer acknowledges disposal may include hazards.

5. Change Orders

All additional tasks require written approval and pricing.

6. Signatures

Approval of quote = acceptance of Agreement.

agreement-bhjr.html — Boss Haul Junk Removal

Agreement – Boss Haul Junk Removal

Boss Haul Junk Removal
Service Agreement

1. Written Scope Only

This Agreement covers only items listed in the quote. No additional items will be removed unless added to the written quote with updated pricing.

2. Payment Terms

  • No deposit required.
  • Payment due upon completion of haul.
  • Final price may adjust based on load size and weight.

3. Safety & Access

Customer must ensure safe access to all areas. Hazardous materials not accepted.

4. Service-Specific Sections

A. Standard Haul-Off

Includes loading and disposal of typical household items.

B. Property Clean-Out

Includes whole-house or garage clearing; does not include structural tear-outs unless written.

C. Construction Debris

Includes non-hazardous construction debris. No asbestos.

D. Yard Waste

Includes bagged or loose yard waste.

E. Appliance/Furniture Removal

Extra charges apply for large, heavy, or special-handling items.

5. Cancellation

Same-day cancellations may incur a trip fee.

Boss Haul UNIVERSAL AGREEMENT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

agreement-esk.html — Exterior Surface Kleen

Agreement – Exterior Surface Kleen

Exterior Surface Kleen
Service Agreement

1. Written Scope Only

No verbal agreements are honored. Only written services listed apply.

2. Payment Terms

  • Payment due upon completion.
  • Large projects may require 25% deposit.

3. Service-Specific Sections

A. House Soft Wash

Low-pressure detergent application. Not responsible for oxidation or pre-existing surface issues.

B. Concrete/Hard Surface

Pressure levels vary based on surface. Cracks and weak areas may expand during cleaning.

C. Roof Wash

Soft wash only. Not responsible for pre-existing shingle damage.

D. Gutter Cleaning

Includes debris removal. Does not guarantee flow unless downspouts are cleared.

E. Window Cleaning

Exterior only unless otherwise written.

4. Warranty

30-day limited rewash guarantee for qualifying areas.

ESK UNIVERSAL AGREEMENT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

agreement-oehr.html — Odds & Ends Home Repairs

Agreement – Odds & Ends Home Repairs

Odds & Ends Home Repairs
Service Agreement

1. Written Scope Only

No additional tasks will be performed unless added in writing.

2. Payment Terms

  • Hourly jobs: payment due upon completion.
  • Flat-rate jobs: payment due at completion unless deposit required.
  • Large repairs: 30–50% deposit depending on materials.

3. Service-Specific Sections

A. Handyman Hourly

Covers labor only. Materials billed separately.

B. Flat-Rate Repair

Covers only listed repair. Additional issues require new pricing.

C. Carpentry

Wood is natural and may expand/contract. Paint/stain not included unless written.

D. Electrical Fixture Install

Basic installations only. No rewiring beyond fixture box.

E. Plumbing Fixture Install

Does not include drain clearing or major plumbing revisions.

F. Door & Gate Repair

Repairs apply only to written areas; structural issues may require separate work.

4. Warranty

30-day workmanship warranty on labor only.

OEHR UNIVERSAL AGREEMENT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

agreement-jcs.html — JCS Pro Management & Maintenance

Agreement – JCS Pro Management & Maintenance

JCS Pro Management & Maintenance
Service Agreement

1. Written Scope Only

This Agreement applies only to the tasks listed in the quote or service plan.

2. Payment Terms

  • Maintenance plan charges billed per subscribed cycle.
  • Punch list and turnover work due upon completion.
  • Lock/rekey services due at completion.

3. Service-Specific Sections

A. Maintenance Plan

Includes scheduled checks only. Unexpected repairs billed separately.

B. Punch List / Turnover

Each task must be listed; additional tasks require new pricing.

C. Property Inspection

Inspection does not guarantee future property conditions.

D. Lock/Rekey

Only covers keys and locks listed.

E. Exterior Cleaning Coordination

JCS acts as coordinator; subcontractor terms may apply.

4. Warranty

No warranty offered on maintenance outcomes; workmanship warranty may apply to repairs.

JCS-Pro UNIVERSAL AGREEMENT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

System Integration

NEXT STEP (System Integration)

These 6 pages are now ready for your quoting system.

If you want, I can now build:

1. The “View Agreement” button that auto-loads the correct page

2. The automatic mapping system

(companyCode + selected service → correct agreement)

Just say:

“Build the agreement loader system.”

Or:

“Add the View Agreement button now.”

Either way, your Agreement Engine is ready to connect. NOTE!:

Do NOT put these agreement pages on each website.
That would create legal confusion, public exposure, SEO problems, and cross-brand conflicts.

Here is the correct, clean, safe way to use them:

1. These Agreement Pages Are INTERNAL ONLY

They belong inside your internal quoting system, not the public websites.

Reasoning:

  • They contain internal rules and pricing policies.

  • They include “no verbal agreements” and enforcement details.

  • They include internal disclaimers meant for your salespeople.

  • They may be different between companies (EFB vs IABF vs OEHR etc).

  • They are NOT customer-facing until the quote is finalized and printed/PDF’d.

Your websites (exteriorfence.com, bosshauljunkremoval.com, exteriorsurfacekleen.com, etc.) should NOT host these files.

2. The Agreement Pages go in ONE central internal system You will place:

agreement-efb.html
agreement-iabf.html
agreement-bhjr.html
agreement-esk.html
agreement-oehr.html
agreement-jcs.html

In ONE location:

Option A — Inside your internal quote system directory

(e.g., your GoDaddy folder where the HTML quote form lives)

Option B — On a hidden subfolder

like:

/internal/
/agreements/
/private/

3. Your quote system will link to the correct agreement file

When your salesperson selects a company:

  • EFB → loads agreement-efb.html

  • It’s About Fences → loads agreement-iabf.html

  • BHJR → loads agreement-bhjr.html

  • ESK → loads agreement-esk.html

  • OEHR → loads agreement-oehr.html

  • JCS → loads agreement-jcs.html

This happens automatically inside the internal quote tool.

Customers DO NOT select companies — you do internally.

4. Customers only see the agreement AFTER you generate the PDF

The customer-facing PDF or printed quote will include:

  • Their selected service

  • Their selected company

  • Their correct agreement language (inserted automatically)

But they never see the internal HTML files.
They only see the final merged output.

5. You will NOT put all six agreement pages on every website

Doing so would cause:

  • Duplicate content penalties

  • Legal mismatches

  • Exposing internal policy

  • Confusion between brands

  • SEO indexing of internal legal documents

  • Public viewing of private internal systems

You avoid all that by keeping them internal.

Correct Implementation Summary

You place ALL agreement pages in:

/internal/agreements/

Then, inside your quote system:

  • When companyCode = "efb" → load agreement-efb.html

  • When companyCode = "esk" → load agreement-esk.html
    (and so on)

Each public website remains clean, simple, customer-focused.

All agreements stay internal, salesperson-facing only.

If you want the loader system:

Say:
“Build the Agreement Loader System.”

I will then build the:

  • logic

  • dynamic button

  • iframe/overlay

  • PDF merge hooks

  • print flow

So your salesperson taps “View Agreement” and the correct one loads instantly.

 
 

build the agreement loader system

Below is a simple, solid Agreement Loader System that plugs into the quote you already have.

I’ll break it into 3 clear steps:

STEP 1 – Decide where the agreement files live

In your hosting (cPanel → File Manager), do this:

  1. Go to the folder where your internal quote page lives.

  2. Create a subfolder called (for example):
    agreements

  3. Upload these files into that folder:

    • agreement-efb.html

    • agreement-iabf.html

    • agreement-bhjr.html

    • agreement-esk.html

    • agreement-oehr.html

    • agreement-jcs.html

So your structure looks like:

  • /internal-quote/your-quote.html (the main quote page)

  • /internal-quote/agreements/agreement-efb.html

  • /internal-quote/agreements/agreement-iabf.html

  • etc.

If your folder names are different, that’s fine — just remember the relative path.

STEP 2 – Add a “View Agreement” block to your quote page

In your main quote HTML (the one with Blocks 1–5), inside the <div class="quote-wrapper"> and near the bottom (for example under Block 5), add this section:

This gives you a visible button:

“View Agreement for Selected Company”

inside your internal quote tool.

Agreement

This quote is subject to the written Agreement (Terms & Conditions) for the company selected above. Click the button below to view the correct Agreement for this quote.

STEP 3 – Add the Agreement Loader JavaScript

At the bottom of the same HTML file, just before </body>, add this <script> block (you can put it after your existing scripts):   

How it works (in plain logic)

  1. You or your salesperson pick a company in the Company Selector (EFB, BHJR, etc.).

  2. That sets the companyCode (efb, iabf, bhjr, esk, oehr, jcs).

  3. When you click “View Agreement for Selected Company”:

    • The script reads the companyCode.

    • It looks up the right file in agreementByCompany.

    • It builds a URL like:
      agreements/agreement-efb.html

    • It opens that Agreement page in a new tab (internal view).

No customer sees this; it’s purely for internal quoting and printing.

Later: adding service-level logic (optional)

Right now, this loader chooses the Agreement by company.

Later, if you want:

  • EFB fence install vs EFB repair vs EFB removal to go to different sections or different files, we can extend the loader to also look at the first selected service in Block 5 and change the URL or add #anchors to jump to specific sections inside each Agreement page.

For now, this system:

  • Works today

  • Respects your brand separation

  • Keeps agreements internal

  • Lets you refine each company’s agreement later without breaking the loader

				
					<script>
  // ==========================================
  // AGREEMENT LOADER SYSTEM
  // ==========================================

  (function () {
    // 1) Where the agreement files live, relative to THIS quote page.
    //    If agreements are in the same folder, set basePath = "".
    const agreementBasePath = "agreements/";

    // 2) Map company codes (from your selector) to agreement filenames.
    //    These values must match the "value" attributes in your <select id="companySelect">.
    const agreementByCompany = {
      efb:  "agreement-efb.html",
      iabf: "agreement-iabf.html",
      bhjr: "agreement-bhjr.html",
      esk:  "agreement-esk.html",
      oehr: "agreement-oehr.html",
      jcs:  "agreement-jcs.html"

      // shs is intentionally NOT included.
    };

    function getSelectedCompanyCode() {
      // Preferred source: hidden field you already have
      var hiddenCodeEl = document.getElementById("companyCode");
      if (hiddenCodeEl && hiddenCodeEl.value) {
        return hiddenCodeEl.value;
      }

      // Fallback: read directly from the <select> if hidden is empty
      var selectEl = document.getElementById("companySelect");
      if (selectEl && selectEl.value) {
        return selectEl.value;
      }

      return "";
    }

    function openAgreementForCompany() {
      var companyCode = getSelectedCompanyCode();

      if (!companyCode) {
        alert("Please select a company in the Company Selector before viewing the Agreement.");
        return;
      }

      var fileName = agreementByCompany[companyCode];

      if (!fileName) {
        alert("No Agreement has been configured yet for this company code: " + companyCode);
        return;
      }

      var url = agreementBasePath + fileName;

      // Open Agreement in a new tab/window (internal use)
      window.open(url, "_blank");
    }

    // Wire up the button after DOM is ready
    function initAgreementLoader() {
      var btn = document.getElementById("viewAgreementBtn");
      if (!btn) return;
      btn.addEventListener("click", openAgreementForCompany);
    }

    if (document.readyState === "loading") {
      document.addEventListener("DOMContentLoaded", initAgreementLoader);
    } else {
      initAgreementLoader();
    }
  })();
</script>


				
			

You extend the loader in two layers now:

  1. Pick the agreement file by company.

  2. Pick the section inside that agreement by primary service (via #anchor).

I’ll give you:

  • The small change you need in each agreement page (IDs on headings).

  • The updated Agreement Loader script you can drop into your quote page.

1. Add IDs to service sections in each agreement page

In each agreement-*.html, give the service headings an id so we can jump to them with #anchor.

 

Example for EFB:

Fence Installation

Fence Repair

Gate Installation / Repair

Commercial Fence Work

Fence Removal / Haul-Off Only

Example for BHJR:

Standard Haul-Off

Property Clean-Out

Construction Debris

Yard Waste

Appliance/Furniture Removal

Example for ESK:

House Soft Wash

Concrete/Hard Surface

Roof Wash

Gutter Cleaning

Window Cleaning

Example for OEHR:

Handyman Hourly

Flat-Rate Repair

Carpentry

Electrical Fixture Install

Plumbing Fixture Install

Door & Gate Repair

Example for JCS:

Maintenance Plan

Punch List / Turnover

Property Inspection

Lock/Rekey

Exterior Cleaning Coordination

2. Updated Agreement Loader System (company + service)

Replace your existing Agreement Loader script with this one (or add/merge carefully).
Put it near the bottom of your quote HTML just before </body>:

				
					<script>
  // ==========================================
  // AGREEMENT LOADER SYSTEM (Company + Service)
  // ==========================================

  (function () {
    // 1) Where the agreement files live, relative to THIS quote page.
    const agreementBasePath = "agreements/";

    // 2) Map company codes to agreement filenames.
    const agreementByCompany = {
      efb:  "agreement-efb.html",
      iabf: "agreement-iabf.html",
      bhjr: "agreement-bhjr.html",
      esk:  "agreement-esk.html",
      oehr: "agreement-oehr.html",
      jcs:  "agreement-jcs.html"
      // shs intentionally omitted
    };

    // Get selected company code (from hidden field or select)
    function getSelectedCompanyCode() {
      var hiddenCodeEl = document.getElementById("companyCode");
      if (hiddenCodeEl && hiddenCodeEl.value) {
        return hiddenCodeEl.value;
      }

      var selectEl = document.getElementById("companySelect");
      if (selectEl && selectEl.value) {
        return selectEl.value;
      }

      return "";
    }

    // Get the first non-empty service selected in the Services table
    function getPrimaryServiceText() {
      var selects = document.querySelectorAll(".services-block .service-select");
      if (!selects || !selects.length) return "";

      for (var i = 0; i < selects.length; i++) {
        if (selects[i].value && selects[i].value.trim() !== "") {
          return selects[i].value.trim();
        }
      }
      return "";
    }

    // Detect a category key based on company + service text
    // This returns one of the anchor IDs you put on the <h3> headings
    function detectServiceCategory(companyCode, serviceText) {
      if (!serviceText) return "";

      var t = serviceText.toLowerCase();

      switch (companyCode) {
        // =========================================
        // FENCE COMPANIES: EFB / IABF
        // =========================================
        case "efb":
        case "iabf":
          if (t.includes("take down") || t.includes("haul away") || t.includes("removal") || t.includes("remove")) {
            return "remove";
          }
          if (t.includes("repair")) {
            if (t.includes("gate")) return "gate";
            return "repair";
          }
          if (t.includes("gate")) {
            return "gate";
          }
          if (t.includes("commercial")) {
            return "commercial";
          }
          if (t.includes("install")) {
            return "install";
          }
          // Default for fences
          return "install";

        // =========================================
        // BOSS HAUL JUNK REMOVAL (BHJR)
        // =========================================
        case "bhjr":
          if (t.includes("clean-out") || t.includes("clean out") || t.includes("cleanout")) {
            return "cleanout";
          }
          if (t.includes("construction")) {
            return "construction";
          }
          if (t.includes("yard")) {
            return "yard";
          }
          if (t.includes("appliance") || t.includes("furniture")) {
            return "appliance";
          }
          // Default: standard haul
          return "haul_standard";

        // =========================================
        // EXTERIOR SURFACE KLEEN (ESK)
        // =========================================
        case "esk":
          if (t.includes("soft wash") || t.includes("house wash")) {
            return "softwash";
          }
          if (t.includes("driveway") || t.includes("walkway") || t.includes("concrete") || t.includes("patio") || t.includes("pool deck")) {
            return "concrete";
          }
          if (t.includes("roof")) {
            return "roof";
          }
          if (t.includes("gutter")) {
            return "gutter";
          }
          if (t.includes("window")) {
            return "windows";
          }
          return "";

        // =========================================
        // ODDS & ENDS HOME REPAIRS (OEHR)
        // =========================================
        case "oehr":
          if (t.includes("handyman") && t.includes("hour")) {
            return "handyman_hourly";
          }
          if (t.includes("flat") || t.includes("flat-rate")) {
            return "flat_repair";
          }
          if (t.includes("carpentry") || t.includes("trim")) {
            return "carpentry";
          }
          if (t.includes("fan") || t.includes("light") || t.includes("electrical")) {
            return "electrical";
          }
          if (t.includes("faucet") || t.includes("disposal") || t.includes("trap") || t.includes("plumbing")) {
            return "plumbing";
          }
          if (t.includes("door") || t.includes("gate")) {
            return "door_gate";
          }
          return "";

        // =========================================
        // JCS PRO MANAGEMENT & MAINTENANCE (JCS)
        // =========================================
        case "jcs":
          if (t.includes("maintenance plan") || t.includes("scheduled maintenance") || t.includes("seasonal maintenance")) {
            return "maintenance_plan";
          }
          if (t.includes("turnover") || t.includes("punch list")) {
            return "turnover";
          }
          if (t.includes("inspection")) {
            return "inspection";
          }
          if (t.includes("lock") || t.includes("rekey")) {
            return "lock_rekey";
          }
          if (t.includes("cleaning coordination") || t.includes("exterior cleaning") || t.includes("coordination")) {
            return "exterior_coord";
          }
          return "";

        default:
          return "";
      }
    }

    // Build the full URL (file + optional #anchor)
    function buildAgreementUrl(companyCode) {
      var fileName = agreementByCompany[companyCode];
      if (!fileName) return "";

      var primaryService = getPrimaryServiceText();
      var categoryKey = detectServiceCategory(companyCode, primaryService);

      if (categoryKey) {
        return agreementBasePath + fileName + "#" + categoryKey;
      }
      return agreementBasePath + fileName;
    }

    function openAgreementForCompanyAndService() {
      var companyCode = getSelectedCompanyCode();

      if (!companyCode) {
        alert("Please select a company in the Company Selector before viewing the Agreement.");
        return;
      }

      var url = buildAgreementUrl(companyCode);

      if (!url) {
        alert("No Agreement has been configured yet for this company.");
        return;
      }

      window.open(url, "_blank");
    }

    // Wire up button
    function initAgreementLoader() {
      var btn = document.getElementById("viewAgreementBtn");
      if (!btn) return;
      btn.addEventListener("click", openAgreementForCompanyAndService);
    }

    if (document.readyState === "loading") {
      document.addEventListener("DOMContentLoaded", initAgreementLoader);
    } else {
      initAgreementLoader();
    }
  })();
</script>

				
			

What this now does

  1. Reads companyCode (efb, iabf, bhjr, esk, oehr, jcs).

  2. Looks at the first non-empty service dropdown in your Services table.

  3. Uses keywords in that service text to decide a category key like:

    • install, repair, gate, remove, softwash, concrete, haul_standard, etc.

  4. Builds a URL:

    • agreements/agreement-efb.html#install

    • agreements/agreement-bhjr.html#cleanout

    • agreements/agreement-esk.html#roof

  5. Opens that Agreement page directly at the correct section.

If no service is selected yet, it will just open the top of the agreement for that company (no #anchor).

Selvage Home Services Admin