Inspiration
Answering 100+ page corporate RFPs and security questionnaires is a massive time-sink for engineering and sales teams. We wanted to build an enterprise-grade SaaS application that leverages a company's internal knowledge bases to completely automate this process.
What it does
Lumina Proposals acts as a dedicated workspace where teams can ingest technical documents, policies, and past proposals into a vector store.
- Using Retrieval-Augmented Generation (RAG), the system automatically drafts highly accurate, context-aware answers to incoming questionnaires.
- It features an immersive "Triage Queue" inspired by Superhuman, presenting reviewers with one question at a time side-by-side with the exact source documents the AI used to generate the answer.
- Reviewers can instantly approve, edit, or regenerate answers with smooth transitions, while a real-time analytics dashboard tracks RFP progress and AI confidence distribution.
How we built it
We developed Lumina Proposals as a monolithic Next.js 15 (App Router) application, tightly coupling the React frontend with Node.js backend API routes.
- Frontend: Built with TypeScript (Strict Mode), React 19, and a custom luxury design system using Tailwind CSS and
shadcn/ui. We utilized Framer Motion to power the fast, immersive animations of the Triage Queue. State management and data fetching were handled by React Query and Zustand. - Backend AI Pipeline: We engineered a custom RAG retrieval pipeline with an abstraction layer over the vector databases. For development, we implemented a custom in-memory vector store that computes cosine similarity to filter document chunks based on score thresholds and metadata.
Challenges we ran into
Engineering the in-memory vector store from scratch to properly handle document chunking, embeddings replacement, and cosine similarity calculations without relying on an external database was a complex technical hurdle. We had to build an abstraction layer to ensure the codebase could easily swap out the in-memory fallback for a production-ready database later. Additionally, using the React 19 Release Candidate alongside Next.js 15 required resolving legacy peer dependencies during setup.
What we learned
We significantly deepened our knowledge of AI agent orchestration and RAG architectures, specifically how to mathematically calculate vector similarity locally. We also learned how to build high-performance, immersive enterprise UI workflows utilizing Framer Motion and Next.js App router data fetching.
What's next for Lumina Proposals
We plan to update the vector store abstraction layer to wrap the ChromaDB client SDK, entirely replacing the in-memory fallback for production-scale indexing.
Built With
- framer-motion
- next.js
- react
- react-query
- recharts
- shadcn-ui
- tailwind.css
- typescript
- zustand
Log in or sign up for Devpost to join the conversation.