Repository files navigation

FinSight AI — AI Financial Assistant for SMEs

Production-grade SaaS financial intelligence platform powered by GPT-4o, Next.js 15, and PostgreSQL.

Next.jsTypeScriptPostgreSQLClerkOpenAI


🚀 Features

Core Modules

ModuleDescription
Financial DashboardReal-time revenue, expenses, profit, invoice metrics
Invoice ManagementCreate, send, track, record payments
Expense TrackingManual entry, CSV import, categorization
Transaction LedgerFull double-entry transaction history
Bank Statement AnalyzerUpload PDF/CSV, extract & categorize transactions
AI Financial AssistantRAG-based chatbot with real financial data context
AI Insights EngineAuto-detected anomalies, risks, opportunities
Cash Flow ForecastingDeterministic 3-month linear trend forecasts
Financial ReportsP&L, Expense Summary, Revenue Trends (PDF/Excel)
Settings & SecurityRBAC, audit logs, MFA, organization management

Critical Design Principle

AI NEVER calculates financial values. All calculations are deterministic and performed by the backend using Prisma queries. AI only generates explanations, insights, and narratives based on the pre-calculated data.


🏗️ Architecture

┌─────────────────────────────────────────────────────────┐
│ Next.js 15 App Router │
├──────────────────────┬──────────────────────────────────┤
│ Frontend (RSC) │ API Routes │
│ - Dashboard │ - /api/dashboard │
│ - Invoices │ - /api/invoices │
│ - Expenses │ - /api/expenses │
│ - AI Assistant │ - /api/ai/chat (SSE streaming) │
│ - Cash Flow │ - /api/cash-flow │
│ - Reports │ - /api/reports │
│ - Insights │ - /api/insights │
└──────────────────────┴──────────────────────────────────┘
│ │
Clerk Auth Prisma ORM
│ │
PostgreSQL DB OpenAI GPT-4o
│ │
Qdrant Vector DB RAG Pipeline

RAG Pipeline

User Question
→ Intent Classification (GPT-4o-mini)
→ Data Retrieval (Prisma queries = REAL numbers)
→ Context Assembly
→ OpenAI GPT-4o Response Generation
→ Streaming SSE to Frontend

📋 Tech Stack

Frontend

  • Next.js 15 (App Router, RSC, Streaming)
  • TypeScript 5
  • Tailwind CSS + ShadCN UI components
  • Recharts (interactive financial charts)
  • React Query (server state management)
  • Zustand (client state)

Backend

  • Next.js API Routes
  • Prisma ORM with PostgreSQL
  • Zod validation (all inputs)
  • Rate limiting via Redis when REDIS_URL is set (in-process fallback otherwise)
  • Redis-backed dashboard metrics cache with version invalidation on writes

AI

  • OpenAI GPT-4o (assistant responses)
  • OpenAI text-embedding-3-small (embeddings)
  • RAG architecture for financial context
  • Qdrant vector database

Auth & Security

  • Clerk Authentication (OAuth, MFA, RBAC)
  • OWASP Top 10 compliant
  • CSRF protection in middleware
  • SQL injection prevention (Prisma parameterized queries)
  • Complete audit logging

🗄️ Database Schema

Organizations ──┬── OrganizationMembers ── Users
├── Clients
├── Vendors
├── Categories
├── Transactions ── Categories
├── Invoices ─────┬── InvoiceItems
│ └── Payments
├── Expenses ── Categories
├── BankStatements ── Transactions
├── Reports
├── AIChats ── AIChatMessages
├── Insights
├── CashFlowForecasts
├── Notifications
├── AuditLogs
└── Anomalies

🔒 Security Implementation

Security LayerImplementation
AuthenticationClerk JWT + MFA
AuthorizationRBAC (Admin/Accountant/Employee/Viewer)
CSRF ProtectionOrigin/Host validation in middleware
Rate LimitingPer-IP sliding window (100 req/min default)
Input ValidationZod schemas on all API endpoints
SQL InjectionPrisma ORM parameterized queries
XSS PreventionNext.js built-in + CSP headers
Audit LoggingAll CRUD operations logged with user/IP
Sensitive DataPrisma field-level encryption ready
File UploadType validation, size limits, S3 signed URLs

🚀 Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+
  • OpenAI API key
  • Clerk account

1. Clone & Install

git clone https://github.com/imchine/FinTech-Solution.git
cd finsight-ai
npm install

2. Environment Setup

cp .env.example .env.local
# Fill in your API keys

3. Database Setup

# Apply schema
npx prisma migrate dev --name init
# Generate client
npx prisma generate

4. Run Development

npm run dev
# Open http://localhost:3000

5. Docker (Full Stack)

docker-compose up -d

Redis (optional)

Redis is optional but recommended for production and multi-instance deployments.

docker compose up -d redis
# set in .env.local:
REDIS_URL=redis://localhost:6379

When REDIS_URL is set:

  • Rate limiting — shared across API routes (/api/transactions, /api/invoices, /api/ai/chat, etc.)
  • Dashboard cache — metrics cached for 2 minutes; invalidated when transactions, expenses, or invoices change
  • Health checkGET /api/health reports whether Redis is configured

Without Redis, rate limits and dashboard metrics use in-process behaviour only.


📁 Folder Structure

finsight-ai/
├── src/
│ ├── app/
│ │ ├── (auth)/ # Sign in/up pages (Clerk)
│ │ ├── (dashboard)/ # All protected dashboard pages
│ │ │ ├── dashboard/ # Main financial dashboard
│ │ │ ├── invoices/ # Invoice management
│ │ │ ├── expenses/ # Expense tracking
│ │ │ ├── transactions/# Transaction ledger
│ │ │ ├── ai-assistant/# AI chatbot interface
│ │ │ ├── cash-flow/ # Cash flow & forecasting
│ │ │ ├── insights/ # AI insights engine
│ │ │ ├── reports/ # Financial reports
│ │ │ ├── bank-statements/ # Bank statement analyzer
│ │ │ └── settings/ # Account & org settings
│ │ └── api/ # All API routes
│ ├── components/
│ │ ├── ui/ # ShadCN UI components
│ │ ├── charts/ # Recharts wrappers
│ │ ├── dashboard/ # Dashboard-specific components
│ │ ├── layout/ # Sidebar, Header
│ │ └── shared/ # Providers, theme
│ ├── lib/
│ │ ├── prisma.ts # Database client
│ │ ├── auth.ts # Auth helpers & audit logging
│ │ ├── openai.ts # AI integration & RAG
│ │ ├── financial-calculations.ts # ALL financial math
│ │ ├── validations.ts # Zod schemas
│ │ ├── rate-limit.ts # API rate limiting
│ │ └── utils.ts # Utilities & formatters
│ ├── middleware.ts # Auth & security middleware
│ └── types/ # TypeScript types
├── prisma/
│ └── schema.prisma # Complete DB schema
├── docker-compose.yml # Full stack Docker setup
├── Dockerfile # Production container
└── .env.example # Environment template

📊 API Endpoints

MethodEndpointDescription
GET/api/healthHealth check
GET/api/dashboardDashboard metrics
GET/api/dashboard/trendsMonthly trends
GET/api/dashboard/categoriesExpense categories
GET/POST/api/invoicesList/create invoices
GET/PATCH/DELETE/api/invoices/[id]Invoice operations
GET/POST/api/expensesList/create expenses
GET/POST/api/transactionsList/create transactions
POST/api/ai/chatAI chat (SSE streaming)
GET/api/ai/chatChat history
GET/api/cash-flowHistorical + forecasts
GET/POST/api/reportsReport management
GET/api/insightsAI insights

🚢 Deployment

Vercel (Frontend)

vercel deploy --prod

Environment Variables (Production)

Set all variables from .env.example in your deployment platform.

Database Migration (Production)

npx prisma migrate deploy

🧪 Testing Strategy

  • Unit Tests: Financial calculation functions (Jest)
  • Integration Tests: API routes with Prisma mocks
  • E2E Tests: Playwright for critical user flows
  • Security Tests: OWASP ZAP scanning
  • Load Tests: k6 for API performance

📈 Performance

  • Server-side rendering for initial dashboard load
  • React Query caching (60s stale time)
  • Optimized Prisma queries with proper indexes
  • Streaming AI responses (SSE)
  • Image optimization via Next.js
  • Lazy loading of chart components

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make changes with tests
  4. Submit a PR

📄 License

MIT License — see LICENSE file.


Built with ❤️ for SMEs worldwide

About

FinTech AI Solution for SMEs to calculate financial values

Topics

Resources

Stars

132 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

FinSight AI — AI Financial Assistant for SMEs

Production-grade SaaS financial intelligence platform powered by GPT-4o, Next.js 15, and PostgreSQL.

Next.jsTypeScriptPostgreSQLClerkOpenAI


🚀 Features

Core Modules

ModuleDescription
Financial DashboardReal-time revenue, expenses, profit, invoice metrics
Invoice ManagementCreate, send, track, record payments
Expense TrackingManual entry, CSV import, categorization
Transaction LedgerFull double-entry transaction history
Bank Statement AnalyzerUpload PDF/CSV, extract & categorize transactions
AI Financial AssistantRAG-based chatbot with real financial data context
AI Insights EngineAuto-detected anomalies, risks, opportunities
Cash Flow ForecastingDeterministic 3-month linear trend forecasts
Financial ReportsP&L, Expense Summary, Revenue Trends (PDF/Excel)
Settings & SecurityRBAC, audit logs, MFA, organization management

Critical Design Principle

AI NEVER calculates financial values. All calculations are deterministic and performed by the backend using Prisma queries. AI only generates explanations, insights, and narratives based on the pre-calculated data.


🏗️ Architecture

┌─────────────────────────────────────────────────────────┐
│ Next.js 15 App Router │
├──────────────────────┬──────────────────────────────────┤
│ Frontend (RSC) │ API Routes │
│ - Dashboard │ - /api/dashboard │
│ - Invoices │ - /api/invoices │
│ - Expenses │ - /api/expenses │
│ - AI Assistant │ - /api/ai/chat (SSE streaming) │
│ - Cash Flow │ - /api/cash-flow │
│ - Reports │ - /api/reports │
│ - Insights │ - /api/insights │
└──────────────────────┴──────────────────────────────────┘
│ │
Clerk Auth Prisma ORM
│ │
PostgreSQL DB OpenAI GPT-4o
│ │
Qdrant Vector DB RAG Pipeline

RAG Pipeline

User Question
→ Intent Classification (GPT-4o-mini)
→ Data Retrieval (Prisma queries = REAL numbers)
→ Context Assembly
→ OpenAI GPT-4o Response Generation
→ Streaming SSE to Frontend

📋 Tech Stack

Frontend

  • Next.js 15 (App Router, RSC, Streaming)
  • TypeScript 5
  • Tailwind CSS + ShadCN UI components
  • Recharts (interactive financial charts)
  • React Query (server state management)
  • Zustand (client state)

Backend

  • Next.js API Routes
  • Prisma ORM with PostgreSQL
  • Zod validation (all inputs)
  • Rate limiting via Redis when REDIS_URL is set (in-process fallback otherwise)
  • Redis-backed dashboard metrics cache with version invalidation on writes

AI

  • OpenAI GPT-4o (assistant responses)
  • OpenAI text-embedding-3-small (embeddings)
  • RAG architecture for financial context
  • Qdrant vector database

Auth & Security

  • Clerk Authentication (OAuth, MFA, RBAC)
  • OWASP Top 10 compliant
  • CSRF protection in middleware
  • SQL injection prevention (Prisma parameterized queries)
  • Complete audit logging

🗄️ Database Schema

Organizations ──┬── OrganizationMembers ── Users
├── Clients
├── Vendors
├── Categories
├── Transactions ── Categories
├── Invoices ─────┬── InvoiceItems
│ └── Payments
├── Expenses ── Categories
├── BankStatements ── Transactions
├── Reports
├── AIChats ── AIChatMessages
├── Insights
├── CashFlowForecasts
├── Notifications
├── AuditLogs
└── Anomalies

🔒 Security Implementation

Security LayerImplementation
AuthenticationClerk JWT + MFA
AuthorizationRBAC (Admin/Accountant/Employee/Viewer)
CSRF ProtectionOrigin/Host validation in middleware
Rate LimitingPer-IP sliding window (100 req/min default)
Input ValidationZod schemas on all API endpoints
SQL InjectionPrisma ORM parameterized queries
XSS PreventionNext.js built-in + CSP headers
Audit LoggingAll CRUD operations logged with user/IP
Sensitive DataPrisma field-level encryption ready
File UploadType validation, size limits, S3 signed URLs

🚀 Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+
  • OpenAI API key
  • Clerk account

1. Clone & Install

git clone https://github.com/imchine/FinTech-Solution.git
cd finsight-ai
npm install

2. Environment Setup

cp .env.example .env.local
# Fill in your API keys

3. Database Setup

# Apply schema
npx prisma migrate dev --name init
# Generate client
npx prisma generate

4. Run Development

npm run dev
# Open http://localhost:3000

5. Docker (Full Stack)

docker-compose up -d

Redis (optional)

Redis is optional but recommended for production and multi-instance deployments.

docker compose up -d redis
# set in .env.local:
REDIS_URL=redis://localhost:6379

When REDIS_URL is set:

  • Rate limiting — shared across API routes (/api/transactions, /api/invoices, /api/ai/chat, etc.)
  • Dashboard cache — metrics cached for 2 minutes; invalidated when transactions, expenses, or invoices change
  • Health checkGET /api/health reports whether Redis is configured

Without Redis, rate limits and dashboard metrics use in-process behaviour only.


📁 Folder Structure

finsight-ai/
├── src/
│ ├── app/
│ │ ├── (auth)/ # Sign in/up pages (Clerk)
│ │ ├── (dashboard)/ # All protected dashboard pages
│ │ │ ├── dashboard/ # Main financial dashboard
│ │ │ ├── invoices/ # Invoice management
│ │ │ ├── expenses/ # Expense tracking
│ │ │ ├── transactions/# Transaction ledger
│ │ │ ├── ai-assistant/# AI chatbot interface
│ │ │ ├── cash-flow/ # Cash flow & forecasting
│ │ │ ├── insights/ # AI insights engine
│ │ │ ├── reports/ # Financial reports
│ │ │ ├── bank-statements/ # Bank statement analyzer
│ │ │ └── settings/ # Account & org settings
│ │ └── api/ # All API routes
│ ├── components/
│ │ ├── ui/ # ShadCN UI components
│ │ ├── charts/ # Recharts wrappers
│ │ ├── dashboard/ # Dashboard-specific components
│ │ ├── layout/ # Sidebar, Header
│ │ └── shared/ # Providers, theme
│ ├── lib/
│ │ ├── prisma.ts # Database client
│ │ ├── auth.ts # Auth helpers & audit logging
│ │ ├── openai.ts # AI integration & RAG
│ │ ├── financial-calculations.ts # ALL financial math
│ │ ├── validations.ts # Zod schemas
│ │ ├── rate-limit.ts # API rate limiting
│ │ └── utils.ts # Utilities & formatters
│ ├── middleware.ts # Auth & security middleware
│ └── types/ # TypeScript types
├── prisma/
│ └── schema.prisma # Complete DB schema
├── docker-compose.yml # Full stack Docker setup
├── Dockerfile # Production container
└── .env.example # Environment template

📊 API Endpoints

MethodEndpointDescription
GET/api/healthHealth check
GET/api/dashboardDashboard metrics
GET/api/dashboard/trendsMonthly trends
GET/api/dashboard/categoriesExpense categories
GET/POST/api/invoicesList/create invoices
GET/PATCH/DELETE/api/invoices/[id]Invoice operations
GET/POST/api/expensesList/create expenses
GET/POST/api/transactionsList/create transactions
POST/api/ai/chatAI chat (SSE streaming)
GET/api/ai/chatChat history
GET/api/cash-flowHistorical + forecasts
GET/POST/api/reportsReport management
GET/api/insightsAI insights

🚢 Deployment

Vercel (Frontend)

vercel deploy --prod

Environment Variables (Production)

Set all variables from .env.example in your deployment platform.

Database Migration (Production)

npx prisma migrate deploy

🧪 Testing Strategy

  • Unit Tests: Financial calculation functions (Jest)
  • Integration Tests: API routes with Prisma mocks
  • E2E Tests: Playwright for critical user flows
  • Security Tests: OWASP ZAP scanning
  • Load Tests: k6 for API performance

📈 Performance

  • Server-side rendering for initial dashboard load
  • React Query caching (60s stale time)
  • Optimized Prisma queries with proper indexes
  • Streaming AI responses (SSE)
  • Image optimization via Next.js
  • Lazy loading of chart components

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make changes with tests
  4. Submit a PR

📄 License

MIT License — see LICENSE file.


Built with ❤️ for SMEs worldwide

About

FinTech AI Solution for SMEs to calculate financial values

Topics

Resources

Stars

132 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FinSight AI — AI Financial Assistant for SMEs

Production-grade SaaS financial intelligence platform powered by GPT-4o, Next.js 15, and PostgreSQL.

Next.jsTypeScriptPostgreSQLClerkOpenAI


🚀 Features

Core Modules

ModuleDescription
Financial DashboardReal-time revenue, expenses, profit, invoice metrics
Invoice ManagementCreate, send, track, record payments
Expense TrackingManual entry, CSV import, categorization
Transaction LedgerFull double-entry transaction history
Bank Statement AnalyzerUpload PDF/CSV, extract & categorize transactions
AI Financial AssistantRAG-based chatbot with real financial data context
AI Insights EngineAuto-detected anomalies, risks, opportunities
Cash Flow ForecastingDeterministic 3-month linear trend forecasts
Financial ReportsP&L, Expense Summary, Revenue Trends (PDF/Excel)
Settings & SecurityRBAC, audit logs, MFA, organization management

Critical Design Principle

AI NEVER calculates financial values. All calculations are deterministic and performed by the backend using Prisma queries. AI only generates explanations, insights, and narratives based on the pre-calculated data.


🏗️ Architecture

┌─────────────────────────────────────────────────────────┐
│ Next.js 15 App Router │
├──────────────────────┬──────────────────────────────────┤
│ Frontend (RSC) │ API Routes │
│ - Dashboard │ - /api/dashboard │
│ - Invoices │ - /api/invoices │
│ - Expenses │ - /api/expenses │
│ - AI Assistant │ - /api/ai/chat (SSE streaming) │
│ - Cash Flow │ - /api/cash-flow │
│ - Reports │ - /api/reports │
│ - Insights │ - /api/insights │
└──────────────────────┴──────────────────────────────────┘
│ │
Clerk Auth Prisma ORM
│ │
PostgreSQL DB OpenAI GPT-4o
│ │
Qdrant Vector DB RAG Pipeline

RAG Pipeline

User Question
→ Intent Classification (GPT-4o-mini)
→ Data Retrieval (Prisma queries = REAL numbers)
→ Context Assembly
→ OpenAI GPT-4o Response Generation
→ Streaming SSE to Frontend

📋 Tech Stack

Frontend

  • Next.js 15 (App Router, RSC, Streaming)
  • TypeScript 5
  • Tailwind CSS + ShadCN UI components
  • Recharts (interactive financial charts)
  • React Query (server state management)
  • Zustand (client state)

Backend

  • Next.js API Routes
  • Prisma ORM with PostgreSQL
  • Zod validation (all inputs)
  • Rate limiting via Redis when REDIS_URL is set (in-process fallback otherwise)
  • Redis-backed dashboard metrics cache with version invalidation on writes

AI

  • OpenAI GPT-4o (assistant responses)
  • OpenAI text-embedding-3-small (embeddings)
  • RAG architecture for financial context
  • Qdrant vector database

Auth & Security

  • Clerk Authentication (OAuth, MFA, RBAC)
  • OWASP Top 10 compliant
  • CSRF protection in middleware
  • SQL injection prevention (Prisma parameterized queries)
  • Complete audit logging

🗄️ Database Schema

Organizations ──┬── OrganizationMembers ── Users
├── Clients
├── Vendors
├── Categories
├── Transactions ── Categories
├── Invoices ─────┬── InvoiceItems
│ └── Payments
├── Expenses ── Categories
├── BankStatements ── Transactions
├── Reports
├── AIChats ── AIChatMessages
├── Insights
├── CashFlowForecasts
├── Notifications
├── AuditLogs
└── Anomalies

🔒 Security Implementation

Security LayerImplementation
AuthenticationClerk JWT + MFA
AuthorizationRBAC (Admin/Accountant/Employee/Viewer)
CSRF ProtectionOrigin/Host validation in middleware
Rate LimitingPer-IP sliding window (100 req/min default)
Input ValidationZod schemas on all API endpoints
SQL InjectionPrisma ORM parameterized queries
XSS PreventionNext.js built-in + CSP headers
Audit LoggingAll CRUD operations logged with user/IP
Sensitive DataPrisma field-level encryption ready
File UploadType validation, size limits, S3 signed URLs

🚀 Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+
  • OpenAI API key
  • Clerk account

1. Clone & Install

git clone https://github.com/imchine/FinTech-Solution.git
cd finsight-ai
npm install

2. Environment Setup

cp .env.example .env.local
# Fill in your API keys

3. Database Setup

# Apply schema
npx prisma migrate dev --name init
# Generate client
npx prisma generate

4. Run Development

npm run dev
# Open http://localhost:3000

5. Docker (Full Stack)

docker-compose up -d

Redis (optional)

Redis is optional but recommended for production and multi-instance deployments.

docker compose up -d redis
# set in .env.local:
REDIS_URL=redis://localhost:6379

When REDIS_URL is set:

  • Rate limiting — shared across API routes (/api/transactions, /api/invoices, /api/ai/chat, etc.)
  • Dashboard cache — metrics cached for 2 minutes; invalidated when transactions, expenses, or invoices change
  • Health checkGET /api/health reports whether Redis is configured

Without Redis, rate limits and dashboard metrics use in-process behaviour only.


📁 Folder Structure

finsight-ai/
├── src/
│ ├── app/
│ │ ├── (auth)/ # Sign in/up pages (Clerk)
│ │ ├── (dashboard)/ # All protected dashboard pages
│ │ │ ├── dashboard/ # Main financial dashboard
│ │ │ ├── invoices/ # Invoice management
│ │ │ ├── expenses/ # Expense tracking
│ │ │ ├── transactions/# Transaction ledger
│ │ │ ├── ai-assistant/# AI chatbot interface
│ │ │ ├── cash-flow/ # Cash flow & forecasting
│ │ │ ├── insights/ # AI insights engine
│ │ │ ├── reports/ # Financial reports
│ │ │ ├── bank-statements/ # Bank statement analyzer
│ │ │ └── settings/ # Account & org settings
│ │ └── api/ # All API routes
│ ├── components/
│ │ ├── ui/ # ShadCN UI components
│ │ ├── charts/ # Recharts wrappers
│ │ ├── dashboard/ # Dashboard-specific components
│ │ ├── layout/ # Sidebar, Header
│ │ └── shared/ # Providers, theme
│ ├── lib/
│ │ ├── prisma.ts # Database client
│ │ ├── auth.ts # Auth helpers & audit logging
│ │ ├── openai.ts # AI integration & RAG
│ │ ├── financial-calculations.ts # ALL financial math
│ │ ├── validations.ts # Zod schemas
│ │ ├── rate-limit.ts # API rate limiting
│ │ └── utils.ts # Utilities & formatters
│ ├── middleware.ts # Auth & security middleware
│ └── types/ # TypeScript types
├── prisma/
│ └── schema.prisma # Complete DB schema
├── docker-compose.yml # Full stack Docker setup
├── Dockerfile # Production container
└── .env.example # Environment template

📊 API Endpoints

MethodEndpointDescription
GET/api/healthHealth check
GET/api/dashboardDashboard metrics
GET/api/dashboard/trendsMonthly trends
GET/api/dashboard/categoriesExpense categories
GET/POST/api/invoicesList/create invoices
GET/PATCH/DELETE/api/invoices/[id]Invoice operations
GET/POST/api/expensesList/create expenses
GET/POST/api/transactionsList/create transactions
POST/api/ai/chatAI chat (SSE streaming)
GET/api/ai/chatChat history
GET/api/cash-flowHistorical + forecasts
GET/POST/api/reportsReport management
GET/api/insightsAI insights

🚢 Deployment

Vercel (Frontend)

vercel deploy --prod

Environment Variables (Production)

Set all variables from .env.example in your deployment platform.

Database Migration (Production)

npx prisma migrate deploy

🧪 Testing Strategy

  • Unit Tests: Financial calculation functions (Jest)
  • Integration Tests: API routes with Prisma mocks
  • E2E Tests: Playwright for critical user flows
  • Security Tests: OWASP ZAP scanning
  • Load Tests: k6 for API performance

📈 Performance

  • Server-side rendering for initial dashboard load
  • React Query caching (60s stale time)
  • Optimized Prisma queries with proper indexes
  • Streaming AI responses (SSE)
  • Image optimization via Next.js
  • Lazy loading of chart components

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make changes with tests
  4. Submit a PR

📄 License

MIT License — see LICENSE file.


Built with ❤️ for SMEs worldwide

About

FinTech AI Solution for SMEs to calculate financial values

Topics

Resources

Stars

132 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FinSight AI — AI Financial Assistant for SMEs

Production-grade SaaS financial intelligence platform powered by GPT-4o, Next.js 15, and PostgreSQL.

Next.jsTypeScriptPostgreSQLClerkOpenAI


🚀 Features

Core Modules

ModuleDescription
Financial DashboardReal-time revenue, expenses, profit, invoice metrics
Invoice ManagementCreate, send, track, record payments
Expense TrackingManual entry, CSV import, categorization
Transaction LedgerFull double-entry transaction history
Bank Statement AnalyzerUpload PDF/CSV, extract & categorize transactions
AI Financial AssistantRAG-based chatbot with real financial data context
AI Insights EngineAuto-detected anomalies, risks, opportunities
Cash Flow ForecastingDeterministic 3-month linear trend forecasts
Financial ReportsP&L, Expense Summary, Revenue Trends (PDF/Excel)
Settings & SecurityRBAC, audit logs, MFA, organization management

Critical Design Principle

AI NEVER calculates financial values. All calculations are deterministic and performed by the backend using Prisma queries. AI only generates explanations, insights, and narratives based on the pre-calculated data.


🏗️ Architecture

┌─────────────────────────────────────────────────────────┐
│ Next.js 15 App Router │
├──────────────────────┬──────────────────────────────────┤
│ Frontend (RSC) │ API Routes │
│ - Dashboard │ - /api/dashboard │
│ - Invoices │ - /api/invoices │
│ - Expenses │ - /api/expenses │
│ - AI Assistant │ - /api/ai/chat (SSE streaming) │
│ - Cash Flow │ - /api/cash-flow │
│ - Reports │ - /api/reports │
│ - Insights │ - /api/insights │
└──────────────────────┴──────────────────────────────────┘
│ │
Clerk Auth Prisma ORM
│ │
PostgreSQL DB OpenAI GPT-4o
│ │
Qdrant Vector DB RAG Pipeline

RAG Pipeline

User Question
→ Intent Classification (GPT-4o-mini)
→ Data Retrieval (Prisma queries = REAL numbers)
→ Context Assembly
→ OpenAI GPT-4o Response Generation
→ Streaming SSE to Frontend

📋 Tech Stack

Frontend

  • Next.js 15 (App Router, RSC, Streaming)
  • TypeScript 5
  • Tailwind CSS + ShadCN UI components
  • Recharts (interactive financial charts)
  • React Query (server state management)
  • Zustand (client state)

Backend

  • Next.js API Routes
  • Prisma ORM with PostgreSQL
  • Zod validation (all inputs)
  • Rate limiting via Redis when REDIS_URL is set (in-process fallback otherwise)
  • Redis-backed dashboard metrics cache with version invalidation on writes

AI

  • OpenAI GPT-4o (assistant responses)
  • OpenAI text-embedding-3-small (embeddings)
  • RAG architecture for financial context
  • Qdrant vector database

Auth & Security

  • Clerk Authentication (OAuth, MFA, RBAC)
  • OWASP Top 10 compliant
  • CSRF protection in middleware
  • SQL injection prevention (Prisma parameterized queries)
  • Complete audit logging

🗄️ Database Schema

Organizations ──┬── OrganizationMembers ── Users
├── Clients
├── Vendors
├── Categories
├── Transactions ── Categories
├── Invoices ─────┬── InvoiceItems
│ └── Payments
├── Expenses ── Categories
├── BankStatements ── Transactions
├── Reports
├── AIChats ── AIChatMessages
├── Insights
├── CashFlowForecasts
├── Notifications
├── AuditLogs
└── Anomalies

🔒 Security Implementation

Security LayerImplementation
AuthenticationClerk JWT + MFA
AuthorizationRBAC (Admin/Accountant/Employee/Viewer)
CSRF ProtectionOrigin/Host validation in middleware
Rate LimitingPer-IP sliding window (100 req/min default)
Input ValidationZod schemas on all API endpoints
SQL InjectionPrisma ORM parameterized queries
XSS PreventionNext.js built-in + CSP headers
Audit LoggingAll CRUD operations logged with user/IP
Sensitive DataPrisma field-level encryption ready
File UploadType validation, size limits, S3 signed URLs

🚀 Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+
  • OpenAI API key
  • Clerk account

1. Clone & Install

git clone https://github.com/imchine/FinTech-Solution.git
cd finsight-ai
npm install

2. Environment Setup

cp .env.example .env.local
# Fill in your API keys

3. Database Setup

# Apply schema
npx prisma migrate dev --name init
# Generate client
npx prisma generate

4. Run Development

npm run dev
# Open http://localhost:3000

5. Docker (Full Stack)

docker-compose up -d

Redis (optional)

Redis is optional but recommended for production and multi-instance deployments.

docker compose up -d redis
# set in .env.local:
REDIS_URL=redis://localhost:6379

When REDIS_URL is set:

  • Rate limiting — shared across API routes (/api/transactions, /api/invoices, /api/ai/chat, etc.)
  • Dashboard cache — metrics cached for 2 minutes; invalidated when transactions, expenses, or invoices change
  • Health checkGET /api/health reports whether Redis is configured

Without Redis, rate limits and dashboard metrics use in-process behaviour only.


📁 Folder Structure

finsight-ai/
├── src/
│ ├── app/
│ │ ├── (auth)/ # Sign in/up pages (Clerk)
│ │ ├── (dashboard)/ # All protected dashboard pages
│ │ │ ├── dashboard/ # Main financial dashboard
│ │ │ ├── invoices/ # Invoice management
│ │ │ ├── expenses/ # Expense tracking
│ │ │ ├── transactions/# Transaction ledger
│ │ │ ├── ai-assistant/# AI chatbot interface
│ │ │ ├── cash-flow/ # Cash flow & forecasting
│ │ │ ├── insights/ # AI insights engine
│ │ │ ├── reports/ # Financial reports
│ │ │ ├── bank-statements/ # Bank statement analyzer
│ │ │ └── settings/ # Account & org settings
│ │ └── api/ # All API routes
│ ├── components/
│ │ ├── ui/ # ShadCN UI components
│ │ ├── charts/ # Recharts wrappers
│ │ ├── dashboard/ # Dashboard-specific components
│ │ ├── layout/ # Sidebar, Header
│ │ └── shared/ # Providers, theme
│ ├── lib/
│ │ ├── prisma.ts # Database client
│ │ ├── auth.ts # Auth helpers & audit logging
│ │ ├── openai.ts # AI integration & RAG
│ │ ├── financial-calculations.ts # ALL financial math
│ │ ├── validations.ts # Zod schemas
│ │ ├── rate-limit.ts # API rate limiting
│ │ └── utils.ts # Utilities & formatters
│ ├── middleware.ts # Auth & security middleware
│ └── types/ # TypeScript types
├── prisma/
│ └── schema.prisma # Complete DB schema
├── docker-compose.yml # Full stack Docker setup
├── Dockerfile # Production container
└── .env.example # Environment template

📊 API Endpoints

MethodEndpointDescription
GET/api/healthHealth check
GET/api/dashboardDashboard metrics
GET/api/dashboard/trendsMonthly trends
GET/api/dashboard/categoriesExpense categories
GET/POST/api/invoicesList/create invoices
GET/PATCH/DELETE/api/invoices/[id]Invoice operations
GET/POST/api/expensesList/create expenses
GET/POST/api/transactionsList/create transactions
POST/api/ai/chatAI chat (SSE streaming)
GET/api/ai/chatChat history
GET/api/cash-flowHistorical + forecasts
GET/POST/api/reportsReport management
GET/api/insightsAI insights

🚢 Deployment

Vercel (Frontend)

vercel deploy --prod

Environment Variables (Production)

Set all variables from .env.example in your deployment platform.

Database Migration (Production)

npx prisma migrate deploy

🧪 Testing Strategy

  • Unit Tests: Financial calculation functions (Jest)
  • Integration Tests: API routes with Prisma mocks
  • E2E Tests: Playwright for critical user flows
  • Security Tests: OWASP ZAP scanning
  • Load Tests: k6 for API performance

📈 Performance

  • Server-side rendering for initial dashboard load
  • React Query caching (60s stale time)
  • Optimized Prisma queries with proper indexes
  • Streaming AI responses (SSE)
  • Image optimization via Next.js
  • Lazy loading of chart components

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make changes with tests
  4. Submit a PR

📄 License

MIT License — see LICENSE file.


Built with ❤️ for SMEs worldwide

About

FinTech AI Solution for SMEs to calculate financial values

Topics

Resources

Stars

132 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

FinSight AI — AI Financial Assistant for SMEs

Production-grade SaaS financial intelligence platform powered by GPT-4o, Next.js 15, and PostgreSQL.

Next.jsTypeScriptPostgreSQLClerkOpenAI


🚀 Features

Core Modules

ModuleDescription
Financial DashboardReal-time revenue, expenses, profit, invoice metrics
Invoice ManagementCreate, send, track, record payments
Expense TrackingManual entry, CSV import, categorization
Transaction LedgerFull double-entry transaction history
Bank Statement AnalyzerUpload PDF/CSV, extract & categorize transactions
AI Financial AssistantRAG-based chatbot with real financial data context
AI Insights EngineAuto-detected anomalies, risks, opportunities
Cash Flow ForecastingDeterministic 3-month linear trend forecasts
Financial ReportsP&L, Expense Summary, Revenue Trends (PDF/Excel)
Settings & SecurityRBAC, audit logs, MFA, organization management

Critical Design Principle

AI NEVER calculates financial values. All calculations are deterministic and performed by the backend using Prisma queries. AI only generates explanations, insights, and narratives based on the pre-calculated data.


🏗️ Architecture

┌─────────────────────────────────────────────────────────┐
│ Next.js 15 App Router │
├──────────────────────┬──────────────────────────────────┤
│ Frontend (RSC) │ API Routes │
│ - Dashboard │ - /api/dashboard │
│ - Invoices │ - /api/invoices │
│ - Expenses │ - /api/expenses │
│ - AI Assistant │ - /api/ai/chat (SSE streaming) │
│ - Cash Flow │ - /api/cash-flow │
│ - Reports │ - /api/reports │
│ - Insights │ - /api/insights │
└──────────────────────┴──────────────────────────────────┘
│ │
Clerk Auth Prisma ORM
│ │
PostgreSQL DB OpenAI GPT-4o
│ │
Qdrant Vector DB RAG Pipeline

RAG Pipeline

User Question
→ Intent Classification (GPT-4o-mini)
→ Data Retrieval (Prisma queries = REAL numbers)
→ Context Assembly
→ OpenAI GPT-4o Response Generation
→ Streaming SSE to Frontend

📋 Tech Stack

Frontend

  • Next.js 15 (App Router, RSC, Streaming)
  • TypeScript 5
  • Tailwind CSS + ShadCN UI components
  • Recharts (interactive financial charts)
  • React Query (server state management)
  • Zustand (client state)

Backend

  • Next.js API Routes
  • Prisma ORM with PostgreSQL
  • Zod validation (all inputs)
  • Rate limiting via Redis when REDIS_URL is set (in-process fallback otherwise)
  • Redis-backed dashboard metrics cache with version invalidation on writes

AI

  • OpenAI GPT-4o (assistant responses)
  • OpenAI text-embedding-3-small (embeddings)
  • RAG architecture for financial context
  • Qdrant vector database

Auth & Security

  • Clerk Authentication (OAuth, MFA, RBAC)
  • OWASP Top 10 compliant
  • CSRF protection in middleware
  • SQL injection prevention (Prisma parameterized queries)
  • Complete audit logging

🗄️ Database Schema

Organizations ──┬── OrganizationMembers ── Users
├── Clients
├── Vendors
├── Categories
├── Transactions ── Categories
├── Invoices ─────┬── InvoiceItems
│ └── Payments
├── Expenses ── Categories
├── BankStatements ── Transactions
├── Reports
├── AIChats ── AIChatMessages
├── Insights
├── CashFlowForecasts
├── Notifications
├── AuditLogs
└── Anomalies

🔒 Security Implementation

Security LayerImplementation
AuthenticationClerk JWT + MFA
AuthorizationRBAC (Admin/Accountant/Employee/Viewer)
CSRF ProtectionOrigin/Host validation in middleware
Rate LimitingPer-IP sliding window (100 req/min default)
Input ValidationZod schemas on all API endpoints
SQL InjectionPrisma ORM parameterized queries
XSS PreventionNext.js built-in + CSP headers
Audit LoggingAll CRUD operations logged with user/IP
Sensitive DataPrisma field-level encryption ready
File UploadType validation, size limits, S3 signed URLs

🚀 Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+
  • OpenAI API key
  • Clerk account

1. Clone & Install

git clone https://github.com/imchine/FinTech-Solution.git
cd finsight-ai
npm install

2. Environment Setup

cp .env.example .env.local
# Fill in your API keys

3. Database Setup

# Apply schema
npx prisma migrate dev --name init
# Generate client
npx prisma generate

4. Run Development

npm run dev
# Open http://localhost:3000

5. Docker (Full Stack)

docker-compose up -d

Redis (optional)

Redis is optional but recommended for production and multi-instance deployments.

docker compose up -d redis
# set in .env.local:
REDIS_URL=redis://localhost:6379

When REDIS_URL is set:

  • Rate limiting — shared across API routes (/api/transactions, /api/invoices, /api/ai/chat, etc.)
  • Dashboard cache — metrics cached for 2 minutes; invalidated when transactions, expenses, or invoices change
  • Health checkGET /api/health reports whether Redis is configured

Without Redis, rate limits and dashboard metrics use in-process behaviour only.


📁 Folder Structure

finsight-ai/
├── src/
│ ├── app/
│ │ ├── (auth)/ # Sign in/up pages (Clerk)
│ │ ├── (dashboard)/ # All protected dashboard pages
│ │ │ ├── dashboard/ # Main financial dashboard
│ │ │ ├── invoices/ # Invoice management
│ │ │ ├── expenses/ # Expense tracking
│ │ │ ├── transactions/# Transaction ledger
│ │ │ ├── ai-assistant/# AI chatbot interface
│ │ │ ├── cash-flow/ # Cash flow & forecasting
│ │ │ ├── insights/ # AI insights engine
│ │ │ ├── reports/ # Financial reports
│ │ │ ├── bank-statements/ # Bank statement analyzer
│ │ │ └── settings/ # Account & org settings
│ │ └── api/ # All API routes
│ ├── components/
│ │ ├── ui/ # ShadCN UI components
│ │ ├── charts/ # Recharts wrappers
│ │ ├── dashboard/ # Dashboard-specific components
│ │ ├── layout/ # Sidebar, Header
│ │ └── shared/ # Providers, theme
│ ├── lib/
│ │ ├── prisma.ts # Database client
│ │ ├── auth.ts # Auth helpers & audit logging
│ │ ├── openai.ts # AI integration & RAG
│ │ ├── financial-calculations.ts # ALL financial math
│ │ ├── validations.ts # Zod schemas
│ │ ├── rate-limit.ts # API rate limiting
│ │ └── utils.ts # Utilities & formatters
│ ├── middleware.ts # Auth & security middleware
│ └── types/ # TypeScript types
├── prisma/
│ └── schema.prisma # Complete DB schema
├── docker-compose.yml # Full stack Docker setup
├── Dockerfile # Production container
└── .env.example # Environment template

📊 API Endpoints

MethodEndpointDescription
GET/api/healthHealth check
GET/api/dashboardDashboard metrics
GET/api/dashboard/trendsMonthly trends
GET/api/dashboard/categoriesExpense categories
GET/POST/api/invoicesList/create invoices
GET/PATCH/DELETE/api/invoices/[id]Invoice operations
GET/POST/api/expensesList/create expenses
GET/POST/api/transactionsList/create transactions
POST/api/ai/chatAI chat (SSE streaming)
GET/api/ai/chatChat history
GET/api/cash-flowHistorical + forecasts
GET/POST/api/reportsReport management
GET/api/insightsAI insights

🚢 Deployment

Vercel (Frontend)

vercel deploy --prod

Environment Variables (Production)

Set all variables from .env.example in your deployment platform.

Database Migration (Production)

npx prisma migrate deploy

🧪 Testing Strategy

  • Unit Tests: Financial calculation functions (Jest)
  • Integration Tests: API routes with Prisma mocks
  • E2E Tests: Playwright for critical user flows
  • Security Tests: OWASP ZAP scanning
  • Load Tests: k6 for API performance

📈 Performance

  • Server-side rendering for initial dashboard load
  • React Query caching (60s stale time)
  • Optimized Prisma queries with proper indexes
  • Streaming AI responses (SSE)
  • Image optimization via Next.js
  • Lazy loading of chart components

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make changes with tests
  4. Submit a PR

📄 License

MIT License — see LICENSE file.


Built with ❤️ for SMEs worldwide

About

FinTech AI Solution for SMEs to calculate financial values

Topics

Resources

Stars

132 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FinSight AI — AI Financial Assistant for SMEs

Production-grade SaaS financial intelligence platform powered by GPT-4o, Next.js 15, and PostgreSQL.

Next.jsTypeScriptPostgreSQLClerkOpenAI


🚀 Features

Core Modules

ModuleDescription
Financial DashboardReal-time revenue, expenses, profit, invoice metrics
Invoice ManagementCreate, send, track, record payments
Expense TrackingManual entry, CSV import, categorization
Transaction LedgerFull double-entry transaction history
Bank Statement AnalyzerUpload PDF/CSV, extract & categorize transactions
AI Financial AssistantRAG-based chatbot with real financial data context
AI Insights EngineAuto-detected anomalies, risks, opportunities
Cash Flow ForecastingDeterministic 3-month linear trend forecasts
Financial ReportsP&L, Expense Summary, Revenue Trends (PDF/Excel)
Settings & SecurityRBAC, audit logs, MFA, organization management

Critical Design Principle

AI NEVER calculates financial values. All calculations are deterministic and performed by the backend using Prisma queries. AI only generates explanations, insights, and narratives based on the pre-calculated data.


🏗️ Architecture

┌─────────────────────────────────────────────────────────┐
│ Next.js 15 App Router │
├──────────────────────┬──────────────────────────────────┤
│ Frontend (RSC) │ API Routes │
│ - Dashboard │ - /api/dashboard │
│ - Invoices │ - /api/invoices │
│ - Expenses │ - /api/expenses │
│ - AI Assistant │ - /api/ai/chat (SSE streaming) │
│ - Cash Flow │ - /api/cash-flow │
│ - Reports │ - /api/reports │
│ - Insights │ - /api/insights │
└──────────────────────┴──────────────────────────────────┘
│ │
Clerk Auth Prisma ORM
│ │
PostgreSQL DB OpenAI GPT-4o
│ │
Qdrant Vector DB RAG Pipeline

RAG Pipeline

User Question
→ Intent Classification (GPT-4o-mini)
→ Data Retrieval (Prisma queries = REAL numbers)
→ Context Assembly
→ OpenAI GPT-4o Response Generation
→ Streaming SSE to Frontend

📋 Tech Stack

Frontend

  • Next.js 15 (App Router, RSC, Streaming)
  • TypeScript 5
  • Tailwind CSS + ShadCN UI components
  • Recharts (interactive financial charts)
  • React Query (server state management)
  • Zustand (client state)

Backend

  • Next.js API Routes
  • Prisma ORM with PostgreSQL
  • Zod validation (all inputs)
  • Rate limiting via Redis when REDIS_URL is set (in-process fallback otherwise)
  • Redis-backed dashboard metrics cache with version invalidation on writes

AI

  • OpenAI GPT-4o (assistant responses)
  • OpenAI text-embedding-3-small (embeddings)
  • RAG architecture for financial context
  • Qdrant vector database

Auth & Security

  • Clerk Authentication (OAuth, MFA, RBAC)
  • OWASP Top 10 compliant
  • CSRF protection in middleware
  • SQL injection prevention (Prisma parameterized queries)
  • Complete audit logging

🗄️ Database Schema

Organizations ──┬── OrganizationMembers ── Users
├── Clients
├── Vendors
├── Categories
├── Transactions ── Categories
├── Invoices ─────┬── InvoiceItems
│ └── Payments
├── Expenses ── Categories
├── BankStatements ── Transactions
├── Reports
├── AIChats ── AIChatMessages
├── Insights
├── CashFlowForecasts
├── Notifications
├── AuditLogs
└── Anomalies

🔒 Security Implementation

Security LayerImplementation
AuthenticationClerk JWT + MFA
AuthorizationRBAC (Admin/Accountant/Employee/Viewer)
CSRF ProtectionOrigin/Host validation in middleware
Rate LimitingPer-IP sliding window (100 req/min default)
Input ValidationZod schemas on all API endpoints
SQL InjectionPrisma ORM parameterized queries
XSS PreventionNext.js built-in + CSP headers
Audit LoggingAll CRUD operations logged with user/IP
Sensitive DataPrisma field-level encryption ready
File UploadType validation, size limits, S3 signed URLs

🚀 Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+
  • OpenAI API key
  • Clerk account

1. Clone & Install

git clone https://github.com/imchine/FinTech-Solution.git
cd finsight-ai
npm install

2. Environment Setup

cp .env.example .env.local
# Fill in your API keys

3. Database Setup

# Apply schema
npx prisma migrate dev --name init
# Generate client
npx prisma generate

4. Run Development

npm run dev
# Open http://localhost:3000

5. Docker (Full Stack)

docker-compose up -d

Redis (optional)

Redis is optional but recommended for production and multi-instance deployments.

docker compose up -d redis
# set in .env.local:
REDIS_URL=redis://localhost:6379

When REDIS_URL is set:

  • Rate limiting — shared across API routes (/api/transactions, /api/invoices, /api/ai/chat, etc.)
  • Dashboard cache — metrics cached for 2 minutes; invalidated when transactions, expenses, or invoices change
  • Health checkGET /api/health reports whether Redis is configured

Without Redis, rate limits and dashboard metrics use in-process behaviour only.


📁 Folder Structure

finsight-ai/
├── src/
│ ├── app/
│ │ ├── (auth)/ # Sign in/up pages (Clerk)
│ │ ├── (dashboard)/ # All protected dashboard pages
│ │ │ ├── dashboard/ # Main financial dashboard
│ │ │ ├── invoices/ # Invoice management
│ │ │ ├── expenses/ # Expense tracking
│ │ │ ├── transactions/# Transaction ledger
│ │ │ ├── ai-assistant/# AI chatbot interface
│ │ │ ├── cash-flow/ # Cash flow & forecasting
│ │ │ ├── insights/ # AI insights engine
│ │ │ ├── reports/ # Financial reports
│ │ │ ├── bank-statements/ # Bank statement analyzer
│ │ │ └── settings/ # Account & org settings
│ │ └── api/ # All API routes
│ ├── components/
│ │ ├── ui/ # ShadCN UI components
│ │ ├── charts/ # Recharts wrappers
│ │ ├── dashboard/ # Dashboard-specific components
│ │ ├── layout/ # Sidebar, Header
│ │ └── shared/ # Providers, theme
│ ├── lib/
│ │ ├── prisma.ts # Database client
│ │ ├── auth.ts # Auth helpers & audit logging
│ │ ├── openai.ts # AI integration & RAG
│ │ ├── financial-calculations.ts # ALL financial math
│ │ ├── validations.ts # Zod schemas
│ │ ├── rate-limit.ts # API rate limiting
│ │ └── utils.ts # Utilities & formatters
│ ├── middleware.ts # Auth & security middleware
│ └── types/ # TypeScript types
├── prisma/
│ └── schema.prisma # Complete DB schema
├── docker-compose.yml # Full stack Docker setup
├── Dockerfile # Production container
└── .env.example # Environment template

📊 API Endpoints

MethodEndpointDescription
GET/api/healthHealth check
GET/api/dashboardDashboard metrics
GET/api/dashboard/trendsMonthly trends
GET/api/dashboard/categoriesExpense categories
GET/POST/api/invoicesList/create invoices
GET/PATCH/DELETE/api/invoices/[id]Invoice operations
GET/POST/api/expensesList/create expenses
GET/POST/api/transactionsList/create transactions
POST/api/ai/chatAI chat (SSE streaming)
GET/api/ai/chatChat history
GET/api/cash-flowHistorical + forecasts
GET/POST/api/reportsReport management
GET/api/insightsAI insights

🚢 Deployment

Vercel (Frontend)

vercel deploy --prod

Environment Variables (Production)

Set all variables from .env.example in your deployment platform.

Database Migration (Production)

npx prisma migrate deploy

🧪 Testing Strategy

  • Unit Tests: Financial calculation functions (Jest)
  • Integration Tests: API routes with Prisma mocks
  • E2E Tests: Playwright for critical user flows
  • Security Tests: OWASP ZAP scanning
  • Load Tests: k6 for API performance

📈 Performance

  • Server-side rendering for initial dashboard load
  • React Query caching (60s stale time)
  • Optimized Prisma queries with proper indexes
  • Streaming AI responses (SSE)
  • Image optimization via Next.js
  • Lazy loading of chart components

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make changes with tests
  4. Submit a PR

📄 License

MIT License — see LICENSE file.


Built with ❤️ for SMEs worldwide

About

FinTech AI Solution for SMEs to calculate financial values

Topics

Resources

Stars

132 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

FinSight AI — AI Financial Assistant for SMEs

Production-grade SaaS financial intelligence platform powered by GPT-4o, Next.js 15, and PostgreSQL.

Next.jsTypeScriptPostgreSQLClerkOpenAI


🚀 Features

Core Modules

ModuleDescription
Financial DashboardReal-time revenue, expenses, profit, invoice metrics
Invoice ManagementCreate, send, track, record payments
Expense TrackingManual entry, CSV import, categorization
Transaction LedgerFull double-entry transaction history
Bank Statement AnalyzerUpload PDF/CSV, extract & categorize transactions
AI Financial AssistantRAG-based chatbot with real financial data context
AI Insights EngineAuto-detected anomalies, risks, opportunities
Cash Flow ForecastingDeterministic 3-month linear trend forecasts
Financial ReportsP&L, Expense Summary, Revenue Trends (PDF/Excel)
Settings & SecurityRBAC, audit logs, MFA, organization management

Critical Design Principle

AI NEVER calculates financial values. All calculations are deterministic and performed by the backend using Prisma queries. AI only generates explanations, insights, and narratives based on the pre-calculated data.


🏗️ Architecture

┌─────────────────────────────────────────────────────────┐
│ Next.js 15 App Router │
├──────────────────────┬──────────────────────────────────┤
│ Frontend (RSC) │ API Routes │
│ - Dashboard │ - /api/dashboard │
│ - Invoices │ - /api/invoices │
│ - Expenses │ - /api/expenses │
│ - AI Assistant │ - /api/ai/chat (SSE streaming) │
│ - Cash Flow │ - /api/cash-flow │
│ - Reports │ - /api/reports │
│ - Insights │ - /api/insights │
└──────────────────────┴──────────────────────────────────┘
│ │
Clerk Auth Prisma ORM
│ │
PostgreSQL DB OpenAI GPT-4o
│ │
Qdrant Vector DB RAG Pipeline

RAG Pipeline

User Question
→ Intent Classification (GPT-4o-mini)
→ Data Retrieval (Prisma queries = REAL numbers)
→ Context Assembly
→ OpenAI GPT-4o Response Generation
→ Streaming SSE to Frontend

📋 Tech Stack

Frontend

  • Next.js 15 (App Router, RSC, Streaming)
  • TypeScript 5
  • Tailwind CSS + ShadCN UI components
  • Recharts (interactive financial charts)
  • React Query (server state management)
  • Zustand (client state)

Backend

  • Next.js API Routes
  • Prisma ORM with PostgreSQL
  • Zod validation (all inputs)
  • Rate limiting via Redis when REDIS_URL is set (in-process fallback otherwise)
  • Redis-backed dashboard metrics cache with version invalidation on writes

AI

  • OpenAI GPT-4o (assistant responses)
  • OpenAI text-embedding-3-small (embeddings)
  • RAG architecture for financial context
  • Qdrant vector database

Auth & Security

  • Clerk Authentication (OAuth, MFA, RBAC)
  • OWASP Top 10 compliant
  • CSRF protection in middleware
  • SQL injection prevention (Prisma parameterized queries)
  • Complete audit logging

🗄️ Database Schema

Organizations ──┬── OrganizationMembers ── Users
├── Clients
├── Vendors
├── Categories
├── Transactions ── Categories
├── Invoices ─────┬── InvoiceItems
│ └── Payments
├── Expenses ── Categories
├── BankStatements ── Transactions
├── Reports
├── AIChats ── AIChatMessages
├── Insights
├── CashFlowForecasts
├── Notifications
├── AuditLogs
└── Anomalies

🔒 Security Implementation

Security LayerImplementation
AuthenticationClerk JWT + MFA
AuthorizationRBAC (Admin/Accountant/Employee/Viewer)
CSRF ProtectionOrigin/Host validation in middleware
Rate LimitingPer-IP sliding window (100 req/min default)
Input ValidationZod schemas on all API endpoints
SQL InjectionPrisma ORM parameterized queries
XSS PreventionNext.js built-in + CSP headers
Audit LoggingAll CRUD operations logged with user/IP
Sensitive DataPrisma field-level encryption ready
File UploadType validation, size limits, S3 signed URLs

🚀 Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+
  • OpenAI API key
  • Clerk account

1. Clone & Install

git clone https://github.com/imchine/FinTech-Solution.git
cd finsight-ai
npm install

2. Environment Setup

cp .env.example .env.local
# Fill in your API keys

3. Database Setup

# Apply schema
npx prisma migrate dev --name init
# Generate client
npx prisma generate

4. Run Development

npm run dev
# Open http://localhost:3000

5. Docker (Full Stack)

docker-compose up -d

Redis (optional)

Redis is optional but recommended for production and multi-instance deployments.

docker compose up -d redis
# set in .env.local:
REDIS_URL=redis://localhost:6379

When REDIS_URL is set:

  • Rate limiting — shared across API routes (/api/transactions, /api/invoices, /api/ai/chat, etc.)
  • Dashboard cache — metrics cached for 2 minutes; invalidated when transactions, expenses, or invoices change
  • Health checkGET /api/health reports whether Redis is configured

Without Redis, rate limits and dashboard metrics use in-process behaviour only.


📁 Folder Structure

finsight-ai/
├── src/
│ ├── app/
│ │ ├── (auth)/ # Sign in/up pages (Clerk)
│ │ ├── (dashboard)/ # All protected dashboard pages
│ │ │ ├── dashboard/ # Main financial dashboard
│ │ │ ├── invoices/ # Invoice management
│ │ │ ├── expenses/ # Expense tracking
│ │ │ ├── transactions/# Transaction ledger
│ │ │ ├── ai-assistant/# AI chatbot interface
│ │ │ ├── cash-flow/ # Cash flow & forecasting
│ │ │ ├── insights/ # AI insights engine
│ │ │ ├── reports/ # Financial reports
│ │ │ ├── bank-statements/ # Bank statement analyzer
│ │ │ └── settings/ # Account & org settings
│ │ └── api/ # All API routes
│ ├── components/
│ │ ├── ui/ # ShadCN UI components
│ │ ├── charts/ # Recharts wrappers
│ │ ├── dashboard/ # Dashboard-specific components
│ │ ├── layout/ # Sidebar, Header
│ │ └── shared/ # Providers, theme
│ ├── lib/
│ │ ├── prisma.ts # Database client
│ │ ├── auth.ts # Auth helpers & audit logging
│ │ ├── openai.ts # AI integration & RAG
│ │ ├── financial-calculations.ts # ALL financial math
│ │ ├── validations.ts # Zod schemas
│ │ ├── rate-limit.ts # API rate limiting
│ │ └── utils.ts # Utilities & formatters
│ ├── middleware.ts # Auth & security middleware
│ └── types/ # TypeScript types
├── prisma/
│ └── schema.prisma # Complete DB schema
├── docker-compose.yml # Full stack Docker setup
├── Dockerfile # Production container
└── .env.example # Environment template

📊 API Endpoints

MethodEndpointDescription
GET/api/healthHealth check
GET/api/dashboardDashboard metrics
GET/api/dashboard/trendsMonthly trends
GET/api/dashboard/categoriesExpense categories
GET/POST/api/invoicesList/create invoices
GET/PATCH/DELETE/api/invoices/[id]Invoice operations
GET/POST/api/expensesList/create expenses
GET/POST/api/transactionsList/create transactions
POST/api/ai/chatAI chat (SSE streaming)
GET/api/ai/chatChat history
GET/api/cash-flowHistorical + forecasts
GET/POST/api/reportsReport management
GET/api/insightsAI insights

🚢 Deployment

Vercel (Frontend)

vercel deploy --prod

Environment Variables (Production)

Set all variables from .env.example in your deployment platform.

Database Migration (Production)

npx prisma migrate deploy

🧪 Testing Strategy

  • Unit Tests: Financial calculation functions (Jest)
  • Integration Tests: API routes with Prisma mocks
  • E2E Tests: Playwright for critical user flows
  • Security Tests: OWASP ZAP scanning
  • Load Tests: k6 for API performance

📈 Performance

  • Server-side rendering for initial dashboard load
  • React Query caching (60s stale time)
  • Optimized Prisma queries with proper indexes
  • Streaming AI responses (SSE)
  • Image optimization via Next.js
  • Lazy loading of chart components

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make changes with tests
  4. Submit a PR

📄 License

MIT License — see LICENSE file.


Built with ❤️ for SMEs worldwide

About

FinTech AI Solution for SMEs to calculate financial values

Topics

Resources

Stars

132 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

FinSight AI — AI Financial Assistant for SMEs

Production-grade SaaS financial intelligence platform powered by GPT-4o, Next.js 15, and PostgreSQL.

Next.jsTypeScriptPostgreSQLClerkOpenAI


🚀 Features

Core Modules

ModuleDescription
Financial DashboardReal-time revenue, expenses, profit, invoice metrics
Invoice ManagementCreate, send, track, record payments
Expense TrackingManual entry, CSV import, categorization
Transaction LedgerFull double-entry transaction history
Bank Statement AnalyzerUpload PDF/CSV, extract & categorize transactions
AI Financial AssistantRAG-based chatbot with real financial data context
AI Insights EngineAuto-detected anomalies, risks, opportunities
Cash Flow ForecastingDeterministic 3-month linear trend forecasts
Financial ReportsP&L, Expense Summary, Revenue Trends (PDF/Excel)
Settings & SecurityRBAC, audit logs, MFA, organization management

Critical Design Principle

AI NEVER calculates financial values. All calculations are deterministic and performed by the backend using Prisma queries. AI only generates explanations, insights, and narratives based on the pre-calculated data.


🏗️ Architecture

┌─────────────────────────────────────────────────────────┐
│ Next.js 15 App Router │
├──────────────────────┬──────────────────────────────────┤
│ Frontend (RSC) │ API Routes │
│ - Dashboard │ - /api/dashboard │
│ - Invoices │ - /api/invoices │
│ - Expenses │ - /api/expenses │
│ - AI Assistant │ - /api/ai/chat (SSE streaming) │
│ - Cash Flow │ - /api/cash-flow │
│ - Reports │ - /api/reports │
│ - Insights │ - /api/insights │
└──────────────────────┴──────────────────────────────────┘
│ │
Clerk Auth Prisma ORM
│ │
PostgreSQL DB OpenAI GPT-4o
│ │
Qdrant Vector DB RAG Pipeline

RAG Pipeline

User Question
→ Intent Classification (GPT-4o-mini)
→ Data Retrieval (Prisma queries = REAL numbers)
→ Context Assembly
→ OpenAI GPT-4o Response Generation
→ Streaming SSE to Frontend

📋 Tech Stack

Frontend

  • Next.js 15 (App Router, RSC, Streaming)
  • TypeScript 5
  • Tailwind CSS + ShadCN UI components
  • Recharts (interactive financial charts)
  • React Query (server state management)
  • Zustand (client state)

Backend

  • Next.js API Routes
  • Prisma ORM with PostgreSQL
  • Zod validation (all inputs)
  • Rate limiting via Redis when REDIS_URL is set (in-process fallback otherwise)
  • Redis-backed dashboard metrics cache with version invalidation on writes

AI

  • OpenAI GPT-4o (assistant responses)
  • OpenAI text-embedding-3-small (embeddings)
  • RAG architecture for financial context
  • Qdrant vector database

Auth & Security

  • Clerk Authentication (OAuth, MFA, RBAC)
  • OWASP Top 10 compliant
  • CSRF protection in middleware
  • SQL injection prevention (Prisma parameterized queries)
  • Complete audit logging

🗄️ Database Schema

Organizations ──┬── OrganizationMembers ── Users
├── Clients
├── Vendors
├── Categories
├── Transactions ── Categories
├── Invoices ─────┬── InvoiceItems
│ └── Payments
├── Expenses ── Categories
├── BankStatements ── Transactions
├── Reports
├── AIChats ── AIChatMessages
├── Insights
├── CashFlowForecasts
├── Notifications
├── AuditLogs
└── Anomalies

🔒 Security Implementation

Security LayerImplementation
AuthenticationClerk JWT + MFA
AuthorizationRBAC (Admin/Accountant/Employee/Viewer)
CSRF ProtectionOrigin/Host validation in middleware
Rate LimitingPer-IP sliding window (100 req/min default)
Input ValidationZod schemas on all API endpoints
SQL InjectionPrisma ORM parameterized queries
XSS PreventionNext.js built-in + CSP headers
Audit LoggingAll CRUD operations logged with user/IP
Sensitive DataPrisma field-level encryption ready
File UploadType validation, size limits, S3 signed URLs

🚀 Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+
  • OpenAI API key
  • Clerk account

1. Clone & Install

git clone https://github.com/imchine/FinTech-Solution.git
cd finsight-ai
npm install

2. Environment Setup

cp .env.example .env.local
# Fill in your API keys

3. Database Setup

# Apply schema
npx prisma migrate dev --name init
# Generate client
npx prisma generate

4. Run Development

npm run dev
# Open http://localhost:3000

5. Docker (Full Stack)

docker-compose up -d

Redis (optional)

Redis is optional but recommended for production and multi-instance deployments.

docker compose up -d redis
# set in .env.local:
REDIS_URL=redis://localhost:6379

When REDIS_URL is set:

  • Rate limiting — shared across API routes (/api/transactions, /api/invoices, /api/ai/chat, etc.)
  • Dashboard cache — metrics cached for 2 minutes; invalidated when transactions, expenses, or invoices change
  • Health checkGET /api/health reports whether Redis is configured

Without Redis, rate limits and dashboard metrics use in-process behaviour only.


📁 Folder Structure

finsight-ai/
├── src/
│ ├── app/
│ │ ├── (auth)/ # Sign in/up pages (Clerk)
│ │ ├── (dashboard)/ # All protected dashboard pages
│ │ │ ├── dashboard/ # Main financial dashboard
│ │ │ ├── invoices/ # Invoice management
│ │ │ ├── expenses/ # Expense tracking
│ │ │ ├── transactions/# Transaction ledger
│ │ │ ├── ai-assistant/# AI chatbot interface
│ │ │ ├── cash-flow/ # Cash flow & forecasting
│ │ │ ├── insights/ # AI insights engine
│ │ │ ├── reports/ # Financial reports
│ │ │ ├── bank-statements/ # Bank statement analyzer
│ │ │ └── settings/ # Account & org settings
│ │ └── api/ # All API routes
│ ├── components/
│ │ ├── ui/ # ShadCN UI components
│ │ ├── charts/ # Recharts wrappers
│ │ ├── dashboard/ # Dashboard-specific components
│ │ ├── layout/ # Sidebar, Header
│ │ └── shared/ # Providers, theme
│ ├── lib/
│ │ ├── prisma.ts # Database client
│ │ ├── auth.ts # Auth helpers & audit logging
│ │ ├── openai.ts # AI integration & RAG
│ │ ├── financial-calculations.ts # ALL financial math
│ │ ├── validations.ts # Zod schemas
│ │ ├── rate-limit.ts # API rate limiting
│ │ └── utils.ts # Utilities & formatters
│ ├── middleware.ts # Auth & security middleware
│ └── types/ # TypeScript types
├── prisma/
│ └── schema.prisma # Complete DB schema
├── docker-compose.yml # Full stack Docker setup
├── Dockerfile # Production container
└── .env.example # Environment template

📊 API Endpoints

MethodEndpointDescription
GET/api/healthHealth check
GET/api/dashboardDashboard metrics
GET/api/dashboard/trendsMonthly trends
GET/api/dashboard/categoriesExpense categories
GET/POST/api/invoicesList/create invoices
GET/PATCH/DELETE/api/invoices/[id]Invoice operations
GET/POST/api/expensesList/create expenses
GET/POST/api/transactionsList/create transactions
POST/api/ai/chatAI chat (SSE streaming)
GET/api/ai/chatChat history
GET/api/cash-flowHistorical + forecasts
GET/POST/api/reportsReport management
GET/api/insightsAI insights

🚢 Deployment

Vercel (Frontend)

vercel deploy --prod

Environment Variables (Production)

Set all variables from .env.example in your deployment platform.

Database Migration (Production)

npx prisma migrate deploy

🧪 Testing Strategy

  • Unit Tests: Financial calculation functions (Jest)
  • Integration Tests: API routes with Prisma mocks
  • E2E Tests: Playwright for critical user flows
  • Security Tests: OWASP ZAP scanning
  • Load Tests: k6 for API performance

📈 Performance

  • Server-side rendering for initial dashboard load
  • React Query caching (60s stale time)
  • Optimized Prisma queries with proper indexes
  • Streaming AI responses (SSE)
  • Image optimization via Next.js
  • Lazy loading of chart components

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make changes with tests
  4. Submit a PR

📄 License

MIT License — see LICENSE file.


Built with ❤️ for SMEs worldwide

About

FinTech AI Solution for SMEs to calculate financial values

Topics

Resources

Stars

132 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages