28 May 2026 · 3 min read
Post #1The Stack Behind playitsmart.nl
Which tools run the system, how they fit together, and why these choices.
A question I get often: which tools actually run this? Time to open the hood. This is the full stack behind playitsmart.nl, and more importantly, why it is exactly these choices.
A common thread first. Most choices were made to keep the learning curve small. Tools I already knew, or simple enough to learn quickly. A few choices were not free, there was only one serious option. I will name both kinds.
Building
The code is written in Cursor, an editor with AI built in. I describe what I want, Cursor types it. Everything goes to GitHub, which is the source of truth and the version history.
The logic of the system is Python. That was not a hard choice. Python is the standard for this kind of data work and has a mature library for almost everything.
Data and database
The data comes from Financial Modeling Prep. Prices, fundamentals, ratios, for both American and Dutch stocks. The data is the foundation, a wrong provider means wrong signals, so this choice got a lot of attention.
Everything is stored in Supabase, a database on top of PostgreSQL. That was already in my stack, so no new learning curve.
Running
The system has to run by itself every morning, without me pressing a button. Render does that. It holds the scheduled jobs that run through the pipeline at fixed times: pull data, calculate scores, generate signals, place orders. Render was already in my stack too.
The orders themselves go to Interactive Brokers, through a Python library that talks to the broker. This was a forced choice, and an easy one. For automated trading from the Netherlands, Interactive Brokers is in practice the only serious option. Most other brokers have no usable API, or do not cover Dutch stocks.
Showing
The website and the dashboard you are looking at now run on Next.js, hosted at Vercel. The domain runs through Cloudflare. All well-known, fast tools that make sharing in public easy, because building in public was the starting point from day one.
For notifications I use Telegram. When the morning pipeline is done, or when something goes wrong, I get a message right away. A missed alert on a system that trades with money is not an option.
What I deliberately did not choose
Just as instructive. No large cloud provider, too complex and too expensive at this scale. No broker without a full API, because then you cannot automate. No free data source, because without a reliability guarantee it does not belong in a production system.
The takeaway
The stack is not exciting, and that is on purpose. Well-known tools, a small learning curve, simple parts that each do one thing well. The only place where I had no freedom of choice, the broker, was immediately the easiest decision.
For a system that will soon manage real money, boring is a compliment. Boring tools do what you expect. And predictability is exactly what you want when getting it wrong costs money.