Translated from the Spanish original. Where they differ, the Spanish one holds.
The department that decides and validates Horalis's methods: which model answers each question, with which assumptions and data, how it is checked and where it stops holding. Each app has its sheets here, and so do the sheets that belong to no single app (the educational and the legal ones).
Three pieces, three roles
| Piece | Role | Where |
|---|---|---|
| Forja | Builds: creates each new tool, already connected to what is shared. | tools/forja |
| seed-kit | Is the pieces: colours, header and footer, languages, formats, privacy and the checks every page passes. | packages/seed-kit |
| Research | Decides and validates the methods: each app's models and assumptions, their sources, their tests and their limits. | this folder |
Forja and seed-kit make sure a tool is private, light and bilingual. Research makes sure what it calculates is defensible, and that what it does not know is said honestly.
The rule
No model or assumption of an app changes without its sheet in
research/.
- A new calculation, or a change to an existing one (a formula, a figure, a source, a threshold, a starting value), comes with its new or updated sheet in the same change.
- The sheet says what changes, why and which tests check it, and notes it in its History.
- If the sheet and the code do not say the same thing, the code is wrong until shown otherwise.
- A text of the app that explains a method (the How it works page, a help text) cannot say more than its sheet says.
What each sheet has
- The question it answers, in the words of the person using the app.
- The formula in plain words, then the exact formula.
- Assumptions: what is taken for granted.
- Dated sources: where each figure comes from and how far it reaches.
- Validation: which tests check it (file and what they look at).
- Limits: when it does not hold and what it leaves out.
- What is debatable: what a demanding finance professor would object to, without changing any calculation yet. Each point with what it would cost to resolve.
- History: date and change.
Sheets
Horalis Growth
Code paths are under projects/wealth-lens/ unless they say otherwise.
| Sheet | Model | Code |
|---|---|---|
| Growth | The big number: how much you will have. | src/lib/finance.ts, calculator.ts, investment.ts |
| Simulated futures | "If it goes badly / if it goes well", the band of 8 in 10. | src/lib/simulation.ts, normal.ts, projections.ts |
| Withdrawal rate | "Could pay you each month" and "lasted 30 years". | src/lib/monte-carlo.ts, withdrawal.ts, success-table.ts |
| Mixes | A mix of asset types; single shares, as a future piece. | src/lib/mix.ts, volatility.ts |
| Cost of living by country | "Enough to live in", the table of countries and a country's goals (also Horalis Cost of Living). | packages/seed-kit/src/official/living-costs.ts, cost-of-living.ts |
| Inflation | Everything in today's euros; savings; "Rising prices in". | src/lib/investment.ts, assets.ts, seed-kit cost-of-living.ts |
| Default values | What the calculator starts with (no growth; 20 years; 30 years) and why. | src/lib/validation.ts (DEFAULT_PLAN, DEFAULT_YEARS) |
| Bad decade in history | "If your first 10 years were like 2000–2009". | src/lib/decade.ts, what-if.ts, findings.ts |
| Check of your plan | The 0 to 2 observations: horizon against risk, and long-term saving. | src/lib/plan-check.ts, src/i18n/check-text.ts |
| Wishes and prices by country | Withdrawn in phase A2: the method's history. | — |
| Without a framework | A study (phase E1), not a method: Horalis Growth without Next.js or React, with measured facts and options. | package.json, src/components/, src/lib/ |
Horalis Inflation
| Sheet | Model | Code |
|---|---|---|
| Inflation | What money from back then is worth today, in any country: the series and the years of each place. | projects/inflation-lens/src/calc.ts, series.ts |
For every app
| Sheet | What it is |
|---|---|
| Why not simply maximise growth (Kelly) | Educational: what Kelly says, what our data would give and why Horalis does not recommend weights. |
| Official data | The series every tool uses (World Bank, Eurostat, CLDR): sources, licences, the yearly download and its checks. |
| Currencies | Each country's currency, the official exchange rates by year, how an amount is converted and written in each tool, and the starting country from the browser's language. |
| Inform, do not advise | Legal: the line between general information and personalised advice (MiFID II) and the writing rules for every app. It is not legal advice. |
Status
First version: 3 October 2026. Sheets written from the code as it stood on that date (Horalis Growth after phases 1 to 3), without changing any calculation. What is debatable is noted in each sheet to be decided later, each thing with its own updated sheet.
The only things that changed while writing them, without touching any result:
- three code comments that no longer said what the code does (
investment.ts,monte-carlo.ts,simulation.ts); - rule 1 of the legal sheet is now a seed-kit test for every app, and the only text that broke it, Horalis Growth's title "What you should know", becomes "Good to know" ("Para tener en cuenta").
Phase 5 (7 October 2026): new sheet on wishes and prices by country, with its choice rule and its sources, in the same change as the code; the inflation and growth sheets call the inflation adjustment by its label, "Rising prices in", so it is not confused with the wishes' "Prices in".
Phase 6 (7 October 2026): new sheet on the check of your plan; a single concentration threshold, 20 % (point 4 of what is debatable in the mixes is resolved); the legal sheet notes the check and its test.
The figures the sheets quote from the data (averages, swings, success rates) come from the same files the app uses (packages/seed-kit/src/data/asset-returns/, projects/wealth-lens/src/lib/success-table.ts); if the data change, the tests fail and the sheet is updated with them.
Phase A2 of the Horalis plan (9 October 2026): everything that goes stale or cannot be published is removed. Sheets updated in the same change: cost of living (new method, official data only), growth (no World or Nasdaq-100; gold from the World Bank), mixes (no single shares or My portfolio, which remain a future piece), check, bad decade, simulated futures, withdrawal rate, default value, inflation, personal goals and wishes (withdrawn).