RFP Management

AI-Powered Response Generation

Workflow Steps

{#each steps as step} {/each}
Progress {Math.round(($currentStep / steps.length) * 100)}%

Complete each step to build your professional RFP response.

Reference Documents

{#if hasStoredRfps} {$referenceDocuments.length} stored {/if}

Upload previous RFPs for reference (stored in backend)

{#if $error}

⚠️ {$error}

{/if}
{#if isUploading || $isLoading} 🔄 Uploading to backend... {:else} 📁 Upload to {categories.find(c => c.value === selectedCategory)?.label} {/if}
{#if $referenceDocuments.length > 0}
{#each categories as category} {@const categoryDocs = getDocumentsByCategory(category.value)} {#if categoryDocs.length > 0}

{category.label}

{categoryDocs.length}
{#each categoryDocs as doc}
viewDocumentContent(doc.id)}>
{doc.name}
{(doc.size / 1024 / 1024).toFixed(1)} MB {#if doc.contentLength} {doc.contentLength} chars {/if} {doc.fileType === '.pdf' ? 'PDF' : doc.fileType === '.docx' || doc.fileType === '.doc' ? 'DOC' : doc.fileType === '.txt' ? 'TXT' : 'FILE'} {#if doc.processed} ✓ Processed {:else} ⏳ Processing {/if}
Uploaded: {formatDate(doc.uploadDate)} {#if doc.contentLength} • Content Available ({doc.contentLength} chars) {/if}
{/each}
{/if} {/each} {#if $referenceDocuments.length > 0}
📁 Backend Storage: {$referenceDocuments.length} documents | Categories: {categories.map(c => `${c.label} (${getDocumentsByCategory(c.value).length})`).filter(s => !s.includes('(0)')).join(', ')}
{:else}
💡 Upload reference documents to improve AI responses
{/if}
{/if}