name: portfolio-context
description: Auto-loaded context for Portfolio Buddy 2 development. Use for ANY task involving: React 19 development, TypeScript, portfolio analysis features, metrics calculations, trading strategy comparison, or working with the Portfolio Buddy 2 codebase. Contains tech stack, known issues, and architectural constraints.
Portfolio Buddy 2 - Project Context
Tech Stack
- Frontend: React 19, TypeScript, Vite
- UI: Tailwind CSS, shadcn/ui (color system only)
- Charts: Chart.js, react-chartjs-2, chartjs plugins (zoom, annotation, date adapter)
- State: Plain React (useState, useMemo, useCallback)
- Data Utils: date-fns for date manipulation
- Backend: Supabase (PostgreSQL)
- Deployment: Cloudflare Pages
Project Purpose
Portfolio analysis tool for investors and futures traders to:
- Compare trading strategies vs benchmark assets (SPY, GLD)
- Calculate correlation matrices between assets (Spearman & Pearson)
- Analyze risk metrics and performance (Sharpe, Sortino, Max DD, etc.)
- Upload trade data via CSV and visualize results
- Apply contract multipliers to adjust metrics for futures trading
- Filter data by date range for period-specific analysis
Known Issues & Tech Debt
Current Tech Debt
Unused Dependency: Recharts (11.5KB) installed but never imported
- Should be removed from package.json
- Currently using Chart.js instead
Oversized Components: Violate 200-line standard
- PortfolioSection.tsx (591 lines) → needs refactoring into subcomponents
- App.tsx (351 lines) → extract sections into components
- MetricsTable.tsx (242 lines) → improved but still over limit
TypeScript Violations: 15 instances of any type
- usePortfolio.ts: 11 occurrences in trade/metrics types
- useMetrics.ts: 4 occurrences in sort comparisons
- dataUtils.ts: 1 occurrence in Metrics interface
Known Bugs
- Supabase Upload Errors: Intermittent 500 errors on large uploads
- Enhanced error handling added in commit 9fb7fdb
- Check error handling in upload hooks
- Verify row limits aren't exceeded on free tier
Recent Features Added
- Sortino Ratio Calculation (commits 258ba3a, 9f25040)
- Location: Implemented inline in PortfolioSection.tsx (lines 133-158)
- Risk-free rate input state for user-specified risk-free rate
- Annualized downside deviation using sqrt(365) factor
- Corrected variance calculation (divides by total returns, not just negative)
- Displayed in portfolio stats section (line 535)
- Note: NOT in dataUtils.ts - kept in component due to portfolio-level context
- Date Range Filtering (commit 258ba3a)
- Filter portfolio data by start/end date
- Implemented in usePortfolio hook
- Advanced Multi-Column Sorting (useSorting hook)
- Sort by multiple columns with priority
- Custom comparison logic per column
Architectural Constraints
- Component Limit: Max 200 lines per component (currently violated by 3 components)
- Hook Pattern: Custom hooks in
/src/hooks/
- Utils Pattern: Pure functions in
/src/utils/
- Type Safety: Strict TypeScript, no
any types (15 violations exist as tech debt)
- State Management: Plain React hooks only - no Zustand or TanStack Query
Key Components Structure
src/
├── components/
│ ├── AnalyticsControls.tsx (toggle Metrics/Portfolio/Correlation views)
│ ├── ContractInput.tsx (contract multiplier inputs)
│ ├── CorrelationHeatmap.tsx (correlation visualization)
│ ├── CorrelationSection.tsx (correlation analysis wrapper)
│ ├── CustomTooltip.tsx (chart tooltips)
│ ├── ErrorList.tsx (error display)
│ ├── Header.tsx (app header)
│ ├── MasterContractControl.tsx (apply contract value to all)
│ ├── MetricsTable.tsx (metrics display & selection)
│ ├── PortfolioSection.tsx (portfolio charts & analysis - 591 lines!)
│ ├── SessionComplete.tsx (completion UI)
│ ├── SortableHeader.tsx (table header with sort indicators)
│ ├── UploadedFilesList.tsx (list of uploaded files)
│ └── UploadSection.tsx (file upload to Supabase)
├── hooks/
│ ├── useContractMultipliers.ts (manage contract multipliers)
│ ├── useMetrics.ts (calculate trading metrics)
│ ├── usePortfolio.ts (portfolio data & date filtering)
│ └── useSorting.ts (advanced multi-column sorting)
└── utils/
└── dataUtils.ts (metric calculations, CSV parsing, correlations)
Migration Context
Migrating 40 features from old app (35/40 completed). See migration-tracker skill for details.
1---2name: portfolio-context3description: Auto-loaded context for Portfolio Buddy 2 development. Use for ANY task involving: React 19 development, TypeScript, portfolio analysis features, metrics calculations, trading strategy comparison, or4---5
6---
7name: portfolio-context
8description: Auto-loaded context for Portfolio Buddy 2 development. Use for ANY task involving: React 19 development, TypeScript, portfolio analysis features, metrics calculations, trading strategy comparison, or working with the Portfolio Buddy 2 codebase. Contains tech stack, known issues, and architectural constraints.
9---
10
11# Portfolio Buddy 2 - Project Context
12
13## Tech Stack
14- **Frontend**: React 19, TypeScript, Vite
15- **UI**: Tailwind CSS, shadcn/ui (color system only)
16- **Charts**: Chart.js, react-chartjs-2, chartjs plugins (zoom, annotation, date adapter)
17- **State**: Plain React (useState, useMemo, useCallback)
18- **Data Utils**: date-fns for date manipulation
19- **Backend**: Supabase (PostgreSQL)
20- **Deployment**: Cloudflare Pages
21
22## Project Purpose
23Portfolio analysis tool for investors and futures traders to:
24- Compare trading strategies vs benchmark assets (SPY, GLD)
25- Calculate correlation matrices between assets (Spearman & Pearson)
26- Analyze risk metrics and performance (Sharpe, Sortino, Max DD, etc.)
27- Upload trade data via CSV and visualize results
28- Apply contract multipliers to adjust metrics for futures trading
29- Filter data by date range for period-specific analysis
30
31## Known Issues & Tech Debt
32
33### Current Tech Debt
341. **Unused Dependency**: Recharts (11.5KB) installed but never imported
35 - Should be removed from package.json
36 - Currently using Chart.js instead
37
382. **Oversized Components**: Violate 200-line standard
39 - PortfolioSection.tsx (591 lines) → needs refactoring into subcomponents
40 - App.tsx (351 lines) → extract sections into components
41 - MetricsTable.tsx (242 lines) → improved but still over limit
42
433. **TypeScript Violations**: 15 instances of `any` type
44 - usePortfolio.ts: 11 occurrences in trade/metrics types
45 - useMetrics.ts: 4 occurrences in sort comparisons
46 - dataUtils.ts: 1 occurrence in Metrics interface
47
48### Known Bugs
491. **Supabase Upload Errors**: Intermittent 500 errors on large uploads
50 - Enhanced error handling added in commit 9fb7fdb
51 - Check error handling in upload hooks
52 - Verify row limits aren't exceeded on free tier
53
54## Recent Features Added
55- **Sortino Ratio Calculation** (commits 258ba3a, 9f25040)
56 - **Location**: Implemented inline in PortfolioSection.tsx (lines 133-158)
57 - Risk-free rate input state for user-specified risk-free rate
58 - Annualized downside deviation using sqrt(365) factor
59 - Corrected variance calculation (divides by total returns, not just negative)
60 - Displayed in portfolio stats section (line 535)
61 - **Note**: NOT in dataUtils.ts - kept in component due to portfolio-level context
62- **Date Range Filtering** (commit 258ba3a)
63 - Filter portfolio data by start/end date
64 - Implemented in usePortfolio hook
65- **Advanced Multi-Column Sorting** (useSorting hook)
66 - Sort by multiple columns with priority
67 - Custom comparison logic per column
68
69## Architectural Constraints
70- **Component Limit**: Max 200 lines per component (currently violated by 3 components)
71- **Hook Pattern**: Custom hooks in `/src/hooks/`
72- **Utils Pattern**: Pure functions in `/src/utils/`
73- **Type Safety**: Strict TypeScript, no `any` types (15 violations exist as tech debt)
74- **State Management**: Plain React hooks only - no Zustand or TanStack Query
75
76## Key Components Structure
77```
78src/
79├── components/
80│ ├── AnalyticsControls.tsx (toggle Metrics/Portfolio/Correlation views)
81│ ├── ContractInput.tsx (contract multiplier inputs)
82│ ├── CorrelationHeatmap.tsx (correlation visualization)
83│ ├── CorrelationSection.tsx (correlation analysis wrapper)
84│ ├── CustomTooltip.tsx (chart tooltips)
85│ ├── ErrorList.tsx (error display)
86│ ├── Header.tsx (app header)
87│ ├── MasterContractControl.tsx (apply contract value to all)
88│ ├── MetricsTable.tsx (metrics display & selection)
89│ ├── PortfolioSection.tsx (portfolio charts & analysis - 591 lines!)
90│ ├── SessionComplete.tsx (completion UI)
91│ ├── SortableHeader.tsx (table header with sort indicators)
92│ ├── UploadedFilesList.tsx (list of uploaded files)
93│ └── UploadSection.tsx (file upload to Supabase)
94├── hooks/
95│ ├── useContractMultipliers.ts (manage contract multipliers)
96│ ├── useMetrics.ts (calculate trading metrics)
97│ ├── usePortfolio.ts (portfolio data & date filtering)
98│ └── useSorting.ts (advanced multi-column sorting)
99└── utils/
100 └── dataUtils.ts (metric calculations, CSV parsing, correlations)
101```
102
103## Migration Context
104Migrating 40 features from old app (35/40 completed). See `migration-tracker` skill for details.