Founder & Lead Engineer · 2026
RentaFIC
Colombian investors compare nominal fund returns — a number that is inflated by inflation and quietly reduced by fees. RentaFIC recalculates the real cumulative return of 900+ FICs and 500+ FPVs, monthly. No competitor in Colombia publishes inflation-adjusted figures.
- FICs tracked
- 900+
- FPVs tracked
- 500+
- refresh cadence
- Monthly
The problem
Colombian investment funds advertise their returns as nominal percentages. A FIC that reports "12% annual return" tells you almost nothing: if inflation ran at 9% that year, the investor kept about 3% in real terms — before management fees, admin fees, and the sales load, which quietly take another one to two points.
The gap is not subtle, and it is not unknown to anyone who has actually tried to compare two FICs. It is simply that nobody in Colombia publishes the corrected number. The data exists, spread across regulator filings and a government open-data portal, and the arithmetic is not hard. Nobody had assembled it.
The data problem
Two sources, neither friendly:
- datos.gov.co — Colombia's open government data portal. It has the fund-level series, but no clean API, irregular update cadence, and inconsistent field naming between datasets.
- SFC filings — official Supervisora Financiera de Colombia disclosures. Authoritative, but published as documents and tables rather than a queryable feed.
Neither source gives you a return figure directly. Both give you holdings and periodic values, from which returns have to be derived correctly — which is exactly the part where a naive implementation gets it wrong and produces a number that looks authoritative and is not.
The pipeline
A PySpark job normalises both sources into a single schema, joins them on fund identity, and computes cumulative real returns net of fees. Results land in Supabase. A Streamlit frontend serves the public ranking and per-fund analysis, with Supabase handling auth.
The whole thing runs monthly. Docker on a VPS, with GitHub Actions and Watchtower handling zero-downtime updates.
What I built on top
- PySpark pipeline sourcing datos.gov.co + official SFC data
- Mintlify-inspired Streamlit UX — public ranking plus per-fund analysis charts
- Supabase authentication and user management
- Mistral-powered AI chatbot for fund questions
- Docker on VPS with GitHub Actions + Watchtower for zero-downtime updates
- Spec-driven, AI-assisted workflow (Claude Code + OpenCode)
Lessons
Derived numbers need their assumptions surfaced. A "real return" figure is only trustworthy if you can see how fees and inflation were handled. Showing the nominal figure next to the real one, with the gap explicit, did more for trust than any amount of polish.
The chatbot is a better interface than I expected. Most fund questions are not "what is fund X's return" — they are "why is my money losing money when the index is up". Answering that in natural language turned out to be the product's main value, not a feature bolted on.
Spec-driven AI-assisted development worked, with a caveat. Writing the data contract and the expected outputs down first made the AI-assisted parts dramatically faster and easier to verify. What it did not remove was the need to check the arithmetic by hand. Derived financial figures are exactly the case where you do not trust generation without an independent check.