Studio Founder
Portfolio Performance Tables That Actually Look Good in Chat
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
| Metric | Text Table | Image Table |
|---|---|---|
| Readability (mobile) | 2/10 | 9/10 |
| Time to assess portfolio health | 60+ seconds | 5 seconds |
| Can identify losers at a glance | No (scan every row) | Yes (red = attention) |
| Shareable to advisors/partners | Embarrassing | Professional |
| Columns supported | 3-4 usable | 7+ clean |
| Generation time | β | ~6 seconds |
| Works on all screen sizes | No | Yes (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
- Structure your portfolio data as JSON (positions, prices, P&L)
- Define color rules: green/red for P&L, signal-based formatting for actions
- Include a summary row and timestamp
- Set up on-demand generation triggered by a natural language query
- 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.
Related case studies
Studio Founder
Meeting Agendas as Shareable Images for Group Chats
We render morning meeting data as clean visual agenda cards instead of walls of text β making group chat briefings actually readable and driving proactive preparation from the team.
Engineering Lead
Agent Scorecard as a Beautiful Image β Not Broken Telegram Markdown
We replaced Telegram's broken markdown table rendering with auto-generated, color-coded scorecard images β making weekly agent performance data actually readable in chat.
Studio Founder
Data Visualizations in Slides That PowerPoint Can't Handle
We embed D3.js charts, animated counters, and live API data into HTML slides β interactive investor presentations that PowerPoint literally cannot build.
Want results like these?
Start free with your own AI team. No credit card required.