A comprehensive document intelligence and briefing assistant for Kochi Metro Rail Limited (KMRL) built with LangChain.js, Supabase (pgvector), and Google Gemini.
- Station Controller: Operations, incidents, maintenance, staffing
- Engineer: Technical issues, vendor bulletins, equipment status
- Procurement Officer: Contracts, POs, compliance, vendor management
- HR Officer: Policies, training, safety, staff management
- Director: High-level KPIs, strategic updates, cross-department insights
- Smart Document Retrieval: Role-filtered similarity search using pgvector
- Citation Tracking: Every answer includes verifiable source references
- "Why Button": Root cause analysis and document connection insights
- Daily Briefings: Automated role-specific summaries
- Predictive Alerts: Risk scanning across compliance and safety documents
- Frontend: React with Tailwind CSS, role-based UI with avatar selection
- Backend: Node.js server with REST API endpoints
- AI/ML: Google Gemini (text-embedding-004 + gemini-1.5-flash)
- Vector Database: Supabase with pgvector extension (768-dimensional embeddings)
- Document Processing: LangChain.js with PDF parsing and intelligent chunking
- Node.js 18+
- Supabase account with pgvector extension
- Google Gemini API key
# Copy environment template
cp .env.example .env
# Add your keys:
GEMINI_API_KEY=your_gemini_api_key
SUPABASE_PROJECT_URL=your_supabase_url
SUPABASE_SERVICE_KEY=your_service_role_keyRun the SQL schema in your Supabase SQL Editor:
# The schema is in supabase-schema.sql
# This creates tables, RLS policies, and vector search functionsnpm installCreate a data/ folder and add your PDF files:
data/
βββ director_detailed.pdf
βββ hr_detailed.pdf
βββ procurement_detailed.pdf
βββ engineer_detailed.pdf
βββ station_controller_detailed.pdf
npm run ingest# Start both server and frontend
npm run dev:full
# Or separately:
npm run server # Backend on port 3001
npm run dev # Frontend on port 5173POST /api/chat
Content-Type: application/json
{
"question": "What training is scheduled this month?",
"role": "HR",
"filter": {} // optional metadata filter
}POST /api/why
Content-Type: application/json
{
"question": "Previous question",
"role": "HR",
"docs": [/* retrieved documents */]
}GET /api/briefings?role=DirectorGET /api/alerts?role=Director- Uses Google's
text-embedding-004model - Stored in Supabase pgvector with cosine similarity
- Role-filtered retrieval via RLS and custom RPC functions
- PDF Loading: Extract text with page metadata
- Chunking: Split large documents (1000 chars, 200 overlap)
- Embedding: Generate 768-dim vectors via Gemini
- Storage: Insert with role permissions and metadata
- Indexing: IVFFlat index for fast similarity search
- Row Level Security (RLS) policies
- Role-based document filtering
- Service key for server operations
- Audit trail with source attribution
- Update
ROLESinApp.tsx - Add role to database schema check constraint
- Configure role-specific briefing questions
- Update ingestion scripts with new role permissions
- Extend
ingestLocalPdfs.jswith new file configurations - Update metadata schema as needed
- Configure role permissions for new document types
- Hybrid Search: Add keyword search with pg_trgm
- Multilingual: Add Malayalam translation layers
- Advanced RAG: Implement reranking and query expansion
- External APIs: Connect SharePoint, Gmail, or other systems
NODE_ENV=production
GEMINI_API_KEY=prod_key
SUPABASE_PROJECT_URL=prod_url
SUPABASE_SERVICE_KEY=prod_service_key- Vector Index Tuning: Adjust
listsparameter based on document count - Caching: Add Redis for frequent queries
- Rate Limiting: Implement API rate limiting
- Monitoring: Add logging and performance metrics
- SharePoint Integration: Direct document sync
- Gmail Connector: Email and attachment processing
- Malayalam Support: Bidirectional translation
- Advanced Analytics: Usage dashboards and insights
- Mobile App: React Native companion
- Workflow Integration: KMRL internal systems
For technical issues or feature requests, refer to the implementation details in the codebase or extend the existing services following the established patterns.
Internal KMRL prototype - not for external distribution.