I'm an AI engineer in Tel Aviv. I'm not a finance person. But I have a brokerage account and the same stupid problem everyone else has: every time I want a half-decent fundamentals view on a stock, I hit a paywall, a signup wall, or a chart that buries the actual numbers under five layers of upsell.
So I built a thing for myself, and then quietly let other people use it.
This post is the engineering side of that, not the pitch.
The actual problem
Most retail finance UX optimizes for engagement: bright tickers, gamified watchlists, push notifications about "unusual activity." That's fine for a trading product. It's terrible if what you actually want is a sober read on a company in under two minutes.
The job-to-be-done I cared about was narrow:
- Pull recent news for a ticker
- Summarize it without hype words
- Surface the few numbers that actually matter (valuation band, recent earnings, debt situation)
- Show me the dissenting view, not just the bull case
That's it. No social feed. No "AI-picked stocks of the day." No copy trading.
Stack, briefly
Nothing exotic. The interesting decisions weren't framework choices.
- News ingestion: a few feeds + a scheduled scraper, deduped by URL canonicalization and a fuzzy title hash. Same release gets reposted six different ways across a day; if you don't dedup, your "news" view becomes the same Reuters headline four times.
- Summarization: an LLM with a tight system prompt and a banned-words list. "Game-changer," "revolutionary," "poised to," "could potentially" β all rejected at the post-process step. If the summary still contains them after a retry, the article is dropped. Better to show fewer items than slop.
- Numbers: pulled from the standard fundamentals providers, normalized into a flat schema. The hard part is which numbers to show. I picked five and stopped. Adding more was tempting and almost always wrong.
- Storage: Postgres for everything, including the embeddings. I'm not running a vector DB for a side project.
pgvectoris enough.
The LLM is the boring part
Everyone wants to talk about the model. The model is the boring part.
The interesting part is the constraints around it. A few that actually moved quality:
- Pin the date in the prompt. If you don't, summaries get tense-confused and start talking about "upcoming earnings" that already happened.
-
Force a structure. I make the model emit JSON with fixed keys (
headline,tldr,bear_case,bull_case,numbers_mentioned). Free-form output is where hype seeps back in. -
Require a
bear_case. Even when the model thinks the news is positive. This single constraint changed the feel of the product more than any model upgrade. Markets are not a hype feed. - Cap output length aggressively. If a TL;DR is longer than three sentences, it isn't a TL;DR.
None of this is novel. It's all just discipline applied at the boundaries.
What I deliberately didn't build
This matters more than the feature list:
- No alerts. I don't want users glued to their phone over a 2% move.
- No "AI says BUY/SELL." Even when I had a working classifier, I cut it. A model giving directional calls to retail users is a liability dressed up as a feature.
- No login wall on the news view. You can read the analysis without an account. Accounts are only for portfolio tracking.
- No newsletter. I am not going to email you.
Every one of those was a pull from someone telling me it would "increase engagement." Yes. That's the point of not doing them.
What I learned
A few takeaways that generalized beyond this project:
- Editorial decisions disguised as ML decisions are still editorial decisions. Choosing which numbers to show, which sources to trust, which tone to enforce β those are opinions. Pretending the model decides is laundering responsibility.
- The hard part of an AI product is rarely the AI. It's data plumbing, dedup, schema discipline, and saying no.
- Side projects benefit from a hard scope. The constraint of "under two minutes per ticker, no paywall" killed half the feature ideas before they got built. Good.
If you want to poke at it, the simple market analysis view lives at pomegra.io/feature/market-analysis-simple. It's free, there's no signup for the read-only views, and I'm not tracking you across the web.
It's a side project. It does one thing. That's the whole pitch.
Top comments (0)