Every value rendered on the owner dashboard, mapped to the API field that supplies it. Confirms that no page shows fabricated data: everything numeric is either returned by an endpoint or derived from real fields, and unbacked areas are honest "coming soon" placeholders that display no invented numbers.
Each page lists what it shows and where the value comes from. Verdicts:
The value is a field returned by a real endpoint, or is computed in the frontend purely from real fields (counts, formatting, relative time).
The area has no endpoint. It renders a placeholder that states the feature is coming — it never invents numbers. Consistent with the dashboard's graceful-states rule.
Premium gating. The knowledge graph (Home summary card and the Knowledge page) is Pro-only. Non-premium users see the summary/rest of the page but the graph itself is replaced by an upgrade prompt. Knowledge stats + graph are only fetched for premium users (useKnowledgeStats / useKnowledgeGraph receive no page id otherwise), so free users' Facts tile reads —.
Containers: useHomeData → GET /v1/me, /v1/pages, …/social-links, …/documents, …/conversations?limit=5, …/analytics, …/knowledge/stats, …/knowledge/graph.
| Shown | Source | Verdict |
|---|---|---|
| Identity bar — name, @handle, public URL, created date, avatar | me.display_name / avatar_url / created_at, pages[0].slug | ✅ |
| Conversations & Visitors tiles (Today / 7d / 30d toggle) | GET …/analytics → conversations|visitors.{today,last_7_days,last_30_days} | ✅ |
| Facts tile | …/knowledge/stats.total_nodes (premium; — for free) | ✅ |
| Sources tile | Computed: count of non-empty source categories | ✅ |
| Your Summary text (N facts · M relationships · K sources) | knowledge/stats.total_nodes / total_edges + source counts | ✅ |
| Graph view | …/knowledge/graph.nodes / edges — Pro-gated (upgrade prompt for free) | ✅ |
| Recent conversations | …/conversations (title, channel, message_count, created_at) | ✅ |
| Feedback — most-asked topics, top references | No endpoint (conversation topic/reference analytics not built) | ⚠ |
Container: useKnowledgeData. Free users get the full-page paywall before this view renders.
| Shown | Source | Verdict |
|---|---|---|
| Stat bar — Facts, Relationships, Last sync | knowledge/stats.total_nodes / total_edges / last_ingested_at | ✅ |
| Sources connected | Computed from real counts | ✅ |
| Graph section | knowledge/graph (premium; upgrade placeholder otherwise) | ✅ |
| Sources catalog (files, socials, highlights, convos) | documents / social-links / pages[0].highlights / conversations | ✅ |
| Per-source "— facts" count | No per-source fact count in API (dash placeholder, not fabricated) | ⚠ |
| Recommendation banner copy | Static — recommendation pipeline not built | ⚠ |
| Strongest areas / Knowledge gaps / Visitor insights | No endpoint — coming-soon placeholders | ⚠ |
| Activity timeline | Derived from last_ingested_at / ingestion_status | ✅ |
knowledge/stats.entity_distribution (a type → count map) is returned by the API but currently unused. It could back "Strongest areas" and per-source fact counts without new backend work.
Fully backed — every displayed field maps to a real API field.
| Page / Shown | Source | Verdict |
|---|---|---|
| Agent — page purpose, promotion focus, save status | …/agent-config.page_purpose / focus | ✅ |
| Agent — "Agent brief" preview | Reflects the owner's own saved text (not a generated reply) | ✅ |
| Files — filename, size, added date, processing status, Public/Private, context | …/documents (filename, size_bytes, created_at, processing_status, visibility, is_published, context_text) | ✅ |
| Links — social handles, custom links | …/social-links (platform, label, url) | ✅ |
| Links — link-in-bio preview (avatar, @handle, buttons) | me + pages[0].slug + real links | ✅ |
| Shown | Source | Verdict |
|---|---|---|
| List — channel, message count, time, "You" role | …/conversations (channel, message_count, updated_at, visitor_role) | ✅ |
| Transcript | …/conversations/{id}.messages | ✅ |
| Context panel — channel, role, count, started/last-activity | Same record's real fields | ✅ |
| "Topic & sentiment coming soon" note | Static — analytics not built | ⚠ |
| Section | Source | Verdict |
|---|---|---|
| Account — name, username, avatar | me + pages[0].slug; writes via PUT /v1/me, PUT /v1/pages/{id}, POST /v1/me/avatar | ✅ |
| Subscription — plan tier | me.plan_tier | ✅ |
| Contact (phone), Notifications, Security | No endpoints — pending/coming-soon sections | ⚠ |
| Public Profile, Legal | Cross-links / static content (nav only) | ✅ |
These render honest "coming soon" copy. None display invented numbers. Listed here so future backend work has a checklist.
| Area | Would need |
|---|---|
| Home — Feedback (topics, references) | Conversation topic/reference analytics endpoint |
| Knowledge — Strongest areas | Per-entity-type confidence (could derive from entity_distribution) |
| Knowledge — Knowledge gaps | Gap-detection analysis |
| Knowledge — Visitor insights | Visitor question analytics |
| Knowledge — per-source fact counts | Facts-per-source rollup |
| Knowledge — recommendation banner copy | Recommendation pipeline |
| Conversations — topics/sentiment | Per-conversation topic + sentiment classification |
| Settings — Contact / Notifications / Security | Phone capture, notification prefs, password/connected-accounts endpoints |