How tausicapital-afk/vfw works
Purpose and entry points
VFW Console is an internal sales and accounting system for fashion events. It manages sales submissions from pricing through accounting approval and QuickBooks hand-off, preserving financial history and audit records. The production application is a React SPA plus NestJS API; vfw-console.html remains a standalone demo/prototype.
• frontend/src/main.tsx
• frontend/src/App.tsx
• backend/src/main.ts
• vfw-console.html
Frontend application boundary
The React/Vite SPA provides role-aware operational screens for submissions, approval queues, contacts, reporting, payroll, attendance, messaging, email, and administration. Authentication state and API access are centralized, while the shell hosts common navigation and export affordances.
• frontend/src/auth/AuthContext.tsx
• frontend/src/lib/api.ts
• frontend/src/shell/Shell.tsx
• frontend/src/pages/Submissions.tsx
API composition, authentication, and authorization
NestJS is organized into domain modules/controllers registered by the application module. Cookie-backed JWT sessions, Argon2 credentials, invitation/signup and OTP flows establish identity. Guarding and permission checks are centralized rather than delegated to the client.
• backend/src/app.module.ts
• backend/src/auth/auth.controller.ts
• backend/src/auth/auth.service.ts
• backend/src/common/auth.guard.ts
• backend/src/common/acl.ts
Core financial submission lifecycle
Submission is the central financial record. Sales creates priced submissions from catalog inputs; server-side pricing calculates monetary amounts; accounting controls status transitions, accounting fields, invoicing, void/split behavior, and installment plans. PDF invoices/documents and approval evidence are associated at this boundary.
• backend/src/submissions/submissions.controller.ts
• backend/src/submissions/submissions.service.ts
• backend/src/pricing/pricing.service.ts
• backend/src/submissions/invoice-pdf.ts
• backend/src/submissions/installments/installments.service.ts
Persistence, catalog, and audit trail
Prisma defines the authoritative PostgreSQL model and migrations. The schema includes users, invitations, catalog/pricing, submissions, payments, contacts, documents, audit entries, and configuration. Audit/activity services expose append-oriented operational history; data retention favors status transitions and soft deletion over deleting financial records.
• backend/prisma/schema.prisma
• backend/prisma/migrations/20260713040342_init/migration.sql
• backend/src/prisma/prisma.service.ts
• backend/src/audit/audit.service.ts
• backend/src/activity/activity.service.ts
Operational integrations and derived workflows
Approved sales feed export datasets, including a QuickBooks ledger hand-off. Contacts are managed alongside sales. The system also supports real-time messaging via a gateway, inbound/outbound email with configurable provider/accounts, object storage for documents, attendance/profile/payroll workflows, and health probes.
• backend/src/export/export.service.ts
• backend/src/export/datasets/qbo-ledger.dataset.ts
• backend/src/messaging/messaging.gateway.ts
• backend/src/emails/inbound.service.ts
• backend/src/storage/storage.service.ts
Runtime and deployment
Frontend is built by Vite and served by nginx; backend runs Node/NestJS with Prisma against PostgreSQL 16. Local Compose supports database-only development and a full three-container stack. Railway deploys Postgres, backend, and frontend separately; backend startup applies migrations. GitHub Actions define CI, backup, and optional deployment automation.
• docker-compose.yml
• backend/Dockerfile
• frontend/Dockerfile
• backend/railway.json
• .github/workflows/ci.yml
Components 18
Frontend
- React SPA · Role-aware operational screens and shared shell.
frontend/src/App.tsx - Auth & API client
frontend/src/auth/AuthContext.tsx - Submissions screens
frontend/src/pages/Submissions.tsx - Standalone demo
vfw-console.html
NestJS API
- NestJS API · Composes domain modules and controllers.
backend/src/app.module.ts - Identity & access · Cookie JWT sessions, credentials, invitations, signup, and OTP.
backend/src/auth/auth.service.ts - Guards & ACL
backend/src/common/auth.guard.ts - Submission lifecycle · Controls financial status, invoicing, void/split, and accounting fields.
backend/src/submissions/submissions.service.ts - Server pricing
backend/src/pricing/pricing.service.ts - Installment plans
backend/src/submissions/installments/installments.service.ts
Data & audit
- PostgreSQL model · Authoritative model for financial and operational records.
backend/prisma/schema.prisma - Audit & activity history
backend/src/audit/audit.service.ts
Operational integrations
- Exports & QuickBooks ledger · Approved sales produce hand-off datasets.
backend/src/export/export.service.ts - Messaging gateway
backend/src/messaging/messaging.gateway.ts - Inbound/outbound email
backend/src/emails/inbound.service.ts - Document storage · Stores invoices, documents, and approval evidence.
backend/src/storage/storage.service.ts
Runtime & delivery
- Container stack · Vite/nginx frontend, NestJS backend, and PostgreSQL.
docker-compose.yml - CI automation · CI, backup, and optional deployment workflows.
.github/workflows/ci.yml
Connections 23
- React SPA → Auth & API client: uses
- React SPA → Submissions screens: hosts
- Auth & API client → NestJS API: authenticated API calls
- Submissions screens → NestJS API: submission operations
- NestJS API → Identity & access: routes identity flows
- NestJS API → Guards & ACL: enforces access
- Guards & ACL → Submission lifecycle: protects
- NestJS API → Submission lifecycle: routes financial workflow
- Submission lifecycle → Server pricing: calculates amounts
- Submission lifecycle → Installment plans: manages plans
- Submission lifecycle → PostgreSQL model: persists records
- Identity & access → PostgreSQL model: users and invitations
- Submission lifecycle → Audit & activity history: records lifecycle
- Audit & activity history → PostgreSQL model: stores history
- Submission lifecycle → Document storage: invoice and evidence files
- Submission lifecycle → Exports & QuickBooks ledger: approved sales
- Exports & QuickBooks ledger → PostgreSQL model: reads ledger data
- NestJS API → Messaging gateway: serves real-time operations
- NestJS API → Inbound/outbound email: handles mail workflows
- Container stack → React SPA: serves frontend
- Container stack → NestJS API: runs backend
- Container stack → PostgreSQL model: runs database
- CI automation → Container stack: builds and deploys