@EconomiCurtis thank you for these great suggestions, I'll work on them asap! The memory limit was binding because I loaded daily returns for 20 years and 500 stocks by default (the optimal weights need to be computed on the fly). I also have on my list to just load the data that the app actually needs and keep the rest in duckdb or arrow.