Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.wellapp.ai/llms.txt

Use this file to discover all available pages before exploring further.

BrowsingSignal is an append-only infrastructure entity that records hourly deltas of provider-domain visits flushed by the Chrome extension. Each row represents one (workspace, domain, hour-bucket) tuple: the count of visits accumulated since the last successful flush from that extension session. The provider-scoring pipeline aggregates rows within a 24-hour window to produce the signal_boost factor that ranks providers higher for workspaces that recently visited their domain. Rows have no soft-delete column and are pruned by the daily rescore cron after 90 days. The table is not exposed via Hasura and is internal-only.
NamingValue
ObjectBrowsingSignal
Resource type (JSON:API type)browsing_signal
Collection / records rootโ€” (not a records root)
REST base/v1/browsing-signals
Entity classBrowsingSignal
Internal object. Not currently exposed on the public REST API. The operations below describe the intended contract.

API operations

OperationMethod & pathStatus
ListGET /v1/browsing-signals๐ŸŸก Planned
RetrieveGET /v1/browsing-signals/{id}๐ŸŸก Planned
CreatePOST /v1/browsing-signals๐ŸŸก Planned
UpdatePATCH /v1/browsing-signals/{id}๐ŸŸก Planned
DeleteDELETE /v1/browsing-signals/{id}๐ŸŸก Planned

Data model

Attributes

FieldTypeRequiredConstraintsAllowed valuesDescription
browsing_signal_id๐Ÿ”’ system โ€” UUID (string)โœ… YesUNIQUE; generated via gen_random_uuid() at INSERTAny valid UUID v4Public-facing stable identifier for this browsing signal row. Generated by the database on insert; never supplied by callers.
domainstring (text)โœ… YesNOT NULL; no max-length constraint at the DB levelโ€”The provider domain that was visited (e.g. pennylane.com, stripe.com). Written by the Chrome extension flush handler; identifies which provider the workspace was browsing.
visit_countintegerโœ… YesNOT NULL; column type intโ€”Delta of visits to this domain recorded since the last successful flush from the Chrome extension. Used by the provider-scoring pipeline as the raw signal weight before aggregation.
last_visited_attimestamptzโœ… YesNOT NULLโ€”Timestamp of the most recent visit to this domain within the flush batch. Used to bound recency windows in the 24-hour aggregation pass.
created_at๐Ÿ”’ system โ€” timestamptzโšช No (defaulted)DEFAULT now(); set by DB on insert; also set via MikroORM onCreate hookโ€”Wall-clock timestamp of row insertion. Used as the composite index key for workspace-scoped time-range queries and as the pruning anchor for the 90-day cron cleanup.

Relationships

NameTypeRequiredDescription
workspaceto-one (ManyToOne)โœ… YesThe workspace whose Chrome extension produced this signal. Foreign key stored as workspace_pk with ON DELETE CASCADE โ€” deleting a workspace removes all its browsing signals. This is the tenant scope anchor for every query on the table.

System-computed

  • browsing_signal_id: generated via gen_random_uuid() at INSERT โ€” never supplied by the caller
  • created_at: set to now() by the database DEFAULT and additionally via MikroORM onCreate hook โ€” not user-supplied
  • No soft-delete (deleted_at column is absent): this is an append-only table; rows are pruned physically by the daily rescore cron after 90 days, not soft-deleted
  • No updated_at column: the entity is append-only by design; rows are never mutated after insertion
  • pk: internal serial primary key โ€” exposed only in the composite index definitions; never surfaced in the API response
  • workspace_pk: FK column written by MikroORM from the workspace relationship โ€” never set directly by the caller
  • Two composite indexes maintained automatically by Postgres: idx_browsing_signals_workspace_created (workspace_pk, created_at DESC) and idx_browsing_signals_workspace_last_visited (workspace_pk, last_visited_at DESC)

Example

{
  "data": {
    "type": "browsing_signal",
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "attributes": {
      "browsing_signal_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "domain": "pennylane.com",
      "visit_count": 4,
      "last_visited_at": "2026-06-02T08:45:00.000Z",
      "created_at": "2026-06-02T09:00:00.000Z"
    },
    "relationships": {
      "workspace": {
        "data": { "type": "workspace", "id": "ws_9f3a8b2c-1234-5678-abcd-000000000001" }
      }
    }
  }
}
Source: apps/api/src/database/entities/BrowsingSignal.ts ยท domain: ingestion ยท tier: Infrastructure