| Done | Task |
|---|---|
| [x] | Create shared models.py contract |
| [x] | Create mocks/ folder with JSON files |
| [x] | Generate TypeScript types from Pydantic models |
| [ ] | Install CodeRabbit on GitHub repo |
| [ ] | Seed Nessie sandbox with demo data |
| [ ] | Nessie data fetching + normalization |
| [ ] | Budget engine (50/30/20 categorizer) |
| [ ] | Asteroid detection rules |
| [ ] | Data service API endpoints (/api/snapshot, /api/budget, /api/asteroids, /api/transactions) |
| [ ] | DynamoDB caching for snapshots |
| [ ] | Captain Nova agent skeleton |
| [ ] | Bedrock connection (Claude Sonnet 4.5) |
| [ ] | Captain Nova system prompt |
| [ ] | Captain Nova tools (stubbed) |
| [ ] | Captain Nova API endpoint (/api/captain/query) |
| [ ] | Dashboard shell (Next.js port) |
| [ ] | Starfield canvas + scanlines + hex overlay |
| [ ] | Responsive grid layout |
| [ ] | Captain Nova panel UI |
| [ ] | Shield bars component |
| [ ] | Cognito auth integration |
| [x] | Balance HUD component |
| [x] | Bottom metrics bar |
| [x] | Transaction log component |
| [x] | Asteroid UI component |
| [x] | Create web/public/mocks/ with official shared data |
| [x] | Implement type-safe API hooks (useFinance, useSecurity, useAI) |
| [x] | Isolation test page (/test/bridge-data) |
| [ ] | Frontend → API Gateway integration |
| [ ] | Captain Nova tools → real endpoints |
| [x] | VISA sandbox authentication (X-Pay-Token) |
| [x] | VISA Transaction Controls API integration |
| [x] | VISA controls Lambda endpoints (Isolated in visa-lambda) |
| [ ] | Wire VISA tools into Captain Nova |
| [ ] | VISA shield activation UI |
| [ ] | VISA controls display (stretch) |
| [ ] | Mobile responsiveness pass |
| [x] | Loading states + error handling |
| [x] | Animation polish |
| [ ] | Captain Nova prompt tuning |
| [ ] | Demo rehearsal #1 |
| [ ] | Pitch deck (5-6 slides) |
| [ ] | Demo rehearsal #2 |
| [ ] | Demo rehearsal #3 |
| [ ] | Final deploy |
| [ ] | Lambda warmup / provisioned concurrency |
Commits:
31f21c0- chore(shared): add pydantic dependencies8a43f28- feat(shared): add all API contract Pydantic modelsc8a8f02- feat(shared): add 50/30/20 category mappings169a794- feat(shared): add mock data files and loaders8512ebb- feat(shared): export models and categories from package root7243c68- feat: add TypeScript type generation from Pydantic modelsebac5ec- chore: update uv.lock with pydantic dependencies
What was added:
- 9 Pydantic models in
core/shared/src/shared/models.py:AccountSummary,Transaction,FinancialSnapshot(Data Layer)BucketBreakdown,BudgetReport,Asteroid(Budget Engine)VisaControlRule,VisaAlert(VISA Integration)CaptainResponse(Agent Output)
- 50/30/20 category mappings in
core/shared/src/shared/categories.py(12 needs, 14 wants, 5 savings) - Mock data files with loaders in
core/shared/src/shared/mocks/:snapshot.json- 3 accounts, 25 transactionsbudget.json- Full budget report with 58% health scoreasteroids.json- 5 financial threatsvisa_controls.json- VISA control rules
- TypeScript types auto-generated at
web/src/types/api.ts - Generation script at
scripts/generate-types.sh
What subsequent modules must be aware of:
- All backend modules must import shared models:
from shared import AccountSummary, Transaction, FinancialSnapshot - Data Service must return data matching these exact Pydantic schemas
- Budget Engine must use
categorize_transaction()fromshared.categoriesfor consistent bucket assignment - Frontend must import TypeScript types:
import { Transaction, BudgetReport } from '@/types/api' - Mock mode is available via
from shared.mocks import get_mock_snapshot, get_mock_budget, get_mock_asteroidsfor parallel development - Regenerate types after any Pydantic model changes by running
./scripts/generate-types.sh - Captain Nova must return
CaptainResponseformat with optionalsuggested_visa_controls - VISA Integration must use
VisaControlRuleandVisaAlertschemas
What was added:
- Dumb Components (Presentational):
BalanceHUD.tsx: Orbital net worth display with animated rings and account breakdown.TransactionLog.tsx: Categorized list of recent transmissions with bucket color-coding.BottomMetricsBar.tsx: 4-card grid for Income, Spending, Savings Rate, and Net Worth Delta.AsteroidCard.tsx: Expandable threat cards with severity-based glow and action buttons.
- Smart Components (Containers):
BridgeDataContainer.tsx: Orchestrates HUD, Metrics, and Transactions.AsteroidsContainer.tsx: Manages threat list and removal animations.VisaShieldsContainer.tsx: Displays active VISA transaction controls.
- Isolation Test Page:
- Accessible at
/test/bridge-datafor rapid UI development and testing.
- Accessible at
- Official Mock Sync:
- Synced
web/public/mocks/withcore/shared/src/shared/mocks/to ensure frontend/backend data alignment.
- Synced
What was added:
- Centralized Axios Client:
web/src/lib/api.tsconfigured with base URLs and ready for Cognito JWT injection. - Feature-specific Hooks:
useFinance.ts:useFinancialSnapshot(),useTransactions()useSecurity.ts:useAsteroids(),useVisaControls()useAI.ts:useCaptainNova()
How the Hooks Work:
- Dual-Mode Logic: Every hook contains both "Mock Mode" (active) using local JSON files and "Production Mode" (commented out) using Axios.
- Type Safety: Hooks are strictly typed using the generated
web/src/types/api.tsinterfaces. - Abstraction: Containers now consume data through hooks rather than direct
fetchcalls, making the eventual swap to real APIs a single-line change per hook. - Documentation: Added
web/src/hooks/README.mdfor developer guidance.
What was added:
- VISA Lambda:
core/lambda/visa-lambda/- Dedicated Lambda function for all VISA-related operations.
- Handler:
handler.pyexposes/api/visa/health,/api/visa/controls. - Service:
services/visa_service.pyhandles X-Pay-Token signing (API key + shared secret).
- Separation of Concerns:
- Removed VISA logic from
data-lambdato keep it focused on financial data processing. - VISA operations now have their own independent deployment and scaling.
- Removed VISA logic from
- Infrastructure Updates:
infrastructure/lib/api-stack.ts- Defined
visa-lambdafunction. - Configured API Gateway to route
/api/visa/*to the newvisa-lambda. - Set environment variables:
VISA_USER_ID,VISA_PASSWORD.
- Defined
Auth Setup (X-Pay-Token):
VISA_USER_ID= VISA API key (apiKey)VISA_PASSWORD= VISA shared secret
Next Steps for VISA:
- Set
VISA_USER_IDandVISA_PASSWORDenvironment variables. - Deploy updated stack:
cd infrastructure && bunx cdk deploy --all. - Test VISA endpoints using the frontend hooks.