Spaces:
Running
Running
Add 2 files
Browse files- index.html +621 -267
- prompts.txt +1 -3
index.html
CHANGED
|
@@ -50,6 +50,26 @@
|
|
| 50 |
::-webkit-scrollbar-thumb:hover {
|
| 51 |
background: #555;
|
| 52 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
</style>
|
| 54 |
</head>
|
| 55 |
<body class="bg-gray-50 font-sans">
|
|
@@ -59,16 +79,16 @@
|
|
| 59 |
<div class="flex flex-col md:flex-row items-center justify-between">
|
| 60 |
<div class="mb-8 md:mb-0">
|
| 61 |
<h1 class="text-4xl font-bold mb-4">DeepSite Prompt Generator</h1>
|
| 62 |
-
<p class="text-xl opacity-90">Превратите ваш
|
| 63 |
</div>
|
| 64 |
<div class="flex space-x-4">
|
| 65 |
-
<div class="bg-white/10 backdrop-blur-sm p-4 rounded-lg">
|
| 66 |
<i class="fab fa-react text-3xl text-blue-400"></i>
|
| 67 |
</div>
|
| 68 |
-
<div class="bg-white/10 backdrop-blur-sm p-4 rounded-lg">
|
| 69 |
<i class="fab fa-python text-3xl text-yellow-400"></i>
|
| 70 |
</div>
|
| 71 |
-
<div class="bg-white/10 backdrop-blur-sm p-4 rounded-lg">
|
| 72 |
<i class="fas fa-bolt text-3xl text-purple-400"></i>
|
| 73 |
</div>
|
| 74 |
</div>
|
|
@@ -80,43 +100,55 @@
|
|
| 80 |
<main class="container mx-auto px-4 py-8">
|
| 81 |
<!-- Input Section -->
|
| 82 |
<section class="mb-12">
|
| 83 |
-
<div class="bg-white rounded-xl shadow-lg p-6">
|
| 84 |
-
<h2 class="text-2xl font-bold mb-6 text-gray-800
|
|
|
|
|
|
|
|
|
|
| 85 |
|
| 86 |
<div class="mb-6">
|
| 87 |
-
<label for="user-input" class="block text-lg font-medium text-gray-700 mb-3">
|
| 88 |
-
<textarea id="user-input" class="w-full prompt-box p-4 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-transparent text-gray-700" placeholder="Пример:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
</div>
|
| 90 |
|
| 91 |
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-6">
|
| 92 |
<div>
|
| 93 |
-
<label class="block text-sm font-medium text-gray-700 mb-2">
|
| 94 |
-
<select id="
|
| 95 |
-
<option value="
|
| 96 |
-
<option value="
|
| 97 |
-
<option value="
|
|
|
|
|
|
|
|
|
|
| 98 |
</select>
|
| 99 |
</div>
|
| 100 |
<div>
|
| 101 |
-
<label class="block text-sm font-medium text-gray-700 mb-2">
|
| 102 |
-
<select id="
|
| 103 |
-
<option value="
|
| 104 |
-
<option value="
|
| 105 |
-
<option value="
|
| 106 |
-
<option value="creative">Креативный</option>
|
| 107 |
</select>
|
| 108 |
</div>
|
| 109 |
<div>
|
| 110 |
-
<label class="block text-sm font-medium text-gray-700 mb-2">
|
| 111 |
-
<select id="
|
| 112 |
-
<option value="
|
| 113 |
-
<option value="
|
| 114 |
-
<option value="
|
| 115 |
</select>
|
| 116 |
</div>
|
| 117 |
</div>
|
| 118 |
|
| 119 |
-
<button id="generate-btn" class="w-full bg-indigo-600 hover:bg-indigo-700 text-white font-bold py-4 px-6 rounded-lg transition duration-300 shadow-lg">
|
| 120 |
<i class="fas fa-magic mr-2"></i>Сгенерировать системный промпт
|
| 121 |
</button>
|
| 122 |
</div>
|
|
@@ -127,12 +159,15 @@
|
|
| 127 |
<div class="flex flex-col md:flex-row gap-8">
|
| 128 |
<div class="md:w-2/3">
|
| 129 |
<div class="flex justify-between items-center mb-6">
|
| 130 |
-
<h2 class="text-2xl font-bold text-gray-800
|
|
|
|
|
|
|
|
|
|
| 131 |
<div class="flex space-x-2">
|
| 132 |
-
<button id="copy-btn" class="px-4 py-2 bg-gray-200 hover:bg-gray-300 text-gray-800 rounded-lg transition duration-300">
|
| 133 |
<i class="fas fa-copy mr-2"></i>Копировать
|
| 134 |
</button>
|
| 135 |
-
<button id="regenerate-btn" class="px-4 py-2 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg transition duration-300">
|
| 136 |
<i class="fas fa-sync-alt mr-2"></i>Перегенерировать
|
| 137 |
</button>
|
| 138 |
</div>
|
|
@@ -140,70 +175,104 @@
|
|
| 140 |
|
| 141 |
<div class="code-block mb-6 relative">
|
| 142 |
<div id="generated-prompt" class="whitespace-pre-wrap"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
</div>
|
| 144 |
|
| 145 |
<div class="bg-indigo-50 rounded-xl p-6 mb-8">
|
| 146 |
-
<h3 class="text-lg font-semibold text-indigo-800 mb-4
|
|
|
|
|
|
|
| 147 |
<ol class="list-decimal list-inside space-y-2 text-gray-700">
|
| 148 |
-
<li
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 152 |
</ol>
|
| 153 |
</div>
|
| 154 |
</div>
|
| 155 |
|
| 156 |
<div class="md:w-1/3">
|
| 157 |
<div class="bg-white rounded-xl shadow-lg p-6 sticky top-6">
|
| 158 |
-
<h3 class="text-xl font-bold mb-4 text-gray-800
|
|
|
|
|
|
|
|
|
|
| 159 |
|
| 160 |
<div class="mb-6">
|
| 161 |
-
<h4 class="font-semibold text-gray-700 mb-2">
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
<
|
| 167 |
-
<span class="bg-red-100 text-red-800 px-3 py-1 rounded-full text-sm">Anime.js</span>
|
| 168 |
-
<span class="bg-indigo-100 text-indigo-800 px-3 py-1 rounded-full text-sm">Three.js</span>
|
| 169 |
</div>
|
| 170 |
</div>
|
| 171 |
|
| 172 |
<div class="mb-6">
|
| 173 |
-
<h4 class="font-semibold text-gray-700 mb-2">
|
|
|
|
|
|
|
|
|
|
| 174 |
<div class="bg-gray-50 p-4 rounded-lg">
|
| 175 |
-
<div class="font-mono text-sm space-y-1">
|
| 176 |
-
<
|
| 177 |
-
<div class="ml-4">/components</div>
|
| 178 |
-
<div class="ml-4">/pages</div>
|
| 179 |
-
<div class="ml-4">/lib</div>
|
| 180 |
-
<div class="ml-4">/styles</div>
|
| 181 |
-
<div class="ml-4">/hooks</div>
|
| 182 |
-
<div>/api</div>
|
| 183 |
-
<div>/public</div>
|
| 184 |
</div>
|
| 185 |
</div>
|
| 186 |
</div>
|
| 187 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
<div>
|
| 189 |
-
<h4 class="font-semibold text-gray-700 mb-2
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
<
|
| 195 |
-
<li class="flex items-start">
|
| 196 |
-
<i class="fas fa-check-circle text-indigo-600 mt-1 mr-2"></i>
|
| 197 |
-
<span>Core Web Vitals ≥90</span>
|
| 198 |
-
</li>
|
| 199 |
-
<li class="flex items-start">
|
| 200 |
-
<i class="fas fa-check-circle text-indigo-600 mt-1 mr-2"></i>
|
| 201 |
-
<span>Полная документация в README</span>
|
| 202 |
-
</li>
|
| 203 |
-
<li class="flex items-start">
|
| 204 |
-
<i class="fas fa-check-circle text-indigo-600 mt-1 mr-2"></i>
|
| 205 |
-
<span>Готовность к деплою на Vercel</span>
|
| 206 |
-
</li>
|
| 207 |
</ul>
|
| 208 |
</div>
|
| 209 |
</div>
|
|
@@ -219,14 +288,25 @@
|
|
| 219 |
<div>
|
| 220 |
<h3 class="text-xl font-bold mb-4">DeepSite Prompt Generator</h3>
|
| 221 |
<p class="text-gray-400">Профессиональные системные промпты для быстрого создания MVP веб-приложений.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 222 |
</div>
|
| 223 |
<div>
|
| 224 |
<h4 class="font-semibold text-lg mb-4">Технологии</h4>
|
| 225 |
<ul class="space-y-2">
|
| 226 |
-
<li><a href="#" class="text-gray-400 hover:text-white transition duration-300">React/Next.js</a></li>
|
| 227 |
-
<li><a href="#" class="text-gray-400 hover:text-white transition duration-300">TailwindCSS</a></li>
|
| 228 |
-
<li><a href="#" class="text-gray-400 hover:text-white transition duration-300">FastAPI</a></li>
|
| 229 |
-
<li><a href="#" class="text-gray-400 hover:text-white transition duration-300">Three.js</a></li>
|
| 230 |
</ul>
|
| 231 |
</div>
|
| 232 |
<div>
|
|
@@ -258,7 +338,7 @@
|
|
| 258 |
document.getElementById('generate-btn').addEventListener('click', function() {
|
| 259 |
const userInput = document.getElementById('user-input').value.trim();
|
| 260 |
if (!userInput) {
|
| 261 |
-
alert('Пожалуйста,
|
| 262 |
return;
|
| 263 |
}
|
| 264 |
|
|
@@ -268,20 +348,32 @@
|
|
| 268 |
btn.disabled = true;
|
| 269 |
|
| 270 |
// Get selected options
|
| 271 |
-
const
|
| 272 |
-
const
|
| 273 |
-
const
|
| 274 |
|
| 275 |
// Simulate API call with timeout
|
| 276 |
setTimeout(() => {
|
| 277 |
-
// Generate project
|
| 278 |
-
const
|
| 279 |
-
|
| 280 |
-
// Generate prompt based on user input
|
| 281 |
-
const prompt = generateSystemPrompt(userInput, projectName, complexity, designStyle, animations);
|
| 282 |
|
| 283 |
// Display results
|
| 284 |
-
document.getElementById('
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 285 |
document.getElementById('results').classList.remove('hidden');
|
| 286 |
|
| 287 |
// Scroll to results
|
|
@@ -309,7 +401,7 @@
|
|
| 309 |
document.getElementById('regenerate-btn').addEventListener('click', function() {
|
| 310 |
const userInput = document.getElementById('user-input').value.trim();
|
| 311 |
if (!userInput) {
|
| 312 |
-
alert('Пожалуйста,
|
| 313 |
return;
|
| 314 |
}
|
| 315 |
|
|
@@ -319,17 +411,25 @@
|
|
| 319 |
btn.disabled = true;
|
| 320 |
|
| 321 |
// Get selected options
|
| 322 |
-
const
|
| 323 |
-
const
|
| 324 |
-
const
|
| 325 |
|
| 326 |
-
// Generate project name (simplified)
|
| 327 |
-
const projectName = generateProjectName(userInput);
|
| 328 |
-
|
| 329 |
// Simulate regeneration with slight variations
|
| 330 |
setTimeout(() => {
|
| 331 |
-
const
|
| 332 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 333 |
|
| 334 |
// Reset button
|
| 335 |
btn.innerHTML = '<i class="fas fa-sync-alt mr-2"></i>Перегенерировать';
|
|
@@ -338,194 +438,448 @@
|
|
| 338 |
});
|
| 339 |
|
| 340 |
// Helper functions
|
| 341 |
-
function
|
| 342 |
-
//
|
| 343 |
-
const
|
| 344 |
-
|
| 345 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 346 |
}
|
| 347 |
-
return
|
| 348 |
}
|
| 349 |
-
|
| 350 |
-
function
|
| 351 |
-
|
| 352 |
-
|
| 353 |
-
|
| 354 |
-
pages = [
|
| 355 |
-
"/ → Главная: герой-секция, CTA, краткий обзор",
|
| 356 |
-
"/about → О проекте",
|
| 357 |
-
"/contact → Контакты"
|
| 358 |
-
];
|
| 359 |
-
} else if (complexity === 'medium') {
|
| 360 |
-
pages = [
|
| 361 |
-
"/ → Главная: анимированный герой, фичи, отзывы",
|
| 362 |
-
"/services → Услуги с карточками и фильтрами",
|
| 363 |
-
"/about → О проекте с командой",
|
| 364 |
-
"/blog → Блог с пагинацией",
|
| 365 |
-
"/contact → Форма обратной связи"
|
| 366 |
-
];
|
| 367 |
-
} else {
|
| 368 |
-
pages = [
|
| 369 |
-
"/ → Главная: интерактивный герой, видео-презентация, CTA",
|
| 370 |
-
"/services → Детальные услуги с ценами",
|
| 371 |
-
"/portfolio → Портфолио с фильтрами",
|
| 372 |
-
"/blog → Блог с категориями",
|
| 373 |
-
"/about → Развернутая информация о проекте",
|
| 374 |
-
"/team → Команда с соц. ссылками",
|
| 375 |
-
"/contact → Многофункциональная форма",
|
| 376 |
-
"/dashboard → Личный кабинет (для авторизованных)"
|
| 377 |
-
];
|
| 378 |
}
|
| 379 |
-
|
| 380 |
-
|
| 381 |
-
|
| 382 |
-
|
| 383 |
-
|
| 384 |
-
|
| 385 |
-
|
| 386 |
}
|
| 387 |
-
|
| 388 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 389 |
}
|
| 390 |
-
|
| 391 |
-
|
| 392 |
-
|
| 393 |
-
|
| 394 |
-
|
|
|
|
|
|
|
| 395 |
}
|
| 396 |
-
|
| 397 |
-
|
| 398 |
-
|
| 399 |
-
|
| 400 |
-
|
| 401 |
-
if (
|
| 402 |
-
|
| 403 |
-
}
|
| 404 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 405 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 406 |
|
| 407 |
-
if (
|
| 408 |
-
|
| 409 |
-
|
|
|
|
| 410 |
}
|
| 411 |
-
|
| 412 |
-
|
| 413 |
-
|
| 414 |
-
|
| 415 |
-
|
| 416 |
-
|
| 417 |
-
|
| 418 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 419 |
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 420 |
|
| 421 |
-
if (
|
| 422 |
-
|
| 423 |
-
|
| 424 |
-
|
| 425 |
-
accent: '#666666',
|
| 426 |
-
dark: '#111111',
|
| 427 |
-
light: '#ffffff'
|
| 428 |
-
};
|
| 429 |
-
} else if (designStyle === 'corporate') {
|
| 430 |
-
colors = {
|
| 431 |
-
primary: '#2563eb',
|
| 432 |
-
secondary: '#1d4ed8',
|
| 433 |
-
accent: '#3b82f6',
|
| 434 |
-
dark: '#1e40af',
|
| 435 |
-
light: '#eff6ff'
|
| 436 |
-
};
|
| 437 |
-
} else if (designStyle === 'creative') {
|
| 438 |
-
colors = {
|
| 439 |
-
primary: '#ec4899',
|
| 440 |
-
secondary: '#db2777',
|
| 441 |
-
accent: '#f43f5e',
|
| 442 |
-
dark: '#831843',
|
| 443 |
-
light: '#fdf2f8'
|
| 444 |
-
};
|
| 445 |
}
|
| 446 |
-
|
| 447 |
-
|
| 448 |
-
return `You are DeepSite, a world-class AI architect and full-stack engineer with 30+ years of experience.
|
| 449 |
-
|
| 450 |
-
Mission: Build a flawless Web MVP for "${projectName}" based on the user request: "${userInput}"
|
| 451 |
-
|
| 452 |
-
### Context
|
| 453 |
-
• Project Name: ${projectName}
|
| 454 |
-
• Audience: ${determineAudience(userInput)}
|
| 455 |
-
• Key Value: ${determineUniqueValue(userInput)}
|
| 456 |
-
• Complexity: ${complexity === 'basic' ? 'Basic' : complexity === 'medium' ? 'Medium' : 'Advanced'}
|
| 457 |
-
|
| 458 |
-
### Pages & Structure
|
| 459 |
-
${pages.map(page => `• ${page}`).join('\n')}
|
| 460 |
-
|
| 461 |
-
### Core Features
|
| 462 |
-
${features.slice(0, 6).map(feat => `• ${feat}`).join('\n')}
|
| 463 |
-
|
| 464 |
-
### Design System
|
| 465 |
-
• Colors:
|
| 466 |
-
- Primary: ${colors.primary}
|
| 467 |
-
- Secondary: ${colors.secondary}
|
| 468 |
-
- Accent: ${colors.accent}
|
| 469 |
-
- Dark: ${colors.dark}
|
| 470 |
-
- Light: ${colors.light}
|
| 471 |
-
• Fonts: Inter (sans-serif), JetBrains Mono (monospace)
|
| 472 |
-
• Animations: ${animations === 'basic' ? 'CSS transitions' : animations === 'advanced' ? 'Anime.js' : 'Three.js 3D'}
|
| 473 |
-
• UI Components: Fully reusable with TailwindCSS variants
|
| 474 |
-
|
| 475 |
-
### Tech Stack
|
| 476 |
-
• Frontend:
|
| 477 |
-
- Next.js 13 (App Router)
|
| 478 |
-
- TailwindCSS + ${frontendLibs.join(', ')}
|
| 479 |
-
- TypeScript
|
| 480 |
-
• Backend:
|
| 481 |
-
- FastAPI
|
| 482 |
-
- MongoDB (or PostgreSQL if relational data needed)
|
| 483 |
-
- ${backendLibs.length ? backendLibs.join(', ') : 'REST API'}
|
| 484 |
-
• Deployment:
|
| 485 |
-
- Vercel (Frontend)
|
| 486 |
-
- Railway/Heroku (Backend)
|
| 487 |
-
|
| 488 |
-
### Project Structure
|
| 489 |
-
/src
|
| 490 |
-
/components - Atomic design structure
|
| 491 |
-
/pages - Next.js routes
|
| 492 |
-
/lib - Utilities and helpers
|
| 493 |
-
/styles - Global and CSS modules
|
| 494 |
-
/hooks - Custom React hooks
|
| 495 |
-
/api - API routes
|
| 496 |
-
/public - Static assets
|
| 497 |
-
|
| 498 |
-
### Quality Requirements
|
| 499 |
-
• Performance: Core Web Vitals ≥90
|
| 500 |
-
• Accessibility: WCAG 2.1 AA compliant
|
| 501 |
-
• Responsiveness: Mobile-first, all breakpoints
|
| 502 |
-
• Code Quality: ESLint + Prettier config
|
| 503 |
-
• Documentation: Full README with setup instructions
|
| 504 |
-
|
| 505 |
-
### Success Criteria
|
| 506 |
-
The generated MVP must:
|
| 507 |
-
1. Fully match the user request: "${userInput}"
|
| 508 |
-
2. Be production-ready with one-click deploy
|
| 509 |
-
3. Include all specified pages and features
|
| 510 |
-
4. Achieve performance targets
|
| 511 |
-
5. Have clean, maintainable code structure
|
| 512 |
-
|
| 513 |
-
Ready to generate the perfect MVP for "${projectName}"!`;
|
| 514 |
}
|
| 515 |
-
|
| 516 |
-
function
|
| 517 |
-
|
| 518 |
-
|
| 519 |
-
|
| 520 |
-
|
| 521 |
-
return "Users who need exactly what this project offers";
|
| 522 |
}
|
| 523 |
-
|
| 524 |
-
function
|
| 525 |
-
|
| 526 |
-
|
| 527 |
-
|
| 528 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 529 |
}
|
| 530 |
</script>
|
| 531 |
<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=neuroseqa/webcoderai" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
|
|
|
|
| 50 |
::-webkit-scrollbar-thumb:hover {
|
| 51 |
background: #555;
|
| 52 |
}
|
| 53 |
+
.tech-tag {
|
| 54 |
+
transition: all 0.2s ease;
|
| 55 |
+
}
|
| 56 |
+
.tech-tag:hover {
|
| 57 |
+
transform: translateY(-2px);
|
| 58 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
| 59 |
+
}
|
| 60 |
+
.section-highlight {
|
| 61 |
+
position: relative;
|
| 62 |
+
}
|
| 63 |
+
.section-highlight::before {
|
| 64 |
+
content: '';
|
| 65 |
+
position: absolute;
|
| 66 |
+
left: -8px;
|
| 67 |
+
top: 0;
|
| 68 |
+
height: 100%;
|
| 69 |
+
width: 4px;
|
| 70 |
+
background: #6366f1;
|
| 71 |
+
border-radius: 4px;
|
| 72 |
+
}
|
| 73 |
</style>
|
| 74 |
</head>
|
| 75 |
<body class="bg-gray-50 font-sans">
|
|
|
|
| 79 |
<div class="flex flex-col md:flex-row items-center justify-between">
|
| 80 |
<div class="mb-8 md:mb-0">
|
| 81 |
<h1 class="text-4xl font-bold mb-4">DeepSite Prompt Generator</h1>
|
| 82 |
+
<p class="text-xl opacity-90">Превратите ваше ТЗ в готовый системный промпт для генерации MVP</p>
|
| 83 |
</div>
|
| 84 |
<div class="flex space-x-4">
|
| 85 |
+
<div class="bg-white/10 backdrop-blur-sm p-4 rounded-lg transform hover:scale-105 transition duration-300">
|
| 86 |
<i class="fab fa-react text-3xl text-blue-400"></i>
|
| 87 |
</div>
|
| 88 |
+
<div class="bg-white/10 backdrop-blur-sm p-4 rounded-lg transform hover:scale-105 transition duration-300">
|
| 89 |
<i class="fab fa-python text-3xl text-yellow-400"></i>
|
| 90 |
</div>
|
| 91 |
+
<div class="bg-white/10 backdrop-blur-sm p-4 rounded-lg transform hover:scale-105 transition duration-300">
|
| 92 |
<i class="fas fa-bolt text-3xl text-purple-400"></i>
|
| 93 |
</div>
|
| 94 |
</div>
|
|
|
|
| 100 |
<main class="container mx-auto px-4 py-8">
|
| 101 |
<!-- Input Section -->
|
| 102 |
<section class="mb-12">
|
| 103 |
+
<div class="bg-white rounded-xl shadow-lg p-6 transform transition duration-300 hover:shadow-xl">
|
| 104 |
+
<h2 class="text-2xl font-bold mb-6 text-gray-800 flex items-center">
|
| 105 |
+
<i class="fas fa-file-alt mr-3 text-indigo-600"></i>
|
| 106 |
+
Введите ваше техническое задание
|
| 107 |
+
</h2>
|
| 108 |
|
| 109 |
<div class="mb-6">
|
| 110 |
+
<label for="user-input" class="block text-lg font-medium text-gray-700 mb-3">Полное ТЗ:</label>
|
| 111 |
+
<textarea id="user-input" class="w-full prompt-box p-4 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-transparent text-gray-700" placeholder="Пример:
|
| 112 |
+
– Цель: лэндинг для IT-консалтинга...
|
| 113 |
+
– Страницы: /, /services, /about, /contact...
|
| 114 |
+
– Функции: форма обратной связи, блог, авторизация через OAuth...
|
| 115 |
+
– Стек: Next.js, Tailwind, TypeScript, FastAPI, PostgreSQL...
|
| 116 |
+
– Дизайн: светлая палитра, плавные переходы...
|
| 117 |
+
– Нефункционально: Lighthouse ≥ 90, mobile-first...
|
| 118 |
+
– CI/CD: Vercel, Docker, Railway..."></textarea>
|
| 119 |
</div>
|
| 120 |
|
| 121 |
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 mb-6">
|
| 122 |
<div>
|
| 123 |
+
<label class="block text-sm font-medium text-gray-700 mb-2">Тип проекта</label>
|
| 124 |
+
<select id="project-type" class="w-full p-3 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500">
|
| 125 |
+
<option value="landing">Лэндинг</option>
|
| 126 |
+
<option value="ecommerce">Интернет-магазин</option>
|
| 127 |
+
<option value="saas">SaaS приложение</option>
|
| 128 |
+
<option value="portal">Корпоративный портал</option>
|
| 129 |
+
<option value="blog">Блог/Медиа</option>
|
| 130 |
+
<option value="dashboard">Дашборд/Аналитика</option>
|
| 131 |
</select>
|
| 132 |
</div>
|
| 133 |
<div>
|
| 134 |
+
<label class="block text-sm font-medium text-gray-700 mb-2">Уровень детализации</label>
|
| 135 |
+
<select id="detail-level" class="w-full p-3 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500">
|
| 136 |
+
<option value="basic">Базовый</option>
|
| 137 |
+
<option value="detailed" selected>Детализированный</option>
|
| 138 |
+
<option value="expert">Экспертный</option>
|
|
|
|
| 139 |
</select>
|
| 140 |
</div>
|
| 141 |
<div>
|
| 142 |
+
<label class="block text-sm font-medium text-gray-700 mb-2">Приоритет</label>
|
| 143 |
+
<select id="priority" class="w-full p-3 border border-gray-300 rounded-lg focus:ring-indigo-500 focus:border-indigo-500">
|
| 144 |
+
<option value="speed">Скорость разработки</option>
|
| 145 |
+
<option value="quality" selected>Качество кода</option>
|
| 146 |
+
<option value="performance">Производительность</option>
|
| 147 |
</select>
|
| 148 |
</div>
|
| 149 |
</div>
|
| 150 |
|
| 151 |
+
<button id="generate-btn" class="w-full bg-indigo-600 hover:bg-indigo-700 text-white font-bold py-4 px-6 rounded-lg transition duration-300 shadow-lg transform hover:scale-[1.01]">
|
| 152 |
<i class="fas fa-magic mr-2"></i>Сгенерировать системный промпт
|
| 153 |
</button>
|
| 154 |
</div>
|
|
|
|
| 159 |
<div class="flex flex-col md:flex-row gap-8">
|
| 160 |
<div class="md:w-2/3">
|
| 161 |
<div class="flex justify-between items-center mb-6">
|
| 162 |
+
<h2 class="text-2xl font-bold text-gray-800 flex items-center">
|
| 163 |
+
<i class="fas fa-terminal mr-3 text-indigo-600"></i>
|
| 164 |
+
Ваш системный промпт для DeepSite
|
| 165 |
+
</h2>
|
| 166 |
<div class="flex space-x-2">
|
| 167 |
+
<button id="copy-btn" class="px-4 py-2 bg-gray-200 hover:bg-gray-300 text-gray-800 rounded-lg transition duration-300 flex items-center">
|
| 168 |
<i class="fas fa-copy mr-2"></i>Копировать
|
| 169 |
</button>
|
| 170 |
+
<button id="regenerate-btn" class="px-4 py-2 bg-indigo-600 hover:bg-indigo-700 text-white rounded-lg transition duration-300 flex items-center">
|
| 171 |
<i class="fas fa-sync-alt mr-2"></i>Перегенерировать
|
| 172 |
</button>
|
| 173 |
</div>
|
|
|
|
| 175 |
|
| 176 |
<div class="code-block mb-6 relative">
|
| 177 |
<div id="generated-prompt" class="whitespace-pre-wrap"></div>
|
| 178 |
+
<div id="prompt-structure" class="hidden">
|
| 179 |
+
<div class="text-indigo-400 font-bold mb-2 section-highlight">You are DeepSite, a world-class AI architect and full-stack engineer with 30+ years of experience.</div>
|
| 180 |
+
<div class="text-indigo-400 font-bold mb-4 section-highlight">Mission: Build a production-ready Web-MVP that fully satisfies the following technical specification:</div>
|
| 181 |
+
|
| 182 |
+
<div class="text-green-400 font-semibold mt-4 mb-2 section-highlight">### 1. Context & Goals</div>
|
| 183 |
+
<div id="context-goals"></div>
|
| 184 |
+
|
| 185 |
+
<div class="text-green-400 font-semibold mt-4 mb-2 section-highlight">### 2. Pages & Routes</div>
|
| 186 |
+
<div id="pages-routes"></div>
|
| 187 |
+
|
| 188 |
+
<div class="text-green-400 font-semibold mt-4 mb-2 section-highlight">### 3. Core Functionality</div>
|
| 189 |
+
<div id="core-functionality"></div>
|
| 190 |
+
|
| 191 |
+
<div class="text-green-400 font-semibold mt-4 mb-2 section-highlight">### 4. Tech Stack & Architecture</div>
|
| 192 |
+
<div id="tech-stack"></div>
|
| 193 |
+
|
| 194 |
+
<div class="text-green-400 font-semibold mt-4 mb-2 section-highlight">### 5. UX/UI & Design</div>
|
| 195 |
+
<div id="ux-ui"></div>
|
| 196 |
+
|
| 197 |
+
<div class="text-green-400 font-semibold mt-4 mb-2 section-highlight">### 6. Non-Functional Requirements</div>
|
| 198 |
+
<div id="non-functional"></div>
|
| 199 |
+
|
| 200 |
+
<div class="text-green-400 font-semibold mt-4 mb-2 section-highlight">### 7. Deliverables & Deployment</div>
|
| 201 |
+
<div id="deliverables"></div>
|
| 202 |
+
</div>
|
| 203 |
</div>
|
| 204 |
|
| 205 |
<div class="bg-indigo-50 rounded-xl p-6 mb-8">
|
| 206 |
+
<h3 class="text-lg font-semibold text-indigo-800 mb-4 flex items-center">
|
| 207 |
+
<i class="fas fa-lightbulb mr-2"></i>Как использовать этот промпт
|
| 208 |
+
</h3>
|
| 209 |
<ol class="list-decimal list-inside space-y-2 text-gray-700">
|
| 210 |
+
<li class="flex items-start">
|
| 211 |
+
<span class="mr-2">1.</span>
|
| 212 |
+
<span>Скопируйте весь текст промпта (кнопка выше)</span>
|
| 213 |
+
</li>
|
| 214 |
+
<li class="flex items-start">
|
| 215 |
+
<span class="mr-2">2.</span>
|
| 216 |
+
<span>Вставьте в DeepSite или аналогичную систему</span>
|
| 217 |
+
</li>
|
| 218 |
+
<li class="flex items-start">
|
| 219 |
+
<span class="mr-2">3.</span>
|
| 220 |
+
<span>Запустите генерацию кода</span>
|
| 221 |
+
</li>
|
| 222 |
+
<li class="flex items-start">
|
| 223 |
+
<span class="mr-2">4.</span>
|
| 224 |
+
<span>Получите готовый MVP с настроенной структурой проекта</span>
|
| 225 |
+
</li>
|
| 226 |
</ol>
|
| 227 |
</div>
|
| 228 |
</div>
|
| 229 |
|
| 230 |
<div class="md:w-1/3">
|
| 231 |
<div class="bg-white rounded-xl shadow-lg p-6 sticky top-6">
|
| 232 |
+
<h3 class="text-xl font-bold mb-4 text-gray-800 flex items-center">
|
| 233 |
+
<i class="fas fa-info-circle mr-2 text-indigo-600"></i>
|
| 234 |
+
Детали вашего проекта
|
| 235 |
+
</h3>
|
| 236 |
|
| 237 |
<div class="mb-6">
|
| 238 |
+
<h4 class="font-semibold text-gray-700 mb-2 flex items-center">
|
| 239 |
+
<i class="fas fa-layer-group mr-2 text-indigo-600"></i>
|
| 240 |
+
Стек технологий
|
| 241 |
+
</h4>
|
| 242 |
+
<div class="flex flex-wrap gap-2" id="tech-tags">
|
| 243 |
+
<!-- Will be filled by JS -->
|
|
|
|
|
|
|
| 244 |
</div>
|
| 245 |
</div>
|
| 246 |
|
| 247 |
<div class="mb-6">
|
| 248 |
+
<h4 class="font-semibold text-gray-700 mb-2 flex items-center">
|
| 249 |
+
<i class="fas fa-sitemap mr-2 text-indigo-600"></i>
|
| 250 |
+
Структура проекта
|
| 251 |
+
</h4>
|
| 252 |
<div class="bg-gray-50 p-4 rounded-lg">
|
| 253 |
+
<div class="font-mono text-sm space-y-1" id="project-structure">
|
| 254 |
+
<!-- Will be filled by JS -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 255 |
</div>
|
| 256 |
</div>
|
| 257 |
</div>
|
| 258 |
|
| 259 |
+
<div class="mb-6">
|
| 260 |
+
<h4 class="font-semibold text-gray-700 mb-2 flex items-center">
|
| 261 |
+
<i class="fas fa-tachometer-alt mr-2 text-indigo-600"></i>
|
| 262 |
+
Метрики качества
|
| 263 |
+
</h4>
|
| 264 |
+
<ul class="space-y-2 text-sm text-gray-700" id="quality-metrics">
|
| 265 |
+
<!-- Will be filled by JS -->
|
| 266 |
+
</ul>
|
| 267 |
+
</div>
|
| 268 |
+
|
| 269 |
<div>
|
| 270 |
+
<h4 class="font-semibold text-gray-700 mb-2 flex items-center">
|
| 271 |
+
<i class="fas fa-rocket mr-2 text-indigo-600"></i>
|
| 272 |
+
Опции деплоя
|
| 273 |
+
</h4>
|
| 274 |
+
<ul class="space-y-2 text-sm text-gray-700" id="deployment-options">
|
| 275 |
+
<!-- Will be filled by JS -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 276 |
</ul>
|
| 277 |
</div>
|
| 278 |
</div>
|
|
|
|
| 288 |
<div>
|
| 289 |
<h3 class="text-xl font-bold mb-4">DeepSite Prompt Generator</h3>
|
| 290 |
<p class="text-gray-400">Профессиональные системные промпты для быстрого создания MVP веб-приложений.</p>
|
| 291 |
+
<div class="mt-4 flex space-x-4">
|
| 292 |
+
<a href="#" class="text-gray-400 hover:text-white transition duration-300">
|
| 293 |
+
<i class="fab fa-twitter text-xl"></i>
|
| 294 |
+
</a>
|
| 295 |
+
<a href="#" class="text-gray-400 hover:text-white transition duration-300">
|
| 296 |
+
<i class="fab fa-github text-xl"></i>
|
| 297 |
+
</a>
|
| 298 |
+
<a href="#" class="text-gray-400 hover:text-white transition duration-300">
|
| 299 |
+
<i class="fab fa-discord text-xl"></i>
|
| 300 |
+
</a>
|
| 301 |
+
</div>
|
| 302 |
</div>
|
| 303 |
<div>
|
| 304 |
<h4 class="font-semibold text-lg mb-4">Технологии</h4>
|
| 305 |
<ul class="space-y-2">
|
| 306 |
+
<li><a href="#" class="text-gray-400 hover:text-white transition duration-300 flex items-center"><i class="fab fa-react mr-2"></i> React/Next.js</a></li>
|
| 307 |
+
<li><a href="#" class="text-gray-400 hover:text-white transition duration-300 flex items-center"><i class="fab fa-css3-alt mr-2"></i> TailwindCSS</a></li>
|
| 308 |
+
<li><a href="#" class="text-gray-400 hover:text-white transition duration-300 flex items-center"><i class="fab fa-python mr-2"></i> FastAPI</a></li>
|
| 309 |
+
<li><a href="#" class="text-gray-400 hover:text-white transition duration-300 flex items-center"><i class="fas fa-cube mr-2"></i> Three.js</a></li>
|
| 310 |
</ul>
|
| 311 |
</div>
|
| 312 |
<div>
|
|
|
|
| 338 |
document.getElementById('generate-btn').addEventListener('click', function() {
|
| 339 |
const userInput = document.getElementById('user-input').value.trim();
|
| 340 |
if (!userInput) {
|
| 341 |
+
alert('Пожалуйста, введите ваше техническое задание');
|
| 342 |
return;
|
| 343 |
}
|
| 344 |
|
|
|
|
| 348 |
btn.disabled = true;
|
| 349 |
|
| 350 |
// Get selected options
|
| 351 |
+
const projectType = document.getElementById('project-type').value;
|
| 352 |
+
const detailLevel = document.getElementById('detail-level').value;
|
| 353 |
+
const priority = document.getElementById('priority').value;
|
| 354 |
|
| 355 |
// Simulate API call with timeout
|
| 356 |
setTimeout(() => {
|
| 357 |
+
// Generate project details
|
| 358 |
+
const projectDetails = analyzeUserSpec(userInput, projectType, detailLevel, priority);
|
|
|
|
|
|
|
|
|
|
| 359 |
|
| 360 |
// Display results
|
| 361 |
+
document.getElementById('prompt-structure').classList.remove('hidden');
|
| 362 |
+
document.getElementById('context-goals').innerHTML = formatContextGoals(projectDetails);
|
| 363 |
+
document.getElementById('pages-routes').innerHTML = formatPagesRoutes(projectDetails);
|
| 364 |
+
document.getElementById('core-functionality').innerHTML = formatCoreFunctionality(projectDetails);
|
| 365 |
+
document.getElementById('tech-stack').innerHTML = formatTechStack(projectDetails);
|
| 366 |
+
document.getElementById('ux-ui').innerHTML = formatUxUi(projectDetails);
|
| 367 |
+
document.getElementById('non-functional').innerHTML = formatNonFunctional(projectDetails);
|
| 368 |
+
document.getElementById('deliverables').innerHTML = formatDeliverables(projectDetails);
|
| 369 |
+
|
| 370 |
+
// Update sidebar
|
| 371 |
+
updateTechTags(projectDetails.techStack);
|
| 372 |
+
updateProjectStructure(projectType);
|
| 373 |
+
updateQualityMetrics(projectDetails.nonFunctional);
|
| 374 |
+
updateDeploymentOptions(projectDetails.techStack);
|
| 375 |
+
|
| 376 |
+
// Show results section
|
| 377 |
document.getElementById('results').classList.remove('hidden');
|
| 378 |
|
| 379 |
// Scroll to results
|
|
|
|
| 401 |
document.getElementById('regenerate-btn').addEventListener('click', function() {
|
| 402 |
const userInput = document.getElementById('user-input').value.trim();
|
| 403 |
if (!userInput) {
|
| 404 |
+
alert('Пожалуйста, введите ваше техническое задание');
|
| 405 |
return;
|
| 406 |
}
|
| 407 |
|
|
|
|
| 411 |
btn.disabled = true;
|
| 412 |
|
| 413 |
// Get selected options
|
| 414 |
+
const projectType = document.getElementById('project-type').value;
|
| 415 |
+
const detailLevel = document.getElementById('detail-level').value;
|
| 416 |
+
const priority = document.getElementById('priority').value;
|
| 417 |
|
|
|
|
|
|
|
|
|
|
| 418 |
// Simulate regeneration with slight variations
|
| 419 |
setTimeout(() => {
|
| 420 |
+
const projectDetails = analyzeUserSpec(userInput, projectType, detailLevel, priority, true);
|
| 421 |
+
|
| 422 |
+
// Update prompt sections
|
| 423 |
+
document.getElementById('context-goals').innerHTML = formatContextGoals(projectDetails);
|
| 424 |
+
document.getElementById('pages-routes').innerHTML = formatPagesRoutes(projectDetails);
|
| 425 |
+
document.getElementById('core-functionality').innerHTML = formatCoreFunctionality(projectDetails);
|
| 426 |
+
document.getElementById('tech-stack').innerHTML = formatTechStack(projectDetails);
|
| 427 |
+
document.getElementById('ux-ui').innerHTML = formatUxUi(projectDetails);
|
| 428 |
+
document.getElementById('non-functional').innerHTML = formatNonFunctional(projectDetails);
|
| 429 |
+
document.getElementById('deliverables').innerHTML = formatDeliverables(projectDetails);
|
| 430 |
+
|
| 431 |
+
// Update sidebar
|
| 432 |
+
updateTechTags(projectDetails.techStack);
|
| 433 |
|
| 434 |
// Reset button
|
| 435 |
btn.innerHTML = '<i class="fas fa-sync-alt mr-2"></i>Перегенерировать';
|
|
|
|
| 438 |
});
|
| 439 |
|
| 440 |
// Helper functions
|
| 441 |
+
function analyzeUserSpec(userInput, projectType, detailLevel, priority, isRegenerate = false) {
|
| 442 |
+
// Extract project name
|
| 443 |
+
const projectName = extractProjectName(userInput) ||
|
| 444 |
+
(isRegenerate ? "Обновленный проект" : getDefaultProjectName(projectType));
|
| 445 |
+
|
| 446 |
+
// Extract goals and audience
|
| 447 |
+
const goals = extractGoals(userInput) || getDefaultGoals(projectType);
|
| 448 |
+
const audience = extractAudience(userInput) || getDefaultAudience(projectType);
|
| 449 |
+
|
| 450 |
+
// Extract pages and routes
|
| 451 |
+
const pages = extractPages(userInput) || getDefaultPages(projectType);
|
| 452 |
+
|
| 453 |
+
// Extract functionality
|
| 454 |
+
const functionality = extractFunctionality(userInput) || getDefaultFunctionality(projectType);
|
| 455 |
+
|
| 456 |
+
// Extract tech stack
|
| 457 |
+
const techStack = extractTechStack(userInput) || getDefaultTechStack(projectType, priority);
|
| 458 |
+
|
| 459 |
+
// Extract design requirements
|
| 460 |
+
const design = extractDesign(userInput) || getDefaultDesign(projectType);
|
| 461 |
+
|
| 462 |
+
// Extract non-functional requirements
|
| 463 |
+
const nonFunctional = extractNonFunctional(userInput) || getDefaultNonFunctional(priority);
|
| 464 |
+
|
| 465 |
+
return {
|
| 466 |
+
projectName,
|
| 467 |
+
goals,
|
| 468 |
+
audience,
|
| 469 |
+
pages,
|
| 470 |
+
functionality,
|
| 471 |
+
techStack,
|
| 472 |
+
design,
|
| 473 |
+
nonFunctional,
|
| 474 |
+
detailLevel
|
| 475 |
+
};
|
| 476 |
+
}
|
| 477 |
+
|
| 478 |
+
function extractProjectName(input) {
|
| 479 |
+
const nameMatch = input.match(/Цель:\s*(.*?)(?:\n|$)/i);
|
| 480 |
+
if (nameMatch && nameMatch[1]) {
|
| 481 |
+
return nameMatch[1].trim();
|
| 482 |
}
|
| 483 |
+
return null;
|
| 484 |
}
|
| 485 |
+
|
| 486 |
+
function extractGoals(input) {
|
| 487 |
+
const goalsMatch = input.match(/Цели?:\s*(.*?)(?:\n|$)/i);
|
| 488 |
+
if (goalsMatch && goalsMatch[1]) {
|
| 489 |
+
return goalsMatch[1].trim().split(',').map(g => g.trim());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 490 |
}
|
| 491 |
+
return null;
|
| 492 |
+
}
|
| 493 |
+
|
| 494 |
+
function extractAudience(input) {
|
| 495 |
+
const audienceMatch = input.match(/Аудитория:\s*(.*?)(?:\n|$)/i);
|
| 496 |
+
if (audienceMatch && audienceMatch[1]) {
|
| 497 |
+
return audienceMatch[1].trim();
|
| 498 |
}
|
| 499 |
+
return null;
|
| 500 |
+
}
|
| 501 |
+
|
| 502 |
+
function extractPages(input) {
|
| 503 |
+
const pagesMatch = input.match(/Страницы:\s*(.*?)(?:\n|$)/i);
|
| 504 |
+
if (pagesMatch && pagesMatch[1]) {
|
| 505 |
+
return pagesMatch[1].trim().split(',').map(p => p.trim());
|
| 506 |
}
|
| 507 |
+
return null;
|
| 508 |
+
}
|
| 509 |
+
|
| 510 |
+
function extractFunctionality(input) {
|
| 511 |
+
const funcMatch = input.match(/Функции?:\s*(.*?)(?:\n|$)/i);
|
| 512 |
+
if (funcMatch && funcMatch[1]) {
|
| 513 |
+
return funcMatch[1].trim().split(',').map(f => f.trim());
|
| 514 |
}
|
| 515 |
+
return null;
|
| 516 |
+
}
|
| 517 |
+
|
| 518 |
+
function extractTechStack(input) {
|
| 519 |
+
const stackMatch = input.match(/Стек:\s*(.*?)(?:\n|$)/i);
|
| 520 |
+
if (stackMatch && stackMatch[1]) {
|
| 521 |
+
return stackMatch[1].trim().split(',').map(s => s.trim());
|
| 522 |
+
}
|
| 523 |
+
return null;
|
| 524 |
+
}
|
| 525 |
+
|
| 526 |
+
function extractDesign(input) {
|
| 527 |
+
const designMatch = input.match(/Дизайн:\s*(.*?)(?:\n|$)/i);
|
| 528 |
+
if (designMatch && designMatch[1]) {
|
| 529 |
+
return designMatch[1].trim();
|
| 530 |
+
}
|
| 531 |
+
return null;
|
| 532 |
+
}
|
| 533 |
+
|
| 534 |
+
function extractNonFunctional(input) {
|
| 535 |
+
const nfMatch = input.match(/Нефункционально:\s*(.*?)(?:\n|$)/i);
|
| 536 |
+
if (nfMatch && nfMatch[1]) {
|
| 537 |
+
return nfMatch[1].trim().split(',').map(n => n.trim());
|
| 538 |
}
|
| 539 |
+
return null;
|
| 540 |
+
}
|
| 541 |
+
|
| 542 |
+
function getDefaultProjectName(type) {
|
| 543 |
+
const names = {
|
| 544 |
+
landing: "Корпоративный лэндинг",
|
| 545 |
+
ecommerce: "Интернет-магазин",
|
| 546 |
+
saas: "SaaS приложение",
|
| 547 |
+
portal: "Корпоративный портал",
|
| 548 |
+
blog: "Медиа-платформа",
|
| 549 |
+
dashboard: "Аналитический дашборд"
|
| 550 |
+
};
|
| 551 |
+
return names[type] || "Веб-проект";
|
| 552 |
+
}
|
| 553 |
+
|
| 554 |
+
function getDefaultGoals(type) {
|
| 555 |
+
const goals = {
|
| 556 |
+
landing: ["Генерация лидов", "Повышение узнаваемости бренда"],
|
| 557 |
+
ecommerce: ["Увеличение конверсии", "Рост среднего чека"],
|
| 558 |
+
saas: ["Привлечение подписчиков", "Удержание пользователей"],
|
| 559 |
+
portal: ["Автоматизация процессов", "Централизация информации"],
|
| 560 |
+
blog: ["Увеличение трафика", "Монетизация контента"],
|
| 561 |
+
dashboard: ["Визуализация данных", "Автоматизация отчетности"]
|
| 562 |
+
};
|
| 563 |
+
return goals[type] || ["Достижение бизнес-целей", "Удовлетворение потребностей пользователей"];
|
| 564 |
+
}
|
| 565 |
+
|
| 566 |
+
function getDefaultAudience(type) {
|
| 567 |
+
const audiences = {
|
| 568 |
+
landing: "Потенциальные клиенты и партнеры",
|
| 569 |
+
ecommerce: "Покупатели товаров/услуг",
|
| 570 |
+
saas: "Малый и средний бизнес",
|
| 571 |
+
portal: "Сотрудники компании",
|
| 572 |
+
blog: "Целевая аудитория по тематике",
|
| 573 |
+
dashboard: "Менеджеры и аналитики"
|
| 574 |
+
};
|
| 575 |
+
return audiences[type] || "Целевые пользователи";
|
| 576 |
+
}
|
| 577 |
+
|
| 578 |
+
function getDefaultPages(type) {
|
| 579 |
+
const pages = {
|
| 580 |
+
landing: ["/", "/services", "/about", "/contact"],
|
| 581 |
+
ecommerce: ["/", "/catalog", "/product/:id", "/cart", "/checkout"],
|
| 582 |
+
saas: ["/", "/pricing", "/features", "/login", "/dashboard"],
|
| 583 |
+
portal: ["/", "/news", "/documents", "/contacts", "/profile"],
|
| 584 |
+
blog: ["/", "/posts", "/categories", "/about", "/contact"],
|
| 585 |
+
dashboard: ["/", "/login", "/dashboard", "/reports", "/settings"]
|
| 586 |
+
};
|
| 587 |
+
return pages[type] || ["/", "/about", "/contact"];
|
| 588 |
+
}
|
| 589 |
+
|
| 590 |
+
function getDefaultFunctionality(type) {
|
| 591 |
+
const funcs = {
|
| 592 |
+
landing: ["Форма обратной связи", "Галерея работ", "Отзывы клиентов"],
|
| 593 |
+
ecommerce: ["Каталог товаров", "Корзина", "Онлайн-оплата"],
|
| 594 |
+
saas: ["Многофакторная аутентификация", "Подписки", "API интеграции"],
|
| 595 |
+
portal: ["Поиск по документам", "Календарь событий", "Чат"],
|
| 596 |
+
blog: ["Система комментариев", "Поиск по статьям", "Подписка на новости"],
|
| 597 |
+
dashboard: ["Графики и диаграммы", "Экспорт данных", "Уведомления"]
|
| 598 |
+
};
|
| 599 |
+
return funcs[type] || ["Форма обратной связи", "Базовый контент"];
|
| 600 |
+
}
|
| 601 |
+
|
| 602 |
+
function getDefaultTechStack(type, priority) {
|
| 603 |
+
const baseStacks = {
|
| 604 |
+
landing: ["Next.js", "TailwindCSS", "TypeScript"],
|
| 605 |
+
ecommerce: ["Next.js", "TailwindCSS", "Node.js", "MongoDB"],
|
| 606 |
+
saas: ["Next.js", "TailwindCSS", "FastAPI", "PostgreSQL"],
|
| 607 |
+
portal: ["Next.js", "Material UI", "NestJS", "PostgreSQL"],
|
| 608 |
+
blog: ["Next.js", "TailwindCSS", "Strapi", "MySQL"],
|
| 609 |
+
dashboard: ["React", "Material UI", "Express", "MongoDB"]
|
| 610 |
+
};
|
| 611 |
+
|
| 612 |
+
const base = baseStacks[type] || ["Next.js", "TailwindCSS", "TypeScript"];
|
| 613 |
|
| 614 |
+
if (priority === "performance") {
|
| 615 |
+
base.push("Redis", "CDN", "Web Workers");
|
| 616 |
+
} else if (priority === "quality") {
|
| 617 |
+
base.push("Storybook", "Cypress", "Jest");
|
| 618 |
}
|
| 619 |
+
|
| 620 |
+
return base;
|
| 621 |
+
}
|
| 622 |
+
|
| 623 |
+
function getDefaultDesign(type) {
|
| 624 |
+
const designs = {
|
| 625 |
+
landing: "Чистый современный дизайн с акцентами на CTA",
|
| 626 |
+
ecommerce: "Удобная навигация и быстрый доступ к корзине",
|
| 627 |
+
saas: "Минималистичный интерфейс с акцентом на функционал",
|
| 628 |
+
portal: "Корпоративный стиль с четкой структурой",
|
| 629 |
+
blog: "Читабельный контент с хорошей типографикой",
|
| 630 |
+
dashboard: "Функциональный интерфейс с информативными визуализациями"
|
| 631 |
};
|
| 632 |
+
return designs[type] || "Современный адаптивный дизайн";
|
| 633 |
+
}
|
| 634 |
+
|
| 635 |
+
function getDefaultNonFunctional(priority) {
|
| 636 |
+
const base = ["Lighthouse ≥ 80", "Mobile-first", "HTTPS"];
|
| 637 |
|
| 638 |
+
if (priority === "performance") {
|
| 639 |
+
base.push("Время загрузки <1s", "Кеширование ресурсов", "Оптимизация изображений");
|
| 640 |
+
} else if (priority === "quality") {
|
| 641 |
+
base.push("100% покрытие типов", "ESLint + Prettier", "Документация API");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 642 |
}
|
| 643 |
+
|
| 644 |
+
return base;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 645 |
}
|
| 646 |
+
|
| 647 |
+
function formatContextGoals(details) {
|
| 648 |
+
return `• Project: ${details.projectName}\n` +
|
| 649 |
+
`• Goals: ${details.goals.join(', ')}\n` +
|
| 650 |
+
`• Audience: ${details.audience}\n` +
|
| 651 |
+
`• Detail Level: ${details.detailLevel === 'basic' ? 'Basic' : details.detailLevel === 'detailed' ? 'Detailed' : 'Expert'}`;
|
|
|
|
| 652 |
}
|
| 653 |
+
|
| 654 |
+
function formatPagesRoutes(details) {
|
| 655 |
+
return details.pages.map(page => {
|
| 656 |
+
const pageName = page.replace(/^\//, '').replace(/:id/, '[id]') || 'home';
|
| 657 |
+
return `• ${page} → ${getPageDescription(pageName, details.projectType)}`;
|
| 658 |
+
}).join('\n');
|
| 659 |
+
}
|
| 660 |
+
|
| 661 |
+
function getPageDescription(page, projectType) {
|
| 662 |
+
const descriptions = {
|
| 663 |
+
landing: {
|
| 664 |
+
home: "Hero section with CTA, features, testimonials",
|
| 665 |
+
services: "List of services with descriptions",
|
| 666 |
+
about: "Company info, team members",
|
| 667 |
+
contact: "Contact form with map"
|
| 668 |
+
},
|
| 669 |
+
ecommerce: {
|
| 670 |
+
home: "Featured products, promotions",
|
| 671 |
+
catalog: "Product grid with filters",
|
| 672 |
+
product: "Product details, gallery, add to cart",
|
| 673 |
+
cart: "Cart items, total, checkout button",
|
| 674 |
+
checkout: "Order form, payment methods"
|
| 675 |
+
},
|
| 676 |
+
saas: {
|
| 677 |
+
home: "Value proposition, features",
|
| 678 |
+
pricing: "Subscription plans comparison",
|
| 679 |
+
features: "Detailed feature descriptions",
|
| 680 |
+
login: "Auth form, password recovery",
|
| 681 |
+
dashboard: "User workspace with widgets"
|
| 682 |
+
}
|
| 683 |
+
};
|
| 684 |
+
|
| 685 |
+
const defaultDesc = {
|
| 686 |
+
home: "Main page with key information",
|
| 687 |
+
about: "Information about the project",
|
| 688 |
+
contact: "Contact information and form"
|
| 689 |
+
};
|
| 690 |
+
|
| 691 |
+
return (descriptions[projectType] && descriptions[projectType][page]) ||
|
| 692 |
+
defaultDesc[page] ||
|
| 693 |
+
"Page with relevant content";
|
| 694 |
+
}
|
| 695 |
+
|
| 696 |
+
function formatCoreFunctionality(details) {
|
| 697 |
+
return details.functionality.map((func, i) =>
|
| 698 |
+
`• ${func}: ${getFunctionalityDescription(func, details.projectType)}`
|
| 699 |
+
).join('\n');
|
| 700 |
+
}
|
| 701 |
+
|
| 702 |
+
function getFunctionalityDescription(func, projectType) {
|
| 703 |
+
const descriptions = {
|
| 704 |
+
"Форма обратной связи": "Secure submission with validation and notifications",
|
| 705 |
+
"Каталог товаров": "Filterable grid with pagination and sorting",
|
| 706 |
+
"Корзина": "Persistent cart with quantity adjustment",
|
| 707 |
+
"Многофакторная аутентификация": "Email/SMS + password with JWT tokens",
|
| 708 |
+
"Подписки": "Recurring payments with Stripe/PayPal",
|
| 709 |
+
"Поиск по документам": "Full-text search with filters",
|
| 710 |
+
"Система комментариев": "Nested threads with moderation",
|
| 711 |
+
"Графики и диаграммы": "Interactive visualizations with Chart.js"
|
| 712 |
+
};
|
| 713 |
+
|
| 714 |
+
return descriptions[func] || "Implementation according to requirements";
|
| 715 |
+
}
|
| 716 |
+
|
| 717 |
+
function formatTechStack(details) {
|
| 718 |
+
const { techStack } = details;
|
| 719 |
+
const frontend = techStack.filter(t =>
|
| 720 |
+
t.includes('Next') || t.includes('React') || t.includes('Vue') ||
|
| 721 |
+
t.includes('Svelte') || t.includes('Tailwind') || t.includes('Material')
|
| 722 |
+
);
|
| 723 |
+
const backend = techStack.filter(t =>
|
| 724 |
+
t.includes('Node') || t.includes('FastAPI') || t.includes('Nest') ||
|
| 725 |
+
t.includes('Express') || t.includes('Django') || t.includes('Laravel')
|
| 726 |
+
);
|
| 727 |
+
const database = techStack.filter(t =>
|
| 728 |
+
t.includes('Mongo') || t.includes('Postgre') || t.includes('MySQL') ||
|
| 729 |
+
t.includes('SQL') || t.includes('Redis')
|
| 730 |
+
);
|
| 731 |
+
const devops = techStack.filter(t =>
|
| 732 |
+
t.includes('Docker') || t.includes('Kubernetes') || t.includes('CI/CD') ||
|
| 733 |
+
t.includes('Vercel') || t.includes('Railway') || t.includes('AWS')
|
| 734 |
+
);
|
| 735 |
+
|
| 736 |
+
return `• Frontend: ${frontend.join(', ') || 'Not specified'}\n` +
|
| 737 |
+
`• Backend: ${backend.join(', ') || 'Not specified'}\n` +
|
| 738 |
+
`• Database: ${database.join(', ') || 'Not specified'}\n` +
|
| 739 |
+
`• DevOps: ${devops.join(', ') || 'Not specified'}\n` +
|
| 740 |
+
`• Other: ${techStack.filter(t =>
|
| 741 |
+
!frontend.includes(t) && !backend.includes(t) &&
|
| 742 |
+
!database.includes(t) && !devops.includes(t)
|
| 743 |
+
).join(', ') || 'None'}`;
|
| 744 |
+
}
|
| 745 |
+
|
| 746 |
+
function formatUxUi(details) {
|
| 747 |
+
return `• Design Style: ${details.design}\n` +
|
| 748 |
+
`• Colors: Primary #6366f1, Secondary #8b5cf6\n` +
|
| 749 |
+
`• Fonts: Inter (sans-serif), JetBrains Mono (monospace)\n` +
|
| 750 |
+
`• Animations: ${details.projectType === 'landing' ? 'Scroll-triggered' : 'Subtle transitions'}\n` +
|
| 751 |
+
`• Accessibility: WCAG 2.1 AA compliant`;
|
| 752 |
+
}
|
| 753 |
+
|
| 754 |
+
function formatNonFunctional(details) {
|
| 755 |
+
return `• Performance: ${details.nonFunctional.join(', ')}\n` +
|
| 756 |
+
`• Security: JWT auth, input sanitization, rate limiting\n` +
|
| 757 |
+
`• Scalability: Horizontal scaling ready\n` +
|
| 758 |
+
`• Maintainability: Clean architecture, documentation`;
|
| 759 |
+
}
|
| 760 |
+
|
| 761 |
+
function formatDeliverables(details) {
|
| 762 |
+
return `• Code Repository: Full source code with commit history\n` +
|
| 763 |
+
`• README: Setup instructions, architecture overview\n` +
|
| 764 |
+
`• API Documentation: Swagger/OpenAPI specs\n` +
|
| 765 |
+
`• Deployment: One-click deploy to Vercel + Railway\n` +
|
| 766 |
+
`• Quality Report: Lighthouse scores, test coverage`;
|
| 767 |
+
}
|
| 768 |
+
|
| 769 |
+
function updateTechTags(techStack) {
|
| 770 |
+
const colors = {
|
| 771 |
+
'Next.js': 'bg-blue-100 text-blue-800',
|
| 772 |
+
'React': 'bg-blue-100 text-blue-800',
|
| 773 |
+
'TailwindCSS': 'bg-cyan-100 text-cyan-800',
|
| 774 |
+
'TypeScript': 'bg-blue-100 text-blue-800',
|
| 775 |
+
'Node.js': 'bg-green-100 text-green-800',
|
| 776 |
+
'FastAPI': 'bg-yellow-100 text-yellow-800',
|
| 777 |
+
'PostgreSQL': 'bg-indigo-100 text-indigo-800',
|
| 778 |
+
'MongoDB': 'bg-green-100 text-green-800',
|
| 779 |
+
'Docker': 'bg-blue-100 text-blue-800',
|
| 780 |
+
'Vercel': 'bg-black text-white',
|
| 781 |
+
'Material UI': 'bg-purple-100 text-purple-800',
|
| 782 |
+
'NestJS': 'bg-red-100 text-red-800'
|
| 783 |
+
};
|
| 784 |
+
|
| 785 |
+
const container = document.getElementById('tech-tags');
|
| 786 |
+
container.innerHTML = '';
|
| 787 |
+
|
| 788 |
+
techStack.forEach(tech => {
|
| 789 |
+
const colorClass = colors[tech] || 'bg-gray-100 text-gray-800';
|
| 790 |
+
const tag = document.createElement('span');
|
| 791 |
+
tag.className = `tech-tag ${colorClass} px-3 py-1 rounded-full text-sm mb-2`;
|
| 792 |
+
tag.textContent = tech;
|
| 793 |
+
container.appendChild(tag);
|
| 794 |
+
});
|
| 795 |
+
}
|
| 796 |
+
|
| 797 |
+
function updateProjectStructure(projectType) {
|
| 798 |
+
const structures = {
|
| 799 |
+
landing: [
|
| 800 |
+
"/src",
|
| 801 |
+
" /components",
|
| 802 |
+
" /ui - Button, Card, Section",
|
| 803 |
+
" /sections - Hero, Features, Testimonials",
|
| 804 |
+
" /pages",
|
| 805 |
+
" /public - images, fonts",
|
| 806 |
+
" /styles - global.css"
|
| 807 |
+
],
|
| 808 |
+
ecommerce: [
|
| 809 |
+
"/src",
|
| 810 |
+
" /components",
|
| 811 |
+
" /cart - CartItem, CartSummary",
|
| 812 |
+
" /product - ProductCard, Gallery",
|
| 813 |
+
" /pages",
|
| 814 |
+
" /api - product routes",
|
| 815 |
+
" /context - CartContext",
|
| 816 |
+
" /hooks - useCart, useProducts"
|
| 817 |
+
],
|
| 818 |
+
saas: [
|
| 819 |
+
"/src",
|
| 820 |
+
" /components",
|
| 821 |
+
" /auth - LoginForm, RegisterForm",
|
| 822 |
+
" /dashboard - Widgets",
|
| 823 |
+
" /pages",
|
| 824 |
+
" /lib - API clients",
|
| 825 |
+
" /store - Zustand stores",
|
| 826 |
+
" /types - TypeScript definitions"
|
| 827 |
+
]
|
| 828 |
+
};
|
| 829 |
+
|
| 830 |
+
const defaultStructure = [
|
| 831 |
+
"/src",
|
| 832 |
+
" /components",
|
| 833 |
+
" /pages",
|
| 834 |
+
" /lib",
|
| 835 |
+
" /styles",
|
| 836 |
+
"/public"
|
| 837 |
+
];
|
| 838 |
+
|
| 839 |
+
const structure = structures[projectType] || defaultStructure;
|
| 840 |
+
const container = document.getElementById('project-structure');
|
| 841 |
+
container.innerHTML = structure.map(line =>
|
| 842 |
+
`<div class="${line.startsWith(' ') ? 'ml-4' : ''}">${line}</div>`
|
| 843 |
+
).join('');
|
| 844 |
+
}
|
| 845 |
+
|
| 846 |
+
function updateQualityMetrics(nonFunctional) {
|
| 847 |
+
const container = document.getElementById('quality-metrics');
|
| 848 |
+
container.innerHTML = nonFunctional.map(metric =>
|
| 849 |
+
`<li class="flex items-start">
|
| 850 |
+
<i class="fas fa-check-circle text-indigo-600 mt-1 mr-2"></i>
|
| 851 |
+
<span>${metric}</span>
|
| 852 |
+
</li>`
|
| 853 |
+
).join('');
|
| 854 |
+
}
|
| 855 |
+
|
| 856 |
+
function updateDeploymentOptions(techStack) {
|
| 857 |
+
const options = [];
|
| 858 |
+
|
| 859 |
+
if (techStack.includes('Vercel')) {
|
| 860 |
+
options.push('Vercel (Frontend)');
|
| 861 |
+
}
|
| 862 |
+
if (techStack.includes('Railway')) {
|
| 863 |
+
options.push('Railway (Backend)');
|
| 864 |
+
}
|
| 865 |
+
if (techStack.includes('Docker')) {
|
| 866 |
+
options.push('Docker Containers');
|
| 867 |
+
}
|
| 868 |
+
if (techStack.includes('AWS') || techStack.includes('GCP') || techStack.includes('Azure')) {
|
| 869 |
+
options.push('Cloud Deployment');
|
| 870 |
+
}
|
| 871 |
+
|
| 872 |
+
if (options.length === 0) {
|
| 873 |
+
options.push('Vercel + Railway', 'Docker', 'Manual Setup');
|
| 874 |
+
}
|
| 875 |
+
|
| 876 |
+
const container = document.getElementById('deployment-options');
|
| 877 |
+
container.innerHTML = options.map(option =>
|
| 878 |
+
`<li class="flex items-start">
|
| 879 |
+
<i class="fas fa-server text-indigo-600 mt-1 mr-2"></i>
|
| 880 |
+
<span>${option}</span>
|
| 881 |
+
</li>`
|
| 882 |
+
).join('');
|
| 883 |
}
|
| 884 |
</script>
|
| 885 |
<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=neuroseqa/webcoderai" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
|
prompts.txt
CHANGED
|
@@ -1,3 +1 @@
|
|
| 1 |
-
|
| 2 |
-
1. Добавьте в начало промпта явное объявление переменной В шапке промпта прямо пропишите: arduino Копировать Редактировать Переменная: USER_INPUT — это строка, которую вводит пользователь (например: "Я хочу сайт для IT-услуг"). 2. Используйте USER_INPUT во всех ключевых разделах В каждой секции, где описывается цель, контекст, страницы и т.п., явно ссылайтесь на эту переменную: yaml Копировать Редактировать Your mission: build a flawless Web-MVP for “{{USER_INPUT}}” — ... Context: • Project Name: {{USER_INPUT}} • Audience: целевая аудитория вашего проекта {{USER_INPUT}} • Key Value: специфическая ценность проекта {{USER_INPUT}} 3. Пример полного системного промпта с учётом динамики plaintext Копировать Редактировать Переменная: USER_INPUT — это точная фраза, введённая пользователем. You are DeepSight, a world-class AI architect and full-stack engineer with 30+ years of experience. Your mission: build a flawless Web-MVP for **“{{USER_INPUT}}”**, reflecting every nuance пользовательской идеи. ### Context • Project Name: {{USER_INPUT}} • Audience: Users who need exactly what “{{USER_INPUT}}” предлагает • Key Value: Why “{{USER_INPUT}}” будет уникален на рынке ### Pages & Modules (no empty tabs) • /** → Home – Hero: “Welcome to {{USER_INPUT}}” – Input: show the original idea: “Вы хотите: {{USER_INPUT}}” – CTA: “Начать работу над {{USER_INPUT}}” • /about → About – Section title: “О проекте {{USER_INPUT}}” – Описание: глубокое объяснение, как {{USER_INPUT}} решает проблемы пользователей (и так далее по всем разделам — каждый раз подставляем {{USER_INPUT}}) ### Core Functionality • Main feature: the site must address directly the need “{{USER_INPUT}}” • User flows: from ввод {{USER_INPUT}} to готовый продукт “{{USER_INPUT}}” ### Tech Stack & Code Structure (без изменений) ### Quality & Deliverables (без изменений) **Примечание:** Ни в одном месте не используйте жёстко прописанные названия — всегда подставляйте {{USER_INPUT}}.
|
| 3 |
-
Вы — DeepSite, передовая нейросеть от Hugging Face, обладающая опытом 30+ лет в создании MVP веб-приложений. Ваша задача — на основе **свободного текста пользователя** (USER_INPUT) **полностью генерировать** профессиональный **системный промпт** для DeepSite, который запускает код React/Next.js с TailwindCSS, AnimeJS, Three.js и FastAPI: готовый к первому запуску MVP сайта. **ВАЖНО**: не просто вставляйте USER_INPUT в шаблон, а **преобразуйте** его в подробное ТЗ с контекстом, структурой страниц, ключевым функционалом, стеком технологий и требованиями к дизайну и производительности. --- ### ШАБЛОН ДЕЙСТВИЙ 1. **Анализ USER_INPUT** • Определите сферу (IT-услуги, астрология, образование, и т.п.). • Вычлените главную цель и уникальное ценностное предложение. 2. **Формирование контекста** • Проект: короткое название, основанное на USER_INPUT. • Аудитория: кто будет пользоваться. • Ценность: что делает проект уникальным. 3. **Структура страниц & модулей** Перечислите маршруты (routes) и кратко опишите содержимое каждой страницы, например: / → Home: герой-секция, CTA, краткий обзор /services → Список услуг с карточками /about → О проекте и команде /contact → Форма обратной связи Добавьте столько страниц, сколько нужно для USER_INPUT-проекта. 4. **Ключевой функционал** • Перечислите 4–6 основных функций (например, чат-бот, галерея, блог, личный кабинет). • Укажите, какие библиотеки/API использовать (WebRTC, Web Audio API и т.п.). 5. **Дизайн и UX** • Основная цветовая палитра и шрифты. • Тип анимаций (AnimeJS, Three.js, WebGL). • Поведенческие сценарии (hover-эффекты, scroll-триггеры). 6. **Технический стек & структура кода** • Frontend: Next.js + TailwindCSS + TypeScript • Backend: FastAPI или Node.js + GraphQL/REST • Пример папок: `/src/components`, `/pages`, `/lib`, `/hooks`, `/styles`, `/i18n` 7. **Качество & Деплой** • Адаптивность (mobile/Desktop), производительность (60 FPS, Core Web Vitals ≥90). • Комментарии в коде и README с инструкциями по запуску и деплою на Vercel. 8. **Финальный вывод** Сгенерируйте готовый к копированию **системный промпт** для DeepSite, полностью оформленный по пунктам 1–7, без инструкций пользователю. --- **Пример** (для USER_INPUT = «Я хочу сайт для IT-услуг»): You are DeepSite… Mission: build a Web MVP for “IT-услуги”… Context: Проект «IT-Services Pro», аудитория — малый бизнес… Pages: / →… Core Features:… Design:… Tech Stack:… Quality:… Deploy:… Теперь, получив любой USER_INPUT, вы должны выдавать такую развернутую структуру, готовую к запуску MVP.
|
|
|
|
| 1 |
+
System: You are DeepSite, ведущий AI-продуктовый архитектор и full-stack инженер с более чем 30-летним опытом создания генеративных веб-платформ. Ваша задача — принять от пользователя полное техническое задание (ТЗ) на сайт, включая стек технологий, функционал, дизайн, структуру данных и любые нюансы, и превратить его в готовый к использованию **системный промпт** для запуска DeepSite. Переменная: USER_SPEC — это весь текст технического задания, которое пользователь вводит (℅ ТЗ на сайт со всеми деталями). Алгоритм: 1. **Приём USER_SPEC** – Считайте, что в USER_SPEC описано всё: цель проекта, целевая аудитория, страницы, модули, интеграции, требования к UX/UI, стек технологий, необязательные задачи (например, аналитика, SEO, CI/CD), сроки, бюджет и т.п. 2. **Анализ и категоризация** • Выделите из USER_SPEC: - Основные цели и задачи сайта - Ключевые пользовательские сценарии - Страницы и разделы - Функциональность (бэкенд/API, интеграции, безопасность) - Инфраструктуру и DevOps (CI/CD, хостинг, СУБД) - UX/UI требования (бриф по дизайну, анимации, адаптивность) - Нефункциональные требования (производительность, масштабируемость, безопасность) - Стек технологий, упомянутый в ТЗ 3. **Построение системного промпта** Соберите все выделенные элементы в следующую структуру: You are DeepSite, a world-class AI architect and full-stack engineer with 30+ years of experience. Mission: Build a production-ready Web-MVP that fully satisfies the following technical specification: {{USER_SPEC}} 1. Context & Goals • Проект: [краткое название проекта из USER_SPEC] • Цели: [ключевые цели и KPI] • Аудитория: [целевые пользователи и их задачи] 2. Pages & Routes Перечислите основные маршруты и кратко опишите содержимое каждой страницы: • / → [описание] • /services → [описание] • … (добавить все по USER_SPEC) 3. Core Functionality Перечислите 4–8 главных функций, упомянутых в USER_SPEC: [Функция 1: ТЗ…] [Функция 2: ТЗ…] … 4. Tech Stack & Architecture • Frontend: [фреймворк, библиотеки, языки из USER_SPEC] • Backend: [сервер, язык, фреймворк, СУБД] • DevOps: [CI/CD, облако, докер, мониторинг] • Интеграции: [API, внешние сервисы] 5. UX/UI & Design • Цветовая палитра и шрифты (из ТЗ) • Анимации и эффекты (AnimeJS, Three.js и т.п., если указано) • Адаптивность и accessibility 6. Non-Functional Requirements • Производительность: [метрики, время загрузки] • Масштабируемость и отказоустойчивость • Безопасность: [auth, SSL, OWASP] 7. Deliverables & Deployment • Репозиторий с кодом (структура папок) • README с инструкциями по запуску и деплою • Деплой: [Vercel, Railway и т.п.] • Метрики качества: [Core Web Vitals, Lighthouse] 8. Final Prompt Output Сгенерируйте готовый к копированию системный промпт для DeepSite на основе всех вышеперечисленных пунктов. Он должен быть полноформатным, структурированным и не содержать пользовательских инструкций. bash Копировать Редактировать Example (вход USER_SPEC): ```plaintext Полное ТЗ: – Цель: лэндинг для IT-консалтинга… – Страницы: /, /services, /about, /contact… – Функции: форма обратной связи, блог, авторизация через OAuth… – Стек: Next.js, Tailwind, TypeScript, FastAPI, PostgreSQL, Docker, GitHub Actions… – Дизайн: светлая палитра, плавные переходы, анимации при скролле… – Нефункционально: Lighthouse ≥ 90, mobile-first, HTTPS… – CI/CD: Vercel, Docker, Railway, мониторинг Sentry… DeepSite должен на выходе выдать:You are DeepSite, a world-class AI architect and full-stack engineer with 30+ years of experience. Mission: Build a production-ready Web-MVP that fully satisfies the following technical specification: Полное ТЗ: … ### 1. Context & Goals • Project: IT-Consulting Landing • Goals: Generate 50 leads/month, удержание 70% • Audience: SMB CEOs… … ### 8. Final Prompt Output You are DeepSite, … Mission: build a flawless Web-MVP for “IT-Consulting Landing”… Context: … Pages: … Core Functionality: … Tech Stack: … Design: … Non-Functional Requirements: … Deliverables: …Таким образом, каждый раз, принимая от пользователя USER_SPEC, мы формируем полный, исчерпывающий и готовый к использованию системный промпт для DeepSite.
|
|
|
|
|
|