Studio Founder

Portfolio Performance Tables That Actually Look Good in Chat

5 sec to assess vs 60+ secDesign & Content4 min read

Portfolio Performance Tables That Actually Look Good in Chat

Key Takeaway

We render investment portfolio data as styled, color-coded images instead of unreadable Telegram text tables β€” generated on-demand when I ask "how's the portfolio?"

The Problem

I check portfolio performance daily. Sometimes hourly. I do it from Telegram because that's where I live.

The data: 12-15 positions, each with ticker, entry price, current price, P&L percentage, P&L dollar amount, allocation weight, and status. That's 7 columns and 15 rows.

Try rendering a 7Γ—15 table in Telegram. I dare you.

View details
BTC  | $42,100 | $67,890 | +61.3% | +$258K | 22.1% | HOLD
ETH  | $2,240  | $3,890  | +73.7% | +$165K | 18.4% | HOLD
SOL  | $98.50  | $187.20 | +90.1% | +$88.7K| 9.2%  | TRIM

On desktop: barely readable. On mobile: a garbled mess of wrapped text where the pipes don't align and you can't tell which number belongs to which column.

I tried pre-formatted code blocks. Better alignment, but still wraps on mobile and loses all visual hierarchy. Every row looks the same whether it's up 90% or down 30%.

Financial data without visual hierarchy is just noise.

The Solution

Table-to-Image with financial-specific formatting. Green for gains, red for losses. Bold for significant moves. Conditional formatting that makes the portfolio "talk" visually.

Generated on-demand. I say "how's the portfolio?" and Warren (our investment agent) pulls current prices, calculates P&L, renders the image, and sends it. Under 10 seconds.

The Process (with code/config snippets)

The portfolio data structure:

jsonShow code
{
  "portfolio": "pyratz-main",
  "timestamp": "2024-12-15T14:30:00Z",
  "total_value": "$1,847,200",
  "total_pnl": "+$412,800 (+28.8%)",
  "positions": [
    {
      "ticker": "BTC",
      "entry": 42100,
      "current": 67890,
      "pnl_pct": 61.3,
      "pnl_usd": 258000,
      "allocation": 22.1,
      "signal": "HOLD"
    }
  ]
}

Financial-specific formatting rules:

yamlShow code
table_image:
  theme: dark
  background: "#0a0a0a"
  title: "Portfolio Performance β€” {date}"

  conditional_formatting:
    pnl_pct:
      - range: [10, 999]
        color: "#22c55e"
        bold: true
      - range: [0, 10]
        color: "#86efac"
      - range: [-10, 0]
        color: "#fca5a5"
      - range: [-999, -10]
        color: "#ef4444"
        bold: true
    signal:
      HOLD: { bg: "#1e3a5f", text: "#60a5fa" }
      BUY:  { bg: "#14532d", text: "#22c55e" }
      TRIM: { bg: "#713f12", text: "#eab308" }
      SELL: { bg: "#7f1d1d", text: "#ef4444" }

  summary_row:
    enabled: true
    label: "TOTAL"
    style: { bg: "#1a1a2e", border_top: "2px solid #3b82f6" }

  footer: "Prices as of {timestamp} | Not financial advice"

The on-demand trigger:

View details
Bilal: "how's the portfolio?"
Warren: [pulls prices] β†’ [calculates P&L] β†’ [generates image] β†’ [sends]
Response time: 8-12 seconds

The image includes a summary header (total value, total P&L, daily change), the position table, and a footer with timestamp. Everything your eye needs in one screenshot.

The Results

MetricText TableImage Table
Readability (mobile)2/109/10
Time to assess portfolio health60+ seconds5 seconds
Can identify losers at a glanceNo (scan every row)Yes (red = attention)
Shareable to advisors/partnersEmbarrassingProfessional
Columns supported3-4 usable7+ clean
Generation timeβ€”~6 seconds
Works on all screen sizesNoYes (image scales)

The daily ritual changed. Before: open a spreadsheet, cross-reference prices, calculate P&L, squint at numbers. After: "how's the portfolio?" β†’ glance at image β†’ done.

When I share performance with partners or advisors, I send the image. No one has ever said "nice spreadsheet." Several have asked "what tool makes those tables?"

Try It Yourself

  1. Structure your portfolio data as JSON (positions, prices, P&L)
  2. Define color rules: green/red for P&L, signal-based formatting for actions
  3. Include a summary row and timestamp
  4. Set up on-demand generation triggered by a natural language query
  5. For recurring reports, automate daily/weekly generation and delivery

Your portfolio doesn't care how you look at it. But you'll make better decisions when you can actually see it.

portfolio managementdata visualizationTelegramfinance

Want results like these?

Start free with your own AI team. No credit card required.

Portfolio Performance Tables That Actually Look Good in Chat β€” Mr.Chief