Skip to content
MTGMADPublic

About

App for tracking personal stocks and research

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

140 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stockfolio

Stockfolio

Your portfolio. Your machine. Sync on your terms.

A blazing-fast, privacy-first desktop app for tracking personal investments — built with Tauri 2 & React 19.

License: ISC Built with Tauri React Rust


Stockfolio combines real-time market data with a beautiful, native desktop experience — without ever sending your financial data to a server. Every position, every purchase, every gain — stored locally on your machine.


🖥️ Screenshots

Dashboard — Novice mode with portfolio health, winners/losers, and holdings breakdown:

Novice Dashboard

Analysis — Per-ticker price chart, cost basis overlay, P&L metrics, and live news:

Portfolio Analysis

Watch List — Track tickers before buying, with sparklines, target price alerts, and notes:

Watch List

Purchases — Full purchase log with live P&L, market value, and daily change:

Purchases


✨ Features at a Glance

📁 Multiple Portfolios

Organize your investments into as many named portfolios as you like:

  • Create, rename, star, and delete portfolios
  • Reorder the portfolio list in the sidebar
  • Each portfolio maintains its own holdings, purchases, and settings independently
  • Two kinds, chosen when you create one: Manual, which you fill in yourself, and Brokerage, which mirrors a connected account

🏦 Brokerage Accounts

Connect a broker and its holdings appear as a read-only portfolio, alongside the ones you keep by hand.

  • Alpaca supported today — Margin and Paper accounts, each connected separately
  • Every figure comes from the broker. Share counts, average cost, market value and profit are read straight from the brokerage, so your totals match what they show you — nothing is recalculated or estimated
  • Nothing is invented. Where the broker supplies no value, the app says so rather than filling in a guess
  • Prices refresh every 30 seconds, and options and crypto are priced properly — both of which a market-data-only source cannot do
  • Dated transaction history where the broker publishes it

Manual and brokerage data never mix. A brokerage portfolio cannot accept hand-entered purchases, and a manual portfolio can never receive broker holdings — enforced in the database, not just hidden in the UI. Manual portfolios work exactly as they always have; connecting a broker is purely additive.

Read-only, by construction. The brokerage client can only issue GET requests — there is no code anywhere in the app that places or cancels an order, so it cannot trade on your behalf even by accident.

📊 Dual-Mode Dashboard

Switch between Novice and Advanced modes to match your experience level — no clutter, no confusion.

Novice Mode Advanced Mode
Plain-English labels with helpful tooltips Full suite of professional metrics
Portfolio Health indicator (diversification score) Concentration risk analysis
Winners vs. Losers count card 10-column sortable table with all data
Simplified 5-column holdings view Asset Allocation breakdown by type

📈 Deep-Dive Analysis

Click any ticker for a full per-position breakdown:

  • Mountain chart with 8 time ranges — 1D · 5D · 1M · 6M · YTD · 1Y · 5Y · MAX
  • Cost basis overlay — visualize your average entry price against the price curve
  • Live news feed — latest articles pulled via Yahoo Finance RSS for each ticker
  • Upcoming earnings — detects earnings dates and generates a one-click calendar invite (.ics)
  • Drag-to-reorder favorites — pin your most important holdings to the top
  • Yahoo Finance link — one click opens the ticker in your browser or in an in-app window

👀 Smart Watchlists

Organize pre-buy research across multiple named watchlists:

  • Create, rename, reorder, and delete watchlists
  • Live search-as-you-type — finds tickers by name or symbol via Yahoo Finance
  • Keyboard navigation — arrow keys, Enter, Escape all work in the dropdown
  • Sparkline mini-charts — quick at-a-glance price trend per watchlist item
  • Target price — shows analyst mean price estimate alongside your watch price
  • Notes — attach free-text notes to any watchlist item
  • Extended hours indicators — pre-market and post-market price tags
  • One-click buy — purchase directly from the watchlist when you're ready
  • Backup & restore — export/import entire watchlists to CSV

💼 Portfolio Management

Accurately track your positions across stocks, ETFs, mutual funds, and crypto:

  • Log purchases with shares, price per share, and purchase date
  • Automatic unrealized P&L calculation (dollar and percent)
  • Daily change % for every position
  • Extended hours pricing — pre-market and post-market prices with market-state indicators
  • Cost basis tracking across multiple purchases of the same ticker

📊 Performance Ranking

See your entire portfolio sorted by what matters most:

  • Rank all positions by unrealized gain/loss — dollar or percent
  • Instantly spot your best and worst performers across every holding
  • Color-coded gain/loss bars for fast visual scanning

🔄 Storage & Sync

Keep your database wherever you want and sync across devices — entirely on your own infrastructure:

  • Custom database location — move the SQLite file to any local folder, mapped drive, or cloud-synced folder (OneDrive, Google Drive, Dropbox, etc.)
  • Local / network path sync — copy the database to a NAS, SMB share, or any folder on your network
  • WebDAV / cloud sync — sync directly to Nextcloud, ownCloud, or any WebDAV server using app passwords
  • Scheduled sync checks — check every 5, 15, 30, or 60 minutes; transfers require explicit approval
  • Reviewed transfers — choose the source, compare record counts, and approve replacements; empty uploads require an extra confirmation
  • Conflict protection and recovery — version-bound approvals, conditional WebDAV replacements, verified backups, and a review-before-restore interface
  • Conflict resolution — newer database always wins; remote is backed up before overwrite
  • Lock file protection — prevents two devices from writing simultaneously
  • No third-party accounts, no proprietary cloud service, no subscription

⚙️ Settings & Data Control

You own your data — completely:

  • Export to CSV or Excel (XLSX) — save your purchases any time
  • Import from CSV or Excel (XLSX) — restore or migrate from another tool
  • Ameriprise CSV import — dedicated import for Ameriprise account exports
  • Watchlist backup/restore — export and import watchlists via CSV
  • Theme support — System / Light / Dark / Warm, persisted automatically
  • Dashboard mode persisted per device
  • Link open mode — open Yahoo Finance links in your default browser or in a focused in-app window (no address bar)
  • Info tooltips toggle — show or hide contextual help labels

🏗️ Tech Stack

Layer Technology
Desktop shell Tauri 2 (Rust)
UI framework React 19 + TypeScript 6
Styling Tailwind CSS 4
Components Radix UI primitives
Charts Recharts 3
Icons Lucide React
Spreadsheet SheetJS (xlsx)
Database SQLite via rusqlite (Rust-native, bundled, no server)
Sync transport reqwest — HTTP WebDAV PUT/GET + local file copy
Market data Yahoo Finance (fetched natively via Rust reqwest)
News Yahoo Finance RSS (parsed via Rust rss crate)
Build tool Vite 8

🔒 Privacy First

Stockfolio makes zero network requests from your browser. All market data fetching happens in the Rust backend process and is stored in a local SQLite database on your machine. No accounts. No telemetry.

Sync is entirely optional and self-hosted. If you enable it, your database is copied directly between devices via a path or WebDAV server you control — no Stockfolio servers are ever involved. The sync feature works with your own NAS, Nextcloud instance, or any WebDAV-compatible service.

Credentials never leave your machine. Brokerage API keys and sync passwords are stored in your operating system's credential manager — Windows Credential Manager, macOS Keychain, or the Secret Service on Linux — and the database holds only an opaque reference to them. Because sync copies the database wholesale, this is what keeps a key out of the copy that lands on your NAS or Nextcloud. A regression test sweeps every value in every table to keep it that way.

A database synced to a second device therefore arrives without its keys, which is deliberate: the brokerage portfolios are visible and read-only there until you add the credentials on that machine too.


🚀 Getting Started

See SETUP.md for the full development environment setup guide.

Quick start for developers:

# 1. Clone the repo
git clone https://github.com/MTGMAD/StockFilo.git
cd StockFilo

# 2. Install JS dependencies
npm install

# 3. Run in development mode
npm run tauri dev

📦 Building for Production

npm run tauri build

Output installers are placed in src-tauri/target/release/bundle/.

On Linux, use ./stockfolio-linux-build --bundles deb to build and validate the Debian installer, including its AppStream metadata, desktop launcher, executable, and icon. Install the validator tools first:

sudo apt install appstream desktop-file-utils

Install the package through your software manager or APT so it is registered with the system package database. Extracting the package and running its binary does not install it:

sudo apt install ./src-tauri/target/release/bundle/deb/Stockfolio_0.1.9_amd64.deb

GNOME Software uses the packaged AppStream metadata to identify Stockfolio. Ubuntu App Center's support for managing local Debian packages varies by version. If your software center does not list it, the registered package can always be removed with sudo apt remove stockfolio.


🤝 Contributing

Pull requests are welcome. For major changes, open an issue first to discuss what you'd like to change.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📄 License

Distributed under the ISC License. See LICENSE for more information.


Made with ♥ using Tauri + React + Rust

About

App for tracking personal stocks and research

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages