> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vein.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Portfolio intelligence

> Read across the whole portfolio, with aggregated metrics, qualitative updates, and AI summaries.

export const Diagram = ({kind = "chain", steps = [], feedback = null, sources = [], decision = null, result = null, source = null, hub = null, branches = [], pairs = []}) => {
  const glyph = k => <svg viewBox="0 0 20 12" fill="none" aria-hidden="true" key={k}>
      <path d="M1 6h15.5" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" />
      <path d="M13.5 1.5 18.5 6l-5 4.5" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" strokeLinejoin="round" />
    </svg>;
  const arrow = k => <span className="vein-flow__chevron" key={`a${k}`}>
      {glyph(k)}
    </span>;
  const box = (n, k, variant) => n ? <div key={`n${k}`} className={variant ? `vein-flow__node vein-flow__node--${variant}` : "vein-flow__node"}>
        <span className="vein-flow__label">{n.label}</span>
        {n.note ? <span className="vein-flow__note">{n.note}</span> : null}
      </div> : null;
  const spine = paths => <div className="vein-flow__spine">
      <svg viewBox="0 0 100 100" preserveAspectRatio="none" fill="none">
        {paths.map(d => <path key={d} d={d} stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" vectorEffect="non-scaling-stroke" />)}
      </svg>
    </div>;
  if (kind === "merge") {
    return <div className="vein-flow">
        <div className="vein-flow__branching">
          <div className="vein-flow__stack">
            {sources.map((s, i) => <div className="vein-flow__row" key={s.label}>
                {box(s, i)}
              </div>)}
          </div>
          {}
          {spine(["M0 25C55 25 45 50 100 50", "M0 75C55 75 45 50 100 50"])}
          {arrow("d")}
          {box(decision, "d", "decision")}
          {arrow("r")}
          {box(result, "r", "strong")}
        </div>
      </div>;
  }
  if (kind === "fan") {
    return <div className="vein-flow">
        <div className="vein-flow__branching">
          {box(source, "s")}
          {arrow("s")}
          {box(hub, "h")}
          {}
          {spine(["M0 50C55 50 45 16.667 100 16.667", "M0 50H100", "M0 50C55 50 45 83.333 100 83.333"])}
          <div className="vein-flow__stack">
            {branches.map((b, i) => <div className="vein-flow__row" key={b.label}>
                {arrow(`b${i}`)}
                {box(b, `b${i}`)}
              </div>)}
          </div>
        </div>
      </div>;
  }
  if (kind === "compare") {
    return <div className="vein-flow">
        <div className="vein-flow__compare">
          {pairs.map((p, i) => <div className="vein-flow__pair" key={p.from.label}>
              {box(p.from, `f${i}`)}
              {arrow(`p${i}`)}
              {box(p.to, `t${i}`, "strong")}
            </div>)}
        </div>
      </div>;
  }
  const n = steps.length;
  const centre = i => `${((i + 0.5) / n * 100).toFixed(3)}%`;
  return <div className="vein-flow">
      <div className="vein-flow__track" style={{
    "--vein-flow-n": n
  }}>
        {steps.map((step, i) => <div className="vein-flow__cell" key={step.label}>
            {box(step, i, step.strong ? "strong" : null)}
            {i < n - 1 ? arrow(i) : null}
          </div>)}
      </div>

      {feedback ? <div className="vein-flow__loop">
          <div className="vein-flow__loop-path" style={{
    left: centre(feedback.to),
    right: `calc(100% - ${centre(feedback.from)})`
  }} />
          <span className="vein-flow__loop-chevron" style={{
    left: centre(feedback.to)
  }}>
            {glyph("loop")}
          </span>
          {feedback.label ? <span className="vein-flow__loop-label" style={{
    left: `calc((${centre(feedback.to)} + ${centre(feedback.from)}) / 2)`
  }}>
              {feedback.label}
            </span> : null}
        </div> : null}
    </div>;
};

The Dashboard is the view across everything you hold, assembled from the reports
your companies have submitted. Where the Portfolio page answers "what do I own",
the Dashboard answers "what is going on".

It has three tabs, and they answer different questions.

## Metrics

The default tab aggregates the financial metrics from every company's latest
verified report, the numbers that came from connected systems rather than from
a company's spreadsheet. Use it for the portfolio-level question: how much cash
is in the portfolio, where is burn heading, which positions are trending.

<Frame caption="The Dashboard opens on Metrics, aggregated across every company that has reported.">
  <img src="https://mintcdn.com/vein/7QlBMDMiW_wcqW8D/images/guides/intel-1-metrics.png?fit=max&auto=format&n=7QlBMDMiW_wcqW8D&q=85&s=8d3c3c6d4264bc9e3e57b8ee80581e83" alt="The Vein investor Dashboard on the Metrics tab" width="2880" height="1800" data-path="images/guides/intel-1-metrics.png" />
</Frame>

## Intelligence

<Frame caption="The Intelligence tab: an AI summary above, the qualitative feed below.">
  <img src="https://mintcdn.com/vein/7QlBMDMiW_wcqW8D/images/guides/intel-2-intelligence.png?fit=max&auto=format&n=7QlBMDMiW_wcqW8D&q=85&s=0f60d7289c55b9f8a89adb52888d2b59" alt="The Vein Dashboard on the Intelligence tab, showing the AI Portfolio Summary and the Portfolio Intelligence feed" width="2880" height="1800" data-path="images/guides/intel-2-intelligence.png" />
</Frame>

Two things sit here. **AI Portfolio Summary** reads across submitted reports and
tells you what stands out without your having to open each one. **Portfolio
Intelligence** below it is the raw material: the qualitative updates from each
company's latest report, filterable by what kind of update they are.

| Filter      | Surfaces                                    |
| ----------- | ------------------------------------------- |
| All Updates | Everything, newest first                    |
| Momentum    | Wins, growth, product and customer progress |
| Risks       | What companies flagged as going wrong       |
| Asks        | Where a company has asked for help          |
| Team        | Hires, departures, and org changes          |
| Documents   | Files attached to recent reports            |

<Tip>
  Read Risks and Asks before a board meeting. They are the two categories
  companies under-communicate by email and over-communicate in a structured
  report, precisely because the report asks them directly.
</Tip>

Both depend entirely on companies submitting reports with qualitative sections.
An empty feed is not a broken feature; it means the reports you have received
carried metrics but no written updates.

## Ask

The Ask tab is a question box over your portfolio data. Ask it something in
plain language and it answers from the reports your companies have submitted,
rather than from the open internet.

<Frame caption="Ask answers from submitted reports, so it can cite where a number came from.">
  <img src="https://mintcdn.com/vein/7QlBMDMiW_wcqW8D/images/guides/intel-3-ask.png?fit=max&auto=format&n=7QlBMDMiW_wcqW8D&q=85&s=ada3f9375041e0607169b11946bb9fca" alt="The Vein investor Dashboard on the Ask tab" width="2880" height="1800" data-path="images/guides/intel-3-ask.png" />
</Frame>

<Warning>
  Answers are grounded in submitted reports, so they inherit those reports'
  limits. If a company has not reported this quarter, the Dashboard cannot know
  what it has not been told, and neither can Ask.
</Warning>

## Where the data comes from

Everything on this page is downstream of companies connecting their systems and
sending reports. Nothing here is scraped or estimated.

<Diagram
  kind="fan"
  source={{ label: "Company's connected systems" }}
  hub={{ label: "Report the company sends" }}
  branches={[
{ label: "Metrics tab" },
{ label: "Intelligence tab" },
{ label: "Ask" },
]}
/>

If a company's data looks thin, the fix is upstream: ask them for a report. See
[Request a report](/guides/request-a-report).
