Product Case Study

Building the operating system
for serious option sellers

A solo build from zero to 1.0 — spanning market research, product strategy, schema architecture, and full-stack execution. This is how I think about building a product nobody has built correctly yet.

1 Person on team
0→1 Stage
5-layer Schema designed
4 Phases roadmapped

The tool everyone uses is one nobody built for them

Retail option sellers — a growing, underserved segment of serious traders — are running their entire operation on Excel. Not because they love Excel. Because nothing better exists.

I started here: what does an option seller's actual workflow look like today? Not what do they say they want, but what are they doing on a Tuesday morning before the market opens?

The answer was a mess of five or six tools, none of which talked to each other:

Spreadsheet journal ThinkorSwim analytics Discord trade groups YouTube courses Seeking Alpha earnings Notion rules doc ↳ One tool
Pain #1
No tool calculates annualized ROC per trade correctly — the one number option sellers actually optimize for.
Pain #2
Rolls (adjusting a trade) are modeled as new trades, destroying the true P&L story of a position.
Pain #3
Assignment — when a short put results in stock ownership — is treated as a close event. It's not. It's a transition. No tool models what follows.
Pain #4
Multi-account traders (taxable + IRA + paper) have no way to see consolidated analytics across accounts while respecting the different rules per account type.
The real insight
"Option sellers are not gamblers who occasionally hold stock. They are long-term investors using options as a systematic yield layer on a conviction-based portfolio. The whole product had to be rethought from that frame."

Getting specific about who this is for

The instinct in early product work is to broaden the ICP to feel safer. I did the opposite. The more precisely I could describe the user, the better every product decision became.

"The ICP is not 'options traders.' It's engineers and finance-adjacent professionals, 28–50, $10k–$250k portfolio, who sell premium systematically, think in ROC percentages, track capital efficiency — and currently live in spreadsheets."

ICP definition — derived from community research and own trading experience

What they care about

Primary
Return on Capital (annualized)
Not dollar P&L. ROC%. They compare trades by capital efficiency, not by how much money they made.
Critical
True position lifecycle
One position can span months across rolls, partial closes, assignment, and covered calls. They need the full story in one place.
Daily
Earnings proximity
Knowing which open positions have earnings in the next 7–14 days is a risk management ritual. They check this every morning.

Why they never leave Excel

Understanding why a behavior persists is more important than understanding why a new product fails. Excel persists because: it's infinitely flexible, they own their data, and it has no bugs someone else introduced.

The product had to beat Excel on its own terms — import from Excel, export anytime, keyboard-nav, customizable columns — before it could offer things Excel can't.

The choices that define the product

Every product is defined as much by what it doesn't do as what it does. These were the deliberate decisions that shaped the architecture and roadmap.

Decision 01
Rolls as lifecycle events, not new trades
Every other tool models a roll (moving a position to a new expiration) as closing one trade and opening another. This breaks P&L accounting and makes the real performance of a position invisible. I modeled rolls as child events on a parent trade from day one — every roll preserves the lifetime credit and capital story.
Parent/child trade_events schema. No competing approach.
Decision 02
Assignment creates a stock position, not a closed trade
When a short put gets assigned, the option trade closes — but a stock position opens at an adjusted cost basis (strike minus total premium received). That stock position is linked to the originating option trade. If the user then writes a covered call against it, that too is linked. The full wheel cycle becomes visible as a single capital story for the first time.
stock_positions table with origin_trade_id FK and wheel_id grouping.
Decision 03
Multi-account from the first line of schema
The temptation was to ship single-account first and add multi-account later. That refactor would have been painful. Every record has an account_id from day one — Roth IRA, taxable, and paper accounts each carry different strategy constraints, tax treatment, and capital rules that the product needs to understand.
accounts table created before any trade writes. Zero refactor cost later.
Decision 04
No AI until data volume exists
AI features were explicitly deferred to Phase 4. The insight: AI on sparse, single-user data is noise. The product needs 6+ months of multi-user trade history before pattern recognition means anything. Building the data model correctly now is what makes the AI layer genuinely useful later.
Phase 1–3 builds the data. Phase 4 interprets it. Sequence matters.
Decision 05
Educators as the primary distribution channel
Option selling has a thriving educator ecosystem — YouTube creators, course sellers, signal groups — with warm, paying, high-intent audiences. A purpose-built affiliate + classroom sharing system turns these educators into the product's sales force. 50 active educator affiliates each driving 20–50 students is 1,000–2,500 users with exceptionally high LTV. This is the distribution moat no competitor can easily replicate.
Educator account type, shared dashboard view, and 30% recurring affiliate commission designed into Phase 2.

Getting the data model right before anything else

A week before writing a single new frontend feature, I audited the existing Supabase schema. Found three tables — trades, trade_legs, trades_legacy — built organically as the product evolved. The leg-based model would have made analytics hard and assignment impossible to model correctly.

I designed the complete target schema first, then wrote the migrations. The principle: every architectural decision made at schema level is free. The same decision made after 1,000 users have data costs weeks.

Database schema — production 9 tables
trades
Parent object for every option position. 31 columns including wheel_id, stock_position_id, earnings_proximity_days, and full lifecycle status.
trade_events
Every roll, close, assignment as a child row. Preserves complete P&L history. The key to modeling rolls correctly.
stock_positions
Auto-created on assignment with adjusted cost basis. Tracks shares_encumbered for CC validation. Links back to origin trade.
accounts
Multi-account from day one. Each account carries type (taxable/IRA/paper), capital, and rule override context.
stock_position_events
Sales, partial sales, called away, dividends — every event against a stock position with realized P&L.
earnings_calendar
Shared cache table. One API fetch serves all users watching a ticker. Includes historical surprise data for AI layer later.
watchlist
Decision queue with ok_to_own_price, earnings data, and strategy intent per ticker.
user_rules
Per-user rules, optionally scoped to a specific account. Global + override model.
account_capital_history
Snapshots of account capital over time. Required for accurate utilization % as deposits and withdrawals occur.

"The earnings_calendar table is shared across all users — one row per ticker per date. A single API call to Financial Modeling Prep populates it for everyone watching that ticker. This keeps API costs manageable at scale and the data stays fresh with a daily refresh."

Cost-aware architecture decision

Sequenced for signal, not features

The roadmap isn't a feature list. It's a sequencing strategy for building defensibility in the right order — first get traders to switch from Excel, then give them something Excel can never do.

1
Functional Journal — Replace Excel

The cleanest, most correct option seller journal ever built. Rolls modeled correctly. ROC calculated correctly. Assignment flow modeled end-to-end. Multi-account from the start. Ship to 20–50 real traders fast and listen.

In progress Trade journal Rolls Assignment flow Portfolio tab Earnings API
2
Capital Intelligence — Build the Moat

The analytics layer that no spreadsheet can replicate: ROC over time, strategy performance breakdown, wheel cycle analytics (true consolidated return across an entire put → assignment → covered calls cycle), capital efficiency scoring, rule compliance comparison.

ROC chart Wheel cycle view Strategy analytics Educator accounts Live data (Pro)
3
Community & Distribution — Network Effect

Structured trade idea feed (fully accountable — outcomes appended when positions close). Trader profiles ranked by risk-adjusted efficiency, not returns. Educator classroom sharing — live dashboard visible to students. 30% recurring affiliate commissions.

Trade ideas feed Educator dashboard Affiliate program Performance verification
4
AI Layer — Pattern Recognition at Scale

Only after sufficient data volume. Trade post-mortems, behavioral pattern recognition ("you close early when IV expands"), strategy recommendation engine, weekly performance digest. AI on real, validated, multi-user data — not on sparse inputs.

Post-mortems Pattern recognition Strategy recommendations

What it looks like to own the whole thing

Every role on a normal product team — I'm doing it. That changes how you work. There's no handoff latency, no miscommunication between design and eng, no PM-to-dev translation loss. But it requires deliberate sequencing to avoid spreading across everything at once.

Product Strategy

ICP definition, competitive analysis, gap identification, phased roadmap, pricing model, distribution strategy. The "why build this" and "in what order" layer.

UX & Information Architecture

Progressive disclosure model (simple for new users, powerful for advanced). Strategy-aware UI that adapts to trade type. Saved views. The "feels like Excel but smarter" problem.

Frontend Engineering

Next.js, AG-Grid for the journal (Excel-like editing), TypeScript throughout. Calculation integrity tested before anything else ships.

Backend & Database

Supabase / Postgres schema design, RLS policies, migration strategy. The five-table relational model built before a single feature was touched.

Data Integrations

Earnings calendar API (FMP), future option chain data. Cache strategy designed to keep cost manageable: shared table, daily refresh, gated live data for Pro tier.

Go-to-Market

Distribution via educator affiliates, build-in-public on Twitter, beta cohort from r/thetagang. Community features designed as a distribution moat from the start.

The discipline required: one thing fully done before the next thing starts. A roll flow that works completely is worth more than four half-built features. Every day starts with one task, not five.

The educator insight most SaaS founders miss

The option selling community has a thriving educator layer — YouTube channels, paid courses, Discord signal groups, Twitter traders. These are micro-influencers with warm, paying, high-intent audiences. They need tools, credibility, and recurring income. The product can provide all three.

Educator Affiliates
Primary channel. Each educator gets a classroom — a shared, live view of their dashboard that students can follow. Structured trade ideas with outcomes. 30% recurring commission on every Pro subscriber they refer. Their income grows with the product's MRR. 50 active educators × 30 students each = 1,500 high-LTV users.
Build in Public
Document the build on Twitter/X. Share real analytics screenshots from the tool using your own trades. The option selling community on Twitter is active and engaged. The founder using the product publicly is the most credible form of marketing at this stage.
Community Feed
Organic flywheel. Structured trade ideas — fully formed setups with strike, DTE, ROC, rationale — published with outcomes automatically appended when positions close. Creates real accountability and real signal. Unlike Discord noise. The feed creates a reason to come back daily even when not trading.
Search
High-intent search terms with low competition: "options trading journal software," "covered call tracker," "iron condor ROC calculator," "wheel strategy journal." Content pages built around these once the product ships.
CSV Import
Silent distribution lever. A trader who imports 2 years of history into the tool and sees analytics on their historical performance will not leave. Import from Excel/CSV on day one is the single best activation mechanic — it makes the first session immediately valuable.

Principles I applied throughout