尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Portfolio management app
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A personal investment dashboard built with Next.js for tracking stock positions (US and Japanese equities), monitoring real-time P&L, and researching new stocks before buying. All portfolio data lives in your browser's localStorage — nothing is uploaded anywhere.檢視完整 README ↗A personal investment dashboard built with Next.js for tracking stock positions (US and Japanese equities), monitoring real-time P&L, and researching new stocks before buying. All portfolio data lives in your browser's localStorage — nothing is uploaded anywhere.
localStorageClone the repository:
git clone https://github.com/Gouliath1/portfolio-tracker.git
cd portfolio-tracker
Install dependencies:
npm install
(Optional) Create an environment file for the screener's data providers and the production market-data cache:
cp .env.example .env.local
See .env.example for details — J-Quants and Twelve Data keys are optional and only needed for screener fundamentals; without them the app falls back to Yahoo Finance.
Start the development server:
npm run dev
Open your browser: navigate to http://localhost:3000
On first load you'll see a demo portfolio and a welcome prompt to import your own data (via the Settings panel → Portfolios), or you can add positions manually with the Add Position modal.
npm run dev - Start development server with Turbopacknpm run dev:clean - Start dev server via scripts/startDev.shnpm run build - Build the application for productionnpm run start - Start the production servernpm run lint - Run ESLint for code qualitynpm test / npm run test:watch / npm run test:coverage / npm run test:ci - Run the Jest test suiteportfolio-tracker/
├── src/
│ ├── app/ # Next.js app directory
│ │ ├── api/ # API routes (prices, pnl, dividends, screener, fx-rates, …)
│ │ ├── screener/ # Stock screener page
│ │ ├── returns/deep-dive/ # Analysis (XIRR) page
│ │ └── page.tsx # Main dashboard page (Overview / Assets / Portfolios)
│ ├── components/ # React components (layout, overview, screener, management, tables, charts)
│ ├── hooks/ # Shared React hooks (base currency, alert polling, ticker names, …)
│ ├── lib/
│ │ ├── core/ # Shared business logic (currency, XIRR/return calculations) — aliased as @portfolio/core
│ │ └── server/ # Server-side services (Yahoo/J-Quants fetchers, market-data cache) — aliased as @portfolio/server
│ ├── types/ # Shared TypeScript models — aliased as @portfolio/types
│ ├── data/ # Demo portfolio data
│ └── utils/ # localStorage-backed position store, caches, hooks helpers
├── data/ # Server-side SQLite caches (market data, screener), gitignored
├── scripts/ # Dev/deploy utilities (fetch-constituents, startDev, gitPush)
├── instrumentation.ts # Server startup hook (no-op — data is client-side)
└── ... # Other config files
Portfolio positions are not stored in a checked-in file — they live in your browser's localStorage, one entry per portfolio ("position set"). To get your real data in:
Since everything is local to the browser, clearing site data / a different browser / a different device won't carry your portfolio over — export before doing so if you need to move it.
See .env.example for the full list. Nothing is required for basic use; these enable extra data sources:
TURSO_DATABASE_URL / TURSO_AUTH_TOKEN - cloud SQLite for the market-data cache in production (Vercel's filesystem is read-only); local dev uses data/marketCache.db automaticallyJQUANTS_API_KEY (or JQUANTS_EMAIL / JQUANTS_PASSWORD) - official JPX fundamentals (P/E, P/B, dividend yield) for Japanese screener stocksTWELVE_DATA_API_KEY - fundamentals for US/JP stocks via Twelve Data (free tier); falls back to Yahoo Finance when unsetYAHOO_COOKIE / YAHOO_CRUMB - manual override if Yahoo's crumb endpoint is rate-limited| What | Provider | Notes |
|---|---|---|
| Hosting / deployment | Vercel | Free tier, auto-deploy on push to main |
| Live URL | tracker.julienguille.com | Custom subdomain |
| Domain registrar | GoDaddy | Manages julienguille.com DNS |
| Server / web hosting | OVH | Hosts other sites on the same domain |
To point tracker.julienguille.com to Vercel, a CNAME record is set in GoDaddy:
| Type | Name | Value |
|---|---|---|
| CNAME | tracker | 9d28ed80412bd346.vercel-dns-017.com. |
Vercel project → Settings → Billing → Spending Limit is set to $0 — Vercel will pause the project rather than charge anything if free-tier limits are ever exceeded.
localStorage — they are never sent to a server for persistence.data/) only caches market data (prices, FX rates, screener fundamentals) — public information, not your holdings.git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
Price updates not working:
.T suffix)My portfolio disappeared:
localStorage. Clearing browser data, using a different browser, or private/incognito mode will not show previously entered positions. Export your position set beforehand if you need to move or back it up.Screener fundamentals missing or stale:
JQUANTS_API_KEY or TWELVE_DATA_API_KEY set, the app falls back to Yahoo Finance, which can be rate-limited — see .env.example for the manual crumb overrideBuild fails:
npm run build locally first to testFor more help, please open an issue on GitHub.
Built with ❤️ using Next.js, React, and TypeScript.