Show HN: Quantifying opportunity cost with a deliberately "simple" web app (shouldhavebought.com)
A while ago I had a mildly depressing realization.
Back in 2010, I had around $60k. Like a "responsible" person, I used it as a down payment on an apartment. Recently, out of curiosity, I calculated what would have happened if I had instead put that money into NVIDIA stock.
I should probably add some context.
For over 10 years I've worked as a developer on trading platforms and financial infrastructure. I made a rule for myself - never trade on the market.
In 2015, when Bitcoin traded about 300 usd, my brother and I were talking about whether it was a bubble. He made a bold claim that one day it might reach $100k per coin. I remember thinking it sounded unrealistic - and even if it wasn't, I wasn't going to break my rule.
That internal tension - building systems around markets while deliberately staying out of them is probably what made the "what if?" question harder to ignore years later.
The result was uncomfortable. The opportunity cost came out to tens of millions of dollars.
That thought stuck with me longer than it probably should have, so I decided to build a small experiment to make this kind of regret measurable: https://shouldhavebought.com
At its core, the app does one basic thing: you enter an asset, an amount, and two dates, and it gives you a plain numeric result - essentially a receipt for a missed opportunity.
I intentionally designed the UI to feel raw and minimal, almost like a late-90s terminal. No charts, no images, no emotional cushioning - just a number staring back at you.
What surprised me wasn't the result, but how much modern web infrastructure it took to build something that looks so simple.
Although the app is a single page with almost no UI elements, it still required:
- Client-side reactivity for a responsive terminal-like experience (Alpine.js)
- A traditional backend (Laravel) to validate inputs and aggregate historical market data
- Normalizing time-series data across different assets and events (splits, gaps, missing days)
- Dynamic OG image generation for social sharing (with color/state reflecting gain vs loss)
- A real-time feed showing recent calculations ("Wall of Pain"), implemented with WebSockets instead of a hosted service
- Caching and performance tuning to keep the experience instant
- Dealing with mobile font rendering and layout quirks, despite the "simple" UI
- Cron and queueing for historical data updates
All of that just to show a number.
Because markets aren't one-directional, I also added a second mode that I didn't initially plan: "Bullet Dodged". If someone almost bought an asset right before a major crash, the terminal flips state and shows how much capital they preserved by doing nothing. In practice, this turned out to be just as emotionally charged as missed gains.
Building this made me reflect on how deceptive "simplicity" on the web has become. As a manager I know says: "Just add a button". But even recreating a deliberately primitive experience today requires understanding frontend reactivity, backend architecture, real-time transport, social metadata, deployment, and performance tradeoffs.
I didn't build this as a product so much as an experiment - part personal curiosity, part technical exploration.
I'd be very interested to hear how others think about:
Where they personally draw the line on stack complexity for small projects?
Whether they would have gone fully static + edge functions for something like this?
How much infrastructure is "too much" for a deliberately minimal interface?
And, optionally, what your worst "should have bought" moment was?
Happy to answer any technical questions or dig into specific implementation details if useful.
22 comments
[ 4.2 ms ] story [ 42.4 ms ] threadWhen I use it, it tells me that the form was incomplete. I tried to figure out how much I regret having bought 0 bitcoin so far.
Perhaps needs a better error message? I think it actually doesn't like the zero, but prevents it doesn't like incomplete data. Zero is also a number.
> CAUSALITY_ERROR: You cannot SELL before you BUY.
https://en.wikipedia.org/wiki/Short_(finance)
Needs at least a better error message that short sells aren't supported, instead of trying to be too clever by half about causality.
I too watched from the sidelines as btc, nvda and others went to the moon. But with the information available at the time, investing in those was not a sound strategy.
Hopefully he got a stream of housing services / rent from it, though?
Here's one for 01/01/1990: https://whentheywere.com/?date=1990-01-01
You can subscribe to a calendar and get notified when you are exactly the age someone was, when they achieved something.
I added something related to this idea to my life-planning app: what if for projections. I track all my expenses/incomes/investments in my app. I then can with 1 click run a scenario where I move certain expenses to investments. I.e. cancelling netflix for 10 years, or xbox gamepass etc. and seeing what it would actually do to my 10 year projection (which already accounts for ETFs/Stock with variable return rates etc.). i.e.:
Exclude Recurring Expenses Simulate cutting these expenses and investing the savings Redirecting €19.99/month to investments
Then I see black on white what would happen if I get rid of all the 'small' subscriptions, on a visual chart. It's eye opening when one selects items that add up to a ~100 Euro ++ a month.
> ... The opportunity cost came out to tens of millions of dollars.
It doesn't sound, though, like you'd have held until 100k. This calculation only applies to people who'd have held for some reason; e.g. just after the conversation, you slipped into a coma and you just woke up now.
But I usually hear it from people who "could've bought at $2 but didn't!"
If you didn't buy at $2, you wouldn't have held at $4. If you didn't buy at $300, you wouldn't have held at $600. Etc.
Me neither fwiw :)
And at the time, it was a complete waste of money. I don’t regret it at all.
Only with knowledge of the future would it have been worthwhile.
But today when I see what cryptocurrency has become, I regret my decision even less.
There are countless ways I could have made millions if I knew the future. I don’t waste my time regretting those.
I think, spending 50 bucks on bitcoin back then wouldn't have been a complete waste of money: in the worst case, you could have kept them as a souvenir from a passing fad to tell your grandchildren about. Like pet rocks.
However, I heard about bitcoin around the same time, and even read the whitepaper etc (I'm a mathematician and did some actual cryptography at the time), but still didn't buy any.
No offense meant. Just my two Satoshis.
In terms of feedback: - need BTC prices pre 2014 to really feel the pain - The date format for earliest date available is different to the date format then used in the input below
...or alternatively, you live a decent life without associating with any of this.