diff --git a/app/accounts/[id]/page.tsx b/app/accounts/[id]/page.tsx index fc85491..7f0661b 100644 --- a/app/accounts/[id]/page.tsx +++ b/app/accounts/[id]/page.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useEffect, useState } from 'react'; +import { useEffect, useState, type ReactNode } from 'react'; import { useParams } from 'next/navigation'; import Link from 'next/link'; import { @@ -47,7 +47,7 @@ function PerfRow({ label, value, badge, positive }: { label: string; value: stri ); } -function ObjRow({ passed, label, value }: { passed: boolean; label: string; value: string }) { +function ObjRow({ passed, label, value }: { passed: boolean; label: ReactNode; value: string }) { return (
@@ -378,7 +378,14 @@ export default function AccountPage() {

Objectives

+ Profit Target + + Stage {account.stage} + + + } value={cfg ? `$${fmt(totalProfit)} of $${fmt(account.effectiveProfitTarget ?? cfg.profitTarget)}` : '—'} /> 0 && cash.amount <= autoLiqThreshold; const allFundTxns = client.fundTransactions?.[acc.id] ?? []; const priorProfit = client.priorProfit?.[acc.id] ?? 0; + // Stage = 1 + number of withdrawals (negative fund transactions) + const stage = 1 + allFundTxns.filter((f) => f.amount < 0).length; // Hide initial funding (amount === accountSize) from display const displayFundTxns = cfg ? allFundTxns.filter((f) => f.amount !== cfg.account_size) @@ -88,6 +90,7 @@ export async function GET() { autoLiqThreshold, totalProfit, targetHit, + stage, dailyTarget, effectiveProfitTarget, dailyPnL, diff --git a/app/page.tsx b/app/page.tsx index 5728a76..2a8aef9 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -135,7 +135,12 @@ function AccountRow({ account, firm, hideDead, privacy }: { account: AccountStat
- ${(account.effectiveProfitTarget ?? cfg?.profitTarget ?? 0).toLocaleString(undefined, { maximumFractionDigits: 2 })} +
+ ${(account.effectiveProfitTarget ?? cfg?.profitTarget ?? 0).toLocaleString(undefined, { maximumFractionDigits: 2 })} + + Stage {account.stage} + +
{account.dailyTarget && ( ${fmt(account.dailyTarget.amount)} today )} diff --git a/types.ts b/types.ts index ec98a82..eebe10c 100644 --- a/types.ts +++ b/types.ts @@ -34,6 +34,8 @@ export interface AccountState { totalProfit: number; /** True when today's realizedPnL has met or exceeded the computed daily target */ targetHit: boolean; + /** Current stage = 1 + number of withdrawals (negative fund transactions). Stage 1 = fresh account. */ + stage: number; /** Next trading day's target, computed server-side. null when account is dead or config is missing. */ dailyTarget: { amount: number; path: 'first_day' | 'normal_day' | 'reduced_day' } | null; /** Actual profit target to hit — max(stage profit target, consistency realTarget = maxDay/consistency). */