# 01 — Project Overview ## What is LexiChain? **LexiChain** is a full-stack BFSI (Banking, Financial Services & Insurance) contract intelligence platform. It transforms raw PDF and image contract documents into structured, searchable, and verifiable data through a multi-layer pipeline: 1. **Upload** — Users upload insurance policies, loan agreements, or investment contracts. 2. **AI Extraction** — Google Gemini (primary) or Mistral AI (fallback) reads the document and extracts structured metadata. 3. **RAG Q&A** — Users can ask natural-language questions about any analyzed contract. 4. **Blockchain Proof** — Every document's SHA-256 hash is registered on Ethereum (Sepolia testnet or local Hardhat) providing tamper-proof, timestamped proof-of-deposit. 5. **Notifications** — The platform emails users about upcoming contract renewals and expiries. 6. **Analytics** — A dashboard aggregates contract statistics, type distributions, and status trends. --- ## Feature List | Feature | Description | |---------|-------------| | **Authentication** | Clerk-powered sign-in/sign-up with SSO support | | **Contract Upload** | Drag-and-drop PDF/image upload via UploadThing | | **AI Analysis** | Structured extraction: type, dates, premium, provider, key clauses | | **AI Fallback** | Mistral Large + Pixtral vision model when Gemini is unavailable | | **Contract Q&A** | RAG-grounded question answering on analyzed contracts | | **Blockchain Proof** | On-chain document hash registration (Sepolia testnet) | | **Blockchain Explorer** | In-app UI to verify document hashes and view transaction proofs | | **Email Notifications** | SMTP-based renewal and expiry alerts | | **In-App Notifications** | Real-time notification bar with read/dismiss | | **Analytics Dashboard** | KPIs, status distribution, contract type charts (Recharts) | | **Dark / Light Mode** | Full theme support via next-themes | | **PDF Certificate Export** | Downloadable PDF certificates with QR codes | | **CSV Export** | Contract list export to CSV | --- ## Technology Stack ### Core Framework | Layer | Technology | |-------|-----------| | Framework | Next.js 16.x (App Router) | | Language | TypeScript 5.x (strict mode) | | Runtime | Node.js ≥ 20 | | React | 19.x | ### Frontend | Technology | Purpose | |-----------|---------| | Tailwind CSS + tailwindcss-animate | Utility-first styling | | shadcn/ui (Radix UI primitives) | Accessible component library | | Lucide React | Icon set | | Motion (Framer Motion v12) | Animations and micro-interactions | | Recharts | Analytics charts | | Sonner | Toast notifications | | next-themes | Dark/light mode | | react-hook-form + zod | Form validation | ### Backend & Data | Technology | Purpose | |-----------|---------| | PostgreSQL | Primary relational database | | Prisma ORM | Schema management, type-safe queries, migrations | | Clerk | Authentication, user management | | UploadThing | File upload and CDN storage | | Nodemailer | SMTP email delivery | ### AI & Intelligence | Technology | Purpose | |-----------|---------| | Google Gemini (via `@google/generative-ai`) | Primary multimodal contract extraction | | Mistral AI (REST API) | Fallback extraction + OCR | | Pixtral (Mistral Vision) | Image/scanned document fallback | | Gemini text-embedding-004 | Vector embeddings for RAG | ### Blockchain | Technology | Purpose | |-----------|---------| | Solidity 0.8.24 | Smart contract language | | Hardhat | Compilation, testing, local node, deployment | | ethers.js v6 | Server-side blockchain interaction | | Ethereum Sepolia | Production testnet (free, no cost) | ### PDF & Certificates | Technology | Purpose | |-----------|---------| | PDFKit | Server-side PDF certificate generation | | jsPDF + jspdf-autotable | Client-side PDF/table export | | pdf-parse | PDF text extraction for OCR fallback | | qrcode | QR code generation for certificates | --- ## Architecture Overview ``` ┌─────────────────────────────────────────────────────────────────┐ │ USER BROWSER │ │ Next.js App Router UI │ └───────────────────────┬─────────────────────────────────────────┘ │ ┌─────────────▼──────────────┐ │ Clerk Middleware │ Route protection (proxy.ts) │ (proxy.ts) │ Blocks unauthenticated access └─────────────┬──────────────┘ │ ┌─────────────▼──────────────┐ │ Server Actions │ lib/actions/* — authenticated │ & Route Handlers │ server-side operations └──────┬──────────┬──────────┘ │ │ ┌────────────▼──┐ ┌────▼───────────┐ │ lib/services │ │ app/api/* │ │ (domain logic)│ │ (webhooks, │ │ │ │ uploadthing) │ └────────────────┘ └────────────────┘ │ ┌──────┴──────────────────────────────────┐ │ External Integrations │ │ │ │ PostgreSQL UploadThing Gemini API │ │ (Prisma) (file CDN) (primary AI) │ │ │ │ Mistral AI Ethereum SMTP Server │ │ (fallback) Sepolia (email) │ └──────────────────────────────────────────┘ ``` --- ## User Flows ### 1. Sign Up & Onboarding ``` User visits /sign-up → Clerk handles registration → Clerk fires webhook (user.created) → app/api/webhooks/clerk syncs User record to PostgreSQL → User redirected to /dashboard ``` ### 2. Contract Upload & Analysis ``` User uploads PDF from /contracts → UploadThing receives file → stores on CDN → returns URL → saveContract() server action creates Contract row (status: UPLOADED) → User clicks "Analyze" → analyzeContractAction() sets status: PROCESSING → AIService downloads file → sends to Gemini → parses JSON response → ContractService.updateWithAIResults() saves extracted data → BlockchainService hashes file → registers hash on Sepolia → Status set to COMPLETED → NotificationService creates in-app + email notification ``` ### 3. Contract Q&A (RAG) ``` User asks question in contract detail page → askContractQuestionAction() fetches contract + RAG chunks → RAGService finds most similar chunks via cosine similarity → AIService sends contract context + question to Gemini → Answer streamed back to UI ``` ### 4. Blockchain Verification ``` User opens /blockchain explorer → BlockchainService.getNetworkStats() queries Sepolia node → User pastes document hash or views registered documents → BlockchainService.verifyOnChain() calls verifyDocument() on Solidity contract → Result shown: exists / timestamp / depositor address ``` --- ## Project Directory Structure ``` bfsi-project/ ├── app/ Next.js App Router │ ├── (auth)/ Sign-in / Sign-up pages │ ├── (dashboard)/ Protected workspace pages │ │ ├── dashboard/ Analytics overview │ │ ├── contacts/ Contract list & detail │ │ └── blockchain/ Blockchain explorer │ └── api/ Route handlers │ ├── contracts/ Contract CRUD endpoints │ ├── uploadthing/ UploadThing integration │ └── webhooks/ Clerk webhook receiver ├── blockchain/ Hardhat smart contract project │ ├── contracts/ Solidity source files │ └── scripts/ Deployment scripts ├── components/ Reusable React components │ ├── layout/ Shell, sidebar, header │ └── ui/ shadcn/ui design system ├── docs/ This documentation folder ├── features/ Feature-scoped components │ ├── ai/ AI analysis UI │ ├── analytics/ Dashboard charts │ ├── auth/ Auth-related UI │ ├── blockchain/ Blockchain explorer UI │ ├── claims/ Claims management │ ├── contracts/ Contract upload/list/detail │ ├── home/ Landing page │ └── notifications/ Notification center ├── hooks/ Custom React hooks ├── lib/ │ ├── db/ Prisma client singleton │ ├── services/ All domain services (AI, Blockchain, etc.) │ │ └── ai/ AI sub-modules (parser, normalizer, prompts) │ ├── upload.ts UploadThing configuration │ └── utils.ts Shared utility functions ├── prisma/ Database schema and migrations ├── public/ Static assets ├── scripts/ Dev tooling scripts ├── types/ Shared TypeScript types ├── proxy.ts Clerk middleware (route protection) └── next.config.ts Next.js configuration ```