Three ways in: copy-paste, screenshot OCR, or a full broker history file
JournalEdge
Your trading journal, finally automated.
Copy-paste, screenshot OCR, or a broker history file — then let the analytics show you where your edge actually is.
3 modes
Paste, OCR, file import
4+
Broker platforms detected
In-browser
OCR with no API key
Recharts
Outcome-aware analytics
Why it stands out
The decisions, trade-offs, and details that make JournalEdge worth your time.
Auto-detects platform and columns, then previews every row before anything is saved
Profit / loss / breakeven / open outcomes derived automatically and filterable
Type-safe end to end with tRPC and shared Zod schemas
Every trade in, every insight out
Journaling fails when entry is slow. JournalEdge makes capturing a trade as easy as pasting a row or dropping a screenshot — and makes reviewing it genuinely useful.
Copy-paste import
Paste tab- or comma-separated rows straight from TradingView or MT4. Headers are detected, columns auto-mapped (Symbol → symbol, Entry → entry_price), and you review an editable preview before anything is saved.
Screenshot OCR
Paste (Ctrl+V) or drag-drop a chart screenshot. Tesseract.js runs entirely in the browser — no external API key — extracting entry, SL, TP and symbol, and detecting long vs short from green/red dominance.
Broker history import
Drop MT4/MT5 statements (.csv/.tsv/.txt/.xls/.xlsx/.ods/.html), cTrader or generic exports up to 15 MB. MT5 deal ledgers with In/Out directions are rebuilt into closed positions FIFO.
Smart parsing
Header-signature scoring with confidence, MT4 duplicate Price/Time disambiguation, Buy/Sell ↔ Long/Short coercion, currency and thousands separators, MT4 dot-dates, Excel serial dates, skipped title rows, and deposits filtered out.
Outcome engine
Every trade gets a Profit / Loss / Breakeven / Open badge derived from exit vs entry and direction, or from an explicit P&L. Filter by outcome and see counts at a glance.
Analytics that answer questions
Recharts dashboards show performance over time, with Total and Average P&L cards whenever P&L data exists — so you can compare setups and sessions instead of guessing.
Safety before saving
Nothing is written to the database until you review the parsed rows. Preview grids are editable, and imports are saved in 500-row chunks.
Production hygiene
JWT + bcrypt auth, type-safe tRPC contracts, Drizzle migrations, GitHub Actions builds and tests, CodeQL analysis and Dependabot updates.
Local-first dev loop
One docker compose up starts PostgreSQL; pnpm dev runs backend and frontend in parallel — frontend on :5173, backend on :4000.
Capture → review → analyze
The workflow mirrors how traders actually work: grab trades as they happen, clean them up later, and review the aggregate.
Capture
Paste a row, drop a screenshot, or import history. Platform and columns are detected automatically.
Review
Edit the parsed preview grid. Every field is editable and nothing is saved until you confirm.
Journal
Filter by symbol, outcome or date. Outcome badges and P&L totals keep the picture honest.
Analyze
Charts and metric cards surface where you perform — by setup, by period, by outcome.
Import pipeline
Paste rows ──┐
Screenshot ──┼──▶ Parser / OCR (browser) ──▶ Editable preview ──▶ tRPC trades.importRows
Broker file ─┘ (Tesseract.js) │ │
│ nothing saved ▼
└── until confirmed PostgreSQL + Drizzle
│
Journal + Analytics (Recharts)Tech stack
A pnpm monorepo with shared Zod schemas keeping the React frontend and Express/tRPC backend in lockstep.
Licensed under MIT.
Built in the open. Star it, try it, break it.
JournalEdge is MIT-licensed and developed in public. Feedback, issues, and contributions are genuinely welcome.