User Guide · v1.0.8

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.

Step 1

Install the extension

indieTJ ships from the official extension stores only. Pick your browser:

Chrome, Brave, Edge, Arc (Chromium)

Click Add to Chrome, then confirm with Add extension.
Click the puzzle-piece icon in the toolbar and pin indieTJ so the TJ icon is always visible.

Firefox

Click Add to Firefox, then Add in the permission dialog. The only permission indieTJ asks for is storage — local storage for your journal data.
Optionally pin the TJ icon: right-click the toolbar → Customize toolbar.
🔒
No signup follows. There is no account to create, no email to confirm, no trial that expires. Installation is the whole onboarding.
Step 2

Open your journal

Click the TJ icon in your browser toolbar.
Click Open Journal in the small popup. The full app opens in its own tab.
If the journal tab is already open somewhere, indieTJ switches to it instead of opening a duplicate.

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.

Orientation

A quick tour of the interface

Everything lives on one screen, organized in four layers from top to bottom:

AreaWhat it does
HeaderImport / Export (JSON backups), CSV (spreadsheet export), API Key (live prices), and a “Saved” timestamp confirming every change was written to local storage.
Year tabsOne tab per trading year (2024, 2025, 2026…). + New Year creates the next one and can carry your active positions over.
View tabsPortfolio — your positions table. Analytics — statistics and charts. AI Prompts — your prompt library.
Dashboard cardsRealized 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.

Optional, recommended

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:

Create a free account at finnhub.io and copy your API key from the dashboard. The free tier (60 requests/minute, real-time US prices) is plenty for a personal journal.
In indieTJ, click 🔑 API Key in the header.
Paste the key and click Save & Test. A green checkmark appears next to “API Key” when the connection works.

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.

🔒
Your key stays yours. It is stored in a separate local storage key on your machine, sent only to Finnhub with price requests, and deliberately excluded from JSON exports.
Core workflow

Add your first position

Click + Add Position in the toolbar.
Type the ticker — for example 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.
Optionally add a note — earnings dates, your thesis, price targets (formatting toolbar included; more in Notes).
Click Save Position. The position appears in the table with an Active badge and zero shares — ready for its first transaction.
Core workflow

Record buys and sells

Each position keeps a full transaction log. To add one, click the button in the position's Actions column:

Choose the type: BUY or SELL.
Enter quantity, price per share, and the date. An optional note per transaction (e.g. “added on earnings dip”) keeps context.
Save. All derived numbers — average buy, effective cost, realized P/L — recalculate instantly.

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.

💡
Closing a position happens automatically: when remaining quantity reaches zero, the badge flips to Closed and the trade enters your Analytics statistics.
The engine

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:

ColumnMeaning
Eff. CostYour 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 BuyEff. Cost ÷ remaining shares. It falls toward $0 as sells recover capital — your true break-even on what's left.
Realized P/Lproceeds − 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):

ActionEff. CostAvg BuyRealized P/L
SELL 1000 @ $1.70$300$0.30−$300
then SELL 500 @ $2.50FREE$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.

Stay oriented

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:

Click a note (or Add note) directly in the table — no need to open Edit Position.
A large editor window opens. Select text and use the toolbar: B bold, I italic, U underline, four highlight colors, and an eraser to clear formatting.
Click Save Notes. Formatting shows directly in the dashboard table.
💡
Keyboard shortcuts work inside the editor too: Ctrl+B, Ctrl+I, Ctrl+U.
Plan before you click Buy

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.

New in v1.0.7

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.

MetricWhat it tells you
Closed TradesFully closed positions this year — your sample size.
Win RateShare of closed trades with positive realized P/L, with the W/L split underneath.
Profit Factorgross profit ÷ gross loss. Above 1.0 your system makes money; shown green or red accordingly.
Expectancy / TradeAverage result per closed trade. Positive expectancy means the strategy is worth repeating.
Avg Win / Avg LossThe size of your typical winner vs typical loser — the heart of risk/reward.
Best / Worst TradeYour extremes, each labeled with its ticker.
Avg Hold TimeAverage 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).

🔒
Local math only. All statistics and charts are computed from your own closed trades, in your browser, with hand-written SVG — no chart libraries, no requests, nothing sent anywhere.
Your data, portable

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).

⚠️
Make backups a habit. Your data lives in browser local storage — clearing site data, uninstalling the extension, or a fresh OS install removes it. A monthly JSON export to your own disk costs one click and makes you indestructible.
The long game

Working with years

Click + New Year in the year bar and confirm the year number.
Keep “Transfer active positions” checked to carry open positions into the new year as clean opening entries dated January 1.
The carried position keeps its full prior-year history visible in the transaction tree (marked as carry), while the new year's math starts fresh.

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.

Your AI workflow

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:

+ New Prompt creates one with a title, category, and the prompt text.
Copy puts the full text on your clipboard — paste it into your AI chat alongside your ticker or portfolio context.
Star ⭐ your go-to prompts and use the Favorites filter, search, and category dropdown to keep a large library navigable.
Privacy

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.

When something looks off

Troubleshooting

SymptomFix
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 suggestionsAutocomplete uses Finnhub and needs a saved API key. Without one, type the ticker manually — everything else works.
Analytics is emptyStatistics need at least one fully closed position (remaining quantity zero) in the selected year.
Unrealized P/L missingIt's computed from live prices, so it needs a working API key and at least one price refresh.
Data disappearedMost often a different browser profile, or site data was cleared. Restore via Import from your latest JSON backup.
Same journal on two browsersThere'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.