Files
zeekayandHanzo Dev 39b28933a3 feat: Lux Financial admin console (sandbox, @hanzo/ui)
White-label BaaS admin for admin.lux.financial. Vite + React 19 +
Tailwind v4 on the @hanzo/ui true-black design system (Geist, unified
oklch tokens). Auth via @hanzo/iam (lux.id OIDC, client lux-bank) with an
optional sandbox passcode gate so the investor demo is reachable without a
lux.id account — never unauthenticated.

Modules (mobile-responsive): Overview KPIs, Customers (+KYC approve/reject),
Accounts (+multi-currency balances), Treasury (aggregate liquidity), Cards
(freeze/unfreeze), Transactions, Compliance (AML/KYC queue), MPC/Safes
(testnet custody).

Data via one provider (src/lib/data.ts): live bankd (/v1/collections,
/v1/bank) first, faithful in-app Sandbox mirror (bankd schemas) as fallback
so the demo never renders blank. No Drive export. Served by a zero-dep Node
static server (no nginx/caddy) on :3000.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-17 16:55:32 -07:00

28 lines
823 B
TypeScript

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'
import { resolve } from 'path'
// Standalone admin console. Mirrors the proven bank-dash build: Tailwind v4
// via the vite plugin, and a hard dedupe of react/react-dom because @hanzo/iam
// ships its own React (otherwise "Invalid hook call — more than one copy").
export default defineConfig({
plugins: [react(), tailwindcss()],
resolve: {
alias: { '@': resolve(__dirname, 'src') },
dedupe: ['react', 'react-dom'],
},
optimizeDeps: {
include: ['@hanzo/iam/browser', '@hanzo/iam/react'],
},
server: {
port: 3000,
proxy: {
'/v1': {
target: process.env.VITE_BANK_API_URL || 'https://api.lux.financial',
changeOrigin: true,
},
},
},
})