Case study
Modelist
Investment model platform for Modelist, rebuilt from an Excel workbook

Overview
- Industry
- Financial services
- Status
- Live
- Technology
- NestJS, TypeScript, PostgreSQL, Prisma, React, Material UI, AWS, OpenAI API
Modelist builds custom investment models for fiduciary financial advisors. We replaced the Excel and VBA workbook behind those models with a web platform that matches the spreadsheet’s numbers.
- Excel and VBA workbook rebuilt as a web platform
- Total returns match the Excel engine to 4 decimal places
- Over a million rows of daily index history migrated
The brief
Modelist builds custom, white-labeled investment models for independent fiduciary advisors in the US. The engine behind those models was an Excel workbook with VBA macros. Modelist asked us to turn it into an investment model platform on the web, without changing a single number.
That last part was the hard requirement. Advisors build portfolios on these figures, so the new system had to agree with the spreadsheet before it could replace it.
What we built: the investment model platform
The model engine
A NestJS and PostgreSQL service ports the workbook’s logic. It blends strategy weights into asset-class weights and rounds them the way Excel does. Then it walks each model day by day over NYSE trading days, rebalancing monthly, with a benchmark walked alongside.
From that walk it computes annualized return, Sharpe ratio, maximum drawdown, tracking error, information ratio and annual returns. It also draws the efficient frontier and drawdown charts.
The advisor app
In the React app, advisors build a model from strategies or start from a template. Allocation, risk and drawdown update as they go. Each model has overview, change history, statistics and fund tabs. Advisors download model PDFs and trade files, one at a time or in bulk.
Admins manage strategies, asset classes, client organizations and CSV data imports from the same app.
Rationale in plain English
Every strategy change carries a written rationale, so advisors can see why an allocation moved. Draft overviews and rationales come from the OpenAI API. The prompt forbids performance guarantees and sales language.
How we worked
We treated the spreadsheet as the specification. First we compared every Excel reference sheet with its database table. Then we reviewed the VBA line by line against the new code, and ported it to Python as an independent check.
Each difference was traced to a root cause. Two examples: floating-point error in a weight calculation, and a rounding rule that behaves differently in JavaScript than in Excel.
The data moved too: over a million rows of daily asset-class history back to 1994, plus funds, strategies, models and benchmarks. The import cleaned up what spreadsheets collect over time, such as odd encodings, accounting-style negatives and duplicate fund symbols. That is legacy software modernization done properly: move the logic, prove it matches, then switch.
Where it stands
Live. The verified release was frozen in April 2026, and production moved to AWS the next day. Sharpe ratio, drawdown, tracking error and annual returns match Excel within small, documented tolerances, with one model’s tracking error a known exception.
Send a message
Planning something similar?
A short brief is enough. Someone who can answer technical questions replies within one business day. Prefer to talk? Call us.

