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 20+ more brokers 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.
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, Sortino, Calmar, Ulcer index, Pain index, parametric VaR, historical CVaR, profit factor. 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.
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.
Row-level security on every Postgres table. Cross-tenant SELECT/UPDATE attempts return zero rows, not 403 (timing-safe). Tested in tests/e2e and in the pen-test checklist re-run quarterly.
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.
Trade logging works offline. Writes queue in IndexedDB with idempotency keys; replay on reconnect. The PWA installs to your home screen (mobile + desktop) with a service-worker cache strategy per resource class.
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. Brokers are read-only — OAuth tokens have no order-placement scope. 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, no card required. $17/month after if you stay — cancel anytime.