> ## Documentation Index
> Fetch the complete documentation index at: https://docs.camo.ag/llms.txt
> Use this file to discover all available pages before exploring further.

# User Guides

> How-to guides, FAQs, and video tutorials. Filter by the role you work in or the object you're working on.

export const guides = [{
  "title": "Map-Centric Search and Default Location",
  "description": "How the map-first search experience works, and how to set the default locations your map opens to.",
  "href": "/search/map-centric-search-and-default-location",
  "tags": ["Parcels"]
}, {
  "title": "Using the Smart Search Feature",
  "description": "Search by map location, owner, operation, farm, or contact from the search bar on desktop or mobile.",
  "href": "/search/using-the-smart-search-feature",
  "tags": ["Parcels", "Operations", "Contacts"]
}, {
  "title": "Search by Section, Township, Range",
  "description": "Use the Section/Township/Range search under Land Boundaries to outline and select parcels.",
  "href": "/search/search-by-section-township-range",
  "tags": ["Parcels"]
}, {
  "title": "Global Search Tips, Tricks, and Enhancements",
  "description": "Video walkthrough of search shortcuts and recent enhancements to global search.",
  "href": "/search/global-search-tips-tricks-and-enhancements",
  "tags": ["Parcels", "Operations", "Contacts"]
}, {
  "title": "Navigation Updates to STR Search on the Map",
  "description": "Where Section/Township/Range search moved to in the map menu.",
  "href": "/search/navigation-updates-to-str-search-on-the-map-and-menu-options",
  "tags": ["Parcels"]
}, {
  "title": "Search By Addresses",
  "description": "Enter one known address to surface every connected entity and all the parcels they own.",
  "href": "/search/search-by-addresses",
  "tags": ["Parcels", "Operations", "Operation Connections", "Sales Reps"]
}, {
  "title": "Using the Draw Polygon Tool",
  "description": "Draw a field or parcel by hand, measure precise areas, and isolate non-productive acres.",
  "href": "/parcels/using-the-draw-polygon-tool",
  "tags": ["Parcels", "Farms", "Appraisers"]
}, {
  "title": "Using the Cut Tool",
  "description": "Divide a field into multiple fields, subdivide a parcel, or split off acres along a border.",
  "href": "/parcels/using-the-cut-tool",
  "tags": ["Parcels", "Farms", "Appraisers"]
}, {
  "title": "Adding an APN to a Parcel",
  "description": "Enter a Tax Parcel ID manually when the county assessor ID is missing.",
  "href": "/parcels/adding-an-apn-to-a-parcel",
  "tags": ["Parcels"]
}, {
  "title": "Uploading Documents to a Property",
  "description": "Upload, categorize, and set expiration dates on property documents, then audit them with the Documents report.",
  "href": "/parcels/uploading-documents-to-a-property",
  "tags": ["Parcels", "Farms", "Reports"]
}, {
  "title": "Adding Points to a Property",
  "description": "Mark wind turbines, irrigation pivots, wells, grain bins, and gate access on a claimed property.",
  "href": "/parcels/adding-points-to-a-property-wind-turbines-irrigation-pivots-etc",
  "tags": ["Parcels", "Farms"]
}, {
  "title": "Adding Tax Payments to a Parcel",
  "description": "Track upcoming property tax payments and mark them complete from the parcel record.",
  "href": "/parcels/adding-tax-payments-to-a-parcel",
  "tags": ["Parcels", "Farms", "Financial Officers"]
}, {
  "title": "Quickly Edit Acre Types Across Multiple Fields",
  "description": "Video: bulk-update acre types without editing each field one at a time.",
  "href": "/parcels/quickly-edit-acre-types-across-multiple-fields",
  "tags": ["Parcels", "Farms"]
}, {
  "title": "What are Operations in CamoAg?",
  "description": "What an Operation represents, how it is created, and how it replaces the old network view.",
  "href": "/operations/what-are-operations-in-camoag",
  "tags": ["Operations", "Operation Connections", "Contacts"]
}, {
  "title": "Navigating the Operation Profile",
  "description": "Video tour of the Operation profile and the data on each panel.",
  "href": "/operations/navigating-the-operation-profile",
  "tags": ["Operations", "Sales Reps"]
}, {
  "title": "Operator: Reports, Data, and Use Cases",
  "description": "Which operator reports exist, where the data comes from, and how teams use them.",
  "href": "/operations/operator-reports-data-and-use-cases",
  "tags": ["Operations", "Reports", "Sales Reps"]
}, {
  "title": "CamoAg Operator Map Layer",
  "description": "How operators are classified into acreage buckets from subsidy payment data, and how to filter the layer.",
  "href": "/operations/camoag-operator-map-layer",
  "tags": ["Operations", "Sales Reps", "Marketing"]
}, {
  "title": "Editing Estimated Operator Acres",
  "description": "Video: adjust a producer's estimated operated acres when you know better than the estimate.",
  "href": "/operations/editing-estimated-operator-acres",
  "tags": ["Operations"]
}, {
  "title": "Operators Report",
  "description": "Filter producers by county, acre bucket, crop, tags, and Producer Score.",
  "href": "/operations/operators-report",
  "tags": ["Operations", "Reports", "Sales Reps", "Credit Risk"]
}, {
  "title": "Merging Operations",
  "description": "Merge multiple entities into a single operation so the whole ownership footprint shows on the map, then set its primary location.",
  "href": "/operations/connecting-multiple-operations",
  "tags": ["Operations", "Operation Connections", "Contacts"]
}, {
  "title": "Connecting Operations",
  "description": "Keep two entities separate while recording the relationship between them.",
  "href": "/operations/connecting-operations",
  "tags": ["Operations", "Operation Connections"]
}, {
  "title": "Editing an Operation",
  "description": "Rename an operation, set its category, adjust estimated acres, and pick a primary operating location.",
  "href": "/operations/editing-an-operation",
  "tags": ["Operations", "Contacts"]
}, {
  "title": "Operation Tags Definitions",
  "description": "Definitions for every operation tag, from market presence and branding to ownership and investor profile.",
  "href": "/operations/operation-tags-definitions",
  "tags": ["Operations", "Sales Reps", "Marketing", "Credit Risk"]
}, {
  "title": "Creating and Editing a Contact",
  "description": "Add a customer or prospect so they appear on the map and in reports.",
  "href": "/contacts/creating-a-contact",
  "tags": ["Contacts", "Sales Reps"]
}, {
  "title": "Editing a Contact in CamoAg",
  "description": "Edit a contact from the map or the Contacts dashboard, and what changes when a CRM is integrated.",
  "href": "/contacts/editing-a-contact-in-camoag",
  "tags": ["Contacts", "Sales Reps"]
}, {
  "title": "Creating and Managing Tags",
  "description": "Classify, target, and prioritize producers and related entities with shared, repeatable tags.",
  "href": "/contacts/creating-and-managing-tags",
  "tags": ["Contacts", "Operations", "Sales Reps", "Marketing"]
}, {
  "title": "Viewing Contacts on the Map or Contacts Dashboard",
  "description": "Where contacts appear, how CRM updates propagate, and how long each surface takes to refresh.",
  "href": "/contacts/viewing-contacts-on-the-map-or-contacts-dashboard",
  "tags": ["Contacts", "Reports", "Sales Reps"]
}, {
  "title": "Requesting Contact Information for a Landowner",
  "description": "Enrich a landowner record with third-party business and consumer data, including Do Not Call warnings.",
  "href": "/contacts/requesting-contact-information-for-a-landowner",
  "tags": ["Contacts", "Sales Reps", "Marketing"]
}, {
  "title": "Contacts Report",
  "description": "Pull a list of your contacts in a given area, or from the Farm Sales layer ahead of an auction.",
  "href": "/contacts/contacts-report",
  "tags": ["Contacts", "Reports", "Sales Reps", "Marketing"]
}, {
  "title": "Contacts (CSV)",
  "description": "Field-by-field spec for the bulk contact import, one row per contact.",
  "href": "/contacts/camoag-contact-import",
  "tags": ["Contacts"]
}, {
  "title": "Adding a Property Using Farm Builder",
  "description": "The four-step Farm Builder workflow, plus county acres vs. calculated acres and CLU fields.",
  "href": "/farms/adding-a-property-to-your-account-using-farm-builder",
  "tags": ["Farms", "Parcels"]
}, {
  "title": "Properties Added to Your Account",
  "description": "A tour of the farm page: Farmland Insights, yield and rent data, Market Analysis, and Tax & Financial.",
  "href": "/farms/properties-added-to-your-account",
  "tags": ["Farms", "CMA", "Reports", "Financial Officers"]
}, {
  "title": "Editing a Farm or Field Name",
  "description": "Rename a farm, field, or parcel from the farm details page.",
  "href": "/farms/editing-a-farm-or-field-name",
  "tags": ["Farms", "Parcels"]
}, {
  "title": "Moving a Field to Another Farm",
  "description": "Consolidate or split farms by moving a field, and the lease rules that apply.",
  "href": "/farms/moving-a-field-to-another-farm",
  "tags": ["Farms", "Parcels"]
}, {
  "title": "Deleting or Archiving a Property or Field",
  "description": "When to archive versus delete, and the lease, comp, and CMA restrictions on deleting.",
  "href": "/farms/deleting-or-archiving-a-property-or-field",
  "tags": ["Farms", "Parcels"]
}, {
  "title": "Selecting Parcels from All Parcels Owned to Create a Farm",
  "description": "Video: build a farm directly from an owner's full parcel list.",
  "href": "/farms/selecting-parcels-from-all-parcels-owned-to-create-a-farm",
  "tags": ["Farms", "Parcels", "Operations"]
}, {
  "title": "Embedded Map",
  "description": "Copy an embed snippet and put an interactive, up-to-date farm map on your brokerage website.",
  "href": "/farms/embedded-map",
  "tags": ["Farms", "Marketing", "Customer Experience"]
}, {
  "title": "Updated Farms Page Filters and Soil Map Enhancements",
  "description": "Video: what changed on the Farms page filters and in the soil maps.",
  "href": "/farms/updated-farms-page-filters-and-soil-map-enhancements",
  "tags": ["Farms"]
}, {
  "title": "Overview of the Map Layers and Filters",
  "description": "What each layer shows — Operations, Land Boundaries, Contacts, Farms — and the advanced filters on each.",
  "href": "/map/overview-of-the-map-layers-and-filters",
  "tags": ["Parcels", "Operations", "Contacts", "Farm Sales"]
}, {
  "title": "Using the Map Tools",
  "description": "Reference for every tool in the map view: draw polygon, merge, cut, measure, and more.",
  "href": "/map/using-the-map-tools",
  "tags": ["Parcels", "Farms", "Appraisers"]
}, {
  "title": "Right-click Functions on Map",
  "description": "Generate a radius report, open a parcel in Google Earth, or copy coordinates from any point on the map.",
  "href": "/map/right-click-functions-on-map",
  "tags": ["Parcels", "Reports"]
}, {
  "title": "Filter Map by Crop Data Layer",
  "description": "Show the USDA Crop Data Layer and filter it by year and crop type.",
  "href": "/map/filter-map-by-crop-data-layer",
  "tags": ["Parcels", "Insurance"]
}, {
  "title": "Saving Map and Report Filters Using Bookmarks",
  "description": "Every applied filter gets a unique URL — bookmark it in Chrome, Firefox, Safari, or Edge.",
  "href": "/map/how-to-save-filters-applied-to-a-map-or-report-using-bookmarks",
  "tags": ["Reports"]
}, {
  "title": "Saving Map Filters Using Bookmarks",
  "description": "Short version of the bookmarking workflow for saved map filters.",
  "href": "/map/saving-map-filters-using-bookmarks",
  "tags": ["Reports"]
}, {
  "title": "Generating Aerial Maps Using Map Layers",
  "description": "Video: build an aerial map from the layers you have applied.",
  "href": "/map/generating-aerial-maps-using-map-layers",
  "tags": ["Parcels", "Farms", "Appraisers"]
}, {
  "title": "Notes",
  "description": "Record what you learn about a property or a person alongside the record it belongs to.",
  "href": "/notes/overview",
  "tags": ["Farms", "Parcels", "Operations", "Contacts"]
}, {
  "title": "Using the Farm Sales Map Layer",
  "description": "What each map marker means, which data source it came from, and how often it updates.",
  "href": "/farm-sales/using-the-farm-sales-map-layer",
  "tags": ["Farm Sales", "Appraisers"]
}, {
  "title": "Sharing an Upcoming Auction or Sold Farm",
  "description": "Send customers a link to an upcoming auction or a farm your organization sold.",
  "href": "/farm-sales/sharing-an-upcoming-auction-or-sold-farm-with-a-customer",
  "tags": ["Farm Sales", "Marketing", "Customer Experience", "Financial Officers"]
}, {
  "title": "Add an Upcoming Auction to Your Calendar",
  "description": "Add an auction from the Farm Sales layer straight to your calendar.",
  "href": "/farm-sales/add-an-upcoming-auction-to-your-calendar",
  "tags": ["Farm Sales"]
}, {
  "title": "Copying an Auction or Sold Farm to Make Edits",
  "description": "Copy a sale into your account and correct it — useful for split parcels or auctions not yet published.",
  "href": "/farm-sales/copying-an-auction-or-sold-farm-to-make-edits",
  "tags": ["Farm Sales", "CMA", "Appraisers"]
}, {
  "title": "Copying a Sale to Your Account",
  "description": "Video walkthrough of copying a public sale into your own account.",
  "href": "/farm-sales/copying-a-sale-to-your-account",
  "tags": ["Farm Sales", "CMA", "Appraisers"]
}, {
  "title": "Recently Created Auctions Report",
  "description": "Find newly added auctions by state, county, Farm Credit institution footprint, and acreage.",
  "href": "/farm-sales/recently-created-auctions-report",
  "tags": ["Farm Sales", "Reports", "Financial Officers", "Marketing"]
}, {
  "title": "Comps Created Report",
  "description": "View every private sales comp entered by someone in your organization.",
  "href": "/farm-sales/comps-created-report",
  "tags": ["Farm Sales", "CMA", "Reports", "Appraisers"]
}, {
  "title": "Creating & Editing a CMA",
  "description": "Build a comparative market analysis, and what each comp flag color tells you about its source.",
  "href": "/comp-tool/creating-editing-a-comparative-market-analysis-cma",
  "tags": ["CMA", "Farm Sales", "Farms", "Appraisers"]
}, {
  "title": "Creating or Editing Multiple CMAs for a Property",
  "description": "Create additional CMAs for the same farm and compare them against historical versions.",
  "href": "/comp-tool/creating-or-editing-multiple-cmas-for-a-property",
  "tags": ["CMA", "Farms", "Appraisers"]
}, {
  "title": "Creating a Private Comparable Sale",
  "description": "Record a sale visible only to your organization, including detail that never becomes public.",
  "href": "/comp-tool/creating-a-private-comparable-sale",
  "tags": ["CMA", "Farm Sales", "Appraisers"]
}, {
  "title": "Editing a Sale or Auction",
  "description": "Locate a sale from the Comps Created report or the map, then edit it — permissions permitting.",
  "href": "/comp-tool/editing-a-sale-or-auction",
  "tags": ["Farm Sales", "CMA", "Appraisers"]
}, {
  "title": "Sharing a CMA",
  "description": "Share a CMA by PDF or URL, and choose whether contact info and price values are included.",
  "href": "/comp-tool/sharing-a-cma",
  "tags": ["CMA", "Customer Experience", "Marketing"]
}, {
  "title": "Updating Branding on a CMA",
  "description": "Pick which brand and email appear on a shared CMA in multi-brand enterprise accounts.",
  "href": "/comp-tool/updating-branding-on-a-cma",
  "tags": ["CMA", "Marketing"]
}, {
  "title": "CMAs Created Report",
  "description": "Compare every CMA created in your organization, including multiple CMAs on the same subject property.",
  "href": "/comp-tool/cmas-created-report",
  "tags": ["CMA", "Reports", "Appraisers"]
}, {
  "title": "Using the Mortgages Data Layer",
  "description": "Read the color-coded mortgage layer and see which loans are associated with your organization.",
  "href": "/mortgages/using-the-mortgages-data-layer",
  "tags": ["Parcels", "Reports", "Financial Officers", "Credit Risk"]
}, {
  "title": "Tracking Property Taxes and Mortgages",
  "description": "Keep tax and loan obligations for a property in one place.",
  "href": "/mortgages/tracking-property-taxes-and-mortgages",
  "tags": ["Farms", "Parcels", "Financial Officers", "Credit Risk"]
}, {
  "title": "Adding a Mortgage to a Single Farm",
  "description": "Enter purchase details, loan details, and loan structure from the farm's Tax & Financial tab.",
  "href": "/mortgages/adding-a-mortgage-to-a-single-farm",
  "tags": ["Farms", "Financial Officers", "Credit Risk"]
}, {
  "title": "Adding a Mortgage to Multiple Parcels",
  "description": "Create a mortgage across parcels that don't belong to a single farm.",
  "href": "/mortgages/adding-a-mortgage-to-multiple-parcels",
  "tags": ["Parcels", "Financial Officers", "Credit Risk"]
}, {
  "title": "Editing a Mortgage",
  "description": "Update loan information and add or remove the parcels attached to a mortgage.",
  "href": "/mortgages/editing-a-mortgage",
  "tags": ["Parcels", "Financial Officers"]
}, {
  "title": "UCC Blanket Liens or Equipment Debtors Data",
  "description": "Investigate how many UCCs have been filed against a prospect for equipment purchases.",
  "href": "/ucc-filings/ucc-blanket-liens-or-equipment-debtors-data",
  "tags": ["Operations", "Reports", "Credit Risk", "Financial Officers"]
}, {
  "title": "UCC Blanket Liens",
  "description": "Filter the blanket lien report by debtor, secured party, filing number, and location.",
  "href": "/ucc-filings/ucc-blanket-liens",
  "tags": ["Operations", "Reports", "Credit Risk", "Financial Officers"]
}, {
  "title": "Planning Your Custom Map Layers",
  "description": "Read this first: how boundary and point features work before you start building layers.",
  "href": "/company-layers/planning-your-custom-map-layers",
  "tags": ["Reports", "Marketing", "Insurance"]
}, {
  "title": "Custom Map Layers from County or Township Boundaries",
  "description": "Build territory, water district, or office layers from county lines and townships.",
  "href": "/company-layers/creating-custom-map-layers-using-county-and-or-township-boundaries",
  "tags": ["Reports", "Sales Reps", "Insurance"]
}, {
  "title": "Creating Free Drawn Custom Map Layers",
  "description": "Draw your own layer categories, names, and features directly on the map.",
  "href": "/company-layers/creating-free-drawn-custom-map-layers",
  "tags": ["Reports", "Sales Reps", "Insurance"]
}, {
  "title": "Custom Map Layers: Area Boundaries (Bulk Upload)",
  "description": "CSV spec for uploading boundary layers such as insurance regions or sales regions.",
  "href": "/company-layers/creating-custom-map-layers-area-boundaries-bulk-upload",
  "tags": ["Reports", "Insurance", "Sales Reps"]
}, {
  "title": "Custom Map Layers: Location Points (Bulk Upload)",
  "description": "CSV spec for uploading point layers such as office locations or feed lots.",
  "href": "/company-layers/creating-custom-map-layers-location-points-bulk-upload",
  "tags": ["Reports", "Sales Reps"]
}, {
  "title": "Generating a Report from Custom Features of Interest",
  "description": "Run Comps Created, Contacts Pro, Land Sales Bulletin, and more inside a custom layer boundary.",
  "href": "/company-layers/generating-a-report-from-a-custom-features-of-interest-layers",
  "tags": ["Reports", "Contacts", "Farm Sales", "Sales Reps", "Marketing"]
}, {
  "title": "Editing Custom Company Map Layers",
  "description": "Change layer names, colors, attributes, and boundaries after a layer is live.",
  "href": "/company-layers/editing-custom-company-map-layers",
  "tags": ["Reports"]
}, {
  "title": "Archiving Custom Map Layers",
  "description": "Hide a layer from users, and how long you have to ask for it back.",
  "href": "/company-layers/archiving-custom-map-layers",
  "tags": ["Reports"]
}, {
  "title": "Reports, Data Sources, and Update Frequency",
  "description": "Every report, the data provider behind it, how often that data refreshes, and which features use it.",
  "href": "/training/use-cases/reports-data-sources-overview",
  "tags": ["Reports"]
}, {
  "title": "CamoAg Data Sources and Update Frequency",
  "description": "Quick reference for where CamoAg data comes from and when it updates.",
  "href": "/reports/camoag-data-sources-and-update-frequency",
  "tags": ["Reports"]
}, {
  "title": "Using the Report Filters and Downloading Data Tables",
  "description": "Filter expressions explained, with examples, plus how to download any data table.",
  "href": "/reports/using-the-report-filters-and-downloading-data-tables",
  "tags": ["Reports"]
}, {
  "title": "Scheduling a Report for Delivery",
  "description": "Set up recurring report delivery, and how alerts differ from a scheduled send.",
  "href": "/reports/scheduling-a-report-for-delivery",
  "tags": ["Reports"]
}, {
  "title": "Editing a Report Delivery Schedule",
  "description": "Change or remove a delivery schedule or alert you already set up.",
  "href": "/reports/editing-a-report-delivery-schedule",
  "tags": ["Reports"]
}, {
  "title": "Configuring Reports to be Delivered to Your Inbox",
  "description": "Video: get the reports you care about emailed on a schedule.",
  "href": "/reports/configuring-reports-to-be-delivered-to-your-inbox",
  "tags": ["Reports"]
}, {
  "title": "Saving and Sharing Reports",
  "description": "Video: save a filtered report and share it with your team.",
  "href": "/reports/saving-and-sharing-reports",
  "tags": ["Reports"]
}, {
  "title": "Accessing a Report via Right-click on the Map",
  "description": "Generate a list of party names within a set distance of any point on the map.",
  "href": "/reports/accessing-a-report-via-right-click-on-the-map",
  "tags": ["Reports", "Parcels", "Sales Reps"]
}, {
  "title": "Owners: Reports, Data, and Use Cases",
  "description": "Which owner reports exist, what data backs them, and how teams put them to work.",
  "href": "/reports/owners-reports-data-and-use-cases",
  "tags": ["Reports", "Operations", "Contacts", "Sales Reps"]
}, {
  "title": "Acreage Overview by Owner",
  "description": "Summarize a landowner's full ownership footprint across all of their entities and download the parcel list.",
  "href": "/reports/acreage-overview-by-owner",
  "tags": ["Reports", "Operations", "Operation Connections", "Parcels", "Sales Reps", "Credit Risk"]
}, {
  "title": "Largest Farmland Buyers and Sellers",
  "description": "Find the most active buyers and sellers in a county over any date range.",
  "href": "/reports/largest-farmland-buyers-and-sellers",
  "tags": ["Reports", "Farm Sales", "Sales Reps", "Marketing"]
}, {
  "title": "Accessing the Land Sales Bulletin Report",
  "description": "Where to find the Land Sales Bulletin report and what subscription it requires.",
  "href": "/reports/accessing-the-land-sales-bulletin-report",
  "tags": ["Reports", "Farm Sales", "Appraisers"]
}, {
  "title": "Generating a Report from a Custom Company Map Layer",
  "description": "Run any report scoped to a custom layer your organization created.",
  "href": "/reports/generating-a-report-from-a-custom-company-map-layer",
  "tags": ["Reports"]
}, {
  "title": "User Engagement Report",
  "description": "See who is logging in, which reports they open, and how they access the platform.",
  "href": "/reports/user-engagement-report",
  "tags": ["Reports"]
}, {
  "title": "AI-Powered Deep Research",
  "description": "Generate a PDF report on a contact or network covering holdings, operation size, affiliates, and addresses.",
  "href": "/ai-chat/ai-powered-deep-research",
  "tags": ["Operations", "Operation Connections", "Contacts", "Reports", "Sales Reps", "Credit Risk"]
}, {
  "title": "Personalizing Your Account",
  "description": "Set your profile photo, contact information, default map locations, and secondary email.",
  "href": "/account-settings/personalizing-your-account",
  "tags": ["CMA"]
}, {
  "title": "CamoAg Terms to Know",
  "description": "Glossary of platform terms — farm, parcel, field, operation, and more.",
  "href": "/account-settings/camo-ag-terms-to-know",
  "tags": ["Farms", "Parcels", "Operations", "Contacts"]
}, {
  "title": "User Management",
  "description": "Configure roles and permissions so users only see and do what they're supposed to.",
  "href": "/account-settings/role-based-access-control",
  "tags": []
}, {
  "title": "Adding Users & Assigning Permissions",
  "description": "Add users and grant access at the organization or legal entity level.",
  "href": "/account-settings/adding-users-assigning-permissions",
  "tags": []
}, {
  "title": "Assigning Permissions to Users (Single Sign-On)",
  "description": "How to provision and permission users when your organization uses SSO.",
  "href": "/account-settings/assigning-permissions-to-users-single-sign-on",
  "tags": []
}, {
  "title": "Removing Users from Your Account",
  "description": "Remove a user from your organization.",
  "href": "/account-settings/removing-users-from-your-account",
  "tags": []
}, {
  "title": "Embedded Map for Brokerages",
  "description": "Put an interactive CamoAg map inside your brokerage website: available layers, default views, iframe permissions, and what setup involves.",
  "href": "/map/embedded-map-for-brokerages",
  "tags": ["Parcels", "Farm Sales", "Marketing"]
}, {
  "title": "Creating User Groups",
  "description": "Group users to grant access to add-on features or specific reports.",
  "href": "/account-settings/creating-user-groups",
  "tags": ["Reports"]
}, {
  "title": "Creating or Resetting Your CamoAg Password",
  "description": "Set up a password for a new account or reset a forgotten one.",
  "href": "/account-settings/creating-or-resetting-your-camoag-password",
  "tags": []
}, {
  "title": "Updating Your Name or Email Address",
  "description": "Change your own name or email, and what to do if your organization uses SSO.",
  "href": "/account-settings/updating-your-name-or-email-address",
  "tags": []
}, {
  "title": "Updating the Address for Your Account",
  "description": "Update your organization's address and the addresses on its legal entities.",
  "href": "/account-settings/updating-the-address-for-your-account",
  "tags": []
}, {
  "title": "Adding or Updating Your Company Logo",
  "description": "Logo format and aspect ratio requirements for market analysis reports and downloaded maps.",
  "href": "/account-settings/adding-or-updating-your-company-logo",
  "tags": ["CMA", "Marketing"]
}, {
  "title": "How to Add a New API Client",
  "description": "Generate a Client ID and Client Secret for an integration.",
  "href": "/account-settings/how-to-add-a-new-api-client",
  "tags": []
}, {
  "title": "Creating Portfolios and Assigning Permissions",
  "description": "Create a portfolio, invite users, and set what each of them can do.",
  "href": "/portfolios/creating-portfolios-adding-users-and-assigning-permissions",
  "tags": ["Farms"]
}, {
  "title": "Adding Properties to a Portfolio",
  "description": "Add farms to a portfolio one at a time or in bulk from the Farms page.",
  "href": "/portfolios/adding-properties-to-a-portfolio",
  "tags": ["Farms"]
}, {
  "title": "Editing or Deleting Portfolios",
  "description": "Rename, re-describe, or delete a portfolio without affecting its farms or users.",
  "href": "/portfolios/editing-or-deleting-portfolios",
  "tags": ["Farms"]
}, {
  "title": "Generate a Report: Aerial, Soils, FEMA, Topography",
  "description": "Download map packets for a property as one combined PDF or as individual files.",
  "href": "/downloads/generate-a-report-aerial-soils-fema-topography-maps",
  "tags": ["Farms", "Reports", "Appraisers"]
}, {
  "title": "Downloading Soil Maps for a Farm or Individual Fields",
  "description": "Generate SSURGO soil maps for a whole farm or a single field, and how the soil rating is calculated.",
  "href": "/downloads/downloading-soil-maps-for-a-farm-or-individual-fields",
  "tags": ["Farms", "Appraisers"]
}, {
  "title": "Soil Capability Classes",
  "description": "What each soil capability class means for the suitability of the ground for field crops.",
  "href": "/downloads/soil-capability-classes",
  "tags": ["Farms", "Appraisers", "Insurance"]
}, {
  "title": "Generating PDF Copies of Maps Using Different Layers",
  "description": "Turn any combination of map layers — topography, FEMA, parcel IDs, CLUs — into a PDF.",
  "href": "/downloads/generating-pdf-copies-of-maps-using-different-layers",
  "tags": ["Farms", "Parcels", "Appraisers", "Marketing"]
}, {
  "title": "View Historical Imagery for a Property",
  "description": "Open a property in Google Earth, and download a KMZ so the boundaries come with it.",
  "href": "/downloads/view-historical-imagery-for-a-property",
  "tags": ["Farms", "Parcels", "Appraisers"]
}, {
  "title": "Viewing Historical Imagery",
  "description": "Video: step through historical aerial imagery for a parcel.",
  "href": "/downloads/viewing-historical-imagery",
  "tags": ["Parcels", "Appraisers"]
}, {
  "title": "Downloading Shapefiles",
  "description": "Export field or parcel boundary shapefiles from a property.",
  "href": "/downloads/downloading-shapefiles",
  "tags": ["Farms", "Parcels", "Appraisers"]
}, {
  "title": "Getting Started with the Deed Mapper",
  "description": "Create farm boundaries from legal survey descriptions — start here before the other deed guides.",
  "href": "/deed-plotter/getting-started-with-the-deed-mapper",
  "tags": ["Parcels", "Farms", "Appraisers"]
}, {
  "title": "Editing Calls",
  "description": "Go back and correct a call on a deeded parcel.",
  "href": "/deed-plotter/editing-calls",
  "tags": ["Parcels", "Appraisers"]
}, {
  "title": "Entering an Azimuth",
  "description": "Enter calls described in degrees clockwise from north, with no cardinal bearing.",
  "href": "/deed-plotter/entering-an-azimuth",
  "tags": ["Parcels", "Appraisers"]
}, {
  "title": "Salesforce Integration",
  "description": "Import client and prospect data from Salesforce using standard APIs.",
  "href": "/integrations/camoag-salesforce-integration",
  "tags": ["Contacts", "Sales Reps"]
}, {
  "title": "AgWare Integration",
  "description": "Import sales from AgWare Datalog into CamoAg farm sales via the UAAR XML spec.",
  "href": "/integrations/agware-integration",
  "tags": ["Farm Sales", "Appraisers"]
}, {
  "title": "Single Sign-On",
  "description": "SAML requirements and configuration for enabling SSO on your account.",
  "href": "/integrations/single-sign-on",
  "tags": []
}, {
  "title": "Products (CSV)",
  "description": "Bulk import spec for your product catalog, one row per product.",
  "href": "/integrations/camoag-product-import",
  "tags": ["Contacts", "Sales Reps"]
}, {
  "title": "Product Revenue Import (CSV)",
  "description": "Bulk import spec for aggregated purchase history per contact, by product category and year.",
  "href": "/integrations/camoag-product-sales-import",
  "tags": ["Contacts", "Sales Reps"]
}, {
  "title": "Custom Land Sales Import",
  "description": "Bulk sales import spec, with one row per parcel in a multi-parcel transaction.",
  "href": "/integrations/camoag-custom-land-sales-import",
  "tags": ["Farm Sales"]
}, {
  "title": "Branding & Logo Guidelines",
  "description": "Color, contrast, and logo requirements for white-labeled CamoAg experiences.",
  "href": "/integrations/branding-logo-guidelines",
  "tags": ["Marketing"]
}, {
  "title": "CamoAg to AgWare: Creating a Subject Property",
  "description": "Build a subject property in CamoAg and import it into AgWare for appraisal.",
  "href": "/agware/camoag-to-agware-workflow-creating-a-subject-property",
  "tags": ["Farms", "Parcels", "Appraisers"]
}, {
  "title": "CamoAg to AgWare: Creating a Sales Comp",
  "description": "Create a comp sale in CamoAg — from scratch or by copying a public sale — and move it into AgWare.",
  "href": "/agware/camoag-to-agware-workflow-creating-a-sales-comp",
  "tags": ["Farm Sales", "CMA", "Appraisers"]
}, {
  "title": "CamoAg iOS App for Apple",
  "description": "Download the CamoAg app from the App Store and get set up on your iPhone or iPad.",
  "href": "/mobile/camoag-ios-app-for-apple",
  "tags": ["iOS"]
}, {
  "title": "iOS: Getting Started",
  "description": "First-run settings for the iOS app: orientation, location sharing, default locations, and directions app.",
  "href": "/ios/getting-started",
  "tags": ["iOS"]
}, {
  "title": "CarPlay",
  "description": "Using CamoAg on your vehicle's CarPlay display.",
  "href": "/ios/carplay",
  "tags": ["CarPlay", "iOS"]
}, {
  "title": "Notes on iOS",
  "description": "Capture and review notes from the iOS app.",
  "href": "/ios/notes",
  "tags": ["iOS"]
}, {
  "title": "Installing CamoAg on a Phone or Tablet",
  "description": "Add CamoAg to your home screen on iOS or Android when you'd rather use the web version.",
  "href": "/mobile/installing-camoag-on-a-phone-or-tablet",
  "tags": ["iOS"]
}, {
  "title": "Plat Map: Enabling Location Services",
  "description": "Turn on location services so the plat map zooms to where you're standing.",
  "href": "/mobile/plat-map-enabling-location-services",
  "tags": ["iOS", "Parcels"]
}, {
  "title": "Accessing Driving Directions on a Mobile Device",
  "description": "Long-press a parcel on the plat map to get turn-by-turn directions to it.",
  "href": "/mobile/accessing-driving-directions-on-a-mobile-device",
  "tags": ["iOS", "Parcels"]
}, {
  "title": "Accessing Account Settings on a Mobile Device",
  "description": "Find the navigation menu and your account settings on a small screen.",
  "href": "/mobile/accessing-account-settings-on-a-mobile-device",
  "tags": ["iOS"]
}];

export const tagGroups = [{
  "label": "Roles",
  "tags": ["Appraisers", "Financial Officers", "Sales Reps", "Credit Risk", "Insurance", "Marketing", "Customer Experience"]
}, {
  "label": "Core objects",
  "tags": ["Farms", "Farm Sales", "CMA", "Parcels", "Operations", "Contacts", "Operation Connections", "Reports"]
}, {
  "label": "iOS",
  "tags": ["iOS", "CarPlay"]
}];

export const tagIcons = {
  "CMA": "chart-simple",
  "Farm Sales": "gavel",
  "Farms": "wheat-awn",
  "Parcels": "border-all",
  "Operation Connections": "diagram-project",
  "Operations": "tractor",
  "Contacts": "address-book",
  "Reports": "file-lines",
  "CarPlay": "car",
  "iOS": "mobile-screen-button"
};

export const GuidesFilter = ({guides, tagGroups, tagIcons}) => {
  const allTags = tagGroups.flatMap(g => g.tags);
  const iconFor = guide => {
    const match = guide.tags.find(tag => tagIcons[tag]);
    return match ? tagIcons[match] : "book-open";
  };
  const initial = () => {
    if (typeof window === "undefined") return {
      search: "",
      tags: []
    };
    const params = new URLSearchParams(window.location.search);
    const raw = params.get("tags");
    const wanted = raw ? raw.split(",").map(t => t.trim().toLowerCase()) : [];
    return {
      search: params.get("search") || "",
      tags: allTags.filter(tag => wanted.includes(tag.toLowerCase()))
    };
  };
  const start = initial();
  const [search, setSearch] = React.useState(start.search);
  const [selectedTags, setSelectedTags] = React.useState(start.tags);
  React.useEffect(() => {
    if (typeof window === "undefined") return;
    const params = new URLSearchParams(window.location.search);
    if (search) params.set("search", search); else params.delete("search");
    if (selectedTags.length) params.set("tags", selectedTags.join(",")); else params.delete("tags");
    const query = params.toString();
    window.history.replaceState(null, "", `${window.location.pathname}${query ? `?${query}` : ""}${window.location.hash}`);
  }, [search, selectedTags]);
  const toggleTag = tag => setSelectedTags(prev => prev.includes(tag) ? prev.filter(t => t !== tag) : [...prev, tag]);
  const clearFilters = () => {
    setSearch("");
    setSelectedTags([]);
  };
  const filtered = React.useMemo(() => guides.filter(guide => {
    if (search) {
      const q = search.toLowerCase();
      const hit = guide.title.toLowerCase().includes(q) || (guide.description || "").toLowerCase().includes(q) || guide.tags.some(tag => tag.toLowerCase().includes(q));
      if (!hit) return false;
    }
    if (selectedTags.length && !selectedTags.every(tag => guide.tags.includes(tag))) return false;
    return true;
  }), [search, selectedTags]);
  const hasFilters = search || selectedTags.length > 0;
  return <div className="guides-page">
      <header className="guides-header">
        <h1 className="guides-title">User Guides</h1>
        <p className="guides-subtitle">
          How-to guides, FAQs, and video tutorials. Filter by the role you work in or the object you're working on.
        </p>
      </header>

      <div className="guides-layout">
        <aside className="guides-sidebar">
          <div className="guides-filter-group">
            <label className="guides-filter-label" htmlFor="guides-search">Search</label>
            <input id="guides-search" type="text" placeholder="Search guides..." value={search} onChange={e => setSearch(e.target.value)} className="guides-filter-input" />
          </div>

          {tagGroups.map(group => <div key={group.label} className="guides-filter-group">
              <label className="guides-filter-label">{group.label}</label>
              <div className="guides-filter-buttons">
                {group.tags.map(tag => <button key={tag} type="button" onClick={() => toggleTag(tag)} className={selectedTags.includes(tag) ? "guides-filter-button active" : "guides-filter-button"}>
                    {tag}
                  </button>)}
              </div>
            </div>)}

          {hasFilters && <button type="button" onClick={clearFilters} className="guides-clear-button">
              Clear all filters
            </button>}
        </aside>

        <main className="guides-content">
          <div className="guides-results-count">
            {filtered.length} {filtered.length === 1 ? "guide" : "guides"}
          </div>

          {filtered.length > 0 ? <div className="guides-grid">
              {filtered.map(guide => <a key={guide.href} href={guide.href} className="guides-card">
                  <div className="guides-card-icon">
                    <Icon icon={iconFor(guide)} iconType="solid" color="#508e61" size={20} />
                  </div>
                  <h3 className="guides-card-title">{guide.title}</h3>
                  {guide.description && <p className="guides-card-description">{guide.description}</p>}
                  {guide.tags.length > 0 && <div className="guides-card-meta">
                      {guide.tags.map(tag => <span key={tag} className="guides-card-tag">{tag}</span>)}
                    </div>}
                </a>)}
            </div> : <div className="guides-no-results">
              <p>No guides match your filters.</p>
              <button type="button" onClick={clearFilters} className="guides-clear-button">
                Clear filters
              </button>
            </div>}
        </main>
      </div>
    </div>;
};

<GuidesFilter guides={guides} tagGroups={tagGroups} tagIcons={tagIcons} />
