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

# Overview

> Browse all available modules in GBG GO, organised by category. Search and filter to find the right module for your journey.

export const ModuleFilter = () => {
  const [search, setSearch] = useState("");
  const [category, setCategory] = useState("all");
  const [dropdownOpen, setDropdownOpen] = useState(false);
  const categories = [{
    value: "all",
    label: "All categories"
  }, {
    value: "documents",
    label: "Documents"
  }, {
    value: "biometrics",
    label: "Biometrics"
  }, {
    value: "consortium-insights",
    label: "Consortium Insights"
  }, {
    value: "compliance-screening",
    label: "Compliance Screening"
  }, {
    value: "data",
    label: "Data"
  }, {
    value: "digital-identities-insights",
    label: "Digital Identities Insights"
  }, {
    value: "others",
    label: "Others"
  }];
  const selectedLabel = categories.find(c => c.value === category)?.label || "All categories";
  useEffect(() => {
    const sections = document.querySelectorAll("[data-module-category]");
    const terms = search.toLowerCase().trim().split(/\s+/).filter(Boolean);
    let visibleCount = 0;
    sections.forEach(section => {
      const sectionCat = section.getAttribute("data-module-category");
      const matchesCat = category === "all" || sectionCat === category;
      if (!matchesCat) {
        section.style.setProperty("display", "none", "important");
        return;
      }
      const cards = section.querySelectorAll("[data-module-name]");
      let sectionHasVisible = false;
      cards.forEach(card => {
        const name = (card.getAttribute("data-module-name") || "").toLowerCase();
        const desc = (card.getAttribute("data-module-desc") || "").toLowerCase();
        const haystack = `${name} ${desc} ${sectionCat}`;
        const matchesSearch = terms.length === 0 || terms.every(t => haystack.includes(t));
        if (matchesSearch) {
          card.style.removeProperty("display");
          visibleCount++;
          sectionHasVisible = true;
        } else {
          card.style.setProperty("display", "none", "important");
        }
      });
      if (sectionHasVisible) {
        section.style.removeProperty("display");
      } else {
        section.style.setProperty("display", "none", "important");
      }
    });
    const counter = document.getElementById("module-results-count");
    if (counter) {
      if (search || category !== "all") {
        counter.style.display = "";
        counter.textContent = `Showing ${visibleCount} module${visibleCount !== 1 ? "s" : ""}`;
      } else {
        counter.style.display = "none";
      }
    }
    const noResults = document.getElementById("module-no-results");
    if (noResults) {
      noResults.style.display = visibleCount === 0 && (search || category !== "all") ? "" : "none";
    }
    const clearBtn = document.getElementById("module-clear-filters");
    if (clearBtn) {
      clearBtn.style.display = search || category !== "all" ? "" : "none";
    }
  }, [search, category]);
  useEffect(() => {
    const handleClickOutside = e => {
      if (!e.target.closest(".module-category-dropdown")) {
        setDropdownOpen(false);
      }
    };
    document.addEventListener("click", handleClickOutside);
    return () => document.removeEventListener("click", handleClickOutside);
  }, []);
  return <div style={{
    marginBottom: "1.5rem",
    padding: "1rem",
    backgroundColor: "var(--bg-muted, #f9fafb)",
    borderRadius: "0.5rem"
  }}>
      <div style={{
    marginBottom: "0.75rem"
  }}>
        <input type="text" placeholder="Search modules by name or description..." value={search} onChange={e => setSearch(e.target.value)} style={{
    width: "100%",
    padding: "0.5rem 1rem",
    border: "1px solid #d1d5db",
    borderRadius: "0.5rem",
    fontSize: "0.875rem",
    backgroundColor: "var(--bg-surface, #fff)",
    color: "var(--text-primary, inherit)",
    outline: "none"
  }} />
      </div>
      <div style={{
    display: "flex",
    gap: "0.75rem",
    flexWrap: "wrap",
    alignItems: "center"
  }}>
        <div className="module-category-dropdown" style={{
    position: "relative"
  }}>
          <button onClick={e => {
    e.stopPropagation();
    setDropdownOpen(!dropdownOpen);
  }} style={{
    padding: "0.5rem 1rem",
    background: "var(--bg-surface, white)",
    border: "1px solid #d1d5db",
    borderRadius: "0.5rem",
    fontSize: "0.875rem",
    fontWeight: 500,
    cursor: "pointer",
    display: "flex",
    alignItems: "center",
    gap: "0.5rem",
    color: "var(--text-primary, inherit)"
  }}>
            {selectedLabel}
            <span style={{
    fontSize: "0.625rem"
  }}>{dropdownOpen ? "\u25B2" : "\u25BC"}</span>
          </button>
          {dropdownOpen && <div style={{
    position: "absolute",
    zIndex: 10,
    marginTop: "0.25rem",
    width: "12rem",
    background: "var(--bg-surface, white)",
    border: "1px solid #d1d5db",
    borderRadius: "0.5rem",
    boxShadow: "0 10px 15px -3px rgba(0,0,0,0.1)",
    overflow: "hidden"
  }}>
              {categories.map(c => <button key={c.value} className="module-dropdown-option" onClick={() => {
    setCategory(c.value);
    setDropdownOpen(false);
  }} style={{
    display: "block",
    width: "100%",
    padding: "0.5rem 1rem",
    fontSize: "0.875rem",
    textAlign: "left",
    border: "none",
    cursor: "pointer",
    transition: "background-color 0.15s",
    backgroundColor: "transparent",
    fontWeight: category === c.value ? 600 : 400,
    color: "var(--text-primary, inherit)"
  }}>
                  {c.label}
                </button>)}
            </div>}
        </div>

        <button id="module-clear-filters" onClick={() => {
    setSearch("");
    setCategory("all");
  }} style={{
    display: "none",
    padding: "0.5rem 1rem",
    fontSize: "0.875rem",
    fontWeight: 500,
    color: "#dc2626",
    background: "transparent",
    border: "none",
    cursor: "pointer"
  }}>
          Clear all filters
        </button>

        <div id="module-results-count" style={{
    display: "none",
    marginLeft: "auto",
    fontSize: "0.875rem",
    color: "#6b7280"
  }} />
      </div>
    </div>;
};

<div className="module-library-page prose dark:prose-invert max-w-6xl mx-auto px-6 py-10">
  # Overview

  <p className="text-lg text-gray-600 dark:text-gray-400"><a href="/docs/go-v2/get-started/key-concepts#modules">Modules</a> are the building blocks of journeys in GBG GO. Combine modules such as document verification, biometric checks, and data verification to build eKYC (electronic Know Your Customer) solutions and other comprehensive identity workflows.</p>

  <Note>Modules labelled with a green **v2** badge have an updated variant available for use in GBG GO v2.</Note>

  <ModuleFilter />

  <div id="module-no-results" style={{ display: "none", textAlign: "center", padding: "2rem 1rem", color: "#9ca3af" }}>
    <p style={{ fontSize: "1rem", fontWeight: 500 }}>No modules found</p>
    <p style={{ fontSize: "0.875rem" }}>Try adjusting your search or filter.</p>
  </div>

  <div data-module-category="documents">
    ## Documents

    <CardGroup cols={3}>
      <div data-module-name="NFC Chip Authentication" data-module-desc="Verify data from NFC chips in electronic identity documents">
        <Card title="NFC Chip Authentication" icon="wifi" href="/docs/go-v2/platform/modules/documents/nfc-chip-authentication">
          Verify data from NFC chips in electronic identity documents.
        </Card>
      </div>

      <div data-module-name="Document Attachments" data-module-desc="Capture and attach supplementary documents to a journey">
        <Card title="Document Attachments" icon="paperclip" href="/docs/go-v2/platform/modules/documents/document-attachments">
          Capture and attach supplementary documents to a journey.
        </Card>
      </div>

      <div data-module-name="Document Authentication" data-module-desc="Check security features and integrity of identity documents" data-module-v2>
        <Card title="Document Authentication" icon="shield-check" href="/docs/go-v2/platform/modules/documents/document-authentication">
          Check security features and integrity of identity documents.
        </Card>
      </div>

      <div data-module-name="Document Classification" data-module-desc="Identify and classify the type of identity document captured" data-module-v2>
        <Card title="Document Classification" icon="file-magnifying-glass" href="/docs/go-v2/platform/modules/documents/document-classification">
          Identify and classify the type of identity document captured.
        </Card>
      </div>

      <div data-module-name="Document Extraction" data-module-desc="Extract fields like name, date of birth, and document number" data-module-v2>
        <Card title="Document Extraction" icon="file-export" href="/docs/go-v2/platform/modules/documents/document-extraction">
          Extract fields like name, date of birth, and document number.
        </Card>
      </div>
    </CardGroup>
  </div>

  <div data-module-category="biometrics">
    ## Biometrics

    <CardGroup cols={3}>
      <div data-module-name="Facematch Verification" data-module-desc="Compare a selfie against a document photo to confirm identity" data-module-v2>
        <Card title="Facematch Verification" icon="face-smile" href="/docs/go-v2/platform/modules/biometrics/facematch-verification">
          Compare a selfie against a document photo to confirm identity.
        </Card>
      </div>

      <div data-module-name="Liveness Verification" data-module-desc="Confirm a real person is present during verification" data-module-v2>
        <Card title="Liveness Verification" icon="face-viewfinder" href="/docs/go-v2/platform/modules/biometrics/liveness-verification">
          Confirm a real person is present during verification.
        </Card>
      </div>
    </CardGroup>
  </div>

  <div data-module-category="consortium-insights">
    ## Consortium Insights

    <CardGroup cols={3}>
      <div data-module-name="GBG Trust" data-module-desc="Detect application fraud, identity takeover, and mule activity using GBG Trust Network consortium intelligence" data-module-v2>
        <Card title="GBG Trust" icon="users-line" href="/docs/go-v2/platform/modules/consortium-insights/gbg-trust">
          Detect fraud signals using GBG Trust Network consortium intelligence.
        </Card>
      </div>
    </CardGroup>
  </div>

  <div data-module-category="data">
    ## Data

    <CardGroup cols={3}>
      <div data-module-name="Data Verification" data-module-desc="Verify identity against trusted consumer and government data sources">
        <Card title="Data Verification" icon="database" href="/docs/go-v2/platform/modules/data/data-verification">
          Verify identity against trusted data sources.
        </Card>
      </div>
    </CardGroup>
  </div>

  <div data-module-category="compliance-screening">
    ## Compliance Screening

    <CardGroup cols={3}>
      <div data-module-name="PEPs and Sanctions" data-module-desc="Screen individuals against PEP databases and international sanctions lists" data-module-v2>
        <Card title="PEPs and Sanctions" icon="user-shield" href="/docs/go-v2/platform/modules/compliance-screening/peps-and-sanctions">
          Screen individuals against PEP and sanctions lists.
        </Card>
      </div>
    </CardGroup>
  </div>

  <div data-module-category="digital-identities-insights">
    ## Digital Identities Insights

    <CardGroup cols={3}>
      <div data-module-name="Phone Insights" data-module-desc="Verify and risk-assess phone numbers using identity matching and fraud indicators such as SIM swap and call forwarding">
        <Card title="Phone Insights" icon="phone" href="/docs/go-v2/platform/modules/digital-identities-insights/phone-insights">
          Verify and risk-assess phone numbers with identity and fraud checks.
        </Card>
      </div>
    </CardGroup>
  </div>

  <div data-module-category="others">
    ## Others

    <CardGroup cols={3}>
      <div data-module-name="Age Verification" data-module-desc="Check if an individual meets a specified age requirement" data-module-v2>
        <Card title="Age Verification" icon="calendar-check" href="/docs/go-v2/platform/modules/others/age-verification">
          Check if an individual meets a specified age requirement.
        </Card>
      </div>
    </CardGroup>
  </div>
</div>
