This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
A friend wanted an investing tool for the Mexican market. Not a dashboard with a subscription. Something simple: what did the IPC do today, am I near a high, and a plain-English line about it. So I built BolsaBuddy this weekend.
Live demo: https://ssolidssnake9.github.io/bolsa-buddy/
Repo: https://github.com/ssolidssnake9/bolsa-buddy (MIT)
What it does
It's all local. Free Yahoo Finance data (^MXX, history back to 1991). A pipeline that fetches, computes momentum (day change, 20/50/200-day averages, drawdown from the 52-week high, streaks, all-time-high alerts), and a local open-weight model that writes the daily brief. A watchlist where your thesis and kill-trigger sit next to the live price. Output is a phone-readable HTML page.
The AI part almost went sideways
I wanted Gemma on-device, but the machine I had couldn't hold it. Then I tried TabPFN for a 7-day forecast, and it wanted an account, a license acceptance, and an API token. That killed the whole point: $0, no keys, no accounts, nothing leaves your machine.
So the brief runs on a small local model, and if the model is down the pipeline writes a templated brief instead of breaking. That fallback rule ended up being the best design decision in the whole project. The tool never goes red.
Here's what the fallback brief actually reads like on a real day:
IPC daily brief (2026-10-01) — auto-generated without the AI model:
The Mexican IPC index closed at 63,828.6 on 2026-10-01, -0.60% on the day. It is down 3 days in a row. It sits -11.49% below its 52-week high of 72,111.41. Close is below the 20-day moving average (64,377.02). Close is below the 50-day moving average (65,248.02). Close is below the 200-day moving average (67,215.54).
No investment advice. Data: Yahoo Finance free daily feed (^MXX).
Not poetry. But it's true, it's fresh every day, and it never fails.
Run it yourself
One command runs the whole thing:
python3 fetch.py && python3 analyze.py && python3 brief.py && python3 news.py && python3 report.py
Smoke test needs no network and no model (uses cached data):
python3 test_smoke.py
Watchlist:
python3 watchlist.py add CEMEXCPO.MX "cement demand recovering" "breaks below 200-day avg"
python3 watchlist.py check
CI runs the smoke test on every push. The repo README has a screenshot of the report.
Why local
A closed AI API would charge per brief forever and send your watchlist and theses to someone else's server. The local model costs nothing, works offline, and keeps your financial thinking private. That's the whole point.
Top comments (0)