{
  "markdown": "<p align=\"center\">\n  <img src=\"public/favicon.svg\" width=\"64\" height=\"64\" alt=\"Fundle logo\">\n</p>\n\n<h1 align=\"center\">Fundle</h1>\n\n<p align=\"center\">\n  A free, private portfolio tracker for stocks and ETFs that runs entirely in your browser.\n</p>\n\n![Fundle performance view, showing a portfolio's value and gain/loss over time](docs/screenshots/performance.png)\n\n## What it does\n\nFundle keeps track of what you own and how it's doing — without a server, an account, or your\ndata ever leaving your device.\n\n- Add any number of portfolios, each with the stocks or ETFs you hold and the buy orders behind\n  them (date, quantity, price, optional fee).\n- See the current price, today's change, and how each position and the whole portfolio is doing\n  against what you paid.\n- A performance chart shows the portfolio's value over time next to its actual percentage gain or\n  loss — separating real investment performance from money you simply added.\n- Export your data to a file and import it again later, including price history, so switching\n  devices doesn't mean waiting for everything to reload.\n\nEverything runs client-side: no account, no server, no tracking. Your portfolio data stays in\nyour browser, and you're always one export away from a backup.\n\nThe app has an in-app help screen (the **?** button in the header) that walks through the same\nground for anyone who wants more detail while using it.\n\n## Running locally\n\n```bash\nnpm install\nnpm run dev\n```\n\nOpens on `http://localhost:5173`. Other scripts:\n\n```bash\nnpm test        # vitest\nnpm run build   # production build into dist/\nnpm run preview # serve the production build locally\n```\n\n## Deploying to GitHub Pages\n\n`.github/workflows/deploy.yml` builds and publishes `dist/` on every push to `main`. Enable it\nonce per repository: **Settings → Pages → Build and deployment → Source: GitHub Actions**. Push\nto `main` and the app is live at `https://<user>.github.io/<repo>/` a minute or two later. The\nVite `base` is `./`, so the same build works on a user site and on a project subpath.\n\nTo deploy anywhere else, `npm run build` and serve the `dist/` folder — it is plain static files,\nno server-side code involved.\n\n## Architecture\n\n```\nsrc/\n  domain/       pure model and math, no IO         types, metrics, portfolio, performance\n  data/         market-data port and adapters       PriceProvider, yahoo, twelvedata, proxy\n  app/          state, scheduling, persistence      store, persistence, schema\n  ui/           React views                         Overview, PerformanceView, AddAssetForm, SettingsView\n```\n\nDependencies point inwards only: `ui` → `app` → `data`/`domain`, and `domain` imports nothing.\nSwapping in another market-data API means writing one more `PriceProvider` adapter.\n\n## License\n\nGPLv3 — see [LICENSE](LICENSE).\n",
  "bytes": 2804,
  "sha": "304519aaf3713b6bacb0db3b42d4bb2a3904d4a84f37f40ea2e0fd1e881eebe1",
  "repo_slug": "gram21/fundle",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_gram21_fundle_openwiki_index_md_fc5ee596/readme"
}