├── app ├── projects │ ├── components │ │ ├── questions-section.tsx │ │ ├── theme-provider.tsx │ │ ├── project-layout.tsx │ │ ├── project-page-provider.tsx │ │ ├── documents-section.tsx │ │ └── project-content.tsx │ └── [projectId] │ │ ├── layout.tsx │ │ ├── documents │ │ └── page.tsx │ │ ├── questions │ │ ├── components │ │ │ ├── index.ts │ │ │ ├── multi-step-response-handler.tsx │ │ │ ├── questions-states.tsx │ │ │ ├── questions-header.tsx │ │ │ ├── no-questions-available.tsx │ │ │ └── questions-filter-tabs.tsx │ │ └── page.tsx │ │ └── page.tsx ├── favicon.ico ├── error │ └── page.tsx ├── page.tsx ├── organizations │ └── [orgId] │ │ ├── layout.tsx │ │ ├── team │ │ └── page.tsx │ │ ├── settings │ │ └── page.tsx │ │ └── knowledge-base │ │ └── page.tsx ├── user │ └── actions.ts ├── logout │ └── page.tsx ├── login │ ├── confirmation │ │ └── page.tsx │ └── actions.ts ├── auth │ ├── callback │ │ └── route.ts │ └── confirm │ │ └── route.ts ├── api │ ├── generate-response │ │ └── route.ts │ ├── llamaparse │ │ └── route.ts │ ├── extract-questions │ │ └── route.ts │ ├── llamacloud │ │ ├── disconnect │ │ │ └── route.ts │ │ ├── connect │ │ │ └── route.ts │ │ ├── documents │ │ │ └── route.ts │ │ └── projects │ │ │ └── route.ts │ ├── questions │ │ └── [projectId] │ │ │ ├── route.ts │ │ │ ├── create │ │ │ └── route.ts │ │ │ └── answers │ │ │ ├── [questionId] │ │ │ └── route.ts │ │ │ └── route.ts │ ├── organizations │ │ ├── [id] │ │ │ ├── user-role │ │ │ │ └── route.ts │ │ │ └── members │ │ │ │ └── invite │ │ │ │ └── route.ts │ │ └── by-slug │ │ │ └── [slug] │ │ │ └── route.ts │ └── projects │ │ └── [projectId] │ │ └── timeline │ │ └── route.ts └── layout.tsx ├── lib ├── constants.ts ├── utils.ts ├── utils │ ├── supabase │ │ ├── client.ts │ │ ├── server.ts │ │ └── middleware.ts │ └── form-data-parser.ts ├── db.ts ├── interfaces │ ├── llama-index.ts │ ├── ai-service.ts │ ├── llamaparse-service.ts │ └── llamacloud-service.ts ├── env.ts ├── validators │ ├── generate-response.ts │ ├── extract-questions.ts │ └── llamaparse.ts ├── hooks │ └── use-api.ts ├── errors │ └── api-errors.ts ├── document-service.ts └── middleware │ └── api-handler.ts ├── public ├── llamaindex_logo.jpeg ├── vercel.svg ├── window.svg ├── file.svg ├── globe.svg └── next.svg ├── .cursor └── rules │ ├── directory-naming-conventions.mdc │ ├── next-js-15-state-management-rules.mdc │ ├── next-js-15-component-architecture-rules.mdc │ ├── next-js-15-async-request-api-rules.mdc │ └── general-typescript-and-react-rules.mdc ├── postcss.config.mjs ├── prisma └── migrations │ ├── 20250506053502_update_model_relationships │ └── migration.sql │ ├── 20250813183141_add_project_summary │ └── migration.sql │ ├── 20250813184727_add_project_eligibility │ └── migration.sql │ ├── 20250524003830_add_llamacloud_org_name │ └── migration.sql │ ├── migration_lock.toml │ ├── 20250523204248_add_llamacloud_integration │ └── migration.sql │ ├── 20250527001757_add_question_reference_id │ └── migration.sql │ ├── 20250717162429_remove_llamacloud_api_key │ └── migration.sql │ ├── 20250506052630_add_unique_constraint_to_answer │ └── migration.sql │ ├── 20250523211921_update_llamacloud_to_project_specific │ └── migration.sql │ ├── 20250507174516_add_sources │ └── migration.sql │ ├── 20250523215918_add_project_indexes │ └── migration.sql │ ├── 20250506052048_init │ └── migration.sql │ ├── 20250815193452_add_knowledge_base_models │ └── migration.sql │ └── 20250516203855_add_organizations_and_users │ └── migration.sql ├── next.config.ts ├── components ├── organizations │ ├── types.ts │ ├── EmptyProjectsState.tsx │ ├── index.ts │ ├── ProjectsHeader.tsx │ ├── TeamHeader.tsx │ ├── ProjectCard.tsx │ ├── ProjectsList.tsx │ ├── MemberTableRow.tsx │ ├── TeamMembersTable.tsx │ └── OrganizationContent.tsx ├── ui │ ├── aspect-ratio.tsx │ ├── skeleton.tsx │ ├── answer-display.tsx │ ├── markdown-renderer.tsx │ ├── sonner.tsx │ ├── label.tsx │ ├── separator.tsx │ ├── textarea.tsx │ ├── progress.tsx │ ├── toaster.tsx │ ├── collapsible.tsx │ ├── input.tsx │ ├── spinner.tsx │ ├── switch.tsx │ ├── avatar.tsx │ ├── checkbox.tsx │ ├── radio-group.tsx │ ├── hover-card.tsx │ ├── toggle.tsx │ ├── badge.tsx │ ├── popover.tsx │ ├── alert.tsx │ ├── scroll-area.tsx │ ├── tooltip.tsx │ ├── tabs.tsx │ ├── toggle-group.tsx │ ├── resizable.tsx │ ├── slider.tsx │ ├── accordion.tsx │ ├── card.tsx │ ├── button.tsx │ ├── delete-confirmation-dialog.tsx │ ├── input-otp.tsx │ ├── breadcrumb.tsx │ ├── table.tsx │ └── calendar.tsx ├── projects │ ├── PageSkeleton.tsx │ ├── ProjectCardSkeleton.tsx │ ├── SearchBar.tsx │ └── ProjectGrid.tsx ├── nav-secondary.tsx ├── nav-main.tsx ├── CTASection.tsx ├── upload │ ├── FileList.tsx │ └── UploadSection.tsx ├── StatsSection.tsx └── HeroSection.tsx ├── utils └── supabase │ └── client.ts ├── types ├── project.ts ├── organization.d.ts ├── organization.ts └── api.ts ├── components.json ├── providers └── providers.tsx ├── hooks └── use-mobile.ts ├── .gitignore ├── middleware.ts ├── tsconfig.json ├── next.config.js ├── LICENSE ├── tailwind.config.ts └── package.json /app/projects/components/questions-section.tsx: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /lib/constants.ts: -------------------------------------------------------------------------------- 1 | export const DEFAULT_LANGUAGE_MODEL = "gpt-4o-mini"; -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/run-llama/auto_rfp/HEAD/app/favicon.ico -------------------------------------------------------------------------------- /public/llamaindex_logo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/run-llama/auto_rfp/HEAD/public/llamaindex_logo.jpeg -------------------------------------------------------------------------------- /.cursor/rules/directory-naming-conventions.mdc: -------------------------------------------------------------------------------- 1 | --- 2 | description: 3 | globs: 4 | alwaysApply: true 5 | --- 6 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | const config = { 2 | plugins: ["@tailwindcss/postcss"], 3 | }; 4 | 5 | export default config; 6 | -------------------------------------------------------------------------------- /app/error/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | export default function ErrorPage() { 4 | return
Sorry, something went wrong
5 | } -------------------------------------------------------------------------------- /prisma/migrations/20250506053502_update_model_relationships/migration.sql: -------------------------------------------------------------------------------- 1 | -- DropIndex 2 | DROP INDEX "answers_questionId_idx"; 3 | -------------------------------------------------------------------------------- /app/page.tsx: -------------------------------------------------------------------------------- 1 | import { redirect } from "next/navigation"; 2 | 3 | export default function Home() { 4 | redirect("/organizations"); 5 | } 6 | -------------------------------------------------------------------------------- /prisma/migrations/20250813183141_add_project_summary/migration.sql: -------------------------------------------------------------------------------- 1 | -- AlterTable 2 | ALTER TABLE "projects" ADD COLUMN "summary" TEXT; 3 | -------------------------------------------------------------------------------- /public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /prisma/migrations/20250813184727_add_project_eligibility/migration.sql: -------------------------------------------------------------------------------- 1 | -- AlterTable 2 | ALTER TABLE "projects" ADD COLUMN "eligibility" TEXT[]; 3 | -------------------------------------------------------------------------------- /prisma/migrations/20250524003830_add_llamacloud_org_name/migration.sql: -------------------------------------------------------------------------------- 1 | -- AlterTable 2 | ALTER TABLE "organizations" ADD COLUMN "llamaCloudOrgName" TEXT; 3 | -------------------------------------------------------------------------------- /next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | /* config options here */ 5 | }; 6 | 7 | export default nextConfig; 8 | -------------------------------------------------------------------------------- /prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | # It should be added in your version-control system (e.g., Git) 3 | provider = "postgresql" 4 | -------------------------------------------------------------------------------- /lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /components/organizations/types.ts: -------------------------------------------------------------------------------- 1 | export interface TeamMember { 2 | id: string; 3 | name: string; 4 | email: string; 5 | role: 'owner' | 'admin' | 'member'; 6 | joinedAt: string; 7 | avatarUrl?: string; 8 | } -------------------------------------------------------------------------------- /prisma/migrations/20250523204248_add_llamacloud_integration/migration.sql: -------------------------------------------------------------------------------- 1 | -- AlterTable 2 | ALTER TABLE "organizations" ADD COLUMN "llamaCloudApiKey" TEXT, 3 | ADD COLUMN "llamaCloudConnectedAt" TIMESTAMP(3), 4 | ADD COLUMN "llamaCloudOrgId" TEXT; 5 | -------------------------------------------------------------------------------- /utils/supabase/client.ts: -------------------------------------------------------------------------------- 1 | import { createBrowserClient } from '@supabase/ssr' 2 | 3 | export function createClient() { 4 | return createBrowserClient( 5 | process.env.NEXT_PUBLIC_SUPABASE_URL!, 6 | process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! 7 | ) 8 | } -------------------------------------------------------------------------------- /lib/utils/supabase/client.ts: -------------------------------------------------------------------------------- 1 | import { createBrowserClient } from '@supabase/ssr' 2 | 3 | export function createClient() { 4 | return createBrowserClient( 5 | process.env.NEXT_PUBLIC_SUPABASE_URL!, 6 | process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! 7 | ) 8 | } -------------------------------------------------------------------------------- /prisma/migrations/20250527001757_add_question_reference_id/migration.sql: -------------------------------------------------------------------------------- 1 | -- AlterTable 2 | ALTER TABLE "questions" ADD COLUMN "referenceId" TEXT; 3 | 4 | -- CreateIndex 5 | CREATE INDEX "questions_projectId_referenceId_idx" ON "questions"("projectId", "referenceId"); 6 | -------------------------------------------------------------------------------- /app/projects/[projectId]/layout.tsx: -------------------------------------------------------------------------------- 1 | import { SidebarLayout } from "@/layouts/sidebar-layout/sidebar-layout"; 2 | import type { ReactNode } from "react"; 3 | 4 | export default function ProjectLayout({ children }: { children: ReactNode }) { 5 | returnAre you sure you want to log out?
8 | 16 |7 | We've sent you a magic link to your email address. Click the link in the email to sign in. 8 |
9 |10 | If you don't see the email, check your spam folder. The link will expire after 24 hours. 11 |
12 |No projects found
15 | 22 |12 | Find out why leading response teams across the world turn to AutoRFP for their RFP software needs. 13 |
14 |Loading...
19 |Loading project page...
13 |No project selected
22 |{file.documentName}
27 |28 | Processed with {file.metadata.mode} mode • {file.metadata.wordCount} words 29 |
30 |Welcome to AutoRFP
25 |34 | {project.description || 'No description'} 35 |
36 |No projects found
32 | 33 | 34 | 35 |Loading questions...
13 |{error}
28 |46 | {projects.length} project{projects.length !== 1 ? 's' : ''} 47 |
48 |18 | Power your team with insights, accuracy, and speed across bids, questionnaires, and RFP documents with our LlamaIndex-powered AI. 19 |
20 |38 | To get started, upload documents for AI to extract questions automatically, or add questions manually. 39 |
40 | 41 | {/* Sample file suggestion */} 42 |44 | Sample file below, you can download it and upload it to the project. 45 |
46 | 52 |