Methodology Last updated Sep 11, 2026
How Smart Finance is made
Where every number comes from, how fresh it is, what the AI does and does not do, and how mistakes get fixed. This page changes whenever the site does.
Data: what I use and from whom
Every surface shows a source chip with the provider, the delay and the time of the last refresh. These are the real cadences, taken from the code that serves the data (the /api folder of the public repository).
| Surface | Source | Refresh | Delay / notes |
|---|---|---|---|
| Stocks and index ETFs (SPY, QQQ, DIA, AAPL, MSFT, NVDA, AMZN) on the home pulse, /market and asset cards | Twelve Data, one batched request (Yahoo Finance as backup) | Every 15 minutes (server and CDN cache) | Prices delayed at least 15 minutes; change is against the previous close |
| Crypto (BTC, ETH, XRP, SOL) | CoinGecko | Every 15 minutes | Change is the last 24 hours; price in US dollars |
| Currencies (USD/MXN, EUR/MXN, CHF/MXN, EUR/USD, GBP/USD, USD/JPY) and the VIX | Yahoo Finance | Every 15 minutes | Delayed at least 15 minutes |
| The Mexican market (S&P/BMV IPC and the NAFTRAC ETF) on /market and on their asset cards | Yahoo Finance | Every 15 minutes | Delayed about 20 minutes. Some days Yahoo serves no intraday bars for the BMV: the card then shows the last close, and the source chip says when that close is from |
| Price charts 1D to 5Y and sparklines | Yahoo Finance | Charts cached 60 seconds; sparklines 15 minutes | 1D is ONE session in 5-minute bars, cut by the exchange’s own day, so on a weekend you see the last trading day whole. The chart says which session it is showing |
| Portfolio positions (/portfolio) and the Actinver Challenge (/actinver) | Yahoo Finance through the site’s own chart endpoint; the positions and their thesis are a file in the public repository that I edit by hand | The page is served with the value of the previous close, written into the repository by a scheduled job every trading night; the browser then refreshes it with the latest price | Mexican exchange prices are delayed about 20 minutes; US ones at least 15. The Actinver Challenge is a contest played with fictional money |
| Which phase the Actinver Challenge is in (Smart Finance Projects, /research) | The 2026 calendar Actinver publishes on retoactinver.com, with the date it was consulted written on the page | It is not written into the page: it is worked out from today’s date in Mexico City, on the server at build time and again in your browser when you open it | None — no data is fetched. The rule lives in one module with its own tests, so a page that has not been redeployed in months still names the right phase instead of the one that was true the day it was built |
| Reference rates (Banxico target rate, Fed funds range) | Banco de México and Federal Reserve announcements, which I enter by hand | After each decision; verification date shown (currently 2026-08-03) | Hidden automatically if the verification is older than 60 days |
| News, explained (/news) and today’s story on the home | Bloomberg Markets RSS feed; the explanation is drafted with Claude and reviewed by me | Drafts once a day at 5:30 CDMX (11:30 UTC), up to three; published when I approve them | Nothing appears on the site until I approve it. Every story links to the original and shows its time |
| “Explain this to me” (news, asset cards, charts, glossary, lessons) | claude-haiku-4-5, answering only from the data this site already has for that page | Generated when you press the button; the same answer is reused for 24 hours | Not reviewed by a person: it says so on the answer, with the date of the data it used. Daily spending cap; when it is reached the button says so instead of answering |
| Market open / closed labels | Worked out from the regular hours of the NYSE (9:30–16:00 ET) and of the BMV, in one module with its own tests (src/lib/market/bmv.mjs) | On every page load, in your browser | Monday to Friday, holidays not included: a guide, not a promise. The BMV has no fixed timetable: it trades 7:30–14:00 while the United States is on daylight saving time and 8:30–15:00 the rest of the year, because it lines its session up with New York while Mexico no longer changes its clocks. None of these hours are typed into this page — they are computed, and on the day it was built (Sep 13, 2026) the session was 7:30–14:00 in Mexico City |
| Weekly newsletter | The same data as the site plus the story I approved that week; sent with Resend | Sundays at 8:00 CDMX (14:00 UTC) | Double opt-in; unsubscribe link in every email. Every issue is also published as a page at /newsletter, with the prices it carried that Sunday — those are frozen, not updated. It was daily until August 2026 — the free Resend plan allows 100 emails a day, shared with the sign-up confirmations, so a daily send left almost no room for new subscribers |
Fallback chain and cache
- The cache is SHARED, in Redis, and no longer one copy per server instance. That distinction is the whole point: the site runs on serverless functions, and every cold start used to begin with an empty cache and ask the provider again, so the same data was paid for many times over on a busy day.
- Every cached value is kept twice: the fresh copy for its normal window (15 minutes, or 60 seconds for charts) and a second copy for 48 hours. When a provider fails, that second copy is what you see, marked as the last known value instead of a gap.
- When a window expires, only ONE instance calls the provider (a 20-second lock in Redis) while the rest wait or serve the last copy. Otherwise every expiry would be a burst of identical requests.
- If there is no previous copy, the source chip says “no data” instead of showing a made-up number, and on a chart a line above it adds that it retries on its own.
- Stocks fall back from Twelve Data to Yahoo Finance. Currencies, the VIX and the charts have no second provider yet; that is a known gap.
- Twelve Data’s free quota (800 credits a day) is counted per provider per day. Past 700 credits the site stops calling it until midnight UTC and serves stocks from Yahoo Finance instead — automatically, without anyone watching.
What the AI does, and what it does not
Does
Claude (claude-haiku-4-5) writes the FIRST DRAFT of each news explainer from a real Bloomberg headline and its summary: what happened, why it matters, which assets it touches and which lesson helps. Those drafts are labeled “AI summary · reviewed by me” and are never published on their own. I also use Claude as an assistant to draft and edit code and text; the repository is public.
Does not
No figure on this site comes from an AI without a source. The lessons are written by me and list their sources with the date they were checked. The equity research reports I write in Smart Finance Projects are mine, with Claude as an assistant for handling data and building the pages, and every number links to a filing or a dataset; the thesis, the assumptions and the conclusions are not written until I write them, and the page says so while they are missing. The AI never recommends anything, and neither do I.
The “Explain this to me” button
Every news story, asset card, chart, glossary term and lesson has a discreet button that explains what you are looking at in plain words, and can write three study questions about it. It runs on claude-haiku-4-5 and it is generated on the spot, so it is labeled as AI and nobody has read it before you. Four things keep it honest, and all four are in the public repository (api/_lib/ia.js): the server builds the block of data it is allowed to know, from what the site already has — the approved story, the price series, the asset register, the lesson text — and the answer may use nothing else; the arithmetic (the change over the period, the high, the low) is done by the server, not by the model; every number in the answer is checked against that block before you see it, and if one is not there the answer is thrown away, asked for again once, and if it fails a second time you get an honest message instead of a figure; and asking it what to buy, what to sell or how much something will go up gets a fixed answer that points at the lesson on mistakes when investing. It also has a daily spending cap, because I pay for it.
How a news story gets published
This is the part that matters: an AI writes the draft, I decide. The whole chain is in the public repository (api/news.js and api/_lib/).
- Once a day, a scheduled job reads the Bloomberg Markets RSS feed and asks Claude for up to three drafts, using only what the headline and the feed summary say. Never more than three: that is also the cost ceiling, around one US cent a day.
- Each draft is stored as “borrador” (draft). Drafts are not public: asking the public endpoint for them returns an error on purpose.
- I read them, next to the original link. I approve, edit before approving, or reject. If a draft is missing a piece the site needs, approving it fails and says what is missing.
- Only what I approve is served to the site, so it appears within a minute. If I rewrote the text, the label changes from “AI summary · reviewed by me” to “Written by me”.
- Approved stories are then copied into the repository, so each one gets its own permanent page at the next deploy. The URL is the same before and after.
Analytics: what gets counted, and what does not
I set no cookies and there are no accounts, so there is nothing here that follows you around. What I do count is which parts of the site people actually use — with Vercel Web Analytics and Speed Insights, both served from this domain, neither of which stores an identifier for you. If your browser sends Global Privacy Control or Do Not Track, the scripts are not even downloaded.
What is counted
- Page views: which URL, which language, roughly where the visit came from (country and referrer), and the device type. No identifier, no cookie, no profile across visits.
- Core Web Vitals of real visits (how fast a page paints, whether it jumps while loading). That is what Speed Insights is for.
- Eleven named events, and only these eleven: the daily challenge started; the daily challenge finished, with the score and how many rounds were exact; a lesson finished; a quiz question answered, with whether it was right; a calculator used; an asset followed or unfollowed; a comparison drawn; a glossary term tapped; a newsletter sign-up accepted; a research report opened; and how far down that report was read (25, 50, 75 or 100 %).
What is not counted
- No email address, ever. The newsletter sign-up sends one event that says a sign-up happened and from which page; the address goes to the subscription endpoint and nowhere else.
- None of the numbers you type into a calculator. The event carries the name of the calculator and nothing else.
- Not your watchlist. It lives in your browser and never leaves it; what is counted is that some asset was followed, one event at a time.
- No free text of any kind. Every value sent is checked against a short list-of-labels format first, so anything longer or more specific is dropped before it is sent.
- No cookies, no fingerprinting, no cross-site tracking, no advertising, and nothing sold or shared with anyone.
Why so few events: the site now has lessons, tools, a daily challenge, portfolios, research and a newsletter, and until now nobody knew which of those anyone used. Eleven questions can be answered every month and acted on. Thirty would just be a dashboard nobody reads.
Corrections
If something is wrong, it gets fixed and logged here, with the date.
- The Mexican market has its own asset cards: the S&P/BMV IPC and the NAFTRAC ETF, in pesos, from Yahoo Finance with a delay of about 20 minutes. Until today the site could not show the comparison that teaches the most to someone who earns in pesos — an S&P 500 ETF in dollars against the Mexican index in pesos, with the exchange rate beside them. They go through the same free endpoints as the currencies; no paid quota was touched.
- Correction: this page listed the BMV’s trading hours by hand, and it listed the winter ones all year round — which is false for half of it, because the exchange lines its session up with New York while Mexico no longer changes its clocks. The hours in the table now come from the same module that turns the open / closed labels on, so they cannot go stale again; and “last updated” stopped being typed too — it is the date of the newest entry in this log.
- The “Explain this to me” button answers the question you write instead of returning the same monthly summary to everything: the server reads what is being asked (what it is, why it moved, how much or when, compare, a term) and builds the block of data for THAT question, so “why did it go up today?” gets today’s session and the approved stories rather than the month.
- Contextual tips: one short line at the bottom of the page where it helps — the comparison offered with both assets already filled in when you open a second one, how to read a chart with your finger on the first asset card you open. One at a time, each can be dismissed, and one that gets ignored three times retires itself.
- The research section is now Smart Finance Projects: equity research at the top and the Actinver Challenge below it. The addresses did not change (/research and /research/<company> are the same pages they were), only the name. On the contest block, which phase it is in is worked out from today’s date rather than written down, so the page cannot end up claiming the practice week has started when it has not.
- The “Explain this to me” button published across news, asset cards, charts, the glossary and the lessons. It answers only from the data this site already has, the server does the arithmetic, every figure in the answer is checked against that data before it is shown, and it refuses to say what to buy or sell.
- Analytics turned on, and written down: no cookies, no accounts, no identifier — page views, Core Web Vitals of real visits and eleven named events, listed one by one in the section above. If your browser sends Global Privacy Control or Do Not Track, nothing loads at all.
- Charts: 1D is now one whole session, cut by the exchange’s own day, so it is never empty when the market is closed; a line above the chart says which session you are looking at; you can drag your finger across it at any time to read the hour, the price and how much it had moved; and the period’s high and low are marked.
- The newsletter now carries a “what moved this week” table (biggest weekly gainers and losers from the site’s own register), a source chip on every figure, the reading time of the lesson and a slot for a line written by me. Every issue is published as a page at /newsletter.
- Portfolio pages published: /portfolio (my own positions) and /actinver (the student contest, played with fictional money). Every position carries the thesis I wrote when I opened it; the value of each portfolio is snapshotted into the repository every trading night, and that file is what the chart draws.
- Four new lessons (your first credit card, what a share is, how an exchange works, ETFs), an interactive risk-and-return module and a three-question quiz at the end of all ten lessons.
- News, explained published at /news: drafts written by Claude from Bloomberg headlines, reviewed one by one by me before anything goes up, each story linking to its source.
- Lessons moved to the new design with two or more verified sources each, learning paths and local progress; glossary with examples in pesos; /about and /methodology published.
- Markets: one card per asset with a touch chart, source chip and “what is it”; sitemap generated from the route registry.
- Lessons: last edit of the legacy versions; reading-time and metadata fixes.
- Six lessons published in English and Spanish.
Conflicts of interest
I have no sponsors, ads, affiliate links or paid placements. I am a student and I do not manage anyone’s money. If I ever hold a position in an asset I write about, the piece itself will say so. Any portfolio or challenge published here will state whether the money is real or simulated.
This is not advice
Everything on Smart Finance is educational. It is not financial, investment or tax advice, and it is not a recommendation to buy or sell anything. Market data is delayed and comes from third parties; verify at the source before deciding anything. Your situation is yours; if you need advice, talk to a licensed professional.
Found an error?
Open an issue on GitHub or send me a message on LinkedIn. Say which page and which number; I will fix it and add it to the changelog.
Attribution
Charts by TradingView Lightweight Charts (Apache 2.0). Data: Yahoo Finance, CoinGecko, Twelve Data, Bloomberg, Banco de México, Federal Reserve. Fonts: Geist (Vercel) and Fraunces (Undercase Type), both under the SIL Open Font License.