Everything you need to run your journal.
From installation to advanced analytics — a complete walkthrough of indieTJ. Ten minutes from now, your trading journal will be up and running, entirely inside your browser.
Install the extension
indieTJ ships from the official extension stores only. Pick your browser:
Chrome, Brave, Edge, Arc (Chromium)
Firefox
storage — local storage for your journal data.Open your journal
On first launch the journal creates a tab for the current year and shows an empty portfolio — that empty table is your invitation to add the first position.
A quick tour of the interface
Everything lives on one screen, organized in four layers from top to bottom:
| Area | What it does |
|---|---|
| Header | Import / Export (JSON backups), CSV (spreadsheet export), API Key (live prices), and a “Saved” timestamp confirming every change was written to local storage. |
| Year tabs | One tab per trading year (2024, 2025, 2026…). + New Year creates the next one and can carry your active positions over. |
| View tabs | Portfolio — your positions table. Analytics — statistics and charts. AI Prompts — your prompt library. |
| Dashboard cards | Realized Profit, Realized Loss, Net Result, Active Capital, and Unrealized P/L for the selected year. |
Below the cards sits the toolbar — Add Position, live search, Active/Closed filter, price refresh, and sorting — and then the positions table itself.
Turn on live prices
indieTJ works fully offline, but it can fetch live market prices from Finnhub — the only external service the app ever talks to. A free key takes about two minutes:
With a key saved you get: live prices with ▲/▼ direction arrows in the table, automatic Unrealized P/L, the dashboard Unrealized card, and ticker autocomplete when adding positions. The 🔄 Refresh Prices button re-fetches everything on demand.
Add your first position
AAPL. With a Finnhub key saved, suggestions appear as you type; pick one and the field fills as AAPL — Apple Inc. Without a key, just type the name yourself in the same TICKER — Company format so live prices can find it later.Record buys and sells
Each position keeps a full transaction log. To add one, click the + button in the position's Actions column:
Click the › chevron at the left edge of a row to expand the transaction tree — the full dated history with per-line totals, a running summary, and a capital status banner. Each transaction can be edited or deleted from there.
Read the numbers: capital recovery
indieTJ doesn't track your average price the way brokers do. It tracks how much of your own money is still at risk. Three columns carry the model:
| Column | Meaning |
|---|---|
| Eff. Cost | Your own unrecovered money: invested − proceeds, never below $0. When it hits $0, the position is marked FREE — the market gave you your money back and the remaining shares ride risk-free. |
| Avg Buy | Eff. Cost ÷ remaining shares. It falls toward $0 as sells recover capital — your true break-even on what's left. |
| Realized P/L | proceeds − invested. Stays $0 until the first sell, shows negative while capital is still at risk, turns positive only once you've taken out more than you put in. |
A worked example with a fictional ticker ACME, starting from BUY 2000 @ $1.00 ($2,000 invested):
| Action | Eff. Cost | Avg Buy | Realized P/L |
|---|---|---|---|
| SELL 1000 @ $1.70 | $300 | $0.30 | −$300 |
| then SELL 500 @ $2.50 | FREE | $0.00 | +$950 |
After the second sell you hold 500 ACME shares that cost you nothing — that's the moment this model is built to surface.
Notes: your trading memory
The Notes column is where you pin what matters: earnings dates, conference schedules, dilution risks, your exit plan. Since v1.0.7 it's a one-click editor:
Target $4.50–$5.00, trim half there.
Capital recovered — rest of position rides free.
The stock calculator
Click the 🖩 calculator button in any position's Actions column. It opens pre-filled with that position's shares and average price, and has two tabs:
Average Cost — “what if I buy more?”
Enter the planned purchase (by number of shares or by dollar amount). You instantly see the new weighted average price, total shares, total spent, current value, and P/L per share — DCA decisions with the math already done.
Profit / Loss — “what if I sell here?”
Enter shares (or a dollar amount) and a sell price. You get total buy value, total sell value, profit/loss, and return % — exit planning before you pull the trigger. A plain-language verdict line summarizes the outcome.
Trading Analytics
The Analytics tab answers the question every journal exists for: is my trading working? Statistics appear once the selected year has at least one fully closed position, and update automatically as you close more trades.
| Metric | What it tells you |
|---|---|
| Closed Trades | Fully closed positions this year — your sample size. |
| Win Rate | Share of closed trades with positive realized P/L, with the W/L split underneath. |
| Profit Factor | gross profit ÷ gross loss. Above 1.0 your system makes money; shown green or red accordingly. |
| Expectancy / Trade | Average result per closed trade. Positive expectancy means the strategy is worth repeating. |
| Avg Win / Avg Loss | The size of your typical winner vs typical loser — the heart of risk/reward. |
| Best / Worst Trade | Your extremes, each labeled with its ticker. |
| Avg Hold Time | Average days from first buy to final sell. |
Three charts complete the picture — Realized P/L by Month (green/red bars reveal seasonality and drawdown months), the Equity Curve (cumulative realized P/L trade by trade; hover any point for ticker, date, and running total), and Active Capital Allocation (a donut of capital still at risk per position — concentration risk at a glance; FREE positions don't appear, because nothing of yours is at risk there).
Backups, CSV export & import
JSON backup — the full snapshot
Export in the header downloads your entire journal — all years, positions, transactions, notes, and prompts — as one dated, human-readable JSON file. Import restores it on any device or browser. This is also how you move between Chrome and Firefox: export in one, import in the other.
CSV export — for Excel and tax season New in v1.0.7
The CSV button exports every transaction of the active year: date, stock, ticker, type, quantity, price, total, transaction note, the position's realized P/L, and its status. The file opens cleanly in Excel, Google Sheets, or LibreOffice (UTF-8 with BOM — special characters survive).
Working with years
Carry respects capital recovery: a position that reached FREE carries over at $0 cost basis, while one still at risk carries at its current average buy. Each year tells its own true story.
The AI Prompts library
The AI Prompts tab is a personal library for the prompts you reuse with ChatGPT, Claude, or any other assistant — pre-market checklists, risk reviews, psychology check-ins. It ships with a starter set; make it yours:
Where your data lives
Everything — positions, transactions, notes, prompts, settings — is stored in your browser's localStorage on your computer. There is no indieTJ server, no account, no sync, no analytics, no telemetry.
Exactly one network connection exists, and only if you enable it: price and ticker lookups to finnhub.io using your own API key. Requests contain ticker symbols only — never your quantities, prices, notes, or P/L. No key, no connections: the journal is fully offline.
Troubleshooting
| Symptom | Fix |
|---|---|
| Prices show “—” | No API key saved, or the key failed. Open 🔑 API Key → paste key → Save & Test. Also make sure the position name starts with a real ticker (e.g. MSFT — Microsoft). |
| No ticker suggestions | Autocomplete uses Finnhub and needs a saved API key. Without one, type the ticker manually — everything else works. |
| Analytics is empty | Statistics need at least one fully closed position (remaining quantity zero) in the selected year. |
| Unrealized P/L missing | It's computed from live prices, so it needs a working API key and at least one price refresh. |
| Data disappeared | Most often a different browser profile, or site data was cleared. Restore via Import from your latest JSON backup. |
| Same journal on two browsers | There's no cloud sync by design. Export JSON in one browser, Import in the other. |
Found a bug or have an idea? Support the project and leave a message at ko-fi.com/indietj.