An institutional-grade trading journal built for serious traders.
Journedge
An institutional-grade trading journal built for serious traders.
Features ยท Screenshots ยท Getting Started ยท Importing Trades ยท Analytics ยท Roadmap ยท Contributing
Why Journedge
Most trading journals are either too simple to be useful or locked behind expensive subscriptions. Journedge is built differently.
Your data stays yours. Everything runs locally on your machine using SQLite. No cloud sync, no user accounts, no telemetry, no third-party data transfers. Your trade history, journal entries, and performance data never leave your machine.
Built for serious traders. Multi-account support, real equity curve tracking from actual starting balance, institutional-grade risk analytics, execution quality analysis, behavioral pattern detection, and a full rich text journal โ not just a P&L spreadsheet.
Open source and auditable. The entire codebase is available, readable, and open to contribution. You can verify exactly what the application does with your data.
Journedge was previously released as Tradello (v1.0.0 through v2.3.0). The project has been renamed to better reflect its core purpose โ turning your journal into your edge. Full history is preserved in CHANGELOG.md.
Screenshots
Dashboard
Real-time stat cards, full trade history table with multi-filter support, and account-scoped P&L tracking.
Journal Editor
Full-page rich text editor with formatting toolbar, trade stats header, tag management, and template support.
Analytics โ Overview
Equity curve from actual account balance, P&L by symbol, P&L by tag, win/loss breakdown, and streak analysis.
Analytics โ Risk Metrics
Sharpe, Sortino, and Calmar ratios. Drawdown curve over time. Rolling 20-trade win rate.
Analytics โ Time Analysis
P&L and win rate by day of week, daily distribution bars, and win rate by tag.
Export
Report builder with date range, ticker, tag, and status filters. Live PDF preview.
Features
Trade Management
- Import trades from five brokers โ format auto-detected on file drop, no configuration required
- Manual trade entry with live P&L preview, auto symbol detection, and OCC option symbol parsing
- Multi-account support โ create separate accounts per broker, switch from the sidebar, all data is account-scoped
- Full trade journal with rich text, tags, screenshots, entry/exit times, R:R ratio, chart links, MAE, and MFE
- Idempotent imports โ re-importing the same file does not create duplicates
Journal Editor
The journal editor is a full word processor built on TipTap and ProseMirror.
Toolbar features:
- Undo / Redo
- Font family โ 15 fonts including DM Sans, Montserrat, Inter, Poppins, Playfair Display, Georgia, Times New Roman, and more. Google Fonts load dynamically on selection
- Font weight โ Light through ExtraBold
- Headings H1, H2, H3
- Bold, italic, underline, strikethrough
- Text color โ 40-swatch palette, pinnable colors, custom hex input
- Highlight โ 20-swatch palette, pinnable colors, custom hex input
- Text alignment โ left, center, right, justify
- Bullet and numbered lists
- Horizontal divider
- Link and image insertion
Templates โ define a document structure once and save it as a template. Set it to auto-apply for specific trade types (options, stocks, futures, or all). When you open a new empty journal for a matching trade type, the template is applied automatically.
Tag System
Tags are stored in a dedicated database table and shared globally across the app. Every entry point โ the journal editor, the quick view panel, and the add trade modal โ uses the same tag selector. Creating a new tag anywhere persists it immediately and makes it available everywhere.
Dashboard
- Stat cards for net P&L, win rate, profit factor, and average loss โ reactive to active filters
- Filter by symbol, status, tag, date range, and free-text search simultaneously
- Full trade history table with click-to-open detail panel
- WIN/LOSS status indicators always display in fixed red/green regardless of accent color theme
Analytics Engine
Performance metrics
- Net P&L and equity curve from initial account balance
- Win rate, profit factor, expectancy in dollars per trade
- Average win, average loss, best trade, worst trade
- Maximum win streak, maximum loss streak, current streak
- Sharpe ratio โ annualised to 252 trading days
- Sortino ratio โ penalises downside deviation only
- Calmar ratio โ annualised return divided by max drawdown
- Maximum drawdown in dollars and percentage from equity peak
- Longest and current drawdown duration
- Rolling 20-trade win rate
- Daily P&L distribution
- P&L by day of week with win rate per session
- R-multiple histogram using average loss as 1R proxy
- Average R per trade and expectancy in R units
- MAE / MFE per-trade logging and analysis
- Entry efficiency โ how close to the optimal entry price you got
- Exit efficiency โ how much of the maximum available move you captured
- Paired MAE/MFE bar chart per trade
- Overtrading detection โ flags sessions where trade count significantly exceeds your personal baseline
- Revenge trade sequence detection
- Discipline score
- Risk of ruin calculator with interactive position sizing slider
- Kelly Criterion and half-Kelly recommendation
Calendar
- Monthly calendar with per-day P&L colouring โ always red/green, not affected by accent theme
- Calendar automatically opens to the month of your most recent trade
- Click any day to open a detail panel โ click any trade to open the full journal editor
Export
- Report builder with date range, ticker, tag, and status filters
- Toggle individual sections โ cover page, performance summary, daily breakdown, trade history, journal entries
- Live preview before generating
- PDF rendered entirely client-side โ data never transmitted
Settings
- Accent colour themes โ green, blue, purple, orange, pink โ applied consistently across the entire interface
- Trading preferences โ default multiplier, commission, fees
- CSV export for backup or migration
- In-app auto-update โ environment-aware, shadow install, semver comparison, backup verification
- Automatic database backup before every update โ last five retained
Tech Stack
| Layer | Technology | |-------|-----------| | Framework | Next.js 16.1.6 (App Router, Turbopack) | | Language | TypeScript 5 | | Database | SQLite via Prisma 5 | | Editor | TipTap 2 (ProseMirror) | | Charts | Recharts 3 | | PDF | @react-pdf/renderer 4 | | Icons | Lucide React | | Styling | Inline styles with CSS custom properties |
Getting Started
Prerequisites
- Node.js 20 or higher
- npm or yarn
Installation
git clone https://github.com/TheQuantum-Dev/journedge.git
cd journedge
npm install
cp .env.example .env
npx prisma migrate dev
npm run dev
Open http://localhost:3000 in your browser.
First Steps
- Go to Accounts and create your first account โ name it, select your broker, and enter your starting balance.
- Go to Import Trades and drop your broker CSV. Format is detected automatically.
- Your trades populate immediately across Dashboard, Journal, Analytics, Calendar, and Export.
- Open the Journal, click Open Journal on any trade, and start writing.
Importing Trades
| Broker | Status | Notes | |--------|--------|-------| | Fidelity | โ Supported | Export from Activity and Orders | | TD Ameritrade | โ Supported | Works with post-Schwab merger exports | | Tastytrade | โ Supported | Options, stocks, and futures supported | | Interactive Brokers | โ Supported | Export from Flex Query or Activity Statement | | Journedge Export | โ Supported | Re-import your own exports โ all journal data preserved |
How to export from Fidelity
- Go to Accounts and Trade โ Activity and Orders
- Select your date range
- Click Download and choose CSV
How to export from Tastytrade
- Go to History
- Set your date range
- Click Export in the top right
How to export from TD Ameritrade
- Go to My Account โ History and Statements
- Select Transactions and your date range
- Export as CSV
How to export from Interactive Brokers
- Go to Reports โ Flex Queries or open an Activity Statement
- Set format to CSV
- Ensure the Trades section is included
Architecture Notes
Database. SQLite via Prisma. All data is local. The database file lives at prisma/journedge.db and is gitignored.
CSV parsers. Each broker has an isolated parser in app/lib/. The import page runs format detection in priority order โ Journedge export first, then Tastytrade, TD Ameritrade, IBKR, with Fidelity as the fallback.
Journal editor. Built on TipTap with ProseMirror as the underlying engine. Documents are stored as TipTap JSON in the journalEntry TEXT column. Legacy plain-text entries render as plain paragraphs. Autosave debounces 1.5 seconds and patches the in-memory trade immediately so navigation never shows stale content.
Tag system. Tags are stored in a dedicated Tag table. On first load, AppContext seeds the table from all existing trade tag arrays. Every subsequent tag creation writes to the database and updates global state in memory โ no full reload required.
Template system. Templates are stored in a JournalTemplate table as TipTap JSON with a scope string (all, option, stock, future, or comma-separated combinations). Auto-apply runs when the editor opens an empty journal โ it queries matching templates and applies silently if exactly one matches.
PDF generation. @react-pdf/renderer runs entirely in the browser via a dynamic import with ssr: false.
MAE/MFE. Two nullable float columns on the Trade table. Entry efficiency (MFE / (MFE + MAE)) and exit efficiency (PnL / MFE on wins) are computed at read time in the analytics engine โ no denormalized values stored.
Behavioral analytics. Overtrading detection uses a statistical threshold of mean + 1.5 standard deviations of daily trade count. Risk of ruin uses a normalized edge formula derived from win rate and payoff ratio. Kelly Criterion is computed from the same inputs and displayed alongside a half-Kelly recommendation.
Theme system. All UI colors use CSS custom properties. Financial indicators (win/loss P&L, calendar cells) use hardcoded green/red constants so they are never affected by the user's accent color selection. UI chrome (buttons, borders, active states) uses var(--accent-green) and updates with the theme.
Auto-update. The update endpoint streams progress via Server-Sent Events. Detects Vercel, Docker, and write-permission issues at preflight. Uses a shadow install directory so the running server's node_modules is never touched until the swap completes. Deletes .next at the end of the pipeline after packages are fully rebuilt. Supports both git and zip-based installations.
State management. A single React Context holds all trades, accounts, tags, and navigation state. updateTradeInMemory patches a single trade in the array without a full API reload โ used by autosave and tag saves in the editor.
Project Structure
journedge/
โโโ app/
โ โโโ api/
โ โ โโโ accounts/ # Account CRUD
โ โ โโโ trades/ # Trade read, write, patch, clear
โ โ โโโ tags/
โ โ โโโ templates/
โ โ โโโ upload/ # Screenshot file uploads
โ โ โโโ update/ # Auto-update SSE stream + restart endpoint
โ โโโ components/
โ โ โโโ Sidebar.tsx # Navigation and account switcher
โ โ โโโ TradePanel.tsx # Slide-out journal and edit panel
โ โ โโโ AddTradeModal.tsx # Manual trade entry
โ โ โโโ TagSelector.tsx
โ โ โโโ JournalToolbar.tsx
โ โ โโโ TradingReportPDF.tsx # PDF document definition
โ โ โโโ ExportPDFInner.tsx # Client-only PDF download wrapper
โ โโโ context/
โ โ โโโ AppContext.tsx # Global state โ trades, accounts, navigation
โ โโโ hooks/
โ โ โโโ useSettings.ts # Settings persistence via localStorage
โ โโโ lib/
โ โ โโโ types.ts # Shared Trade and Account interfaces
โ โ โโโ db.ts # Prisma client singleton
โ โ โโโ svgToPng.ts # SVG rasteriser for PDF logo
โ โ โโโ parseFidelityCSV.ts
โ โ โโโ parseTDAmeritradeCSV.ts
โ โ โโโ parseTastytradeCSV.ts
โ โ โโโ parseIBKRCSV.ts
โ โ โโโ parseJournedgeCSV.ts # Journedge export format parser
โ โโโ pages/
โ โโโ Dashboard.tsx
โ โโโ JournalPage.tsx
โ โโโ JournalEditorPage.tsx # Journal Editor Page
โ โโโ AnalyticsPage.tsx
โ โโโ CalendarPage.tsx
โ โโโ ImportPage.tsx
โ โโโ AccountsPage.tsx
โ โโโ ExportPage.tsx
โ โโโ SettingsPage.tsx
โโโ prisma/
โ โโโ schema.prisma # Database schema
โ โโโ migrations/ # Full migration history
โโโ public/
โ โโโ journedge-logo-dark.svg
โ โโโ journedge-logo-light.svg
โ โโโ journedge-icon.svg
โโโ scripts/
โ โโโ changelog.js # Automated changelog entry generator
โโโ backups/ # Auto-update database backups (gitignored)
Roadmap
v3.2.0 โ Current
- MAE/MFE tracking per trade with execution quality analytics
- Overtrading detection and behavioral analysis
- Risk of ruin calculator with Kelly Criterion
- Discipline score
- Theme consistency fixes โ financial indicators always red/green
- Calendar auto-snaps to most recent trade month
- Robust auto-update pipeline with shadow install and environment detection
- Import page full-width layout
- Pre-trade planning
- Strategy playbook
- Hour-of-day performance heatmap
- Daily risk controls
- Position sizing calculator
- Light mode
Contributing
Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request.
Changelog
See CHANGELOG.md for full release history back to v1.0.0.
Security
See SECURITY.md for the vulnerability disclosure policy.
License
Journedge is open source under the MIT License.
Built by TheQuantum-Dev
Built for traders who take their craft seriously.