diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..bb3404e --- /dev/null +++ b/docs/index.html @@ -0,0 +1,168 @@ + + + + + +Divvy โ€” backtest your real investing history against a different portfolio + + + + + + + + +
+
+ +

Divvy

+

"What if I'd invested my money into that portfolio instead?"

+

Replay the exact money you actually invested โ€” the real dates, the real amounts โ€” into a different basket of ETFs/stocks, and see the dividends and returns you would have earned.

+
+ PyPI + MIT + Python 3.12+ +
+ +

The live demo runs on synthetic data. For your real numbers, run it locally โ€” your financial data never leaves your machine.

+
+
+ +
+
+

Why it's different

+

Every backtester on the internet (Portfolio Visualizer and friends) simulates a make-believe "$X every month." Nobody's contributions look like that โ€” real life is lumpy dates and amounts. Divvy replays your genuine contribution calendar (from a broker export, a plain date,amount CSV, or a 1099 dividend import) into whatever portfolio you're curious about, with dividend reinvestment (DRIP).

+

๐Ÿ’ก "If I'd put the exact money I actually invested into this basket instead, how much more โ€” in dividends specifically, and in total โ€” would I have made?"

+
+
+ +
+
+

See it in action

+

Add portfolios, tweak the knobs, and compare dividends & returns live.

+ Divvy Portfolio Experiment Lab demo +
+
+ +
+
+

Features

+
+

๐Ÿ” Real-ledger replay

Your actual contribution calendar, not a synthetic assumption.

+

๐Ÿ’ต Dividends first-class

Lifetime and trailing-12-month run-rate โ€” the number income investors care about.

+

๐Ÿ“ˆ Honest comparison

Money-weighted XIRR, an SPY benchmark row, max drawdown & volatility.

+

๐Ÿงช Experiment Lab

A local web app to add/remove tickers, tweak weights, and compare live.

+

๐ŸŽ›๏ธ Realism knobs

Optional after-tax dividends, rebalancing, and expense-ratio drag.

+

๐Ÿ”’ Private by default

All financial data stays on your machine. Nothing uploaded, nothing committed.

+
+
+
+ +
+
+

Install & try it in 30 seconds

+

No data required โ€” kick the tires with synthetic mode:

+
pip install 'divvy-backtest[ui]'
+
+# zero-data quickstart
+divvy compare --synthetic-monthly 500 --synthetic-start 2019-01-01 \
+  --bucket examples/buckets/dividend_etf_core.yaml \
+  --bucket examples/buckets/high_yield_tilt.yaml
+
+# or launch the interactive Experiment Lab
+divvy ui
+
+
+ +
+
+

How it works

+

Contributions and each holding's ex-dividend dates are merged into one chronological event stream. Contributions buy shares at that day's close; dividends are reinvested (DRIP) into the same holding. Returns use money-weighted XIRR so lumpy cash flows are handled honestly, and risk metrics come from a contribution-free NAV so drawdown/volatility reflect the basket itself.

+
+
+ +
+
+
โš ๏ธ A backtester, not a crystal ball. Divvy describes what already happened over one window. Past performance does not predict the future, and nothing here is personalized financial advice โ€” do your own research.
+
+
+ + + + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..59949f8 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +# For Streamlit Community Cloud deploys only. Local dev uses `uv sync` from pyproject.toml. +divvy-backtest[ui] diff --git a/streamlit_app.py b/streamlit_app.py new file mode 100644 index 0000000..b591054 --- /dev/null +++ b/streamlit_app.py @@ -0,0 +1,9 @@ +"""Entry point for Streamlit Community Cloud. + +When deploying at https://share.streamlit.io, set the "Main file path" to `streamlit_app.py`. +Dependencies come from `requirements.txt` (the published `divvy-backtest[ui]` package). +""" + +from divvy.ui import render + +render()