Datoro Media

How Network Intelligence works

A complete guide to the dashboard, its controls, the evidence behind each finding, and the limits of the current data.

← Back to dashboard

This is an internal, monitor-only intelligence tool. It turns public mention evidence and imported history into a review queue showing what is being said, where it happened, how urgent it may be, and what action could follow. It is a decision aid, not a complete index of the internet and not a tool for public engagement. The current operating scope is FXV-first. The registry keeps a clear path for expanding to the other registered brands later.

System check

These cards read the current hub.json export and its recorded provenance. They are a quick health check for the page you are looking at. A green card means the corresponding data is present in this snapshot. Amber means review is recommended. Red means the dashboard is reporting a real limitation or failure.

Checking

Checking dashboard systems

Loading the latest export and source provenance.

A failed collector is not treated as zero mentions. The dashboard shows source availability so a quiet-looking result is not mistaken for complete coverage.

1. Collect

Collectors query approved public sources and record every attempt, including successful runs, failures, rate limits, timestamps, and errors.

2. Enrich

Results are deduplicated, matched against the brand and routing registries, classified with deterministic rules, and retained with source evidence.

3. Present

The reporting step writes Markdown intelligence items, a weekly brief, and the static JSON export that this browser page reads.

Dashboard orientation

The main page is a static browser view of hub/dashboard/data/hub.json. It does not call collectors or SQLite directly. The controls change what is visible in your browser; they do not rewrite the source items or the export.

Area What it does What to know
Brand Selects All brands or one registered brand. The current operating scope is FXV-first. FeelXVideos, FeelMe, and Net69 are present in the registry so the hub can expand later.
Theme toggle Switches between dark and light presentation. Your choice is saved in this browser under datoro-dashboard-theme.
Network view Starts with the five-second view, then shows a separate high-attention queue followed by the broader action queue of findings that have not been marked taken care of in this browser. The high-attention queue isolates complaint, scam, refund, and churn-signal intents and shows owner, status, suggested action, age, and source. Both queues use the selected brand scope; the high-attention queue is stable when the general Signal filter changes.
Archive view Shows findings marked taken care of in this browser. Archive state is browser-local workflow housekeeping. It does not delete the Markdown item, remove source evidence, or change the generated export.
Data provenance view Shows latest source runs, targets, timestamps, run statuses, availability states, coverage confidence, counts, errors, and known coverage gaps. Use this view before treating a low count or quiet period as meaningful.
Brand mentions view Shows the raw normalized source feed separately from the classified action queue. Filter by global Brand scope, keyword variant, date range, platform, sentiment, intent, source type, or optional subreddit. Each row keeps its evidence quality, source link, source context, collection method, and availability state; author names and raw JSON are not shown.
Guide icon Opens this readme page. This page runs its own system check against the same export used by the dashboard.

Source availability and coverage confidence

The coverage panel and Data provenance view report the latest state of each source route. Coverage confidence describes what the recorded result supports; it is not a claim that the source is exhaustive.

State Meaning Confidence label How to read the count
AvailableThe route responded and returned one or more records.BoundedResults are available for this route and window; listed source gaps still limit completeness.
PartialSome configured queries, communities, pages, or records were incomplete.PartialThe count may omit activity and must not be treated as a complete volume.
UnavailableThe route failed, was blocked, or returned no usable result.NoneUnavailable is not zero activity.
Manual importEvidence was supplied through a human-controlled CSV/JSON or webhook handoff.ManualUseful for review, but not automated or exhaustive coverage.
No matchThe checked route completed without returning a matching record.Not establishedNo match is not proof of zero activity.

A repeated import can return existing records and insert zero new rows while remaining available or manual. The dashboard uses the returned count and explicit availability state, not the inserted-row count alone.

Five-second view

The Network view begins with a compact decision summary so a reviewer can identify the strongest available signal, its source, and the size of the action queue without opening the raw Brand mentions feed.

The summary is derived from the exported findings snapshot. It does not prove that a source was checked successfully or that the visible top signal is new; read the coverage and freshness information before treating it as current live activity.

Intake, freshness, and summary metrics

The four metric tiles are scoped to the selected brand and all findings. They are intentionally not narrowed by signal or browser-local archive filters. The scope label above the tiles makes this explicit.

Filters and how they combine

The Brand selector and Signal controls narrow the visible action queue. A finding remains visible only when it matches every active selection. The separate Brand mentions view has source-facing filters for keyword variant, date range, platform, sentiment, intent, source type, and the optional Reddit subreddit.

Control Options Matching rule
Signal All signals, Urgent attention, Heads up, Positive / neutral. Urgent is high risk. Heads up is moderate risk or negative sentiment. Positive / neutral is the remaining signal group.
Brand mentions Keyword variant, From date, To date, Platform, Sentiment, Intent, Source type, and optional Subreddit. Every active feed filter must match. Date bounds are inclusive and use the mention's observed date, with published or collection time as a fallback.
Clear all filters Appears when a Brand or Signal filter is active in the action queue, or when a source filter is active in Brand mentions. Each clear control resets the filters for its own view. The Brand mentions control does not change the global Brand selector, dashboard view, or archive records.

The general action queue remains intentionally compact. The separate high-attention queue carries the ownership and status fields needed for immediate review, while the raw Brand mentions view provides the detailed source filters needed for evidence review.

Finding anatomy

Each finding is a row on desktop and a stacked card on smaller screens. The four visible columns are:

Column Displayed information How to use it
ID and dates Signal dot before the stable NI-#### reference, optional review-state badge, first-seen date, and relative last-seen age. Use the signal and reference ID together when triaging or discussing the finding. A row becomes visually muted when its underlying last-seen date is at least 90 days old. The exact last-seen date, occurrence count, and item file path are intentionally omitted from the compact row.
What was found and source Concise finding summary, captured verbatim comment when it is distinct from the summary, and each source shown as Source: followed by its platform, date, and safe original link. Use the summary to understand the issue immediately, then read the evidence before acting. If no distinct captured comment exists, the dashboard says No verbatim captured rather than presenting an analyst summary as a quote.
Type The exported type label, with a safe fallback to the category or Needs review. Use it as a routing hint, not as proof that the suggested action has been reviewed by a human.
Suggested action Concise, team-directed action text, Asana copy button, and the archive or restore action. The team prefix identifies the intended handoff, such as Technical team, Management team, Content team, or Social team. The underlying export still retains routing and action-provenance fields for handoff compatibility.

Brand mentions

The Brand mentions view is the source-facing layer. It is intentionally separate from the action queue so a record can be reviewed before it becomes an intelligence item. Use the global Brand selector together with the feed filters to narrow by keyword variant, inclusive observed-date range, platform, sentiment, intent, source type, and optional subreddit. A row shows platform, source type, source context, evidence quality, observed date, matched term, retained excerpt, classification, collection method, availability state, and an original source link. Reddit-specific fields such as subreddit and parent post remain optional metadata. The feed never displays raw JSON or author names by default.

Finding actions

Archive state is per browser profile. Another user or another browser will not see the same local archive unless a future persistence workflow is designed and approved.

Data provenance view

The provenance view is the operational truth check. It renders one row for each latest recorded source run in the selected brand scope with:

Below the table, the page lists known coverage gaps from the export. A failed or rate-limited source remains visible as a source limitation. It is never silently converted into a successful zero-count run.

Warnings and failure states

The dashboard distinguishes problems that happen at different stages:

Data pools and current limitations

The dashboard is strongest where a source is healthy and the evidence is directly available. It is directional, not exhaustive.

Pool How it enters What it contributes Current limitation
Reddit RSS-first term search, configured subreddit sweeps, and best-effort thread/comment RSS; read-only OAuth is available as an opt-in parallel path. Community discussions, complaints, questions, product language, matched comments, parent titles, scores, and route provenance. RSS and thread feeds may be blocked, rate-limited, malformed, truncated, or incomplete. OAuth needs a registered app and local authorization. Limitations remain visible and are never represented as zero mentions.
EroScripts / Discourse Public search endpoint with pagination and retry handling. Niche forum discussion and technical or product signals. The current endpoint has returned HTTP 429 rate limits. Counts are not trusted until an approved access path is available.
Legacy FXV history Imported from the corrected legacy Mention Log export. Historical context, source URLs, dates, and recorded actions. Only the locally exported rows are available to the hub today. The remaining live Sheet rows still need reconciliation before migration is complete.
Manual and transition sources X saved searches, Google Alerts, F5Bot webhook or JSON import, Feedly, and optional web research. Additional coverage outside the automated collector pool. F5Bot requires webhook setup or JSON import; Google Alerts/search requires CSV or JSON import. Human review remains required before action.

What happens under the hood

The local hub uses a staged pipeline:

Raw state

hub/data/hub.db stores collection results and provenance. It is generated state and must not be hand-edited.

Rules and decisions

hub/registry/ defines brands, terms, and routing rules. Human-editable intelligence records live in the project-root items/ folder.

Reports and page

Reporting writes versioned weekly briefs and hub/dashboard/data/hub.json. The browser reads that JSON and renders the dashboard locally.

Local use and deployment

From the project root, serve the dashboard directory with a local HTTP server, then open the printed address:

cd hub
../hub/venv/bin/python -m http.server 8777 --directory dashboard

The static deployment path uses hub/dashboard as the output directory and no build command. The page and this readme use SHA-256 query strings for style.css, app.js, and readme.js. After changing one of those files, recalculate the hashes and update both HTML pages:

sha256sum hub/dashboard/style.css hub/dashboard/app.js hub/dashboard/readme.js

Cloudflare Pages and Cloudflare Access are off-site operational steps. The repository and dashboard contain internal findings and source evidence, so the hosted site must remain private and protected before it is shared.

First-time review checklist

  1. Confirm the selected brand and the export-generated timestamp.
  2. Read the intake banner, if present, and open Data provenance when any collector is unavailable or incomplete.
  3. Read the Five-second view for the top available signal, its age and source, and the action-queue count before opening the raw mentions view.
  4. Use the Brand selector and Signal controls to narrow the action queue. Remember that the metric tiles remain scoped to all findings for the selected brand.
  5. For a high-risk or surprising finding, read the captured evidence and open the original source URL.
  6. Check the finding signal and suggested action before deciding what to do.
  7. Use Copy for Asana to prepare a handoff, or Mark taken care of for local browser housekeeping. Archive is not deletion.
  8. Open Brand mentions to inspect raw source coverage. Use the keyword, date, platform, sentiment, intent, source-type, and subreddit filters, then open the original link and review availability, provenance, and known gaps before making a conclusion about market volume or silence.

Scope and guardrails