Odyssey: On-chain Trading Journal

Kane

Kane Elliott-Peace

Odyssey: On Chain Trading Journal and PnL Dashboard
A Next.js 15 trading journal that turns raw on chain activity into clear performance insights and better decisions.
I built Odyssey to replace spreadsheets and explorer tabs for active crypto traders. It connects directly to your wallets, automatically pulls in swaps, groups them into positions, and layers a calm journaling and analytics experience on top. It is designed for self-directed traders and small funds who want disciplined, data-driven trading rather than more screen time.

What I Built

A wallet-connected trading journal that ingests on chain transactions and normalises them into clean trades and positions.
A PnL and gas-aware analytics layer that shows what is really working across tags, strategies, chains, and timeframes.
A journaling workspace that captures rationale, emotions, conviction, and outcomes for each position.
A dashboard that makes it obvious where to focus: positions that need review, trades that need journaling, and patterns worth repeating or avoiding.
Dashboard View
Dashboard View

My Role

I owned the product end to end: discovery, information architecture, UX flows, and visual design.
I designed the data model for wallets, transactions, positions, journals, tags, and outcomes.
I implemented the on chain import and swap decoding pipeline, including pricing and PnL logic.
I built the dashboards, charts, and filtering tools that sit on top of the raw data.
I made the key decisions around state management, performance, and error handling to keep the experience fast and trustworthy.

Key Features

Multi-wallet import and encryption with one-click sync and bulk refresh.
Automatic transaction processing that turns noisy swap activity into standardised trades.
Smart swap decoding that recognises multi-hop and aggregator routes, with confidence scoring and “needs review” flags.
Position auto-grouping that understands entries, partial exits, and full closes, and computes realised PnL and gas drag.
A rich journaling flow with trade rationale, emotional state before and after, conviction level, tags, and key learnings.
Tag and strategy views that show win rate, average PnL, and usage for each playbook or market condition.
Analytics modules for hold time vs PnL, time-based behaviour, streaks, and overall stats like win rate and total PnL.
Simple settings and tag management so traders can name strategies and labels in their own language.
Positions Table View
Positions Table View

Technical Implementation

Built on Next.js 15 App Router with React and React Server Components for fast, modern UX.
Typed end to end with TypeScript, with Tailwind CSS for the design system and layout.
Wallet connectivity and chain interaction powered by Wagmi, Viem, and the Alchemy SDK for reliable RPC and explorer data.
Authentication handled by Better Auth, with session-aware server actions and wallet-based flows.
Data stored in Supabase Postgres with Drizzle ORM for strongly typed schemas and safe queries.
Swap decoding uses ABI-based input parsing, transfer flow reconstruction, and heuristics to handle complex DEX and aggregator routes on Base and EVM.
Historical pricing and gas costs fetched via rate-limited price services, then cached and reused to keep imports fast and API friendly.
PnL, win rate, tag performance, hold time, and strategy matrices computed on the server, with React Query and Recharts on the client for responsive visualisations.
Server actions orchestrate imports, processing, journaling, and tag updates, while background-style batches handle large backfills without blocking the UI.
Validation and type safety through Zod on the edge of the system, along with defensive guards around pricing gaps, duplicate trades, and inconsistent positions.

UX and Product Thinking

The layout is deliberately calm: soft colours, generous spacing, and clear hierarchy to reduce cognitive load during high-stakes decisions.
The dashboard is structured around trader questions: “How am I doing?”, “What is working?”, “What should I review next?”.
Journaling is integrated into the workflow: positions that need attention are highlighted, and creating a journal entry is one click from activity.
Forms are broken into small, focused sections (emotions, context, reasoning, outcomes) so journaling feels manageable rather than like writing an essay.
Charts and tables emphasise interpretation rather than data density, with each visual paired with simple metrics and copy explaining what it means.
Journal Entry
Journal Entry

Roadmap and Next Steps

AI driven insights that summarise patterns across emotions, conviction, tags, and PnL.
Richer visualisations like equity curves, calendar heatmaps, and cost drag views to highlight consistency and risk.
Expanded chain coverage and cross chain, multi-wallet aggregation that feels like a single account.
Deeper risk profiling around drawdowns, volatility, and position sizing, with gentle guardrails and alerts.
Like this project

Posted Dec 2, 2025

Designed and built Odyssey, an on chain trading journal with PnL, tagging, insights, and multi-wallet analytics. Full product, UX, and engineering ownership.