Receber por email
← Voltar para o catálogo

migration-tracker

Context for ongoing migration from old Portfolio Buddy app. Use when: fixing bugs, adding migrated features, checking feature parity, or understanding why certain code exists. Contains list of 40 features being migrated and known issues.

367estrelas
Atualizado há 4 meses

Ver no GitHub ↗

Como adicionar

/plugin marketplace add aiskillstore/marketplace

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/migration-tracker/svg)](https://www.skillteca.com.br/skills/migration-tracker)
#ai

Skills relacionadas

Ver todas de Segurança →

Alerta por categoria

Receba novas skills de Segurança toda segunda

1 email curto, só com as skills novas de Segurança. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

Portfolio Buddy 2 - Migration Tracker

Migration Status: 40 Features

✅ Completed (36/40 - 90%)

Core features migrated and working:

  • CSV upload and parsing with PapaParse
  • Supabase storage integration
  • Basic metrics calculation (Sharpe, Max DD, CAGR, Win Rate, etc.)
  • Sortino Ratio (completed commits 258ba3a, 9f25040)
  • Risk-free rate input (completed commit 258ba3a)
  • Asset correlation matrix (Spearman & Pearson)
  • Portfolio comparison charts (Chart.js)
  • Equity curve visualization
  • Responsive UI with Tailwind CSS
  • shadcn/ui color system integration
  • Date range filtering (completed commit 258ba3a)
  • Contract multipliers for futures (useContractMultipliers hook)
  • Advanced multi-column sorting (useSorting hook)
  • Error handling and validation
  • File upload progress tracking
  • Multiple file management
  • Database Integration (Nov 16, 2025) - PRODUCTION READY ✓
  • Python script uploads trades automatically ✓
  • New database schema (portfolios, strategies, trades) ✓
  • Frontend database fetch ✓ (commits c4fa57c through ee7cec8)
  • Dual CSV/Database support ✓
  • Format auto-detection (1-row vs 2-row) ✓
  • User tested and verified ✓
  • Merged to main and deployed ✓
  • See: dev-docs/supabase-migration-plan.md

🚧 In Progress (3/40)

  1. Advanced filtering - Partial implementation
  2. Date filtering complete ✓
  3. Symbol filtering needed
  4. Strategy filtering needed
  5. Export functionality - CSV export only
  6. Excel export pending
  7. PDF reports pending
  8. Historical comparison - Backend ready, UI pending
  9. Need UI for comparing multiple time periods

❌ Not Started (2/40)

  1. Multi-period analysis - Complex, low priority
  2. Compare performance across different time windows
  3. Requires significant UI work
  4. Risk scenario modeling - Requires new backend logic
  5. Monte Carlo simulations
  6. Stress testing

Recent Completed Features

Database Fetch Implementation (Nov 16, 2025) ✅ COMPLETED

Status: Production ready - Tested and deployed Commits: c4fa57c, a5ce0ec, 676de06, eba4c8d, ee7cec8, ae9202d Merged to main: d56497a (PR #1)

Implementation Journey (6 commits):

  1. Initial Implementation (c4fa57c)
  2. Added calculateMetricsFromDatabase() and buildFilenameFromMetadata() to dataUtils.ts
  3. Rewrote fetchFromSupabase() in App.tsx
  4. Changed from old csv_files table to new strategies + trades schema
  5. Added TypeScript interfaces: DatabaseTrade, StrategyMetadata
  1. Fix Query Syntax (a5ce0ec)
  2. Fixed Supabase order clause syntax error
  3. Changed order('trades.trade_date') to order('trade_date') with foreignTable parameter
  4. Error: "failed to parse order (trades.trade_date.asc)"
  1. Fix Trade Count Limit (676de06)
  2. Discovered Supabase embedded resource limit (~60 rows)
  3. Separated queries: fetch strategies first, then fetch trades separately
  4. Added explicit .limit(10000) to get all trades
  5. Fixed: 59 trades → 119 trades ✅
  1. Fix TypeScript Build Errors (eba4c8d)
  2. Added StrategyFromDB interface with optional trades? property
  3. Added DatabaseTrade interface to App.tsx
  4. Fixed: "Property 'trades' does not exist" errors
  1. Fix Metrics Calculation (ee7cec8) ⭐ CRITICAL FIX
  2. Auto-detect format: 2-row (Entry/Exit) vs 1-row (database)
  3. Modified calculateMetrics() to check for "Entry/Exit" column
  4. If present → loop by 2 (old CSV format)
  5. If absent → loop by 1 (new database format)
  6. Fixed: Metrics now calculated correctly for all 119 trades ✅
  1. Update Documentation (ae9202d)
  2. Updated migration-tracker skill with implementation details
  3. Documented all changes and line numbers

Final Results:

  • ✅ 119 trades loaded from database (not 59)
  • ✅ All metrics calculated correctly (win rate, profit factor, etc.)
  • ✅ CSV upload backward compatibility preserved
  • ✅ Dual-mode support: both CSV and database work simultaneously
  • ✅ Format auto-detection works seamlessly
  • ✅ User tested and verified working
  • ✅ Deployed to production

Files Modified:

  • src/utils/dataUtils.ts: +235 lines (functions, interfaces, auto-detection)
  • src/App.tsx: +145 lines (database fetch, TypeScript types)
  • .claude/skills/migration-tracker/SKILL.md: Documentation updates

How It Works:

  1. User clicks "Load Data" button
  2. App fetches strategies from Supabase
  3. For each strategy, fetches ALL trades separately (no 60-row limit)
  4. Builds filename from metadata (e.g., SI_Long_Test_TestStrategy1.csv)
  5. Transforms to cleanedData format with 3 columns (no Entry/Exit column)
  6. calculateMetrics() auto-detects format and processes correctly
  7. Pre-populates contract multipliers from database
  8. Auto-selects strategies and displays metrics/charts

Backward Compatibility:

  • ✅ CSV upload with 4 columns (includes Entry/Exit) → 2-row processing
  • ✅ Database with 3 columns (no Entry/Exit) → 1-row processing
  • ✅ Both formats work simultaneously
  • ✅ All existing components, hooks, charts unchanged

Database Integration Planning (Nov 16, 2025)

Status: Planning complete, ready for implementation What Changed:

  • Created comprehensive migration plan (dev-docs/supabase-migration-plan.md)
  • Analyzed new Supabase database schema (portfolios, strategies, trades tables)
  • Designed dual-mode support (CSV upload + database fetch)
  • Planned data transformation strategy (single-row trades vs entry/exit pairs)

New Database Schema:

  • portfolios: Portfolio definitions with is_master flag
  • strategies: Strategy metadata (market, direction, contract_multiplier, etc.)
  • trades: Individual trade records (trade_date, trade_time, profit)
  • portfolio_strategies: Links portfolios to strategies

Implementation Plan:

  1. Add calculateMetricsFromDatabase() function in dataUtils.ts (~80 lines)
  2. Update fetchFromSupabase() query in App.tsx (~60 lines changed)
  3. Transform database data to match cleanedData format
  4. Pre-populate contract multipliers from database
  5. Test with 119 existing trades

Current State:

  • Python script on Windows VPS uploads trades automatically ✓
  • Database contains 1 strategy with 119 trades ✓
  • Frontend still queries old csv_files table (needs update)

Next Steps:

  • Implement Phase 1: New calculation function
  • Implement Phase 2: Update Supabase query
  • Test dual CSV/Database support
  • Deploy to production

Strategy Delete Feature (Nov 19, 2025) ✅

Commit: c372ab7a92d267eda3e540b298872484ef09e38d Files: App.tsx (+47), MetricsTable.tsx (+18), PortfolioSection.tsx (+8)

What it does:

  • Delete database strategies permanently (red trash icon with confirmation)
  • Remove CSV strategies from view (gray trash icon, immediate)
  • strategyIdMap tracks DB vs CSV (App.tsx line 67)
  • handleDeleteStrategy with Supabase deletion (App.tsx lines 423-458)
  • Trash2 icon in Actions column (MetricsTable.tsx lines 1, 239-246)

Git Forensic Recovery (Dec 2, 2025) ✅

Problem: Delete feature was "lost" (local repo behind origin/main)

Solution:

git fetch origin
git merge origin/main  # Fast-forward to c372ab7

Key lesson: Always check git log origin/main when work seems missing

Sortino Ratio (Oct 2025)

Commits: 258ba3a, 9f25040 What Changed:

  • Added risk-free rate input field in PortfolioSection (line 131: useState<number>(0))
  • Implemented inline Sortino calculation in PortfolioSection (lines 133-158)
  • Fixed downside deviation calculation (now properly annualized using sqrt(365))
  • Corrected variance calculation (divides by total returns, not just negative returns)
  • Displays in portfolio stats section (line 535)

Files Modified:

  • PortfolioSection.tsx: Added riskFreeRate state, downside deviation calculation, and display

Implementation Details:

  • NOT in dataUtils.ts - Sortino is calculated inline in PortfolioSection using useMemo
  • NOT in MetricsTable - Only disp
Compartilhar X LinkedIn