Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
0201f66
fix: resolve 18 team-review blockers (3 critical + 15 high)
kimhons Apr 16, 2026
5c27db7
docs(assets): add brand asset system regeneration plan
kimhons Apr 16, 2026
35fbb64
chore(assets): add generation pipeline dependencies
kimhons Apr 16, 2026
d22c361
chore(assets): scaffold asset pipeline directories
kimhons Apr 16, 2026
f006916
feat(assets): add style-ref generator for Gate A review
kimhons Apr 16, 2026
d9c3409
feat(assets): add brand-aligned style-ref v2 generator
kimhons Apr 16, 2026
df2ecf2
feat(assets): production generation CLI (Phase 0.4)
kimhons Apr 16, 2026
562051b
feat(assets): wave 1.1 logo concept spec
kimhons Apr 16, 2026
f96c19b
feat(assets): wave 1.2 logo system spec — 7 variants via Nano Banana Pro
kimhons Apr 16, 2026
70311fa
feat(assets): promote logo system v1 to production (7 PNGs)
kimhons Apr 16, 2026
5b21078
feat(assets): wave 1.3 — complete app icon set (web + iOS + Android +…
kimhons Apr 16, 2026
257f2aa
feat(assets): wave 1.4 — Expo splash screen + mobile asset refresh
kimhons Apr 16, 2026
ecf60ab
feat(brand): deploy logo assets to public + add BrandMark component
kimhons Apr 16, 2026
70eb6df
refactor(brand): replace existing logo references with BrandMark
kimhons Apr 16, 2026
70316b8
fix(zod): migrate ZodError.errors → issues, z.record single-arg, erro…
kimhons Apr 16, 2026
d548603
docs(brand): Wave 1 Gate C verification report
kimhons Apr 16, 2026
c414f32
feat(assets): wave 2.1 onboarding illustration spec
kimhons Apr 17, 2026
30b612a
feat(assets): tier D editorial pilot spec
kimhons Apr 17, 2026
499b3bb
feat(assets): tier C line-art pilot spec
kimhons Apr 17, 2026
27b5c4f
feat(assets): wave 2.2 empty state illustrations spec (15 variants)
kimhons Apr 17, 2026
cd9291b
feat(assets): wave 2.4 error state illustrations spec
kimhons Apr 17, 2026
e3118f7
feat(assets): wave 2.3 success state illustrations spec
kimhons Apr 17, 2026
32a47e9
feat(assets): waves 2.5-2.7 upgrade + referral + security illustratio…
kimhons Apr 17, 2026
1d44845
feat(assets): wave 2.8 feature explainer illustrations spec
kimhons Apr 17, 2026
863f521
feat(assets): wave 4 website marketing imagery spec (12 Tier D editor…
kimhons Apr 17, 2026
8a467fb
feat(assets): wave 5 app store + promotional assets spec (12 images)
kimhons Apr 17, 2026
b068966
feat(assets): waves 6+7 CRM lifecycle + trust support specs (20 images)
kimhons Apr 17, 2026
40cc601
feat: ui audit fixes — Button component, loading states, color tokens…
kimhons Apr 19, 2026
712ee4a
feat: comprehensive animations, trading charts, and asset states
kimhons Apr 19, 2026
e92726c
fix: generate missing PWA icons and consolidate manifests
kimhons Apr 19, 2026
ff9b6fa
fix: address team review findings — deduplicate variant, fix hydratio…
kimhons Apr 20, 2026
1c0e712
fix: address code review HIGH findings
kimhons Apr 20, 2026
4ac3752
feat(ux): Wave 4 UX polish & cross-platform parity
kimhons Apr 20, 2026
87f7922
feat: competitive parity — subscription cancellation, pre-approval od…
kimhons Apr 20, 2026
c19f792
fix: integrate all new features into navigation and UI
kimhons Apr 20, 2026
b4f6c69
feat(trading): wire real engines to orders, risk, signals API routes
kimhons Apr 20, 2026
a0db01f
fix(trading): structural fixes 4.1-4.4 — portfolio unification, strat…
kimhons Apr 20, 2026
15ea700
fix: kill all mocks in trading/investment data layer — wire real APIs
kimhons Apr 20, 2026
ee66ea1
feat(trading): Sprint 1 — canonical policy loader foundation
kimhons Apr 27, 2026
27449ea
feat(trading): Sprint 8 — trading calendar, data quality checker, ins…
kimhons Apr 27, 2026
71f9362
feat(trading): Sprint 2 — safety controls (kill switch, incident mana…
kimhons Apr 27, 2026
74c0db8
fix(trading): handle nested YAML regime budgets in policy-loader
kimhons Apr 27, 2026
862e7bb
feat(trading): Sprint 5 — promotion lifecycle (6-stage state machine)
kimhons Apr 27, 2026
5a7f325
feat(trading): Sprint 7 — execution quality (circuit breaker, clock m…
kimhons Apr 27, 2026
1e15e94
feat(trading): Sprint 6 — VaR portfolio heat model with regime-aware …
kimhons Apr 27, 2026
e1440fa
feat(trading): Sprint 9A — transaction cost model, Q-Score calibratio…
kimhons Apr 27, 2026
13cea15
feat(trading): Sprint 9B — edge decay detection, regime ensemble, tra…
kimhons Apr 27, 2026
0a23591
feat(trading): Sprint 9C — bar consolidation, pre-market checklist, H…
kimhons Apr 27, 2026
1282ea5
feat(trading): Sprint 10 — multi-tenant budget ceilings, narrow-only …
kimhons Apr 27, 2026
1ff0daf
docs: production readiness task list from 4-agent deep-dive audit
kimhons Apr 27, 2026
6f1a0b2
fix(admin): wire users page to real API, remove mock data
kimhons Apr 27, 2026
a4f2945
fix(mobile): wire chat to real AI API, remove trading store mock fall…
kimhons Apr 27, 2026
7c1248a
fix(gamification): wire quests to real API, fix type mapping, remove …
kimhons Apr 27, 2026
35642be
feat(trading): wire Strativion modules into live signal/order pipeline
kimhons Apr 27, 2026
6829de6
fix(mobile): wire goals screens to real goalStore, remove mock data
kimhons Apr 27, 2026
322769c
feat(mobile): enhance dispute wizard, add notification preferences
kimhons Apr 27, 2026
8331619
feat(mobile): add investment research, rebalance, performance, backte…
kimhons Apr 27, 2026
373b866
feat(mobile): wire marketplace screens to real API, create marketplac…
kimhons Apr 27, 2026
ebce35a
feat(web): add gamification leaderboard page
kimhons Apr 27, 2026
9da4982
fix(trading): add strategy_lifecycle migration, verify policy boot va…
kimhons Apr 27, 2026
4be4af7
feat(investments): add dividends API endpoint, wire web + mobile screens
kimhons Apr 27, 2026
72d1702
test(mobile): add store tests for 12 untested Zustand stores
kimhons Apr 27, 2026
9209fa9
feat(mobile): wire identity monitoring screens to real credit monitor…
kimhons Apr 27, 2026
aff2949
feat(mobile): add global search with stocks, transactions, help, sett…
kimhons Apr 27, 2026
3205db5
feat(mobile): add report generation with credit, financial, trading, …
kimhons Apr 27, 2026
bdedba8
feat(web): add voice assistant with speech recognition and text-to-sp…
kimhons Apr 27, 2026
17af301
feat(goals): wire investment dashboard into goals flow, add mobile in…
kimhons Apr 27, 2026
b1bad1f
fix(security): make compliance gates fail-closed on error
kimhons Apr 27, 2026
cbf46a3
fix(build): decouple SubscriptionCancellationWizard from server-side …
kimhons Apr 27, 2026
d4617f3
fix: pre-beta review — CSP header, Stripe lazy init, branding cleanup…
kimhons Apr 27, 2026
d25c626
docs: beta readiness report, definitive fix list, and review baseline
kimhons Apr 27, 2026
f21b7ff
feat(mobile): wire EmptyState component into 7 key screens
kimhons Apr 27, 2026
59d0593
fix(ux): add og-image metadata, wire EmptyState into 6 key web pages
kimhons Apr 27, 2026
a43bce9
fix(ux): wire EmptyState into 13 screens (web+mobile), add og-image f…
kimhons Apr 27, 2026
0e9fa9b
fix(tests): fix affiliate test date expiry — future date was in the past
kimhons Apr 27, 2026
1854796
fix(ui): prevent pricing card overlap on XL screens
kimhons Apr 27, 2026
105fbc5
feat(credits): add credit system foundation — schema, service, costs,…
kimhons Apr 27, 2026
df25b2f
feat(credits): integrate credit checks into trading signals, orders, …
kimhons Apr 27, 2026
3ec44fb
feat(credits): add purchase, balance, history, addon APIs + webhook i…
kimhons Apr 27, 2026
af105e4
feat(credits): add credit UI components, mobile store, pricing update…
kimhons Apr 27, 2026
0a1b1cc
feat(landing): modernize homepage with device mockups, glassmorphism,…
kimhons Apr 28, 2026
69e285f
fix: responsive hero heading on mobile + build NODE_ENV conflict
kimhons Apr 28, 2026
b0ccfb3
fix(landing): glassmorphism cards, pricing overflow, testimonials fir…
kimhons Apr 28, 2026
9877aa3
feat(landing): replace CSS mockups with photorealistic Imagen 4.0 ren…
kimhons Apr 28, 2026
44d323a
feat(landing): upgrade mockups with rich analytics, charts, AI recomm…
kimhons Apr 28, 2026
215ff6e
fix(mockups): polish Imagen 4.0 Ultra renders — correct key numbers, …
kimhons Apr 28, 2026
fedf164
fix(mockups): full device visibility, single coherent trend chart
kimhons Apr 28, 2026
52b476b
fix(mockups): iPhone facing forward, Fynvita branding on dashboard
kimhons Apr 28, 2026
facbec0
feat(landing): replace AI mockups with pixel-perfect HTML/CSS components
kimhons Apr 28, 2026
6b53c8c
fix(mockups): constrain PhoneFrame to iPhone 15 aspect ratio (9:19.5)
kimhons Apr 28, 2026
ce1be60
feat(landing): use photorealistic hero image with Fynvita dashboard
kimhons Apr 28, 2026
d64e8d5
fix(credits): atomic Stripe webhook fulfillment + idempotency + privi…
kimhons May 1, 2026
bc56ae8
docs(ssot): VERSION-013 audit-driven re-baseline + Wave 7 plan
kimhons May 3, 2026
2877317
docs(ssot): apply 6 QA-team plan amendments to Wave 7
kimhons May 4, 2026
687f9aa
docs(ssot): TASK-PRE-01 honest re-baseline — verdict FAIL
kimhons May 4, 2026
45f29ff
fix(disputes): return 500 when generation handler rejects
kimhons May 16, 2026
cc2f9ab
test: add coverage for low-coverage service and route domains
kimhons May 16, 2026
c9e804a
chore(quality): add 85% changed-code coverage gate and fix lint hook
kimhons May 16, 2026
9520d13
docs(spec): add MVP launch roadmap design spec
kimhons May 16, 2026
069c25b
docs(spec): revise MVP roadmap spec after adversarial review
kimhons May 16, 2026
5cc390b
docs(spec): fold in spec-review nits (HIGH ownership note, task-count…
kimhons May 16, 2026
37596c6
docs(plan): add Foundation block implementation plan (Wave 7 Phase 0+1)
kimhons May 16, 2026
b10e012
docs(plan): revise Foundation plan after adversarial review (B1-B3, S…
kimhons May 16, 2026
ed1bedc
docs(plan): revise Foundation plan iteration 3 (N1-N2, S8-S11)
kimhons May 16, 2026
cd8fc21
chore: gitignore .worktrees/
kimhons May 16, 2026
a6331ed
chore: add Claude Code agents/teams/rules + require gstack
kimhons May 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
30 changes: 30 additions & 0 deletions .claude/KNOWN_ISSUES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Known Issues — Fynvita

## Mobile Test Coverage at 14% (Target: 80%)
- **Issue:** mobile-app/jest.config.js global threshold is 14% (branches 10%)
- **Impact:** Mobile regressions not caught by coverage gates
- **Fix:** Update thresholds to match web standards (80% global)
- **Status:** NEEDS FIX

## 841 ESLint Warnings (Legacy)
- **Issue:** Mostly no-explicit-any, no-unused-vars, display-name in legacy code
- **Impact:** New warnings hidden in noise
- **Workaround:** 7 actual errors are low priority; warnings are non-blocking
- **Status:** TRACKING

## Mobile Not in CI/CD
- **Issue:** .github/workflows/ci.yml only runs web tests
- **Impact:** Mobile regressions not caught at PR time
- **Fix:** Add mobile-test job (Jest + type-check)
- **Status:** NEEDS FIX

## Playwright E2E Non-Blocking
- **Issue:** Playwright job has `continue-on-error: true` in CI
- **Impact:** E2E failures don't block merges
- **Workaround:** Review E2E results manually in PR checks
- **Status:** BY DESIGN (flaky tests being stabilized)

## Detox E2E Not in CI
- **Issue:** Detox scripts defined in mobile-app/package.json but not wired into GitHub Actions
- **Impact:** Mobile E2E not automated
- **Status:** DEFERRED (requires iOS/Android runners in CI)
33 changes: 33 additions & 0 deletions .claude/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Project-Level Claude Config

Generic baseline shared across projects. This directory pairs with the user's global config at `~/.claude/`.

## Layout

```
.claude/
├── agents/ 5 generic agents (bug-fixer, test-writer, documentation, security-auditor, performance-tuner)
├── skills/ 3 workflow skills (pre-investigation, implement-task, verify-and-ship)
├── hooks/ post-edit-lint.sh (stack-aware: TS/JS/Py/Rust/Go/Dart)
├── rules/ Project-specific overrides (fill in or delete)
├── commands/ Project-specific slash commands (from original template)
└── settings.json Wires the lint hook
```

## Global vs project responsibilities

- **Global (`~/.claude/`)** owns: verification protocol, coding standards, anti-overengineering rules, anti-hallucination, git workflow, testing standards, security baseline.
- **Project (`.claude/`)** owns: stack-specific commands, project-specific conventions, domain glossary, project-specific agents and skills.

Do NOT duplicate global rules at the project level. If a rule applies to all projects, it belongs in `~/.claude/rules/`.

## When forking this template

1. Fill in the `<fill in>` placeholders in `rules/01-verification.md`.
2. Delete `rules/02-project-conventions.md` and `rules/03-domain-glossary.md` if not needed.
3. Add project-specific agents to `agents/` only when a generic agent doesn't fit.
4. Add project-specific skills to `skills/` only when the 3 generic ones don't cover the workflow.

## Settings

`settings.json` wires the post-edit lint hook. It does NOT grant any tool permissions — those come from `~/.claude/settings.json` plus `settings.local.json` (per-project, gitignored).
1 change: 1 addition & 0 deletions .claude/agent-memory/architect/MEMORY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- [Wave 7 Remediation Roadmap](project_wave7_remediation.md) — 8-phase plan (~60 tasks) addressing 33 CRITICAL findings; reference fix template is commit d64e8d5
13 changes: 13 additions & 0 deletions .claude/agent-memory/architect/project_wave7_remediation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
name: Wave 7 Remediation Roadmap
description: Wave 7 remediation plan structure for the 33 CRITICAL findings — phases, task ID prefixes, gate criteria
type: project
---

Wave 7 (Remediation) was scoped on 2026-05-01 to address 33 CRITICAL findings clustered into 4 themes (auth/RBAC, webhook idempotency + tier mapping, money correctness, mock-data-as-production) plus compliance, mobile, and IDOR sweeps.

**Why:** Prior 125/125 DONE claim in MASTER-IMPLEMENTATION-PLAN.md was invalidated by live security review proving CRITICAL bypasses across 9 domains. CLAUDE.md and SSOT must be updated before further feature work.

**How to apply:** When asked about Wave 7 status, reference the 8 phases (PRE, AUTH, WBH, MNY, MOK, CMP, MOB, IDR) and ~60 tasks. Phase 0 (PRE-01..05) is the prereq gate — re-baseline + branch freeze + flags + lint guards must land first. Reference fix template is commit d64e8d5 (atomic Postgres RPC + UNIQUE constraint + REVOKE/GRANT). Phase exit gates are documented per phase. Total estimate: 4 weeks, parallelizable across SEC/BE/MOB/DEVOPS streams.

Verify before recommending any specific task ID exists — these were proposed, not yet committed to MASTER-IMPLEMENTATION-PLAN.md.
4 changes: 4 additions & 0 deletions .claude/agent-memory/architecture-reviewer/MEMORY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Architecture Reviewer Memory Index

- [User Profile](user_profile.md) — Honour, principal engineer on Fynvita (Next.js 15 + Expo), prefers sub-600-word focused reviews with file:line citations
- [Project: Fynvita Stack](project_fynvita.md) — Next.js 15 App Router + Supabase RLS + Expo SDK 52, singleton-service pattern, 846K LOC
9 changes: 9 additions & 0 deletions .claude/agent-memory/architecture-reviewer/user_profile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
name: User Profile — Honour
description: Owner of Fynvita repo, principal engineer, prefers concise architectural reviews with exact file:line citations and under-600-word output
type: user
---

Honour (kimhons@gmail.com / khonour@yahoo.com). Principal engineer and product owner of Fynvita.
Primary stacks: Next.js 15 + Supabase + Expo SDK 52. Deep full-stack experience.
Review preference: factual, citation-grounded, under 600 words, no padding.
4 changes: 4 additions & 0 deletions .claude/agent-memory/code-reviewer/MEMORY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Code Reviewer Memory Index

- [user_profile.md](user_profile.md) — Owner is Honour; senior fullstack, Next.js 15/Supabase/Stripe/Expo stack, strict TypeScript
- [project_credit_system.md](project_credit_system.md) — Credit system architecture: app-currency credits vs FCRA consumer credit, deduct_credits RPC is atomic, addCredits is not
21 changes: 21 additions & 0 deletions .claude/agent-memory/code-reviewer/project_credit_system.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
name: project_credit_system
description: Credit system design decisions relevant to future reviews — atomic RPC vs non-atomic addCredits, webhook fulfillment pattern
type: project
---

Two "credit" concepts coexist: app-currency credits (balance/purchase/deduct) and FCRA consumer credit (disputes, adverse action).

**Deduction is atomic** via `deduct_credits` Postgres RPC (FOR UPDATE row lock + INSERT in one transaction). Safe under concurrency.

**addCredits is now atomic** (fixed 2026-05-01) via `add_credits` Postgres RPC (migration 20260501000000_credit_purchase_idempotency.sql). Previously was a non-atomic read-modify-write in application code.

**Stripe fulfillment (post-fix)**: purchase route now creates a Checkout Session and returns `checkoutUrl`. Credits granted in `fulfillCreditPurchase` (stripe-service.ts ~line 728) on `payment_intent.succeeded` webhook. Idempotency via UNIQUE constraint on `credit_purchases.stripe_payment_intent_id`; 23505 Postgres error is caught and suppressed (dedup). Any other DB error is thrown so Stripe retries.

**Known open issue (found 2026-05-01 review)**: `handlePaymentIntentSucceeded` catches all errors from `fulfillCreditPurchase` and logs them instead of rethrowing. This means Stripe receives HTTP 200 even on transient DB failures, and will NOT retry. Credits could be permanently lost. The `throw` in `fulfillCreditPurchase` is swallowed at the caller level (stripe-service.ts:712-719).

**Schema**: `credit_purchases` columns are `amount_paid_cents`, `stripe_payment_intent_id` (nullable TEXT, now UNIQUE). No `status` column. Column names are now correct in webhook handler.

Why: migration (20260427000002_credit_system.sql) and webhook handler were written independently without cross-checking column names (fixed in this diff).

How to apply: When reviewing any code that inserts into credit_purchases, verify against the migration DDL column names. When reviewing webhook error handling, confirm errors propagate past the outer try/catch in handlePaymentIntentSucceeded.
7 changes: 7 additions & 0 deletions .claude/agent-memory/code-reviewer/user_profile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: user_profile
description: Owner identity, stack, and review preferences
type: user
---

Owner is Honour (kimhons@gmail.com). Senior fullstack engineer. Primary stack on this project: Next.js 15 App Router, TypeScript strict, Supabase PostgreSQL + RLS, Stripe webhooks, Expo/React Native. Expects terse, citation-precise reviews. No trailing summaries. No emojis.
4 changes: 4 additions & 0 deletions .claude/agent-memory/security-reviewer/MEMORY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Security Reviewer Memory Index

## Project
- [project_fynvita_security.md](project_fynvita_security.md) — Fynvita security posture, audit findings 2026-04-16, dependency CVEs, recurring patterns to watch
Loading
Loading