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).
Fields
Section titled “Fields”| 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.
What happens on save
Section titled “What happens on save”Saving the profile triggers:
- Domain enrichment —
EnrichDomainJobcalls PythonPOST /v1/domain/enrichfor each owned domain; results (DNS, RDAP/WHOIS, HTTP, TLS, screenshot) are stored indomain_profilesand streamed back overdomain_profiles. - Social enrichment —
EnrichSocialHandleJobcalls PythonPOST /v1/social/enrichfor each handle; results land insocial_profiles. - Keyword expansion — when keywords change,
ExpandKeywordsJobasks the LLM to infer additional keywords (rate-limited to 4 expansions per 30 minutes per user) and persists them as derived keywords.
Gating
Section titled “Gating”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.