Every feature, in plain language
The full v0.8.0 surface. Click any section to jump.
Log a trade in whatever format fits the moment
Manual, broker auto-import, or CSV. Pick the lowest-friction path; the data ends up in the same place.
Symbol, side (LONG/SHORT), entry, exit, qty, optional P&L override, R-multiple, psych score 1–10, thesis, setup tag, opened/closed timestamps. Form takes ~30 seconds for a basic trade. Validation is permissive but informative — wrong values get inline errors, not silent rejection.
Pin a chart screenshot to each trade so the visual context lives alongside the trade record. Useful for retrospective review — the bar replay shows OHLC, the attached image shows what you actually saw at the moment of decision.
One-click connect for 10 brokers: Alpaca, Tradier, Schwab, E*TRADE, Tastytrade, TradeStation, Tradovate, Questrade, OANDA, and Coinbase. Tokens encrypted at rest with AES-256-GCM. Disconnect any time — tokens deleted immediately, your trade history stays.
One connection unlocks 18 more brokerages via SnapTrade: Robinhood, Webull, Fidelity, Vanguard, Public.com, IBKR (read-only), eToro, Trading 212, Wealthsimple Trade, plus several crypto exchanges. Read-only data sync, no order placement.
Per-broker presets for the major formats (Webull, NinjaTrader, Sierra Chart, MetaTrader 5, ThinkOrSwim legacy exports, plus presets for every OAuth broker). Auto-detects the broker from headers; falls back to a generic mapping for the rest. Where the export is a per-fill activity log rather than a list of closed trades, buys and sells are paired FIFO into round trips and realised P&L is computed from the paired legs — the file's cash-flow column is not read as a result.
See your imported P&L laid out on a month grid before committing. Click a day to drill into the trades; missing days are flagged so you can manually backfill.
The reflection loop, made structural
You write the rules. You grade your own trades. You write the lessons. The app is the structure that holds you to your own commitments.
Force-articulate before the fill: thesis (≥30 chars — ‘looks good’ doesn't pass the gate), invalidation level, max risk in R, optional target. After the trade closes, the drift detector flags execution that diverged from the plan (stop violated, target skipped, max risk exceeded). Multi-active plans allowed; cancellation and expiration explicit.
The app does not suggest rules, score rule quality, or tell you which to follow. You write them, you mark adherence per trade. Three-state mark model: true (followed), false (broke), no row (didn't apply / not yet marked) — the absence of a mark is meaningful and not coerced into a default.
Pick A/B/C/D/F for yourself. Answer 5 yes/no/n-a process questions: followed plan, sized correctly, honored stop, exited at plan, emotionally clean. Write a free-form lessons-learned. All optional, all your call. Aggregated descriptively at /analytics/grades — no app-assigned grades, ever.
Opt-in morning routine. Five freeform fields: market view, key levels, what to watch for, risk limits, notes. No analysis, no scoring, no prompts that nudge a specific answer. Your words, recorded and searchable. One row per (user, UTC date).
On every trade detail page: Polygon OHLCV bars across daily / hourly / minute timeframes. Entry/exit/stop/target overlays from the trade + attached plan. Annotate any bar with a self-note keyed to (trade, multiplier, timespan, bar timestamp) — same shape as Polygon's URL contract, deliberately not aggregated across timeframes.
Four 1–10 scores (discipline, setup quality, execution, mental state) + optional comment, scoped per-week. Persisted per (user, week_start). Re-submittable to revise. Plotted at /analytics/reviews against your actual P&L for that week — are you accurate about yourself?
Server-side ?q= search across symbol, setup, thesis, and lesson notes. Finds matches in trade #842 from six months ago, not just the loaded page. Searches your full history; case-insensitive; sanitized to prevent ilike-wildcard misuse.
Descriptive stats over your own history
Every metric is computed from your own trades. No predictions, no recommendations — see /comparison for which products do that work.
Cumulative P&L line plotted from your trade-close timestamps. Drawdown overlay shows max-DD at any point. Filterable by date range, side, setup tag, broker. Computed in pure functions in lib/analytics.ts; same code paths as the unit tests.
Sharpe (per trade), Sortino (per trade), Calmar, Ulcer index, Pain index, parametric VaR, historical CVaR, profit factor. The two ratios are measured per trade rather than annualised, so they are not comparable with an annualised Sharpe quoted elsewhere. Each metric links to a documentation tooltip explaining what it measures and the assumptions it makes.
Pivot any two dimensions: setup × day-of-week, side × hour, psych × symbol, day × month. Heat-mapped by P&L, win-rate, avg-R, or trade count. Empty cells visually distinct from zero-P&L cells.
Side-by-side stats for two filter slices of your own history. Filter by side, setup, symbol, psych range, date range. Useful for ‘morning vs afternoon’ or ‘high-conviction vs low-conviction’ questions.
Per-setup-tag aggregates with last-N vs all-time delta. Recent decline callout when a setup's last-10 win rate drops ≥15pp below all-time — descriptive observation, not advice.
Your weekly self-ratings (discipline, setup quality, execution, mental state) plotted against actual outcomes for the same week. Pair-joining via week_start_date; weeks with no trades or no review skipped.
Aggregates your per-trade rule-adherence marks over time. Per-rule breakdown shows which of your own rules you stay closer to and which slip. Three-state model preserved (true/false/no-row); no inference from trade outcomes to adherence.
Histogram of A/B/C/D/F you assigned. Per-grade outcome stats (avg P&L, win-rate). Per-question yes/no/n-a rollup. Aggregates only — never assigns grades, never disagrees with the user's grade.
Your psych_score (1–10 self-report) tabulated against P&L and R-multiple. Bucket table (1-3, 4-6, 7-10), per-score breakdown, scatter plot. Descriptive only; not a recommendation about when to trade.
Slices of your past trades that ran ≥15pp below your overall baseline (time of day, setup tag, psych state, symbol, day of week). Surfaces only at ≥20-trade samples. Observation-only callouts; what you do with the finding is your call.
Past P&L broken down by setup, side, hour, day-of-week, psych state, symbol. ‘Where did my year actually come from?’ — this view answers that without claiming the breakdown predicts future.
Monthly grid of daily realized P&L summed across every connected broker plus CSV/manual trades. Click a day for drill-down. Polygon quote overlay shows current price for traded symbols (when configured).
Scrub through your full trading history like a timeline. Watch your equity build (or break) bar-by-bar. Useful for spotting periods of cluster-trading or revenge-tilt that the static charts miss.
Auto-generated email summarizing your past week: trade count, P&L, win rate, top setup tag, top mistake-flag if any, and a reflection question. No advice. Opt-out per user via Settings.
Annual journal export. Month-by-month KPIs + A-F grade distribution + process-review tally + rule-adherence arc + selected lessons-learned text. Defaults to current UTC year; picker spans current + prior 5. Descriptive — no ‘great year!’ interpretations.
Configure your evaluation's rules at /prop — account size, profit target, daily loss limit, static or trailing max drawdown, min trading days, deadline — and see where your closed journal trades stand against them. Computed at end-of-trade granularity from your journal — your firm's own meter stays authoritative. No per-firm rulebooks bundled (you enter the terms your firm gave you); descriptive standing, never advice.
Share a day, a Mon–Sun week, or a single trade as a tokenized public link that unfurls a branded stat card on X and Discord. Dollar amounts hidden by default — cards show R-multiples and percentages unless you opt in to dollars. Links are unlisted and revocable; everything you don't share stays private.
Your data, encrypted and exportable
Real production-grade ops, not a prototype. Source-available reasoning in the ADR series.
AES-256-GCM versioned-ciphertext for broker access tokens, refresh tokens, and Polygon API keys. Encryption key rotation supported (versioned scheme — see ADR-0005).
Every mutation appends a row to audit_events with a hash of the prior row's content. Tamper-detection via /api/audit/verify. The chain is the journal of the journal — even an admin DB session can't silently rewrite history.
Every query is scoped to the signed-in user's id before it reaches Postgres, so a cross-tenant SELECT/UPDATE returns zero rows rather than a 403 (timing-safe). Row-level security policies are enabled on the tables as well, but the Clerk-to-Supabase JWT bridge is not yet configured, so today they are not the enforcing layer — see /security for exactly what enforces what.
Behind a fail-closed allowlist (OPERATOR_USER_IDS env). Shows: 23 live deployment-health checks, cross-tenant aggregate stats (no PII), Stripe-webhook recovery panel, cron-heartbeat freshness, audit-chain verification.
Settings → Full data backup (JSON). Includes every trade, attached chart image, audit-log row, and broker connection metadata (encrypted columns stripped). Re-importable into a fresh account or another instance.
Settings → Danger zone → Delete account. Wipes every Supabase row, the Stripe customer record, and your Clerk sign-in. Confirmation phrase required. No email-support friction.
Log a trade with no connection. Writes queue in IndexedDB with a per-write idempotency key and replay on reconnect; anything the server then refuses (expired session, schema drift) is surfaced with Retry and Discard rather than silently dropped. Reading your existing journal offline is NOT supported — the service worker deliberately caches no authenticated response, and the app says so on screen when you go offline. The PWA installs to your home screen on mobile and desktop.
PostHog (anonymized analytics) doesn't fire any network request until you accept the cookie banner. Decline and it stays dark — the app fully works without it.
What we deliberately don't do
Each one is a door we closed on purpose. Not a backlog. Not coming soon.
We don't have a screener emailing ‘BUY NVDA’. We don't ping you when a pattern fires. We don't predict next-bar direction. Retired in v0.7.0 per ADR-0015 because the output read as advice no matter how it was phrased.
We don't generate ‘here are 3 actions to take next week’ bullet lists. We don't rank your edge. We don't tell you which setups to focus on. The reasoning is in ADR-0015 — short version, ‘the form factor is the problem.’
No Form 8949 generator, no short/long-term classification, no wash-sale tracking. Tax advice carries licensing requirements that aren't a fit for a journal. Use TurboTax, a CPA, or CryptoTrader.Tax — and import our JSON export into whatever they ask for.
The Position Sizer + R:R calculator at /tools is pure math (entry, stop, qty → risk). It does not recommend whether the trade is worth taking. Deliberately label-free — ‘Excellent / Good / Marginal / Unfavorable’ was retired with the journal-only repositioning.
No public journals, no follower mechanics, no ‘trader of the month.’ Self-analysis is private by design. We don't have plans to add this — different product.
We don't place trades. We never will from this product — there is no order-placement code path anywhere in it. Be precise about where that guarantee comes from, though: only Schwab, Tastytrade and TradeStation issue us a grant that is read-only at the broker. Alpaca, Tradier, Tradovate and Coinbase grants carry trade scope, and Questrade, OANDA and E*TRADE use flows with no scope at all — for those seven it is our code, not the broker, that stops an order. Each /supported-brokers page says which. The /comparison page lists tools that DO algo execution if that's your need.
We don't run pattern detection across the wider market and tell you when a setup ‘fires’ on a stock you don't trade. Setup-pattern-firing was retired with the same v0.7.0 ADR (later cleanup in v0.8.x — same reasoning).
Single-user only as of v0.8.0. No mentor read-only views, no compliance archives, no firm-aggregate analytics. Tracking interest for v1.x — email if your firm needs this.
See it for yourself
7 days free, then $15/month unless you cancel — nothing charged during the trial.