aiwhisperer33 commited on
Commit
7dc5a8d
·
verified ·
1 Parent(s): 875ca36

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +7 -5
  2. index.html +670 -19
  3. prompts.txt +3 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Rfp
3
- emoji: 🚀
4
- colorFrom: pink
5
- colorTo: green
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: rfp
3
+ emoji: 🐳
4
+ colorFrom: purple
5
+ colorTo: pink
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,670 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>AI RFP Response Generator</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
9
+ <script>
10
+ tailwind.config = {
11
+ theme: {
12
+ extend: {
13
+ colors: {
14
+ primary: '#3b82f6',
15
+ secondary: '#1e40af',
16
+ accent: '#10b981',
17
+ dark: '#1f2937',
18
+ light: '#f9fafb'
19
+ }
20
+ }
21
+ }
22
+ }
23
+ </script>
24
+ <style>
25
+ .gradient-bg {
26
+ background: linear-gradient(135deg, #3b82f6 0%, #10b981 100%);
27
+ }
28
+ .code-block {
29
+ background-color: #1e293b;
30
+ color: #f8fafc;
31
+ border-radius: 0.5rem;
32
+ padding: 1.25rem;
33
+ font-family: 'Fira Code', monospace;
34
+ font-size: 0.9rem;
35
+ line-height: 1.5;
36
+ overflow-x: auto;
37
+ position: relative;
38
+ }
39
+ .code-block::before {
40
+ content: '';
41
+ position: absolute;
42
+ top: 0;
43
+ left: 0;
44
+ right: 0;
45
+ height: 2.5rem;
46
+ background-color: #334155;
47
+ border-top-left-radius: 0.5rem;
48
+ border-top-right-radius: 0.5rem;
49
+ }
50
+ .code-block::after {
51
+ content: '•••';
52
+ position: absolute;
53
+ top: 0.75rem;
54
+ left: 1rem;
55
+ color: #94a3b8;
56
+ letter-spacing: 0.2em;
57
+ }
58
+ .feature-card:hover {
59
+ transform: translateY(-5px);
60
+ box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1);
61
+ }
62
+ .section-divider {
63
+ width: 100px;
64
+ height: 4px;
65
+ background: linear-gradient(90deg, #3b82f6 0%, #10b981 100%);
66
+ margin: 1.5rem auto;
67
+ border-radius: 2px;
68
+ }
69
+ .tab-active {
70
+ border-bottom: 3px solid #3b82f6;
71
+ color: #3b82f6;
72
+ font-weight: 600;
73
+ }
74
+ .copy-btn {
75
+ position: absolute;
76
+ right: 0.5rem;
77
+ top: 0.5rem;
78
+ background-color: #334155;
79
+ color: #f8fafc;
80
+ border: none;
81
+ border-radius: 0.25rem;
82
+ padding: 0.25rem 0.5rem;
83
+ font-size: 0.75rem;
84
+ cursor: pointer;
85
+ opacity: 0;
86
+ transition: opacity 0.2s;
87
+ }
88
+ .code-block:hover .copy-btn {
89
+ opacity: 1;
90
+ }
91
+ .copy-btn:hover {
92
+ background-color: #3b82f6;
93
+ }
94
+ .animate-pulse {
95
+ animation: pulse 2s infinite;
96
+ }
97
+ @keyframes pulse {
98
+ 0% { opacity: 1; }
99
+ 50% { opacity: 0.5; }
100
+ 100% { opacity: 1; }
101
+ }
102
+ .file-upload {
103
+ border: 2px dashed #cbd5e0;
104
+ border-radius: 0.5rem;
105
+ padding: 2rem;
106
+ text-align: center;
107
+ transition: all 0.3s;
108
+ }
109
+ .file-upload:hover {
110
+ border-color: #3b82f6;
111
+ background-color: #f8fafc;
112
+ }
113
+ .file-upload.dragover {
114
+ border-color: #10b981;
115
+ background-color: #f0fdf4;
116
+ }
117
+ #preview-container {
118
+ max-height: 300px;
119
+ overflow-y: auto;
120
+ }
121
+ .prompt-template {
122
+ background-color: #f0fdf4;
123
+ border-left: 4px solid #10b981;
124
+ padding: 1rem;
125
+ margin: 1rem 0;
126
+ font-family: monospace;
127
+ white-space: pre-wrap;
128
+ }
129
+ </style>
130
+ </head>
131
+ <body class="bg-gray-50">
132
+ <!-- Header -->
133
+ <header class="gradient-bg text-white">
134
+ <div class="container mx-auto px-6 py-16">
135
+ <div class="flex flex-col md:flex-row items-center justify-between">
136
+ <div class="md:w-1/2 mb-10 md:mb-0">
137
+ <h1 class="text-4xl md:text-5xl font-bold mb-4">AI-Powered RFP Response Generator</h1>
138
+ <p class="text-xl mb-8 opacity-90">Automate your proposal process with our intelligent solution that analyzes RFPs and generates compliant responses in minutes.</p>
139
+ <div class="flex flex-col sm:flex-row gap-4">
140
+ <a href="#demo" class="bg-white text-primary font-semibold px-6 py-3 rounded-lg hover:bg-gray-100 transition duration-300 shadow-lg">
141
+ <i class="fas fa-play mr-2"></i> Try Demo
142
+ </a>
143
+ <button class="bg-transparent border-2 border-white text-white font-semibold px-6 py-3 rounded-lg hover:bg-white hover:text-primary transition duration-300">
144
+ <i class="fas fa-book mr-2"></i> Documentation
145
+ </button>
146
+ </div>
147
+ </div>
148
+ <div class="md:w-1/2">
149
+ <div class="bg-white/20 backdrop-blur-sm rounded-xl p-6 shadow-2xl border border-white/10">
150
+ <div class="flex mb-4">
151
+ <div class="w-3 h-3 rounded-full bg-red-500 mr-2"></div>
152
+ <div class="w-3 h-3 rounded-full bg-yellow-500 mr-2"></div>
153
+ <div class="w-3 h-3 rounded-full bg-green-500"></div>
154
+ </div>
155
+ <div class="code-block">
156
+ <button class="copy-btn" onclick="copyCode(this)">
157
+ <i class="fas fa-copy mr-1"></i> Copy
158
+ </button>
159
+ <span class="text-green-400">$</span> pip install rfp-generator<br>
160
+ <span class="text-green-400">$</span> rfp-generator --input rfp.pdf<br>
161
+ <span class="text-gray-400">Analyzing RFP document...</span><br>
162
+ <span class="text-gray-400">Identified 12 sections and 5 deadlines</span><br>
163
+ <span class="text-green-400">$</span> Generating responses...<br>
164
+ <span class="text-green-400">✔</span> Success! Response saved to rfp_response.docx
165
+ </div>
166
+ </div>
167
+ </div>
168
+ </div>
169
+ </div>
170
+ </header>
171
+
172
+ <!-- Features -->
173
+ <section class="py-16 bg-white">
174
+ <div class="container mx-auto px-6">
175
+ <div class="text-center mb-16">
176
+ <h2 class="text-3xl font-bold text-dark mb-4">Powerful Features</h2>
177
+ <p class="text-gray-600 max-w-2xl mx-auto">Our solution combines advanced NLP with AI content generation to streamline your RFP response process.</p>
178
+ <div class="section-divider"></div>
179
+ </div>
180
+
181
+ <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
182
+ <div class="feature-card bg-light rounded-xl p-6 transition duration-300 shadow-md hover:shadow-lg">
183
+ <div class="w-14 h-14 bg-primary/10 rounded-full flex items-center justify-center mb-4 text-primary">
184
+ <i class="fas fa-file-pdf text-2xl"></i>
185
+ </div>
186
+ <h3 class="text-xl font-semibold mb-2 text-dark">PDF Parsing</h3>
187
+ <p class="text-gray-600">Extracts text from uploaded RFP PDFs with support for complex layouts and tables.</p>
188
+ </div>
189
+
190
+ <div class="feature-card bg-light rounded-xl p-6 transition duration-300 shadow-md hover:shadow-lg">
191
+ <div class="w-14 h-14 bg-accent/10 rounded-full flex items-center justify-center mb-4 text-accent">
192
+ <i class="fas fa-brain text-2xl"></i>
193
+ </div>
194
+ <h3 class="text-xl font-semibold mb-2 text-dark">AI Analysis</h3>
195
+ <p class="text-gray-600">Identifies key sections, deadlines, and mandatory requirements using NLP.</p>
196
+ </div>
197
+
198
+ <div class="feature-card bg-light rounded-xl p-6 transition duration-300 shadow-md hover:shadow-lg">
199
+ <div class="w-14 h-14 bg-purple-500/10 rounded-full flex items-center justify-center mb-4 text-purple-500">
200
+ <i class="fas fa-robot text-2xl"></i>
201
+ </div>
202
+ <h3 class="text-xl font-semibold mb-2 text-dark">Content Generation</h3>
203
+ <p class="text-gray-600">Generates compliant responses tailored to each RFP section.</p>
204
+ </div>
205
+
206
+ <div class="feature-card bg-light rounded-xl p-6 transition duration-300 shadow-md hover:shadow-lg">
207
+ <div class="w-14 h-14 bg-yellow-500/10 rounded-full flex items-center justify-center mb-4 text-yellow-500">
208
+ <i class="fas fa-file-word text-2xl"></i>
209
+ </div>
210
+ <h3 class="text-xl font-semibold mb-2 text-dark">Word Export</h3>
211
+ <p class="text-gray-600">Formats responses into professional Word documents with proper headings.</p>
212
+ </div>
213
+ </div>
214
+ </div>
215
+ </section>
216
+
217
+ <!-- Demo Section with Upload/Download -->
218
+ <section id="demo" class="py-16 bg-gray-50">
219
+ <div class="container mx-auto px-6">
220
+ <div class="text-center mb-16">
221
+ <h2 class="text-3xl font-bold text-dark mb-4">Try It Yourself</h2>
222
+ <p class="text-gray-600 max-w-2xl mx-auto">Upload an RFP document and download the generated response.</p>
223
+ <div class="section-divider"></div>
224
+ </div>
225
+
226
+ <div class="max-w-4xl mx-auto bg-white rounded-xl shadow-lg overflow-hidden">
227
+ <div class="p-8">
228
+ <div id="upload-section">
229
+ <div class="file-upload mb-6" id="dropzone">
230
+ <div class="flex flex-col items-center justify-center">
231
+ <i class="fas fa-file-upload text-4xl text-primary mb-4"></i>
232
+ <h3 class="text-xl font-semibold mb-2">Drag & Drop your RFP document here</h3>
233
+ <p class="text-gray-500 mb-4">or</p>
234
+ <label for="file-input" class="cursor-pointer bg-primary text-white font-medium px-6 py-2 rounded-lg hover:bg-secondary transition duration-300">
235
+ <i class="fas fa-folder-open mr-2"></i> Browse Files
236
+ </label>
237
+ <input type="file" id="file-input" class="hidden" accept=".pdf,.doc,.docx,.txt">
238
+ <p class="text-gray-500 text-sm mt-4">Supports PDF, Word, and text documents</p>
239
+ </div>
240
+ </div>
241
+
242
+ <div id="preview-container" class="hidden mb-6">
243
+ <h3 class="text-lg font-semibold mb-3">Document Preview</h3>
244
+ <div class="code-block">
245
+ <button class="copy-btn" onclick="copyCode(this)">
246
+ <i class="fas fa-copy mr-1"></i> Copy
247
+ </button>
248
+ <div id="file-preview"></div>
249
+ </div>
250
+ </div>
251
+
252
+ <div class="flex justify-between items-center">
253
+ <div>
254
+ <p id="file-info" class="text-gray-600 hidden">
255
+ <span id="file-name" class="font-medium"></span>
256
+ <span id="file-size" class="text-sm text-gray-500 ml-2"></span>
257
+ </p>
258
+ </div>
259
+ <button id="generate-btn" class="hidden bg-accent text-white font-semibold px-6 py-2 rounded-lg hover:bg-green-700 transition duration-300">
260
+ <i class="fas fa-magic mr-2"></i> Generate Response
261
+ </button>
262
+ </div>
263
+ </div>
264
+
265
+ <div id="processing-section" class="hidden text-center py-8">
266
+ <div class="animate-spin rounded-full h-16 w-16 border-t-2 border-b-2 border-primary mx-auto mb-4"></div>
267
+ <h3 class="text-xl font-semibold mb-2">Analyzing your RFP document</h3>
268
+ <p class="text-gray-600 mb-6">This may take a few moments...</p>
269
+ <div class="w-full bg-gray-200 rounded-full h-2.5">
270
+ <div id="progress-bar" class="bg-primary h-2.5 rounded-full" style="width: 0%"></div>
271
+ </div>
272
+ </div>
273
+
274
+ <div id="results-section" class="hidden">
275
+ <div class="mb-6">
276
+ <h3 class="text-xl font-semibold mb-4">Generated Response</h3>
277
+ <div class="prompt-template mb-4">
278
+ <strong>Prompt Template Used:</strong><br>
279
+ Generate RFP response for "{section_title}" adhering to:<br>
280
+ - Requirements: {requirements_list}<br>
281
+ - Tone: Professional/technical<br>
282
+ - Include placeholders for [Company], [Budget], [Dates]<br>
283
+ - Format: Markdown with bullet points
284
+ </div>
285
+ <div class="code-block mb-4">
286
+ <button class="copy-btn" onclick="copyCode(this)">
287
+ <i class="fas fa-copy mr-1"></i> Copy
288
+ </button>
289
+ <div id="generated-response"></div>
290
+ </div>
291
+ </div>
292
+
293
+ <div class="flex justify-between items-center">
294
+ <div>
295
+ <h4 class="font-semibold mb-2">Identified Sections</h4>
296
+ <ul id="sections-list" class="list-disc pl-5 text-gray-700"></ul>
297
+ </div>
298
+ <button id="download-btn" class="bg-primary text-white font-semibold px-6 py-2 rounded-lg hover:bg-secondary transition duration-300">
299
+ <i class="fas fa-download mr-2"></i> Download Response
300
+ </button>
301
+ </div>
302
+ </div>
303
+ </div>
304
+ </div>
305
+ </div>
306
+ </section>
307
+
308
+ <!-- Example Usage -->
309
+ <section class="py-16 bg-white">
310
+ <div class="container mx-auto px-6">
311
+ <div class="text-center mb-16">
312
+ <h2 class="text-3xl font-bold text-dark mb-4">Example Usage</h2>
313
+ <p class="text-gray-600 max-w-2xl mx-auto">See how the system transforms an RFP section into a compliant response.</p>
314
+ <div class="section-divider"></div>
315
+ </div>
316
+
317
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-8">
318
+ <div>
319
+ <h3 class="text-xl font-semibold mb-4 text-dark">Input RFP Section</h3>
320
+ <div class="code-block">
321
+ <button class="copy-btn" onclick="copyCode(this)">
322
+ <i class="fas fa-copy mr-1"></i> Copy
323
+ </button>
324
+ "Section 3.2: Describe your cybersecurity protocols. Include certifications."
325
+ </div>
326
+ </div>
327
+
328
+ <div>
329
+ <h3 class="text-xl font-semibold mb-4 text-dark">Generated Response</h3>
330
+ <div class="prompt-template mb-4">
331
+ <strong>Prompt Template Used:</strong><br>
332
+ Generate RFP response for "Section 3.2: Cybersecurity Protocols" adhering to:<br>
333
+ - Requirements: Describe protocols, include certifications<br>
334
+ - Tone: Professional/technical<br>
335
+ - Include placeholders for [Company], [Budget], [Dates]<br>
336
+ - Format: Markdown with bullet points
337
+ </div>
338
+ <div class="code-block">
339
+ <button class="copy-btn" onclick="copyCode(this)">
340
+ <i class="fas fa-copy mr-1"></i> Copy
341
+ </button>
342
+ **Section 3.2: Cybersecurity Protocols**
343
+
344
+ [Company] implements comprehensive cybersecurity measures:
345
+
346
+ - **Encryption Standards**:
347
+ - AES-256 encryption for data at rest and in transit
348
+ - TLS 1.3 for all external communications
349
+
350
+ - **Access Controls**:
351
+ - Role-based access with MFA enforcement
352
+ - Quarterly access reviews
353
+
354
+ - **Monitoring & Detection**:
355
+ - 24/7 SIEM monitoring
356
+ - Automated threat detection
357
+
358
+ **Certifications**:
359
+ - SOC 2 Type II compliant
360
+ - ISO 27001 certified
361
+ - [Additional relevant certifications]
362
+
363
+ **Implementation Timeline**:
364
+ - Initial setup: [Dates]
365
+ - Ongoing maintenance: [Dates]
366
+
367
+ **Budget Allocation**:
368
+ - Security infrastructure: [Budget]
369
+ - Compliance audits: [Budget]
370
+
371
+ Contact: security@[Company].com for detailed security documentation.
372
+ </div>
373
+ </div>
374
+ </div>
375
+ </div>
376
+ </section>
377
+
378
+ <!-- Footer -->
379
+ <footer class="bg-dark text-white py-12">
380
+ <div class="container mx-auto px-6">
381
+ <div class="grid grid-cols-1 md:grid-cols-4 gap-8">
382
+ <div>
383
+ <h3 class="text-xl font-semibold mb-4">RFP Generator</h3>
384
+ <p class="text-gray-400">AI-powered solution to automate and streamline your RFP response process.</p>
385
+ </div>
386
+
387
+ <div>
388
+ <h3 class="text-lg font-semibold mb-4">Resources</h3>
389
+ <ul class="space-y-2">
390
+ <li><a href="#" class="text-gray-400 hover:text-white transition">Documentation</a></li>
391
+ <li><a href="#" class="text-gray-400 hover:text-white transition">API Reference</a></li>
392
+ <li><a href="#" class="text-gray-400 hover:text-white transition">GitHub Repository</a></li>
393
+ </ul>
394
+ </div>
395
+
396
+ <div>
397
+ <h3 class="text-lg font-semibold mb-4">Community</h3>
398
+ <ul class="space-y-2">
399
+ <li><a href="#" class="text-gray-400 hover:text-white transition">GitHub Issues</a></li>
400
+ <li><a href="#" class="text-gray-400 hover:text-white transition">Stack Overflow</a></li>
401
+ <li><a href="#" class="text-gray-400 hover:text-white transition">Discord</a></li>
402
+ </ul>
403
+ </div>
404
+
405
+ <div>
406
+ <h3 class="text-lg font-semibold mb-4">Connect</h3>
407
+ <div class="flex space-x-4">
408
+ <a href="#" class="text-gray-400 hover:text-white transition text-xl"><i class="fab fa-twitter"></i></a>
409
+ <a href="#" class="text-gray-400 hover:text-white transition text-xl"><i class="fab fa-github"></i></a>
410
+ <a href="#" class="text-gray-400 hover:text-white transition text-xl"><i class="fab fa-linkedin"></i></a>
411
+ <a href="#" class="text-gray-400 hover:text-white transition text-xl"><i class="fab fa-discord"></i></a>
412
+ </div>
413
+ </div>
414
+ </div>
415
+
416
+ <div class="border-t border-gray-800 mt-12 pt-8 text-center text-gray-400">
417
+ <p>© 2024 RFP Generator. All rights reserved.</p>
418
+ </div>
419
+ </div>
420
+ </footer>
421
+
422
+ <script>
423
+ // Tab functionality
424
+ function showTab(tabId) {
425
+ // Hide all tab contents
426
+ document.querySelectorAll('.tab-content').forEach(tab => {
427
+ tab.classList.add('hidden');
428
+ });
429
+
430
+ // Remove active class from all tab buttons
431
+ document.querySelectorAll('.tab-btn').forEach(btn => {
432
+ btn.classList.remove('tab-active');
433
+ });
434
+
435
+ // Show selected tab content
436
+ document.getElementById(tabId).classList.remove('hidden');
437
+
438
+ // Add active class to clicked button
439
+ event.currentTarget.classList.add('tab-active');
440
+ }
441
+
442
+ // Copy code functionality
443
+ function copyCode(button) {
444
+ const codeBlock = button.parentElement;
445
+ const code = codeBlock.innerText.replace('Copy', '').trim();
446
+
447
+ navigator.clipboard.writeText(code).then(() => {
448
+ // Change button text temporarily
449
+ const originalHtml = button.innerHTML;
450
+ button.innerHTML = '<i class="fas fa-check mr-1"></i> Copied!';
451
+
452
+ setTimeout(() => {
453
+ button.innerHTML = originalHtml;
454
+ }, 2000);
455
+ });
456
+ }
457
+
458
+ // Initialize first tab as active
459
+ document.addEventListener('DOMContentLoaded', function() {
460
+ // Initialize drag and drop functionality
461
+ const dropzone = document.getElementById('dropzone');
462
+ const fileInput = document.getElementById('file-input');
463
+
464
+ // Highlight dropzone when dragging over
465
+ ['dragenter', 'dragover'].forEach(eventName => {
466
+ dropzone.addEventListener(eventName, (e) => {
467
+ e.preventDefault();
468
+ dropzone.classList.add('dragover');
469
+ });
470
+ });
471
+
472
+ // Remove highlight when leaving
473
+ ['dragleave', 'dragend'].forEach(eventName => {
474
+ dropzone.addEventListener(eventName, () => {
475
+ dropzone.classList.remove('dragover');
476
+ });
477
+ });
478
+
479
+ // Handle file drop
480
+ dropzone.addEventListener('drop', (e) => {
481
+ e.preventDefault();
482
+ dropzone.classList.remove('dragover');
483
+
484
+ if (e.dataTransfer.files.length) {
485
+ fileInput.files = e.dataTransfer.files;
486
+ handleFileUpload(e.dataTransfer.files[0]);
487
+ }
488
+ });
489
+
490
+ // Handle file selection via button
491
+ fileInput.addEventListener('change', () => {
492
+ if (fileInput.files.length) {
493
+ handleFileUpload(fileInput.files[0]);
494
+ }
495
+ });
496
+
497
+ // Generate button click handler
498
+ document.getElementById('generate-btn').addEventListener('click', processRFP);
499
+
500
+ // Download button click handler
501
+ document.getElementById('download-btn').addEventListener('click', downloadResponse);
502
+ });
503
+
504
+ // Handle file upload
505
+ function handleFileUpload(file) {
506
+ const validTypes = ['application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'text/plain'];
507
+
508
+ if (!validTypes.includes(file.type) && !file.name.endsWith('.pdf') && !file.name.endsWith('.doc') && !file.name.endsWith('.docx') && !file.name.endsWith('.txt')) {
509
+ alert('Please upload a valid PDF, Word, or text document.');
510
+ return;
511
+ }
512
+
513
+ // Show file info
514
+ document.getElementById('file-info').classList.remove('hidden');
515
+ document.getElementById('file-name').textContent = file.name;
516
+ document.getElementById('file-size').textContent = formatFileSize(file.size);
517
+
518
+ // Show preview button
519
+ document.getElementById('generate-btn').classList.remove('hidden');
520
+
521
+ // Preview text content (simplified for demo)
522
+ if (file.type === 'text/plain' || file.name.endsWith('.txt')) {
523
+ const reader = new FileReader();
524
+ reader.onload = function(e) {
525
+ document.getElementById('file-preview').textContent = e.target.result.substring(0, 1000) + (e.target.result.length > 1000 ? '...' : '');
526
+ document.getElementById('preview-container').classList.remove('hidden');
527
+ };
528
+ reader.readAsText(file);
529
+ } else {
530
+ // For PDF/DOC files, just show a message in the demo
531
+ document.getElementById('file-preview').textContent = `[Preview not available in demo - ${file.type} file detected]`;
532
+ document.getElementById('preview-container').classList.remove('hidden');
533
+ }
534
+ }
535
+
536
+ // Format file size
537
+ function formatFileSize(bytes) {
538
+ if (bytes === 0) return '0 Bytes';
539
+ const k = 1024;
540
+ const sizes = ['Bytes', 'KB', 'MB', 'GB'];
541
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
542
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
543
+ }
544
+
545
+ // Process RFP (simulated for demo)
546
+ function processRFP() {
547
+ const uploadSection = document.getElementById('upload-section');
548
+ const processingSection = document.getElementById('processing-section');
549
+ const resultsSection = document.getElementById('results-section');
550
+
551
+ // Show processing section
552
+ uploadSection.classList.add('hidden');
553
+ processingSection.classList.remove('hidden');
554
+
555
+ // Simulate processing with progress bar
556
+ let progress = 0;
557
+ const progressInterval = setInterval(() => {
558
+ progress += Math.random() * 10;
559
+ if (progress > 100) progress = 100;
560
+ document.getElementById('progress-bar').style.width = `${progress}%`;
561
+
562
+ if (progress === 100) {
563
+ clearInterval(progressInterval);
564
+ setTimeout(() => {
565
+ // Show results
566
+ processingSection.classList.add('hidden');
567
+ resultsSection.classList.remove('hidden');
568
+
569
+ // Generate sample response (in a real app, this would come from your backend)
570
+ generateSampleResponse();
571
+ }, 500);
572
+ }
573
+ }, 300);
574
+ }
575
+
576
+ // Generate sample response (for demo purposes)
577
+ function generateSampleResponse() {
578
+ const responseContainer = document.getElementById('generated-response');
579
+ const sectionsList = document.getElementById('sections-list');
580
+
581
+ // Sample generated response using the prompt template
582
+ const sampleResponse = `**Section 1.1: Executive Summary**
583
+
584
+ [Company] is pleased to submit this proposal in response to [RFP Title]. Our solution delivers:
585
+
586
+ - **Key Benefits**:
587
+ - [Benefit 1]
588
+ - [Benefit 2]
589
+ - [Benefit 3]
590
+
591
+ - **Implementation Timeline**: [Dates]
592
+ - **Budget**: [Budget]
593
+
594
+ **Section 2.3: Technical Approach**
595
+
596
+ Our methodology includes:
597
+
598
+ 1. **Phase 1: Discovery** ([Dates])
599
+ - Requirements analysis
600
+ - Stakeholder interviews
601
+
602
+ 2. **Phase 2: Implementation** ([Dates])
603
+ - System configuration
604
+ - Integration testing
605
+
606
+ 3. **Phase 3: Deployment** ([Dates])
607
+ - User training
608
+ - Go-live support
609
+
610
+ **Budget Allocation**:
611
+ - Development: [Budget]
612
+ - Training: [Budget]
613
+
614
+ **Section 3.2: Security Protocols**
615
+
616
+ [Company] maintains:
617
+
618
+ - **Certifications**:
619
+ - ISO 27001
620
+ - SOC 2 Type II
621
+
622
+ - **Protocols**:
623
+ - Encryption at rest and in transit
624
+ - Quarterly penetration testing
625
+
626
+ **Security Budget**: [Budget]
627
+ **Next Audit Date**: [Dates]
628
+
629
+ Contact: [[email protected]] for additional details.`;
630
+
631
+ responseContainer.innerHTML = sampleResponse;
632
+
633
+ // Sample sections identified
634
+ const sampleSections = [
635
+ "1.1 Executive Summary",
636
+ "2.3 Technical Approach",
637
+ "3.2 Security Protocols",
638
+ "4.1 Project Timeline",
639
+ "5.2 Pricing Structure"
640
+ ];
641
+
642
+ sectionsList.innerHTML = '';
643
+ sampleSections.forEach(section => {
644
+ const li = document.createElement('li');
645
+ li.textContent = section;
646
+ sectionsList.appendChild(li);
647
+ });
648
+ }
649
+
650
+ // Download generated response
651
+ function downloadResponse() {
652
+ const responseText = document.getElementById('generated-response').textContent;
653
+ const blob = new Blob([responseText], { type: 'text/plain' });
654
+ const url = URL.createObjectURL(blob);
655
+
656
+ const a = document.createElement('a');
657
+ a.href = url;
658
+ a.download = 'RFP_Response.md';
659
+ document.body.appendChild(a);
660
+ a.click();
661
+
662
+ // Clean up
663
+ setTimeout(() => {
664
+ document.body.removeChild(a);
665
+ URL.revokeObjectURL(url);
666
+ }, 100);
667
+ }
668
+ </script>
669
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=aiwhisperer33/rfp" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
670
+ </html>
prompts.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ MAKE THE SITE
2
+ NEED TO BE A ABLE TO UPLOAD AND DOWNLOAD
3
+ ENSURE YOU PROMPT_TEMPLATE = '''Generate RFP response for "{section_title}" adhering to: - Requirements: {requirements_list} - Tone: Professional/technical - Include placeholders for [Company], [Budget], [Dates] - Format: Markdown with bullet points'''