This checklist tracks what remains before fx-trader-profiles can be shipped as a useful public MVP.
- P0: required before any public MVP
- P1: important for a credible beta
- P2: nice-to-have after MVP
- Replace placeholder dashboard copy with real empty/loading/error states.
- Add a production reverse-proxy example, such as Caddy or Nginx, for TLS termination.
- Add a Docker Compose profile or docs for using an externally managed Postgres instead of the bundled Postgres container.
- Add rate limiting for public API routes and cron endpoints.
- Add structured logging for API routes and workers.
- Add a deployment runbook with backup/restore, update, rollback, and incident steps.
- Verify Watchtower behavior with the final image naming/tagging strategy.
- Add Drizzle to the workspace.
- Implement the Postgres schema from
docs/fx-user-tracker-research.md. - Add migrations and wire
pnpm db:pushto real Drizzle migration commands. - Add a
sync_cursorsor equivalent cursor table for idempotent worker progress. - Add database indexes from the spec.
- Test backup and restore from the
postgres-backupvolume. - Decide whether production uses bundled Postgres, Supabase, Neon, or another managed Postgres provider.
- Generate production
CRON_SECRETand store it securely. - Add real
GOLDSKY_SUBGRAPH_URLonce the subgraph is deployed. - Add at least one server-side RPC fallback URL.
- Confirm no RPC or indexer key is exposed via
NEXT_PUBLIC_*variables. - Add environment validation with clear startup errors.
- Implement
workers/discover-contracts.ts. - Produce
contracts/fx-v2.candidate.json. - Verify current f(x) v2 contracts against official docs, GitHub deployments, app bundle references, and Etherscan.
- Mark old/beta/v1 addresses as
deprecated. - Produce approved
contracts/fx-v2.jsonwith confidence levels, start blocks, ABI paths, and evidence. - Confirm long and short position pool contracts separately.
- Confirm whether position NFTs are separate contracts or pool-native ERC-721 positions.
- Add verified ABI files under
subgraph/abis/. - Generate
subgraph/subgraph.yamlfrom verified contract config. - Implement AssemblyScript mappings for ERC-721
Transfer. - Implement handlers for confirmed position snapshot/tick/index events only where ABI support exists.
- Add unit/fixture coverage for action normalization.
- Deploy hosted Goldsky subgraph.
- Verify Goldsky entity count stays under the free-tier target.
- Verify subgraph lag and expose latest indexed block via
/api/health.
- Implement Smartclaw snapshot ingestion.
- Discover official f(x) leaderboard API endpoint if available and allowed.
- Add payload hashing for all external snapshots.
- Store source, fetched timestamp, period, raw payload, and normalized wallet metrics.
- Ensure Smartclaw is clearly labeled as seed/comparison data, not source of truth.
- Implement
snapshot-leaderboardworker logic. - Implement
sync-subgraphworker logic with cursor-based pagination. - Implement
enrich-positionsworker with server-side RPC fallback and Multicall batching where possible. - Implement
compute-trader-metricsworker. - Ensure all workers are idempotent.
- Ensure workers write
job_runswith status, cursor, rows read/written, and errors. - Prevent overlapping cron runs for the same job.
- Implement
GET /api/traderswith pagination, sorting, period filters, tag filters, and cache headers. - Implement
GET /api/traders/:address. - Implement
GET /api/traders/:address/positions. - Implement
GET /api/positions/:positionId. - Expand
GET /api/healthto include subgraph lag, last successful jobs, and stale-data warnings. - Add response schemas/validation.
- Add stable cursor pagination.
- Show tracked traders, active positions, estimated volume, aggregate PNL, winners/losers, win rate, latest indexed block, and data freshness.
- Add clear methodology disclaimer banner.
- Add All / 30D / 7D / 1D or MVP-supported period controls.
- Add sorting by PNL, ROI, volume, net flow, win rate, risk, and recent activity.
- Add filters for active-only/all, tag, and market.
- Add empty states for no data and stale data.
- Link rows to trader profile pages.
- Show address, ENS if available, labels, first seen, and last active.
- Show official/comparison/estimated PNL clearly separated.
- Show open positions.
- Show closed positions and hold time.
- Show activity timeline.
- Show behavior tags with evidence and explanations.
- Show risk score and insufficient-data states.
- Show position header, lifecycle, collateral/debt snapshots, tick movements, transactions, owner transfers, and risk history.
- Document data sources.
- Document PNL fields and definitions.
- Document ROI formula.
- Document risk formula.
- Document behavior tag rules.
- Document known limitations and address confidence levels.
- Add unit tests for
normalizeLeaderboardWallet. - Add unit tests for
normalizePositionEvent. - Add unit tests for
inferActionType. - Add unit tests for
computeEstimatedRoi. - Add unit tests for
computeWinRate. - Add unit tests for
computeHoldTime. - Add unit tests for
computeDrawdown. - Add unit tests for
computeRiskScore. - Add unit tests for
computeTraderTags. - Add fixture files for Smartclaw leaderboard responses.
- Add fixture files for official leaderboard responses if endpoint is available.
- Add fixture files for subgraph
PositionActionresponses. - Add fixture files for RPC
getPositionreads. - Add integration tests for snapshot ingestion idempotency.
- Add integration tests for subgraph sync idempotency.
- Add integration tests for RPC fallback behavior.
- Add integration tests for deterministic tag generation.
- Add API pagination tests.
- Add CI workflow running install, build, lint/typecheck, and tests.
- Add ENS resolution and caching.
- Add explorer links for wallets, positions, and transactions.
- Add data-quality badges per wallet and position.
- Add admin-only job status page.
- Add stale job alerting via Discord/Telegram/email.
- Add API response caching strategy.
- Add Postgres connection pooling if using serverless or many concurrent workers.
- Add backup restore drill documentation.
- Add sample screenshots to README once UI is populated.
- Add a public changelog.
- Add charts for cumulative PNL, daily volume, risk score, and drawdown.
- Add position lifecycle Gantt/timeline visualizations.
- Add more nuanced behavior tags.
- Add configurable market filters.
- Add optional ClickHouse analytics backend if Postgres becomes a bottleneck.
- Add optional alerts after public MVP is stable.
- Add mobile-friendly layouts.
Run before any public deployment:
pnpm install --frozen-lockfile
pnpm build
pnpm test
pnpm db:push
pnpm discover:contracts
pnpm worker:snapshot-leaderboard --source smartclaw --limit 20
pnpm worker:sync-subgraph --page-size 20
pnpm worker:enrich-positions --limit 20
scripts/self-host-monitor.shAlso verify:
-
/api/healthreports database OK. -
/api/healthreports subgraph configured and not stale. - Cron jobs show recent successful
job_runs. - Backups exist and one restore has been tested.
- No private endpoints or API keys are committed.
- Every PNL value in UI is labeled official, comparison, or estimated.
- Methodology page is linked from dashboard pages.