🆕 New in v2.2: the Profit Matrix (trade form & ⋮ menus), the upgraded Log Premium Income and Roll forms with live quotes and safety checks, the shareable Trade Report, Tabs customization in Settings, pop-up Export/Import forms, and honest wheel-cycle statuses. Since then: the 🎯 Premium Goal tracker with per-symbol targets and live 💡 suggestions, the Wheel Summary table, ℹ️ card explainers everywhere, last-tab memory, partial fills (close or roll only some contracts), the 💰 Bought-to-Close quick action with live price prefill, a θ/day column with real theta, strikes colored against your cost basis, roll history inside the wheel cycles, a per-stock collateral breakdown, the Trade Report builder (sections, date ranges, percentages-only privacy), starting-cash setup with true assignment accounting, dual net cost basis (with-open · settled), and a cleaner no-key mode — every 📡 fetch button hides itself until you add a Polygon key, and reappears the moment you do. The full version-by-version list lives right here in Help — click ✨ What's New — changelog in the sidebar.
1. Overview
Harvest Ledger Pro is a single HTML file that runs entirely in your browser. All data is stored locally using browser localStorage — no account, server, or internet connection required for core features.
Key Features
- Multi-portfolio support — manage taxable, IRA, Roth, 401k, and HSA accounts separately
- Portfolio tracking with cost basis, market value, gain/loss, yield on cost, and income
- Dividend income logging, reinvestment tracking, and projection
- Ex-dividend event calendar with bulk import for 11 built-in ticker schedules
- Forward Dividend Calendar — month-view grid of upcoming ex-div and pay dates
- Automatic dividend cut and raise detection (⚠️ Cuts tab)
- 12-month income planning calendar with gap analysis and goal tracking
- Scenario Planner — project side-by-side outcomes for up to 3 stocks with DRIP compounding
- Rebalancing Assistant — sector and per-holding drift analysis with buy/sell recommendations
- Watchlist with composite scoring, safety ratings, dividend type classification, and compare tool
- Options / Wheel Tracker for covered calls, puts, and premium income tracking
- Cash management ledger for tracking uninvested capital
- Tax Year Income Summary — 1099-style qualified/ordinary/REIT income breakdown with CSV export
- Historical dividend growth chart per stock from ex-div event history
- Daily Balance tracking — account & cash logged daily with returns, streaks, and a drift check vs the ledger
- ☀️ Today digest and 🔔 notifications bell — every alert across the app in one prioritized list
- Dark mode, print/PDF snapshot, and full JSON export/import backup
How to Open
Double-click HarvestLedger_Pro.html to open it in your browser. No installation required.
| Detail | Value |
| File type | Single-file HTML (self-contained) |
| Data storage | Browser localStorage — persists across sessions in the same browser |
| Internet required | Only for live price refresh via Polygon.io API |
| Dark mode | Toggle via 🌙/☀️ button in the header |
| Mobile | Responsive layout; tabs scroll horizontally, tables have sticky first column |
★ New in This Release
💹 Daily Balance (⚙️ Settings → Features, or the setup wizard) adds a ten-second daily habit with outsized payoff: log your broker's total and cash balance and the card at the top of the Overview answers with change-vs-previous chips, W/M/Y period returns, an all-time-high marker (and 🎉 when you set one), a 🔥 streak counter, and a chart that cycles between value lines, green/red daily-change bars, and a stacked invested-vs-cash Deployment view. The reminder only fires on market days — it computes the NYSE holiday calendar locally, Good Friday included. Skip a day with one click; the card tucks itself away once you've logged or skipped and returns when a balance is next due. History keeps Δ columns, month recaps, edit/delete, back-fill, and CSV export. Best of all, the ⚖ drift detector compares what your broker says against what the app computes — a 1%+ gap gets flagged with the likely cause, turning the habit into an automatic books-audit.
☀️ Today & the 🔔 bell put every alert in one place: balance due, drift, take-profit hits, expiries within 7 days, buy targets, missing dividend payments, and overdue backups, each with a one-click action. The same list lives at the top of the Overview and behind the header bell on every tab; when there's nothing, you get a green all-clear. New users also get a 🌱 Get growing checklist — five steps that check themselves off as the ledger comes to life.
Options traders get four big ones. The 🎡 Wheel Cycle P&L card settles the wheel's oldest argument with one line per symbol: CSP premium + CC premium + share gains (held and sold) + dividends = the honest total, with still-open credit kept separate. 📅 Earnings-date warnings — set a symbol's earnings date once from the ⋮ menu and any position expiring across it wears a red ⚠ ER chip, because earnings moves are when short options get hurt. The 🧾 Trade Report v2 opens with a hero band and adds profit factor, expectancy, streaks, CSP-vs-CC scorecards, static SVG charts, chain-true rolled legs, and a vs-prior-period line. And the header's Net Δ now shows a trend arrow — whether your book has drifted more bullish or bearish since the last reading.
Elsewhere: total-return % and an auto-fetched 📡 SPY benchmark on the Portfolio, ⏳ expiry-month premium on the Income Calendar, a yield-implied buy-target cross-check and 📌 pinnable screener on the Watchlist, a cash-earns APY estimate, 🔢 Open in Calculator from any holding, 📊 "use my volatility" on the Monte Carlo, and a Log date-range filter with CSV.
2. Tab Reference
The dashboard has 12 tabs accessible from the scrollable tab bar at the top. On mobile, swipe the tab bar horizontally.
| Tab | Purpose |
| 🏠 Overview | Portfolio KPIs, allocation charts, sector breakdown, upcoming dividends for the current month |
| 🌐 All Portfolios | Combined view across all your portfolios with per-account breakdown |
| 📊 Portfolio | Per-holding table: cost basis, market value, gain/loss, yield on cost, annual income |
| 💵 Dividends | Log dividends, Forward Calendar, Tax Year Summary, growth chart, and ex-div events |
| 📅 Income | 12-month income calendar and gap analysis |
| 🛠️ Tools | Paycheck Simulator, DRIP Compounding Projector, per-stock DRIP Projector, Scenario Planner, Rebalancing Assistant |
| 🔍 Watchlist | Monitor stocks with scoring, safety ratings, dividend type, and side-by-side compare |
| 🧮 Buy Planner | Investment calculator: income from shares, shares for target income, required yield |
| 📋 Log | Full audit log of all add/edit/delete transactions |
| 📊 Metrics | KPI dashboard, income trends, goal tracker, dividend growth rate table |
| 🧾 Taxes | Tax Year Summary, dividend tax estimate, ROC basis tracking, 60-day qualified check |
| ⚠️ Cuts | Automatic dividend cut and raise tracker derived from ex-div event history |
| 🎯 Options | Options trade log and Wheel Strategy tracker with premium income summary |
| 💰 Cash | Cash and uninvested capital ledger with running balance |
3. Portfolio & Multi-Portfolio
Multiple Portfolios
The dashboard supports multiple portfolios — one per brokerage account or account type. Use the portfolio switcher in the header (the dropdown next to the portfolio name) to switch between them.
- Click + New Portfolio to create a new account. Give it a name and select an account type.
- Account types: Taxable, Traditional IRA, Roth IRA, 401k, HSA, Other.
- Each portfolio maintains its own holdings, dividends, ex-div events, watchlist, and options.
- The 🌐 All Portfolios tab shows a combined view across all accounts.
The Tax Year Summary is account-type aware — tax-advantaged accounts (IRA, Roth, 401k, HSA) are flagged as "not currently taxable" and reported separately.
Adding Holdings
Click + Add Holding on the Portfolio tab. Required: Symbol, Shares, Cost Basis, and Purchase Date. Recommended: Sector, Company name.
To add additional lots of the same ticker (e.g. a new purchase), add another row with the same symbol. They are combined in the performance view but tracked separately for lot-level cost basis and ex-div eligibility.
Lot dates matter. The ex-div share count is calculated from lots purchased strictly before each ex-div date. If you buy more shares before the ex-div cutoff, add them as a new lot with the correct purchase date — the system will automatically include them in projected income for that event.
Updating Prices
Polygon.io API (Automatic)
- Click Refresh Prices in the header
- Enter your free Polygon.io API key — it is saved locally and remembered
- Click Fetch Live Prices to pull current prices for all holdings automatically
Manual Paste
- Click Refresh Prices → expand the Manual paste fallback section
- Paste prices as JSON:
{"SCHD": 28.42, "O": 53.10, "BLOX": 15.22}
- Click Apply
Portfolio Tab Columns
| Column | Description |
| Shares | Total shares across all lots for this ticker |
| Avg Cost | Average cost per share (total cost ÷ shares) |
| Market Price | Last price entered or fetched |
| Market Value | Shares × Market Price |
| Gain/Loss $ | Market Value minus total cost basis |
| Gain/Loss % | Gain/Loss ÷ Cost Basis |
| Yield on Cost | Annual dividend ÷ Avg Cost (from Watchlist) |
| Current Yield | Annual dividend ÷ Market Price |
| Annual Income | Projected annual dividend income for this holding |
4. Dividend Logging
Logging Received Dividends
Use the Log Dividend form on the Dividends tab. Fields: Symbol, Date, Amount/Share, Shares, Type (Cash or DRIP), and optional Notes.
Reinvestment Log
The + Log Reinvestment shortcut records when dividend cash is used to buy additional shares. It adds a portfolio lot and links it to a dividend event in one step, keeping your cost basis accurate.
Dividend Charts
- Income by Stock — bar chart of total dividends received per holding for the selected year
- Cash vs DRIP by Stock — stacked bar showing cash vs reinvested dividends
- Monthly Income Trend — 12-month bar chart of total dividends received
Dividend Growth Rate
The Dividend Growth Rate card on the Metrics tab shows year-over-year income change per stock from your logged dividends. Switch to Chart view to see a historical annual dividend-per-share chart derived from your Ex-Div event history, with CAGR-based projection lines.
5. Ex-Dividend Events & Forward Calendar
Ex-Div Events tracks upcoming and past ex-dividend dates. This data drives the Upcoming Dividends card, the Forward Calendar, income projections, and the ⚠️ Cuts tracker.
Manual Entry
Use the Add Ex-Div Event form at the bottom of the Dividends tab. Required: Symbol and Ex-Div Date. Recommended: Pay Date, Div/Share amount.
The insights strip at the top of the Dividends tab keeps the ledger honest and forward-looking: 🕵️ events whose pay date passed with no dividend logged get a red banner with one-click Log buttons (manual entries within a week of the pay date count as covered), 📅 the next-30-days line totals what's coming with the per-payment breakdown on hover, 🎉 fixed-schedule payers that raised their dividend get celebrated with the percentage, and 📋 Copy month gives you a paste-ready summary with year-over-year.
Shares Held is auto-calculated. The dashboard computes shares eligible for each dividend by looking at your portfolio lots purchased before the ex-div date. A ⚡ badge in the Shares column confirms auto-calculation is active. You do not need to enter shares manually — just keep your lot purchase dates accurate.
Bulk Import
Click Bulk Import to paste an entire annual schedule at once. If the selected ticker has a built-in schedule, it auto-loads into the paste area. Paste format (tab-separated):
| Col 1 | Col 2 | Col 3 | Col 4 (optional) |
| Declaration Date | Ex-Div Date | Pay Date | Amount ($) |
| MM/DD/YYYY | MM/DD/YYYY | MM/DD/YYYY | 0.5000 |
If the Amount column is provided and non-zero, it is locked and will not be overwritten by Polygon.io price fetches. Leave Amount blank or 0 for future dates where the amount is not yet announced.
Built-in Schedules
| Ticker | Frequency | Coverage | Notes |
| BLOX | Weekly | Jun 2026 – Jan 2027 | Amounts TBD |
| GPIQ | Monthly | Dec 2023 – Jun 2026 | All amounts known |
| IDVO | Monthly | Sep 2022 – Dec 2026 | Jun–Dec 2026 TBD |
| JEPI | Monthly | Jul 2025 – Jun 2026 | All amounts known |
| JEPQ | Monthly | Jul 2025 – Jun 2026 | All amounts known |
| O | Monthly | Oct 1994 – Jun 2026 | Full history, all amounts |
| QQQI | Monthly | Feb 2024 – Dec 2026 | Jul–Dec 2026 TBD |
| SCHD | Quarterly | Jun 2016 – Mar 2026 | All amounts known |
| SPYI | Monthly | Sep 2022 – Dec 2026 | Jul–Dec 2026 TBD |
| XBCI | Monthly | Feb 2026 – Dec 2026 | Jul–Dec 2026 TBD |
| XQQI | Monthly | Feb 2026 – Dec 2026 | Jul–Dec 2026 TBD |
Forward Dividend Calendar
The Forward Calendar card (top of the Dividends tab) shows a month-view grid of upcoming events. Color coding:
| Color | Meaning |
| Green cell | Ex-dividend date |
| Blue cell | Pay date |
| Red cell | Ex-div and pay date fall on the same day |
| Blue border | Today |
Use the ‹ / › arrows to navigate months, or click Today to return to the current month. A scrollable event list below the grid shows all events for the month with type badges.
Table Filters
- Symbol — filter to a specific ticker
- Year — defaults to current year; select All Years for full history
- Month — defaults to current month; select All Months for the full year
6. Overview Tab
KPI Strip
The top KPI strip shows portfolio value, total cost, unrealized gain, yield on cost, projected annual income, and upcoming ex-div income — all calculated live from your holdings and watchlist.
Charts
- Portfolio Allocation — pie chart by market value (falls back to cost basis if prices not set)
- Market Value by Stock — horizontal bar chart ranked by position size
- Sector Breakdown — bar chart grouped by sector (requires Sector field on holdings)
- Portfolio vs Benchmark — compare your portfolio return to a benchmark index
Upcoming Dividends
Shows ex-dividend events for the current calendar month, sorted by ex-div date. Share counts and projected income are calculated live from your portfolio lots — they update automatically whenever you add or modify holdings.
7. Income Planning
The Income Planning tab (📅 Income) houses the 12-month calendar and gap analysis. The Paycheck Simulator, DRIP Projectors, Scenario Planner, and Rebalancing Assistant live in the 🛠️ Tools tab.
12-Month Income Calendar
Projects dividend income for each calendar month based on your portfolio holdings and the Watchlist annual dividend and frequency settings.
| Card color | Meaning |
| Green border | Income meets or exceeds monthly goal |
| Orange border | Income is below goal but greater than zero |
| Red border | No projected income this month |
| Blue outline | Current month |
Gap Analysis
Shows how far current projected income falls short of your monthly income goal, and how much additional capital (at your current average yield) would close the gap.
Paycheck Simulator
Projects portfolio growth assuming a fixed monthly contribution and reinvestment. Enter monthly contribution, years, dividend growth rate, and price growth rate — the chart shows portfolio value over time and the projected monthly income at maturity.
DRIP Projector
Models the compounding effect of reinvesting dividends for a single stock. Select a symbol from your Watchlist, set a starting share count, years, and growth assumptions — the chart shows annual income and share accumulation over time.
8. Scenario Planner — "What If?"
The Scenario Planner (bottom of the Income Planning tab) lets you compare up to 3 stocks side-by-side to answer questions like: "If I add $200/month to SCHD, BLOX, and O for 10 years, which grows fastest?"
How It Works
- Select up to 3 stocks from your Portfolio or Watchlist
- Set a starting share count for each
- Enter a monthly contribution, projection years, and annual dividend growth rate
- The planner projects: portfolio value, annual income, and monthly income at maturity
Assumptions
- Monthly contributions purchase new shares at the current price (no price appreciation)
- Dividends grow at the rate you specify, compounded annually
- Starting shares are included in all calculations
Output
Three KPI cards show final portfolio value, annual income, monthly income, and total capital invested for each stock. A dual-axis chart shows portfolio value (solid) and annual income (dashed) over time. A milestone table shows outcomes at Years 1, 3, 5, 10, 15, and 20.
9. Rebalancing Assistant
The Rebalancing Assistant (Tools tab → bottom card) helps you identify which positions are overweight or underweight relative to your targets, and tells you exactly how many shares to buy or sell.
Modes
| Mode | Use case |
| By Sector | Groups holdings by industry/sector. Set a target allocation % per sector. Shows current %, drift, and estimated $ to deploy into each sector to rebalance. |
| By Holding | Per-symbol targets. Set a target % for each individual ticker. Shows exact share counts to buy or sell to reach the target based on current price. |
Setting Targets
Enter target percentages in the input fields next to each sector or ticker. Click 💾 Save Targets — your targets persist and are restored the next time you open the Rebalancing Assistant.
Targets do not need to sum to 100%. The assistant calculates drift relative to your current portfolio value and the targets you set.
10. Watchlist & Scoring
The Watchlist (🔍 tab) tracks stocks you are monitoring. All fields feed data to other parts of the dashboard — Income Planning, the Buy Planner, and the Scenario Planner all pull from the Watchlist.
Act on it: when a stock trades at or below your Target Buy Price it's flagged 🟢 BUY here and surfaces in the 📆 This Week card on the Overview. The row's ⋮ menu includes ✅ Bought it — the Add Stock form opens pre-filled, and after saving you can remove the stock from the watchlist in one click. 🔄 Live Prices refreshes prices, then automatically fetches each stock's dividend rate and payment frequency. The 🎯 CSP Screener button scans the watchlist for the cash-secured put nearest your target delta — see the Options help for details.
Core Fields
| Field | Description |
| Symbol | Ticker symbol |
| Company | Name of the company or fund |
| Current Price | Latest price — updated via Refresh Prices or manually |
| Annual Dividend | Expected annual dividend per share — the primary driver of Income Planning projections |
| Div Frequency | Monthly, Quarterly, Semi-Annual, Annual, or Weekly |
| Payout Ratio % | Dividends ÷ earnings. Above 80% shows ⚠️; above 100% shows ⛔ |
| Div Growth Rate % | Historical annual dividend growth rate — used in scoring |
| Safety Rating (1–5 ★) | Your subjective assessment of dividend safety. 1–2★ triggers a low-safety warning banner. |
| Dividend Type | Qualified, Ordinary, REIT/Pass-Through, MLP Distribution, or Return of Capital — used for tax classification |
| Industry | Used for sector grouping in Rebalancing Assistant |
| Target Buy Price | Your personal buy target (optional; shown in table) |
| Thesis / Notes | Research notes visible in the table |
Composite Score
Each watchlist entry receives a 0–100 composite score based on four factors:
| Factor | Max Points | How It's Scored |
| Yield | 30 | Scales linearly up to 6% yield = full 30 pts |
| Dividend Growth Rate | 20 | Scales up to 5% annual growth = full 20 pts |
| Payout Safety | 20 | Full points below 50% payout; zero points above 100% |
| Safety Rating | 30 | 5★ = 30 pts; unknown rating defaults to 15 (neutral) |
Score badges: 80+ = Strong, 60–79 = Good, below 60 = Weak. Click ⭐ Sort by Score to rank your watchlist by composite score.
Compare Tool
Tick the checkbox on up to 4 watchlist rows, then click Compare Selected for a side-by-side panel showing price, yield, payout, safety, score, and projected income.
Alerts
A yellow banner appears at the top of the Watchlist tab if any holding has a Safety Rating of 1 or 2★, prompting review before the next ex-div date.
11. Buy Planner
Three calculation modes for planning new investments (🧮 Buy Planner tab):
| Mode | Use case |
| Income from Shares | Enter a stock, share count, and price → get projected annual and monthly income |
| Shares for Target Income | Enter a target monthly income and yield → get required shares and capital |
| Required Yield | Enter available capital and income target → find the yield needed to meet your goal |
| 🔻 Best Buys — Down Day | Scans your portfolio + watchlist for stocks trading negative on the day. Click 🔄 Live Prices first to fetch today's % change, then only red stocks receive allocation — sorted biggest drop first, with the top decliner flagged ⭐ Best Buy |
When a stock is selected from your Watchlist, the Annual Dividend and current price auto-fill.
12. Dividend Cut Tracker (⚠️ Cuts Tab)
The Cuts tab automatically identifies dividend increases and decreases by comparing consecutive payments per ticker in your Ex-Div Events data. No manual entry is required.
How Detection Works
- All ex-div events with non-zero known amounts are grouped by ticker
- Within each ticker, events are sorted chronologically
- Each consecutive pair is compared — cut if new < prior, raise if new > prior, flat if change < 0.01%
- Future placeholder entries (amount = 0) are excluded
Summary KPIs
| KPI | Description |
| Total Cuts | Dividend reductions detected across all tickers and all time |
| Total Raises | Dividend increases detected |
| Worst Cut | Ticker with the largest single percentage decrease |
| Most Recent Cut | Ticker and date of the most recent cut as of today |
The tab shows a live badge (e.g. ⚠️ Cuts (3)) for cuts detected in the current calendar year.
Filters
- Ticker — filter to a specific stock
- Type — All Changes, Cuts Only, Raises Only, or Flat/Unchanged
- Year — defaults to current year
13. Options & Wheel Tracker
The Options tab (🎯) tracks individual options trades and organizes them by the Wheel Strategy cycle: sell a cash-secured put → get assigned → sell covered calls → repeat.
Logging a Trade
Click ➕ Log Premium Income and fill in the trade details:
| Field | Description |
| Symbol | Underlying ticker |
| Type | Covered Call, Cash-Secured Put, Long Call, Long Put, or Other |
| Strike / Expiry | Strike price and expiration date |
| Contracts | Number of contracts (1 contract = 100 shares) |
| Premium | Premium received or paid per share |
| Net Credit | Total net credit/debit after commissions (auto-calculated if left blank) |
| Status | Open, Closed, Expired, Assigned, or Exercised |
Wheel Tracker View
Click the 🎡 Wheel pill at the top of the Options tab for its own view — no scrolling past the position tables — with trades grouped into per-symbol cycles. A Wheel Summary table sits on top — trades, CSP/CC counts, average contract $, average and net premium, and net cost basis (your basis minus premium kept). Click a row to jump to that symbol's card; cards collapse and remember their state. Cycle rows show honest outcomes — Bought Back, Expired Worthless, Assigned — with Trade P&L in dollars and percent, and every row has ✏️ edit.
🎯 Premium Goal
The Premium Goal card (top of the Options tab) tracks a target annualized return on your wheel capital: capital × target % ÷ 52 = weekly goal (e.g., $24,500 × 40% ÷ 52 ≈ $188/week). Capital is detected automatically — cost basis of holdings with 100+ shares plus collateral on open CSPs — or pin it manually.
- Per-symbol targets — expand "Per-symbol targets" to give each name its own %/yr (say, 40% on a high-IV name but 10% on a steady one). Blank uses the default; 0 excludes a symbol entirely.
- 💡 Suggest — with a Polygon.io key, click 💡 to price a ~30-day at-the-money call and see the %/yr it implies; click the result to apply it as that symbol's target.
- Weekly tracking — a progress bar for this week, YTD pace, and 12-week history strips (green = goal hit, gray = under — never red). If your 4-week average dips below target, a gentle note offers a one-click adjustment down to what you're actually earning.
- The card collapses from its header (state remembered), a one-line summary appears on the Overview, and the goal drives the 🎯 "premium needed" hint on the trade form.
Smart Trade Entry
The Log Premium Income form works with you: 📡 fetches a live quote for your exact contract, quick picks fill the expiry (Fri / next Fri / monthly) and contracts (5/10/15/20, plus Max for covered calls based on your uncommitted shares), and CoC% + annualized return calculate as you type. Safety checks warn about insufficient collateral, uncovered calls, ex-div dates before expiry, and duplicate open trades; an assignment preview shows your effective basis if shares are put to you. 🏁 shows how the trade moves this week's Premium Goal, 📜 shows your history with the symbol, and 💾➕ Save & Log Another keeps you moving. The 📊 Profit Matrix (form button or the ⋮ row menu) shows P&L across underlying moves from −10% to +10%. The Roll form has the same aids, including quick expiries and a new-leg CoC preview. No Polygon key? All 📡 fetch buttons stay hidden and everything works manually — add a free key in ⚙️ Settings → Data and they appear instantly.
Open Positions Columns
Beyond the basics: assignment-risk chips (🔴 = ITM within 7 days), ITM/OTM/ATM tags under the strike, per-contract price under Net Credit (green when the option now trades below what you sold it for), the premium edge under Diff +/-, Remaining (net credit minus unrealized P&L — the premium left to capture), and percentages under the dollar P&L figures. The θ/day column shows what time decay pays you daily — the contract's real theta once you've fetched quotes, or an estimate (remaining premium ÷ days left) until then. Strikes are colored against your average cost: green at/above your basis (assignment keeps you whole), red below it.
Newer aids: after a 📡 fetch, the Risk cell also shows % ITM — the market-implied odds of assignment, taken from the contract's delta — and a last updated stamp in the header tells you how fresh the quotes are. One click on 📡 Option Prices refreshes every underlying stock price first, then each contract. Your Trading Rules (⚙️ Settings → Rules) watch every open position and raise chips like 🎯 take-profit, 🛑 stop-loss, ⏰ 21-DTE, 💸 ex-div ITM call, and 🪫 low theta — all fee-aware — with a needs-action banner above the table. The 💰 Profit Ladder goes further: every priced position gets a clear Take Profits or HOLD verdict from three tiers (always above 80%; above 60% with ≥7 days left; above 50% with >14 days left — all editable). On the Closed table, 📅 This Month jumps back to the current month after browsing history. Bringing history from a broker? 🗂 Data → Import Options CSV understands most broker exports (and a simple template) and pairs opens with closes automatically.
Working the table: click a date on the 📅 expiration strip to show only that expiry (click it again, or ✕ All expirations, to see everything), click Symbol, DTE, θ/day, Net Credit, or Unreal. P&L to sort, and read the 📅 expiration strip above the table for what expires when and how much collateral each date releases. The header totals your Left to capture — the premium still waiting to decay — and the collateral gauge flags ⚠ concentration (one name ≥25% of locked) and ⚡ ITM collateral likely to convert to shares. Set ⏱ auto-refresh (5–60 min) next to 📡 Option Prices and quotes keep themselves current — even in a background tab, paused outside market hours, with the countdown on the stamp; grant notifications and rule triggers reach you on your desktop while you work elsewhere. The 🧠 Options Analytics card scores every closed trade: win rate, profit factor, expectancy, average win vs loss, capture %, CSP-vs-CC scorecards, assignment rates, streaks, and best/worst trades. Need to roll? The 🔮 Roll Wizard (⋮ menu) asks three questions — what should the roll do, how much time, must it pay you — then lists matching plays (🛡 repairs, ⚖ same-strike, 🎯 30Δ resets, 💰 max credit) scored by net credit, $/week, and annualized return, one click from the Roll form. Jot 📝 notes per position from the ⋮ menu, watch IV trend arrows (↑/↓ when volatility moves 2+ points), and read the Wheel Tracker's chip chain as a scoreboard — closed legs are green when they kept money, red when they didn't. The Closed table ends with a TOTAL report-card row for whatever period you've filtered.
Book-level intelligence: the header totals your whole book's θ/day (what time decay pays you daily) and Net Δ (directional exposure in share-equivalents), and the Underlying column shows each stock's day change in dollars and percent. The 💤 Idle shares strip flags holdings with uncovered 100-share lots — click one and the Covered Call Wizard asks how aggressive (20/30/40Δ), how long, and whether strikes must stay above your cost, then quotes candidates from the live chain; 🚫 excludes a stock you never want calls on (re-include it any time from the 🚫 chip). The 🌩 Book Stress Test shows what a −5% or −10% move everywhere does to your unrealized P&L and which puts go newly ITM. And rolled positions carry their history: a 🔁 chain line under Net Credit shows the true credit after every roll buy-back, the chain-true P&L sits under Unreal. P&L, the close form adds a Chain Total, and (on by default, ⚙️ Settings → Rules) the Profit Ladder judges rolled positions against the chain-true credit — a rescue must earn back its cost before Take Profits fires. Options Analytics rounds it out with profit factor, expectancy, average win vs loss, capture %, a weekly premium heatmap, and an estimated-tax tile on YTD banked premium.
Closing & Partial Fills
The ⋮ menu's 💰 Bought to Close (BTC) opens the close form with the outcome preset and the buyback price prefilled from the last quote — or tap 📡 on the form to fetch it live. Had a partial fill? Contracts to Close splits the position: the filled contracts close with their share of the premium, the rest stay open. Closed something the wrong way — even marked it Assigned by mistake? ⋮ → ↺ Reopen undoes the close completely: the cash ledger is corrected (collateral re-reserved, buybacks reversed) and assignments are fully reversed too — shares a CSP assignment added are removed, shares a CC assignment called away are restored at their original basis, and the sale record and proceeds are rolled back. Then mark the trade the right way. The Roll form has the same Contracts to Roll field, and every roll leaves a 🔁 trail in the wheel cycles showing what rolled where.
Cash & Collateral
Set your starting cash balance in the setup wizard. Opening a CSP reserves the collateral out of your available balance; it returns when the put expires or is bought back — and if you're assigned, the reserve pays for the shares, so your balance tells the truth. Click the 🔒 Collateral Utilization bar to expand a per-stock breakdown of exactly what's locking your cash.
Trade Report
📄 Trade Report opens a builder: pick the sections (KPIs, open, closed, premium by month, wheel summary, roll campaigns), a date range — including current month for a monthly recap — symbols, and strategy. Three privacy levels: anonymized (default, no identifying details), personal copy (adds portfolio name and date), or percentages only, which strips every dollar amount so you can post results without revealing account size.
Income Summary
Option premium income is included in the Tax Year Summary (Section 15) and the Income Planning tab's options income strip, so it is counted alongside dividend income in your total projected income.
14. Cash Management
The Cash tab (💰) maintains a running ledger of uninvested cash across your portfolio. Use it to track money waiting to be deployed, dividends received as cash, and withdrawals.
Adding Transactions
Click + Add Transaction and select a type:
| Type | Effect |
| Deposit | Adds cash to the balance |
| Withdrawal | Removes cash from the balance |
| Dividend Received | Adds cash; links to dividend income tracking |
| Purchase | Removes cash; links to a stock buy |
| Option Premium | Adds cash from option premium income |
The running balance is displayed at the top of the tab and in the Overview KPI strip.
15. Tax Year Income Summary
The Tax Year Income Summary card (🧾 Taxes tab) provides a 1099-style breakdown of all income received in a calendar year.
Income Classification
Each dividend is classified using the Dividend Type set on the Watchlist entry for that ticker:
| Dividend Type | Tax Line |
| Qualified | Qualified Dividends — typically taxed at long-term capital gains rates |
| Ordinary / Non-Qualified | Ordinary Dividends — taxed at ordinary income rates |
| REIT / Pass-Through | REIT/MLP — may qualify for 20% QBI deduction (Section 199A) |
| MLP Distribution | Included in REIT/MLP line |
| Return of Capital | ROC — not immediately taxable; reduces cost basis |
| DRIP reinvestments | Reported separately — taxable when shares are eventually sold |
Option premiums received during the year are shown as a separate line item.
Tax-Advantaged Accounts
If your active portfolio is a Traditional IRA, Roth IRA, 401k, or HSA, the summary displays a green "Not currently taxable" banner — income in these accounts is not reported on current-year taxes.
Export
Click ⬇ Export CSV to download a three-section CSV: dividend income by stock, option premiums, and summary totals — suitable for sharing with a tax preparer.
16. Data Management
Export
Click Export in the header to download portfolio positions, lot detail, dividend history, or a full JSON backup of all data across all portfolios.
Import
Click Import and select a previously exported JSON file to restore a backup. This replaces your current data.
Local Storage
Each portfolio is stored in its own localStorage key (dp_pf_{id}). Portfolio metadata (names, account types) is stored under dp_pf_meta. Data persists across browser sessions unless you clear browser storage.
Important: Clearing browser history or storage will permanently delete all dashboard data. Export a full JSON backup regularly and keep it somewhere safe.
🛟 Auto-Backup to File: open 🗂 Data → Auto-Backup to File, choose a folder (inside Documents or Desktop — Chrome blocks system folders), and the app saves a dated backup (HarvestLedger_AutoBackup_MMDDYYYY.json) there automatically a moment after every change. The newest 14 days are kept, recent backups are listed in the panel, and the weekly backup reminder stays hidden while auto-backup is working. Chrome/Edge only; restore any file via 📥 Import JSON Backup.
Data Structure
| Key | Stores | Description |
dp_pf_meta | Portfolio list | Array of {id, name, accountType} for all portfolios |
dp_pf_{id} | Portfolio data | Full state blob per portfolio: holdings, watchlist, dividends, ex-div events, goals, options, cash |
dp_pf_active | Active portfolio | ID of the currently selected portfolio |
17. Tips & Best Practices
ℹ️ Every card explains itself — hover the small ℹ️ beside any card title for a plain-English note on what it shows and how it's calculated. The app also reopens on whichever tab you were using last.
Getting Started
- Create a portfolio for each brokerage account via the portfolio switcher in the header
- Add holdings on the Portfolio tab — include lot dates for accurate ex-div share counting
- Add each ticker to the Watchlist with Annual Dividend, Frequency, Safety Rating, and Dividend Type — these fields drive Income Planning, Tax Summary, and Scoring
- Use Bulk Import on the Dividends tab to load ex-div schedules for your tickers (11 built-in; see Section 5)
- Set monthly income goals in the Income tab so calendar cards show progress toward your target
Keeping Data Current
- When you buy more shares before an ex-div cutoff, add them as a new lot with the correct purchase date — share counts in ex-div projections update automatically
- Refresh prices regularly via Polygon.io or manual JSON paste
- Log dividends as you receive them to keep income charts and the Tax Summary accurate
- After a dividend change is announced, update the ex-div event — the ⚠️ Cuts tab will automatically detect the change
Watchlist Best Practices
- Set Dividend Type on every watchlist entry — the Tax Year Summary uses it to classify income
- Assign a Safety Rating (1–5★) to each holding — 1–2★ triggers a warning banner before the next ex-div date
- Use the Payout Ratio field — anything above 80% shows a caution badge; above 100% shows a danger badge
- Use ⭐ Sort by Score to quickly rank holdings and identify which to prioritize for new capital
Backup
- Export a Full JSON Backup regularly (header → Export) and save it outside the browser
- The HTML file does not store your data — only the browser's localStorage does
- After major additions (new lots, bulk ex-div import, options trades), export immediately
Dark Mode
Click 🌙 / ☀️ in the header to toggle dark mode. Your preference is saved automatically and restored on next open.