Part of a series on building Balance, a portfolio rebalancing app, as a solo developer.

Balance started as a Brazilian-only app: B3 tickers, prices in reais, Brazilian income tax. Then came US stocks. Then crypto. The naïve path would have been three apps glued together — three price fetchers, three sets of forms, three rebalancing engines.

Instead, the whole thing pivots on a single field:

class Portfolio(BaseModel):

market = models.CharField(