Indie Trader Journal  ·  v1.1.1  ·  Local-first  ·  Free

Your portfolio tracker thinks like a trader.

indieTJ is a private, local-first trading journal built by a real retail trader. Capital recovery logic, effective cost tracking, and full transaction history — entirely inside your browser. No signup. No cloud. No subscriptions. Ever.

Available as browser extension: Chrome Extension Firefox Add-on
✓ 100% Local Storage ✓ No Cloud Sync ✓ Capital Recovery Model ✓ Effective Cost Tracking ✓ Works Offline ✓ Trading Analytics ✓ CSV Export ✓ Setup & Mistake Tags ✓ Notebook & Bookmarks ✓ Zero Frameworks ✓ No Signup
🔒No Signup Required
☁️No Cloud Sync
💳No Subscriptions
🗄️Your Data Stays Yours
📈Built by a Real Trader
📴Works Completely Offline
Watch indieTJ

See capital recovery
in action.

A 3-minute tour of the real app: adding a position and its trades, capital recovery and the moment your shares turn FREE, the stock calculator, analytics, the Notebook, Bookmarks and backups.

The Problem

Most portfolio apps
fail real traders.

They were designed for passive investors. Not for traders who manage multiple entries, partial exits, and need to know exactly how much capital is still at risk.

📊
They only show numbers
A list of positions with average price tells you nothing about unrecovered capital, effective cost, or real risk exposure after partial sells.
☁️
Your data lives in their cloud
Your entire trading history, positions, psychology — uploaded to servers you don't control, synced to apps you didn't authorize, monetized as behavioral data.
💳
Subscriptions for basic features
Advanced cost tracking locked behind $20/month. Import/export restricted. Basic calculations paywalled. You pay forever just to see your own data.
🧮
Wrong average cost after partial sells
Standard trackers recalculate average buy price incorrectly after partial exits. They don't model capital recovery at all — the most critical metric for a real trader.

"I built indieTJ because I was tired of tools that couldn't tell me how much of my original capital I'd actually recovered — and how much was still at risk in each position."

— indieTJ Author  ·  Retail Trader Since 2019
The Capital Recovery Model

Not your average cost.
Your effective cost.

indieTJ tracks how much of your original capital is still unrecovered in each position — not just what you paid per share. This is the key metric for real position management.

// Worked Example — BUY 2000 shares @ $2.64 → SELL 1000 @ $3.70
01
Initial Buy
$5,280
2000 shares × $2.64 — total capital deployed into position
02
Partial Sell
$3,700
1000 shares × $3.70 — capital returned to your account
03
Effective Cost
$1,580
$5,280 − $3,700 — capital still at risk in remaining 1000 shares
Capital at Risk 70.08% recovered — $3,700 of $5,280
💡
Your Avg Buy Price is now $1.58 — not $2.64. Only $1,580 of your original capital remains at risk across 1,000 remaining shares. Sell more and this number drops further. When your total proceeds equal total invested, remaining shares become FREE.
⚖️
Effective Cost
Unrecovered capital still at risk. max(0, invested − proceeds). Drops as you sell. Hits zero when FREE.
📉
Avg Buy Price
Not your original purchase price — it's unrecovered cost per remaining share. effectiveCost / qty.
🎁
Free Shares
When total proceeds exceed total invested, remaining shares cost you nothing. indieTJ marks them FREE and tracks bonus profit above recovery.
🔐
Realized P/L
Only the shares you actually sold, on an average-cost basis. Capital still riding in open shares stays out of it — that's Unrealized P/L's job. Locked-in, honest accounting.
Features

Built for the way
traders actually work.

💹
Live Price Tracking via Finnhub
Enter your free Finnhub API key once. indieTJ fetches live prices with ▲/▼ arrows vs previous close and updates unrealized P/L, market value and your targets and stops. Ticker search finds the company as you type. The key is stored only in this browser, in a separate key that is left out of every backup, and is sent to nobody but Finnhub — and the requests carry ticker symbols only, never your positions.
Finnhub API60s price cache Direction arrowsTicker search Key never exported
🏷️
Setup & Mistake Tags New in 1.1.1
Tag each position with its setup — breakout, earnings run, swing — and with what went wrong — FOMO, no stop, chased. Tags sit next to the position, filter the table in one click, and Analytics shows the win rate and P/L of every setup, plus what each mistake cost you this year.
Click to filterBy Tag analyticsCost of mistakes
📈
Trading Analytics — Computed Locally
A dedicated Analytics tab answers the only question that matters: is your trading actually working? Net realized P/L for the year up front, then win rate, profit factor, payoff ratio, expectancy, average win/loss, best & worst trade, hold time, max drawdown and streaks — plus a monthly P/L chart where hovering a month shows exactly which stocks were sold in it, a P/L-by-ticker ranking, a sale-by-sale equity curve and an active capital allocation donut. Tag your setups and your mistakes, and a By Tag table shows which setups pay — and what each mistake cost you this year. Every number is computed on your machine. No external chart libraries, no data sent anywhere.
Win rateProfit factor ExpectancyEquity curve Monthly P/L by tickerPayoff ratioMax drawdownRisk allocation Setup & mistake tags 100% offline
📓
Notebook New in 1.1
A place for everything that belongs to no single stock: your trading rules, the lessons a bad trade taught you, checklists, weekly plans. A real editor — headings, colours, highlights, lists, quotes, tables and links — and a wide reading view. Starts with an example set of rules you can make your own.
Rules & lessonsTables & linksIn every backup
🔖
Research Bookmarks New in 1.1
A speed dial for your research sites — TradingView, Yahoo Finance, Google Finance, Finviz, SEC EDGAR and Nasdaq out of the box, plus any link you add. Type a ticker once and every tile opens straight on that stock. Tiles are drawn locally: no logos or previews are fetched, so nothing leaks.
Ticker lookupDrag to reorderNo trackers
✂️
Splits & Reverse Splits New in 1.1
A 1-for-10 reverse split shouldn't mean retyping your history. Pick the ratio and the date, choose which transactions it applies to, check the before/after preview and apply — share counts and prices convert, the money stays exactly the same, and one click undoes it.
Reverse & forwardPer-transactionUndo
📋
Transaction History
Full BUY/SELL log per position. Expandable inline tree view. Date-stamped, editable, complete — with an optional note and commission on every trade. See exactly how each position evolved over time.
Per-position treeOptional commissionsCarry-over history
📅
Yearly Portfolio Journal
Multi-year tab system. Transfer positions year-to-year with full prior history preserved. Track your evolution as a trader across years.
Year tabsAuto-migration
🧮
Average Cost Calculator
Thinking of averaging down? The calculator opens already filled with your shares, your average and the live price. Buy by number of shares or by dollar amount — get the new weighted average, total invested, current value, P/L per share, and total P/L instantly.
DCA analysisBy shares or by $Live price prefill
📊
Profit / Loss Calculator
Plan exits before you pull the trigger. Sell by shares or by dollar amount — see total buy value, sell value, P/L, and return % instantly.
Sell by sharesSell by amountReturn %
🛡️
Position Size Calculator
The calculation that decides whether a losing trade is a scratch or a disaster. Account size, risk per trade, entry and stop in — shares to buy, dollars actually at risk, and % of account out. Entry pre-fills from the live quote, the stop from the position's own level.
Risk-first sizing2% ruleStops honoured
🎯
Targets & Stops
Your exit plan belongs next to the price that will decide it — not in your head. Set an optional target and stop per position and they sit under the live quote, turning green when the target is reached and red when the stop is breached. Purely informational: indieTJ never places or suggests an order.
Distance in %Zero clutter when unused
💼
Market Value & Concentration
What each open position is worth at today's price, and its share of everything you hold — the fastest way to notice that one ticker has quietly become half your portfolio. A Portfolio Value card adds it all up.
% of portfolioPortfolio Value
💾
JSON Backup & Export
Export your entire portfolio to a dated JSON file anytime. Import it back on any device. Your data is portable, human-readable, and always completely yours.
One-click exportFull importHuman-readable
🔔
Backup Reminder
Local-first has one price: there is no copy of your journal anywhere else. So indieTJ tracks how long it has been and how much has changed, marks the Export button when a backup is overdue, and says so plainly after a month. Dismissing delays it a week — it never switches off, because the risk never does.
Honest, not naggingResets on export
📑
CSV Export for Excel & Taxes
One click exports every transaction of the active year — date, stock, ticker, type, quantity, price, total, fee, note, realized P/L, status, tags and mistakes — as a clean CSV that opens perfectly in Excel, Google Sheets, or your accountant's inbox.
Excel-readyTax seasonUTF-8
📝
Rich Position Notes
Click any note right in the dashboard to open a full-size editor. Bold, italic, underline, and four highlight colors — mark earnings dates, targets, and theses so they jump out at a glance. Formatting shows directly in the table.
One-click editingHighlightsEarnings reminders
🔍
Smart Search & Sort
Live search by ticker, name or tag. Filter Active/Closed/All or by a single tag or mistake. Toggle Closed hides finished trades. Sort by newest, oldest, name, best profit, or worst loss. Find anything instantly.
🎁
Free Share Detection
When your total proceeds exceed total invested, indieTJ automatically marks remaining shares as FREE and quantifies the bonus profit above full capital recovery.
Interface

A workspace built
for focused traders.

Portfolio View
Realized Profit
$1,080
Realized Loss
$412
Net Result
+$668
Capital
$5,000
Unreal. P/L
+$1,765
DFLI
Active
+$550
—
ENVX
Active
-$75
—
STEX
FREE
+$1,290
+$1,080
BURU
Closed
—
-$412
Portfolio Dashboard
Effective cost · FREE shares · Realized & unrealized P/L · Live prices · Tags
Avg Cost Calculator
Existing Shares
1000.0000
New Avg Price
$1.2900
P/L Total
-$580.00
P/L Per Share
-$0.2900
Average Cost Calculator
DCA planning · Weighted averages
P/L Calculator
Shares Sold
1000.0000
Total Sell Value
$2000.00
Profit / Loss
+$420.00
Return %
+26.58%
P/L Calculator
Exit planning · Return % projection
Trading Analytics — 2026
Win Rate
58.3%
7 W / 5 L
Profit Factor
1.84
Expectancy
+$212.40
Avg Win
$890.15
Avg Loss
-$436.60
Best Trade
+$2,140
AAPL
Realized P/L by Month
Equity Curve
Capital Allocation
AAPL · 36%
MSFT · 24%
NVDA · 22%
GOOGL · 18%
Trading Analytics
Win rate · Profit factor · Expectancy · Equity curve · Monthly P/L · Allocation — all computed locally
Privacy First

Your portfolio
never leaves
your machine.

indieTJ was designed around one principle: your financial data belongs to you. Stored in your browser. Controlled by you. No accounts. No analytics. No tracking. No server ever sees your data.

✓ All data stored in localStorage — browser-local, never uploaded
✓ Finnhub API key stored separately — never included in exports or backups
✓ No login, no email, no personal information ever collected
✓ No analytics, no tracking scripts, no third-party data sharing
✓ No cookies beyond what the browser creates for localStorage
✓ Export your entire portfolio as JSON — take it anywhere, anytime
✓ Works fully offline — no internet required for core functionality
Your Data Vault
// localStorage · Browser-only · Your device
Portfolio dataLOCAL ONLY
API key (Finnhub)LOCAL ONLY
Notes, Notebook, bookmarks & AI promptsLOCAL ONLY
Cloud syncDISABLED
Account requiredDISABLED
Analytics / telemetryDISABLED
Subscription requiredDISABLED
Built Differently

Zero frameworks.
Zero bloat. Zero BS.

indieTJ is pure HTML, CSS, and vanilla JavaScript. No npm. No build step. No framework overhead. Open the file — it works.

app.js · calcPositionStats() · capital recovery engine (simplified)
// Capital Recovery Engine
function calcPositionStats(pos) {
  let originalInvested = 0;
  let totalProceeds   = 0;
  let remainingQty    = 0;

  pos.transactions.forEach(tx => {
    if (tx.type === 'BUY') {
      originalInvested += tx.qty * tx.price;
      remainingQty     += tx.qty;
    } else {
      totalProceeds += tx.qty * tx.price;
      remainingQty -= tx.qty;
    }
  });

  // Capital still unrecovered
  const effectiveCost =
    Math.max(0, originalInvested - totalProceeds);

  // Drops to $0.00 when FREE
  const avgBuyPrice =
    remainingQty > 0
      ? effectiveCost / remainingQty
      : 0;

  return { effectiveCost, avgBuyPrice,
    originalInvested, totalProceeds,
    remainingQty };
}
⚡
Pure Vanilla JavaScript
Zero React. Zero Vue. No npm, no build step, no node_modules. The whole app is three files: app.html · style.css · app.js — every chart is hand-written SVG. Small enough for a store reviewer to read end to end.
🗄️
localStorage Architecture
All portfolio data persisted to tradedesk_v1 on every change. JSON serialized, instantly portable via Export/Import.
📴
Offline Capable
Core functionality — journal, history, calculators, analytics, Notebook, AI prompts — works with zero internet. Live prices via Finnhub are fully optional.
🔌
Finnhub API (Optional)
Free Finnhub key for live prices. Two-pass caching: 60s price TTL, 24h company name TTL. Free tier covers 10–20 position portfolios. Key stored locally, never exported.
AI Workflow Integration

Your trading prompts,
always ready.

indieTJ includes a built-in AI Prompt Manager. Store, organize, and access your best ChatGPT and Claude trading prompts alongside your portfolio — no copy-paste hunting. It starts with five ready-made prompts you can use as they are or rewrite.

⭐
Star & Categorize
Tag prompts by category — analysis, entry strategy, risk management, exit planning. Star your best for instant access.
📋
One-Click Copy
Copy any prompt to clipboard in a single click. Paste directly into ChatGPT or Claude — zero friction between thought and action.
🔒
Stored Locally
Prompts live in localStorage alongside your portfolio. Exported together in your backup JSON. Private like everything else.
📊 Portfolio
🤖 AI Prompts
+ New Prompt
Pre-trade sanity check
Planning
I'm considering buying [TICKER] at about $[PRICE]. My stop is $[STOP] and my target is $[TARGET]. Act as a skeptical risk manager: list the three strongest reasons this trade could fail…
Filing scan: dilution & reverse split
Research
Summarise the most recent SEC filings of [TICKER]. I want to know: new share offerings or ATM programs (dilution), warrants, any reverse split proposal, cash runway…
Post-trade review
Review
I just closed a trade in [TICKER]: entered at $[ENTRY], exited at $[EXIT], result [P/L]. My original plan was: [PLAN]. Ask me five questions that reveal whether I followed my plan…
Weekly behaviour check-in
Psychology
Here are my trades this week. Point out patterns in my behaviour — revenge trades, averaging down, cutting winners early, oversized positions, trading without a stop…
Get indieTJ

Install in one click.
No signup. No payment.

Available directly from official browser extension stores. Open and start journaling immediately — your trading journal starts the moment you install.

Chrome Extension
For Google Chrome, Brave, Edge, Arc, and all Chromium-based browsers
Add to Chrome — Free
Firefox Add-on
Available on the official Mozilla Add-ons store. One click installation.
Add to Firefox — Free
✓ Official stores only
✓ No personal data collected
✓ Free — no trial, no limits
✓ Works immediately on install
Private by design  ·  Free forever  ·  Built by a trader

Own your trading journal.
Own your data.

No accounts. No subscriptions. No cloud. Just you, your trades, and a tool that thinks the way you do.

100% free · localStorage only · no signup · works offline · your data never leaves your browser