← Back
What’s in the product

Every feature, in plain language

The full v0.8.0 surface. Click any section to jump.

Capture

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.

📓
Manual trade entry

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.

🖼
Chart image attached to each trade

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.

🔗
Broker OAuth

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.

🌐
SnapTrade aggregator

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.

📥
CSV upload

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.

📅
P&L calendar import view

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.

Reflect

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.

🎯
Pre-trade plans

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.

📋
User-authored trading rules

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.

🎓
Post-trade self-grading

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.

🌅
Daily prep template

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

📈
Bar-by-bar replay charts

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.

📝
Weekly self-review

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?

🔍
Journal-wide text search

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.

Analyze

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.

📊
Equity curve + drawdown

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.

🛡️
Risk metrics

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.

🔲
Cohort cross-tabs

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.

⚖️
Slice compare

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.

🏷️
Setup breakdown

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.

🔬
Self-report vs outcome correlation

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.

🛡️
Discipline score

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.

🎓
Self-grades distribution

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.

🧠
Psychology correlation

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.

🎯
Pattern flags

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.

🧩
P&L attribution

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.

📅
P&L calendar (live)

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

Trade replay

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.

📧
Weekly digest email

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.

📄
Year-in-review PDF export

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.

Built like infrastructure

Your data, encrypted and exportable

Real production-grade ops, not a prototype. Source-available reasoning in the ADR series.

🔐
Encryption at rest

AES-256-GCM versioned-ciphertext for broker access tokens, refresh tokens, and Polygon API keys. Encryption key rotation supported (versioned scheme — see ADR-0005).

🔗
Hash-chained audit log

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.

🛡️
Multi-tenant isolation

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.

⚙️
Operator dashboard

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.

📥
Self-serve export

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.

🗑️
Self-serve account deletion

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.

📵
Offline-first journaling

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.

🔒
Cookie-gated tracking

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.

Honest non-goals

What we deliberately don't do

Each one is a door we closed on purpose. Not a backlog. Not coming soon.

×
Trade signals or alerts

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.

×
Advisory output / coaching recommendations

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

×
Tax forms or tax advice

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.

×
Position sizing recommendations

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.

×
Social / leaderboards / copy-trading

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.

×
Automated trading / algo execution

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.

×
ML alerts / forward-looking edge detection

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

×
Team / firm accounts

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.