Private personal investment portfolio tracker
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
An offline-first, private personal investment portfolio tracker for Linux, Windows and macOS built with Bun, bun:sqlite, React 19 and Electrobun.
Your portfolio data stays strictly on your local device. Market quotes are fetched live from Yahoo Finance, and AI analytical briefings can be generated on-demand through any OpenAI-compatible server or API (llama.cpp, Ollama, LM Studio, OpenAI, Groq, OpenRouter and others) or the Claude Code CLI with a Claude subscription.檢視完整 README ↗An offline-first, private personal investment portfolio tracker for Linux, Windows and macOS built with Bun, bun:sqlite, React 19 and Electrobun.
Your portfolio data stays strictly on your local device. Market quotes are fetched live from Yahoo Finance, and AI analytical briefings can be generated on-demand through any OpenAI-compatible server or API (llama.cpp, Ollama, LM Studio, OpenAI, Groq, OpenRouter and others) or the Claude Code CLI with a Claude subscription.
~/.local/share/portfolio/portfolio.sqlite on Linux). No external server or accounts needed.bun:sqlite): High-performance WAL-mode SQLite database with indexed tables and instant queries.extras/metrics/repository.yml. Third-party modules can be installed from a URL after a scope consent dialog and stay marked UNVERIFIED.Plus Jakarta Sans for text and JetBrains Mono for numbers, interactive Chart.js visualizations.portfolio/
├── package.json # Bun workspace: modules/*
├── modules/
│ ├── service/ # Pure Bun HTTP service: Bun.serve + bun:sqlite (API, settings, logs)
│ ├── gui/ # React 19 + Vite GUI, served by the service on /
│ ├── desktop/ # Electrobun shell: spawns the service, one window, packaging
│ └── shared/ # Types, brand constants and helpers used by all three
├── extras/
│ ├── metrics/ # Sandboxed AssemblyScript metric modules
│ └── website/ # Marketing site (Cloudflare Pages) + releases/latest.json manifest
├── scripts/
│ ├── release.sh # tag | build (Docker for Linux) | publish (website)
│ ├── docker/Dockerfile.linux # Linux build box
│ ├── build-deb.sh # Debian package from the Electrobun bundle
│ └── build-metrics.ts # Compiles extras/metrics
└── docs/ # architecture.md, theme.md
See docs/architecture.md for how the modules fit together, where settings and logs live, and how releases are built.
libwebkit2gtk-4.1 and GTK 3 for the desktop shell; dpkg-deb and zstd for the Debian packagescripts/release.sh build linux)bun install
bun start # desktop window with GUI hot reload; the service restarts on every change
bun start runs electrobun dev without a stage. The shell finds the checkout, starts modules/service/src/main.ts under bun --watch and modules/gui/scripts/dev-server.ts (Vite, /api proxied to the service), and opens the window on Vite. Both pick a random free port, so an installed app can keep running. A change under modules/desktop/src/bun/ needs a restart of bun start.
Development and the installed app share one data directory: ~/.local/share/portfolio (Linux), %APPDATA%\portfolio (Windows) or ~/Library/Application Support/portfolio (macOS). The first start copies the data of releases before 0.6 from ~/.config/portfolio on Linux.
bun run typecheck
bun run test
bun run build:metrics # after changing extras/metrics
bun run build:metrics --check # validate without writing
bun run build # modules/desktop/artifacts for this OS
bun run release [minor|patch|major] # bump, changelog, commit, tag, push, build 3 OS artifacts in Docker, GitHub release
bun run release:build # build 3 OS packages locally in Docker (dist/<version>/)
bun run website:publish # write latest.json and deploy website to Cloudflare Pages