Skip to content

Brand Profile

The brand profile (Account page, /account) defines the surface the platform protects. It feeds both scan dispatch (via owned domains) and social discovery (via handles and keywords).

Field Purpose
Brand identity Display/brand name used in matching and reports
Owned domains Your domains — seeds for lookalike generation, enrichment, and scoring context
Brand names Alternate names the platform treats as protected
Social handles Official handles (twitter, linkedin, instagram, facebook, youtube, tiktok, github)
Keywords Brand-associated terms, expanded by AI into derived keywords
Logo Uploaded via Active Storage; appears in reports and brand context
Webhook URL Optional scan-completion webhook target

Owned domains and social handles are managed with a nested-list UI backed by the nested_list Stimulus controller.

Saving the profile triggers:

  • Domain enrichmentEnrichDomainJob calls Python POST /v1/domain/enrich for each owned domain; results (DNS, RDAP/WHOIS, HTTP, TLS, screenshot) are stored in domain_profiles and streamed back over domain_profiles.
  • Social enrichmentEnrichSocialHandleJob calls Python POST /v1/social/enrich for each handle; results land in social_profiles.
  • Keyword expansion — when keywords change, ExpandKeywordsJob asks the LLM to infer additional keywords (rate-limited to 4 expansions per 30 minutes per user) and persists them as derived keywords.

A scan only dispatches when the profile is complete (at least one owned domain enriched) and a scan is not already active. The dashboard surfaces an alert if the profile is incomplete.