Een lichtgewicht self-hosted currency monitor die EUR/CZK koersen volgt, historische data opslaat en praktische notificaties geeft voor verschillende deadlines.
Ik heb een eigen currency monitor gebouwd voor de EUR/CZK wisselkoers. Het systeem volgt automatisch de actuele koers, bewaart lokale historie en geeft praktische notificaties wanneer een wisselmoment interessant wordt.
Het project begon met een eenvoudige vraag:
Is de koers nu goed genoeg om euro’s naar Tsjechische kronen te wisselen, of kan ik beter nog even wachten?
Alleen naar de actuele koers kijken is daarvoor niet genoeg. Een koers kan vandaag hoger staan dan gisteren, maar nog steeds laag zijn vergeleken met de afgelopen weken. Tegelijk kan er op korte termijn al een gunstig moment ontstaan, ook zonder dat er meteen een nieuw langetermijnrecord wordt bereikt.
Daarom heb ik een kleine, self-hosted tool gebouwd die ruwe koersdata vertaalt naar praktische notificaties.
De Currency Monitor haalt periodiek de EUR/CZK koers op, slaat metingen lokaal op en toont de actuele situatie in een dashboard. De eerste versie gaf vooral een notificatie wanneer de koers een nieuw hoogtepunt binnen een configureerbare periode bereikte, bijvoorbeeld 45 dagen.
Later heb ik dit uitgebreid met een slimmer notificatiemodel. Niet iedere wisselbeslissing heeft namelijk dezelfde deadline. Soms wil je vandaag of morgen wisselen, soms binnen een week, en soms kun je rustig wachten op een beter moment.
Daarom werkt het systeem met drie praktische modi:
De gekozen modus bepaalt niet alleen hoe het dashboard rekent, maar ook welke live notificaties actief zijn.
De monitor combineert koersdata, historische vergelijking, momentum en eenvoudige backtesting tot praktische notificaties.
Belangrijke functies:
Het systeem is bewust lightweight gehouden. Het draait lokaal, gebruikt eenvoudige componenten en is bedoeld als praktische tool, niet als complex financieel platform.
Een belangrijk doel van dit project was om de interface niet alleen data te laten tonen, maar ook betekenis te geven aan die data.
Het dashboard vertaalt de actuele marktsituatie daarom naar gewone taal. In plaats van alleen een grafiek met getallen te tonen, geeft het systeem een conclusie zoals:
Onder het advies staan redenen en waarschuwingen. Groene chips ondersteunen de notificatie, rode chips laten zien waarom het systeem terughoudend is. Zo blijft de notificatie uitlegbaar.
Voorbeelden van factoren die meespelen:
Dit maakt het systeem praktischer dan een simpele price alert. Het probeert niet alleen te zeggen dat een koers hoog is, maar ook of dat moment past bij de gekozen deadline.

De frontend is gebouwd als een overzichtelijk React-dashboard. De bovenste kaarten tonen de laatste koers, de hoogste koers binnen de beschikbare periode en het moment van de laatste update.
Daaronder staat het belangrijkste blok: de koersnotificatie. Hier zie je in gewone taal of de huidige koers interessant genoeg is voor de gekozen modus.
Het dashboard bevat onder andere:

De grafieken zijn niet bedoeld als trading terminal, maar als snelle visuele ondersteuning. Je ziet direct of de koers net piekt, wegzakt, stabiel blijft of langzaam oploopt.
Een interessant onderdeel van dit project is dat dezelfde data anders wordt geïnterpreteerd afhankelijk van de deadline.
Bij urgent kijkt het systeem veel sterker naar intraday gedrag. Als je vandaag of morgen moet wisselen, zijn dagtop, korte momentumveranderingen en snelle terugval belangrijk. Deze modus mag ook iets vaker melden, omdat de beslissing tijdgevoeliger is.
Bij week telt de context van de afgelopen dagen zwaarder. Het systeem kijkt dan vooral of de koers sterk staat binnen de recente periode, zonder meteen op iedere kleine intraday beweging te reageren.
Bij patient ligt de nadruk op langere historische context. Deze modus is rustiger en kijkt vooral of de koers echt interessant is binnen een langere periode.
De UI-keuze is ook het notificatieprofiel:
Een 45-dagen high blijft altijd actief als aparte notificatie.
Een monitor is pas nuttig als notificaties betrouwbaar en rustig blijven. Daarom stuurt het systeem niet bij ieder klein koersverschil een bericht.
Er zijn drempels, cooldowns en minimale verbeteringen ingebouwd. Een notificatie kan dus inhoudelijk interessant zijn, maar toch geen pushnotificatie geven als die te snel na een vorige notificatie komt of onvoldoende verbetering laat zien.
Hierdoor blijft het systeem bruikbaar in de praktijk. Het dashboard mag veel context tonen, maar de notificaties moeten alleen komen wanneer er echt iets te melden is.
Om meer gevoel te krijgen bij de kwaliteit van het notificatiemodel heb ik een backtest-sectie toegevoegd. Die laat zien hoe de huidige strategie historisch zou hebben gewerkt op de lokaal opgeslagen data.

De backtest toont onder andere:
Dit maakt de notificatie niet voorspellend. Je kunt de toekomst niet kennen. Maar het helpt wel om te beoordelen of het model historisch redelijk gedrag vertoonde.
Het project bestaat uit een kleine full-stack applicatie.
De backend is gebouwd met FastAPI en haalt de koersdata op via een externe API. De data wordt opgeslagen in SQLite, zodat het systeem volledig lokaal en zelfstandig kan draaien.
De backend verzorgt onder andere:
De frontend is gebouwd met React en Vite. Voor de grafieken wordt gebruikgemaakt van Recharts. De UI is bedoeld om snel inzicht te geven zonder dat je zelf alle ruwe data hoeft te interpreteren.
De applicatie is service-ready gemaakt voor Linux. Backend en frontend kunnen via systemd automatisch starten en opnieuw opstarten bij fouten.
Voor langdurige context ondersteunt het project ook historische backfill van daily candles. Daarmee kan het systeem sneller bruikbare langetermijninformatie tonen zonder eerst maanden aan live data te hoeven verzamelen.
Dit project is bedoeld voor gebruik binnen een privé netwerk. De applicatie bevat geen loginlaag en is niet bedoeld om direct publiek op internet te zetten.
Voor publieke deployment zouden extra stappen nodig zijn, zoals authenticatie, HTTPS, reverse proxy configuratie, productie-workers en verdere security hardening.
Ook belangrijk: dit systeem is geen financieel advies. Het is beslisondersteuning op basis van eigen regels, historische data en praktische notificaties.
Dit project is een goed voorbeeld van software die een klein dagelijks probleem praktisch oplost.
Het laat zien hoe ik graag werk:
De waarde zit niet alleen in het ophalen van een koers. De waarde zit vooral in het vertalen van ruwe data naar een duidelijke vraag:
Is dit, gegeven mijn deadline, een goed moment om te wisselen?
De Currency Monitor begon als een simpele koersmelder, maar groeide uit tot een kleine beslisondersteunende applicatie met historische context, notificaties en backtesting.
Het project is bewust overzichtelijk gebleven, maar bevat toch veel onderdelen die ook in grotere systemen belangrijk zijn: API-integratie, datamodel, scheduling, frontend visualisatie, betrouwbaarheid, configuratie en deployment.
Voor mij is dit vooral een praktische tool: klein genoeg om overzichtelijk te blijven, maar compleet genoeg om in het dagelijks gebruik echt te helpen.