Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
52a494de3d | ||
|
|
d87c7a769f | ||
|
|
ab6df785c4 | ||
|
|
d1e8abe428 | ||
|
|
f2bca340f9 |
Binary file not shown.
Binary file not shown.
@@ -6,9 +6,12 @@ namespace App\Http\Controllers\Legal;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\LegalDocument;
|
||||
use App\Models\UserDocumentAcceptance;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class LegalDocumentController extends Controller
|
||||
{
|
||||
@@ -76,10 +79,47 @@ class LegalDocumentController extends Controller
|
||||
/**
|
||||
* Display the legal document page.
|
||||
*/
|
||||
public function show(string $type)
|
||||
public function show(string $type): View|RedirectResponse
|
||||
{
|
||||
$document = LegalDocument::where('type', $type)->latest('version')->firstOrFail();
|
||||
|
||||
return view('legal.documents.show', compact('document'));
|
||||
$pendingAcceptance = false;
|
||||
if (Auth::check() && Auth::user()->role !== 'superadmin') {
|
||||
$accepted = UserDocumentAcceptance::where('user_id', Auth::id())
|
||||
->where('legal_document_id', $document->id)
|
||||
->exists();
|
||||
|
||||
if (!$accepted) {
|
||||
$pendingAcceptance = true;
|
||||
}
|
||||
}
|
||||
|
||||
return view('legal.documents.show', compact('document', 'pendingAcceptance'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Accept a legal document.
|
||||
*/
|
||||
public function accept(string $type): RedirectResponse
|
||||
{
|
||||
$document = LegalDocument::where('type', $type)->latest('version')->firstOrFail();
|
||||
|
||||
if (Auth::check()) {
|
||||
UserDocumentAcceptance::updateOrCreate(
|
||||
[
|
||||
'user_id' => Auth::id(),
|
||||
'legal_document_id' => $document->id,
|
||||
],
|
||||
[
|
||||
'document_version' => $document->version,
|
||||
'ip_address' => request()->ip(),
|
||||
'user_agent' => request()->userAgent(),
|
||||
'accepted_at' => now(),
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
return redirect()->route('dashboard')
|
||||
->with('success', 'Documento aceito com sucesso.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,12 @@ namespace App\Http\Controllers\PromptProject;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\PromptProject\StorePromptProjectRequest;
|
||||
use App\Http\Requests\PromptProject\UpdatePromptProjectRequest;
|
||||
use App\Models\AiModel;
|
||||
use App\Models\AiProvider;
|
||||
use App\Models\PromptGeneration;
|
||||
use App\Models\PromptProject;
|
||||
use App\Services\PromptProjectService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@@ -62,24 +66,26 @@ class PromptProjectController extends Controller
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(\App\Models\PromptProject $promptProject): View
|
||||
public function show(PromptProject $promptProject): View
|
||||
{
|
||||
$this->authorize('view', $promptProject);
|
||||
|
||||
$providerModels = \App\Models\AiModel::where('provider_id', $promptProject->provider_id)
|
||||
$providerModels = AiModel::where('provider_id', $promptProject->provider_id)
|
||||
->where('is_active', true)
|
||||
->get();
|
||||
|
||||
$models = $providerModels->isNotEmpty()
|
||||
? $providerModels
|
||||
: \App\Models\AiModel::where('is_active', true)->get();
|
||||
: AiModel::where('is_active', true)->get();
|
||||
|
||||
$generations = \App\Models\PromptGeneration::where('project_id', $promptProject->id)
|
||||
$generations = PromptGeneration::where('project_id', $promptProject->id)
|
||||
->latest()
|
||||
->take(5)
|
||||
->get();
|
||||
|
||||
return view('prompt-projects.show', compact('promptProject', 'models', 'generations'));
|
||||
$standardFiles = $this->promptProjectService->getStandardFiles($promptProject);
|
||||
|
||||
return view('prompt-projects.show', compact('promptProject', 'models', 'generations', 'standardFiles'));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -123,7 +129,7 @@ class PromptProjectController extends Controller
|
||||
/**
|
||||
* Generate prompt for the specified project.
|
||||
*/
|
||||
public function generate(\App\Models\PromptProject $promptProject, Request $request): RedirectResponse
|
||||
public function generate(PromptProject $promptProject, Request $request): RedirectResponse
|
||||
{
|
||||
$this->authorize('update', $promptProject);
|
||||
|
||||
@@ -137,7 +143,7 @@ class PromptProjectController extends Controller
|
||||
$model = $customModel;
|
||||
}
|
||||
} else {
|
||||
$model = \App\Models\AiModel::where('slug', $modelSlug)
|
||||
$model = AiModel::where('slug', $modelSlug)
|
||||
->where('is_active', true)
|
||||
->first();
|
||||
}
|
||||
@@ -152,7 +158,7 @@ class PromptProjectController extends Controller
|
||||
/**
|
||||
* Get built prompt for the specified project.
|
||||
*/
|
||||
public function getPrompt(\App\Models\PromptProject $promptProject): \Illuminate\Http\JsonResponse
|
||||
public function getPrompt(PromptProject $promptProject): JsonResponse
|
||||
{
|
||||
$this->authorize('view', $promptProject);
|
||||
|
||||
@@ -160,4 +166,36 @@ class PromptProjectController extends Controller
|
||||
|
||||
return response()->json(['prompt' => $prompt]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get standard files for the specified project.
|
||||
*/
|
||||
public function getStandardFiles(PromptProject $promptProject): JsonResponse
|
||||
{
|
||||
$this->authorize('view', $promptProject);
|
||||
|
||||
$files = $this->promptProjectService->getStandardFiles($promptProject);
|
||||
|
||||
return response()->json($files);
|
||||
}
|
||||
|
||||
/**
|
||||
* Download a standard file for the specified project.
|
||||
*/
|
||||
public function downloadFile(PromptProject $promptProject, string $filename)
|
||||
{
|
||||
$this->authorize('view', $promptProject);
|
||||
|
||||
$files = $this->promptProjectService->getStandardFiles($promptProject);
|
||||
|
||||
if (!isset($files[$filename])) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
$content = $files[$filename];
|
||||
|
||||
return response()->streamDownload(function () use ($content) {
|
||||
echo $content;
|
||||
}, $filename);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,10 @@ class PromptTemplateController extends Controller
|
||||
$data['template_data'] = json_decode($data['template_data'], true);
|
||||
}
|
||||
|
||||
if (!isset($data['template_data']['standard_files'])) {
|
||||
$data['template_data']['standard_files'] = true;
|
||||
}
|
||||
|
||||
$this->promptTemplateService->store($data);
|
||||
|
||||
return redirect()->route('prompt-templates.index')
|
||||
@@ -131,6 +135,7 @@ class PromptTemplateController extends Controller
|
||||
'variables' => $data['variables'] ?? '',
|
||||
'temperature' => $data['temperature'] ?? 0.7,
|
||||
'max_tokens' => $data['max_tokens'] ?? 1024,
|
||||
'standard_files' => $data['standard_files'] ?? true,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -202,7 +202,10 @@ class PromptProjectService
|
||||
{
|
||||
$parts = [];
|
||||
|
||||
$parts[] = "You are an expert prompt engineering assistant. Your task is to generate a high-quality, optimized prompt based on the specifications provided below.";
|
||||
$companyName = $project->company_name ?? $project->title;
|
||||
|
||||
$parts[] = "Generate a complete, ready-to-use prompt in Portuguese that another AI or developer can follow to build the project described below. The generated prompt must be self-contained and include ALL specifications, design requirements, technical constraints, and code standards needed to build the project from scratch.";
|
||||
$parts[] = "IMPORTANT: Your output must be ONLY the prompt text in Portuguese. Do NOT include this instruction, do NOT wrap in markdown, do NOT add explanations — just output the prompt itself.";
|
||||
|
||||
if ($project->company_name) {
|
||||
$parts[] = "Company Name: " . $project->company_name;
|
||||
@@ -264,8 +267,498 @@ class PromptProjectService
|
||||
$parts[] = "Variables: " . json_encode($project->variables, JSON_PRETTY_PRINT);
|
||||
}
|
||||
|
||||
$parts[] = "Generate the optimized prompt now. Return ONLY the prompt, without explanations, introductions, or additional text.";
|
||||
$parts[] = "SYSTEM REQUIREMENTS (ALWAYS apply to every project):";
|
||||
$parts[] = "- The generated prompt must produce a COMPLETE MULTI-FILE PROJECT structure (not a single file). Generate separate files organized in a proper project folder structure";
|
||||
$parts[] = "- The prompt MUST instruct to create EACH of the following standard files FROM SCRATCH with COMPLETE content (not just descriptions): LICENSE (MIT with company name and year), README.md (full documentation in Portuguese), RULES.md (coding rules in Portuguese), cookies.html (complete LGPD cookie banner page with HTML/CSS/JS), termos-de-uso.html (complete Terms of Service page), privacidade.html (complete Privacy Policy page compliant with LGPD)";
|
||||
$parts[] = "- Do NOT just describe what the files should contain — the generated prompt must explicitly tell the developer/AI to CREATE each file with full, ready-to-use content";
|
||||
$parts[] = "- Fully responsive design (mobile-first, all screen sizes including smartphones)";
|
||||
$parts[] = "- Use only MIT-licensed or permissive open-source icons, images, and dependencies that are safe for commercial use";
|
||||
$parts[] = "- All password fields must include a toggle button (eye icon) to show/hide the password";
|
||||
$parts[] = "- Complete SEO optimization: semantic HTML5, meta tags (title, description, keywords, OG tags for social media), structured data (JSON-LD), sitemap, robots.txt, aria labels, alt text on images, canonical URL, mobile-friendly validation";
|
||||
|
||||
$parts[] = "Generate the optimized prompt now. Return ONLY the prompt text, without explanations, introductions, or additional text.";
|
||||
|
||||
return implode("\n\n", $parts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate LICENSE file content for the project.
|
||||
*/
|
||||
public function generateLicenseContent(PromptProject $project): string
|
||||
{
|
||||
$year = date('Y');
|
||||
$company = $project->company_name ?? $project->title;
|
||||
|
||||
return <<<EOT
|
||||
MIT License
|
||||
|
||||
Copyright (c) {$year} {$company}
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
EOT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate README.md content for the project.
|
||||
*/
|
||||
public function generateReadmeContent(PromptProject $project): string
|
||||
{
|
||||
$company = $project->company_name ?? $project->title;
|
||||
$description = $project->objective ?? 'Sistema profissional';
|
||||
$activities = $project->company_business_activities ?? '';
|
||||
$services = $project->company_services_products ?? '';
|
||||
|
||||
$readme = "# {$company}\n\n";
|
||||
$readme .= "## 📋 Descrição\n\n{$description}\n\n";
|
||||
|
||||
if ($activities) {
|
||||
$readme .= "## 🏢 Atividades\n\n{$activities}\n\n";
|
||||
}
|
||||
|
||||
if ($services) {
|
||||
$readme .= "## 🛠️ Serviços e Produtos\n\n{$services}\n\n";
|
||||
}
|
||||
|
||||
$readme .= "## 🚀 Tecnologias\n\n";
|
||||
$readme .= "- HTML5 / CSS3 / JavaScript\n";
|
||||
$readme .= "- Bootstrap 5\n";
|
||||
$readme .= "- Font Awesome / Bootstrap Icons\n";
|
||||
$readme .= "- Responsive Design\n\n";
|
||||
|
||||
$readme .= "## 📦 Instalação\n\n```bash\n";
|
||||
$readme .= "# Clone o repositório\ngit clone https://github.com/seu-usuario/{$this->slugify($company)}.git\n\n";
|
||||
$readme .= "# Acesse o diretório\ncd {$this->slugify($company)}\n";
|
||||
$readme .= "```\n\n";
|
||||
|
||||
$readme .= "## ⚙️ Configuração\n\n";
|
||||
$readme .= "1. Configure as variáveis de ambiente necessárias\n";
|
||||
$readme .= "2. Ajuste as credenciais de banco de dados no arquivo de configuração\n";
|
||||
$readme .= "3. Execute as migrações (se aplicável)\n\n";
|
||||
|
||||
$readme .= "## 🎯 Funcionalidades\n\n";
|
||||
$readme .= "- Interface responsiva e moderna\n";
|
||||
$readme .= "- Design otimizado para todos os dispositivos\n";
|
||||
$readme .= "- Componentes reutilizáveis\n";
|
||||
$readme .= "- Performance otimizada\n\n";
|
||||
|
||||
if ($project->company_website) {
|
||||
$readme .= "## 🌐 Website\n\n[{$project->company_website}]({$project->company_website})\n\n";
|
||||
}
|
||||
|
||||
$readme .= "## 📄 Licença\n\nEste projeto está licenciado sob a Licença MIT.\n\n";
|
||||
$readme .= "## 📞 Contato\n\n";
|
||||
|
||||
if ($project->company_whatsapp) {
|
||||
$readme .= "- WhatsApp: {$project->company_whatsapp}\n";
|
||||
}
|
||||
if ($project->company_social_media) {
|
||||
$readme .= "- Redes Sociais: {$project->company_social_media}\n";
|
||||
}
|
||||
|
||||
return $readme;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate RULES.md content for the project.
|
||||
*/
|
||||
public function generateRulesContent(PromptProject $project): string
|
||||
{
|
||||
$company = $project->company_name ?? $project->title;
|
||||
|
||||
$rules = "# Regras de Desenvolvimento - {$company}\n\n";
|
||||
$rules .= "## 📐 Padrões de Código\n\n";
|
||||
$rules .= "- Seguir PSR-12 (PHP) / Airbnb Style Guide (JavaScript)\n";
|
||||
$rules .= "- Usar type hints em todos os métodos e parâmetros\n";
|
||||
$rules .= "- Strict typing habilitado (declare(strict_types=1))\n";
|
||||
$rules .= "- PHPDoc comments em métodos públicos\n";
|
||||
$rules .= "- Sem uso de `var`, usar `private/protected/public`\n\n";
|
||||
|
||||
$rules .= "## 🏗️ Arquitetura\n\n";
|
||||
$rules .= "- Seguir princípios SOLID\n";
|
||||
$rules .= "- MVC Pattern com Service Layer\n";
|
||||
$rules .= "- Repository Pattern para abstração de dados\n";
|
||||
$rules .= "- Injeção de dependências\n\n";
|
||||
|
||||
$rules .= "## 🔒 Segurança\n\n";
|
||||
$rules .= "- CSRF em todos os formulários\n";
|
||||
$rules .= "- XSS: usar escaping automático, evitar `{!! !!}`\n";
|
||||
$rules .= "- SQL Injection: usar ORM ou Query Builder com bindings\n";
|
||||
$rules .= "- Mass Assignment: usar \$fillable ou \$guarded\n";
|
||||
$rules .= "- Senhas: hash com bcrypt\n";
|
||||
$rules .= "- Rate Limiting em formulários públicos\n\n";
|
||||
|
||||
$rules .= "## 🎨 Frontend\n\n";
|
||||
$rules .= "- Bootstrap 5 com Bootstrap Icons\n";
|
||||
$rules .= "- Design responsivo (mobile-first)\n";
|
||||
$rules .= "- Breadcrumbs em todas as páginas\n";
|
||||
$rules .= "- Sem CSS ou JS inline\n";
|
||||
$rules .= "- Modern, clean design\n\n";
|
||||
|
||||
$rules .= "## 🧪 Testes\n\n";
|
||||
$rules .= "- Testes unitários para Models e Services\n";
|
||||
$rules .= "- Testes de feature para CRUD\n";
|
||||
$rules .= "- Cobertura mínima de 80%\n\n";
|
||||
|
||||
$rules .= "## 🚫 Práticas Proibidas\n\n";
|
||||
$rules .= "- `dd()`, `dump()`, `var_dump()` em produção\n";
|
||||
$rules .= "- Comentários `TODO`, `FIXME`, `XXX`\n";
|
||||
$rules .= "- URLs ou caminhos hardcoded\n";
|
||||
$rules .= "- Magic numbers (definir constantes)\n";
|
||||
$rules .= "- Código comentado\n\n";
|
||||
|
||||
$rules .= "## ⚡ Performance\n\n";
|
||||
$rules .= "- Eager load relacionamentos (N+1 prevention)\n";
|
||||
$rules .= "- Indexar foreign keys no banco\n";
|
||||
$rules .= "- Cache de queries pesadas\n";
|
||||
$rules .= "- Paginar datasets grandes\n";
|
||||
$rules .= "- Otimizar assets (compressão, minificação)\n\n";
|
||||
|
||||
$rules .= "## 📖 Documentação\n\n";
|
||||
$rules .= "- README.md com instruções de instalação e uso\n";
|
||||
$rules .= "- Documentação técnica em markdown\n";
|
||||
$rules .= "- CHANGELOG.md para versionamento\n";
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate cookies.html content (cookie consent banner in compliance with LGPD).
|
||||
*/
|
||||
public function generateCookieConsentContent(PromptProject $project): string
|
||||
{
|
||||
$company = $project->company_name ?? $project->title;
|
||||
|
||||
return <<<EOT
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Política de Cookies - {$company}</title>
|
||||
<style>
|
||||
.cookie-banner{position:fixed;bottom:0;left:0;right:0;background:#fff;border-top:2px solid #4e73df;padding:1.5rem;box-shadow:0 -4px 20px rgba(0,0,0,0.15);z-index:9999;animation:slideUp 0.4s ease-out}
|
||||
.cookie-banner .container{max-width:1100px;margin:0 auto}
|
||||
.cookie-banner h6{color:#1a1a2e;font-weight:700;margin-bottom:0.5rem}
|
||||
.cookie-banner p{font-size:0.9rem;color:#6c757d;margin-bottom:1rem;line-height:1.6}
|
||||
.cookie-banner .btn-group{display:flex;flex-wrap:wrap;gap:0.5rem}
|
||||
.cookie-banner .btn{padding:0.5rem 1.25rem;border-radius:8px;font-weight:500;font-size:0.9rem;cursor:pointer;border:none;transition:all 0.2s}
|
||||
.cookie-banner .btn-accept{background:#4e73df;color:#fff}
|
||||
.cookie-banner .btn-accept:hover{background:#224abe}
|
||||
.cookie-banner .btn-reject{background:#6c757d;color:#fff}
|
||||
.cookie-banner .btn-reject:hover{background:#5a6268}
|
||||
.cookie-banner .btn-customize{background:#f8f9fc;color:#333;border:1px solid #dee2e6}
|
||||
.cookie-modal{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);z-index:10000;align-items:center;justify-content:center}
|
||||
.cookie-modal.active{display:flex}
|
||||
.cookie-modal .modal-content{background:#fff;border-radius:16px;padding:2rem;max-width:500px;width:90%;max-height:80vh;overflow-y:auto}
|
||||
.cookie-modal h5{font-weight:700;margin-bottom:1rem}
|
||||
.cookie-modal .cookie-category{padding:1rem;border-radius:8px;margin-bottom:0.75rem;border:1px solid #e9ecef}
|
||||
.cookie-modal .cookie-category label{font-weight:600;display:flex;align-items:center;gap:0.5rem}
|
||||
.cookie-modal .cookie-category p{margin:0.25rem 0 0 1.5rem;font-size:0.85rem;color:#6c757d}
|
||||
.cookie-modal .btn-save{background:#4e73df;color:#fff;padding:0.5rem 1.5rem;border-radius:8px;border:none;cursor:pointer}
|
||||
.cookie-modal .btn-cancel{background:#f8f9fc;color:#333;padding:0.5rem 1.5rem;border-radius:8px;border:1px solid #dee2e6;cursor:pointer}
|
||||
@keyframes slideUp{from{transform:translateY(100%);opacity:0}to{transform:translateY(0);opacity:1}}
|
||||
@media(max-width:576px){.cookie-banner .btn-group{flex-direction:column}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="cookieBanner" class="cookie-banner">
|
||||
<div class="container">
|
||||
<h6>Cookies e Privacidade</h6>
|
||||
<p>Utilizamos cookies para melhorar sua experiencia, analisar trafego e personalizar conteudo. Ao continuar navegando, voce concorda com nossa Politica de Privacidade.</p>
|
||||
<div class="btn-group">
|
||||
<button class="btn btn-customize" onclick="openCookieModal()">Personalizar</button>
|
||||
<button class="btn btn-reject" onclick="rejectCookies()">Recusar</button>
|
||||
<button class="btn btn-accept" onclick="acceptAllCookies()">Aceitar Todos</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="cookieModal" class="cookie-modal">
|
||||
<div class="modal-content">
|
||||
<h5>Personalizar Cookies</h5>
|
||||
<p style="color:#6c757d;font-size:0.9rem;margin-bottom:1.5rem">Selecione os tipos de cookies que voce autoriza:</p>
|
||||
<div class="cookie-category">
|
||||
<label><input type="checkbox" checked disabled> Necessarios</label>
|
||||
<p>Essenciais para o funcionamento do site.</p>
|
||||
</div>
|
||||
<div class="cookie-category">
|
||||
<label><input type="checkbox" id="ckStatistics" checked> Estatisticas</label>
|
||||
<p>Nos ajudam a entender como o site e utilizado.</p>
|
||||
</div>
|
||||
<div class="cookie-category">
|
||||
<label><input type="checkbox" id="ckMarketing" checked> Marketing</label>
|
||||
<p>Utilizados para exibir anuncios relevantes.</p>
|
||||
</div>
|
||||
<div class="cookie-category">
|
||||
<label><input type="checkbox" id="ckPreferences" checked> Preferencias</label>
|
||||
<p>Armazenam suas configuracoes e preferencias.</p>
|
||||
</div>
|
||||
<div style="display:flex;justify-content:flex-end;gap:0.5rem;margin-top:1rem">
|
||||
<button class="btn-cancel" onclick="closeCookieModal()">Cancelar</button>
|
||||
<button class="btn-save" onclick="saveCookiePreferences()">Salvar Preferencias</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function getCookie(name){const match=document.cookie.match(new RegExp('(^| )'+name+'=([^;]+)'));return match?match[2]:null}
|
||||
function setCookie(name,value,days){const d=new Date();d.setTime(d.getTime()+days*86400000);document.cookie=name+'='+value+';expires='+d.toUTCString()+';path=/'}
|
||||
if(!getCookie('cookieConsent')){document.getElementById('cookieBanner').style.display='block'}
|
||||
function acceptAllCookies(){setCookie('cookieConsent',JSON.stringify({necessary:true,statistics:true,marketing:true,preferences:true}),365);document.getElementById('cookieBanner').style.display='none'}
|
||||
function rejectCookies(){setCookie('cookieConsent',JSON.stringify({necessary:true,statistics:false,marketing:false,preferences:false}),365);document.getElementById('cookieBanner').style.display='none'}
|
||||
function openCookieModal(){document.getElementById('cookieModal').classList.add('active')}
|
||||
function closeCookieModal(){document.getElementById('cookieModal').classList.remove('active')}
|
||||
function saveCookiePreferences(){const consents={necessary:true,statistics:document.getElementById('ckStatistics').checked,marketing:document.getElementById('ckMarketing').checked,preferences:document.getElementById('ckPreferences').checked};setCookie('cookieConsent',JSON.stringify(consents),365);document.getElementById('cookieBanner').style.display='none';closeCookieModal()}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
EOT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate termos-de-uso.html content (Terms of Service compliant with Brazilian legislation).
|
||||
*/
|
||||
public function generateTermsContent(PromptProject $project): string
|
||||
{
|
||||
$company = $project->company_name ?? $project->title;
|
||||
$year = date('Y');
|
||||
$activities = $project->company_business_activities ?? 'servicos de tecnologia';
|
||||
|
||||
return <<<EOT
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Termos de Uso - {$company}</title>
|
||||
<style>
|
||||
body{font-family:Arial,sans-serif;line-height:1.8;color:#333;max-width:900px;margin:0 auto;padding:2rem}
|
||||
h1{color:#1a1a2e;font-size:1.8rem;border-bottom:2px solid #4e73df;padding-bottom:0.5rem}
|
||||
h2{color:#2c3e50;font-size:1.3rem;margin-top:2rem}
|
||||
p{margin-bottom:1rem;text-align:justify}
|
||||
ul{margin-bottom:1rem;padding-left:2rem}
|
||||
footer{margin-top:3rem;padding-top:1rem;border-top:1px solid #dee2e6;font-size:0.85rem;color:#6c757d}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Termos de Uso - {$company}</h1>
|
||||
<p><strong>Versao:</strong> 1.0 | <strong>Data:</strong> {$year}</p>
|
||||
|
||||
<h2>1. Aceitacao dos Termos</h2>
|
||||
<p>Ao acessar e utilizar os servicos da {$company}, voce concorda em cumprir integralmente estes Termos de Uso. Caso nao concorde com qualquer disposicao deste documento, voce nao deve utilizar nossos servicos.</p>
|
||||
|
||||
<h2>2. Descricao do Servico</h2>
|
||||
<p>A {$company} oferece {$activities}. Este documento estabelece as condicoes gerais de uso dos servicos disponibilizados.</p>
|
||||
|
||||
<h2>3. Definicoes</h2>
|
||||
<ul>
|
||||
<li><strong>Plataforma:</strong> sistema, site ou aplicativo fornecido pela {$company}</li>
|
||||
<li><strong>Usuario:</strong> pessoa fisica ou juridica que utiliza a plataforma</li>
|
||||
<li><strong>Conteudo:</strong> qualquer informacao, dado ou material inserido na plataforma</li>
|
||||
<li><strong>LGPD:</strong> Lei Geral de Protecao de Dados Pessoais (Lei no 13.709/2018)</li>
|
||||
</ul>
|
||||
|
||||
<h2>4. Cadastro e Conta de Usuario</h2>
|
||||
<p>4.1. Para utilizar a plataforma, o usuario deve criar uma conta fornecendo informacoes precisas e atualizadas.</p>
|
||||
<p>4.2. O usuario e integralmente responsavel pela confidencialidade de suas credenciais de acesso.</p>
|
||||
<p>4.3. O usuario compromete-se a notificar imediatamente qualquer uso nao autorizado de sua conta.</p>
|
||||
|
||||
<h2>5. Obrigacoes do Usuario</h2>
|
||||
<p>5.1. Utilizar a plataforma em conformidade com as leis brasileiras.</p>
|
||||
<p>5.2. Nao realizar atividades que possam comprometer a seguranca da plataforma.</p>
|
||||
<p>5.3. Nao inserir conteudo ilegal, ofensivo ou que viole direitos de terceiros.</p>
|
||||
|
||||
<h2>6. Propriedade Intelectual</h2>
|
||||
<p>6.1. Todo o conteudo e funcionalidades da plataforma sao de propriedade da {$company}.</p>
|
||||
<p>6.2. O conteudo gerado pelo usuario e de propriedade do usuario.</p>
|
||||
<p>6.3. E proibida a engenharia reversa, descompilacao ou tentativa de extrair o codigo fonte.</p>
|
||||
|
||||
<h2>7. Limitacao de Responsabilidade</h2>
|
||||
<p>7.1. A plataforma e fornecida "como esta", sem garantias de disponibilidade continua.</p>
|
||||
<p>7.2. A {$company} nao se responsabiliza por danos decorrentes do uso ou da impossibilidade de uso da plataforma.</p>
|
||||
|
||||
<h2>8. Privacidade e Protecao de Dados</h2>
|
||||
<p>8.1. O tratamento de dados pessoais segue integralmente a LGPD (Lei no 13.709/2018).</p>
|
||||
<p>8.2. Os dados coletados sao utilizados exclusivamente para as finalidades descritas na Politica de Privacidade.</p>
|
||||
<p>8.3. O usuario pode exercer seus direitos de titular de dados a qualquer momento.</p>
|
||||
|
||||
<h2>9. Disposicoes Gerais</h2>
|
||||
<p>9.1. Estes termos podem ser alterados a qualquer momento, mediante comunicacao previa aos usuarios.</p>
|
||||
<p>9.2. O uso continuado apos alteracoes constitui aceitacao dos novos termos.</p>
|
||||
<p>9.3. Foro: Comarca de Sao Paulo/SP para eventuais controversias.</p>
|
||||
|
||||
<h2>10. Contato</h2>
|
||||
<p>Para esclarecimentos sobre estes termos, entre em contato atraves dos canais oficiais da {$company}.</p>
|
||||
|
||||
<footer>
|
||||
<p>© {$year} {$company}. Todos os direitos reservados.</p>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
EOT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate privacidade.html content (Privacy Policy compliant with LGPD).
|
||||
*/
|
||||
public function generatePrivacyContent(PromptProject $project): string
|
||||
{
|
||||
$company = $project->company_name ?? $project->title;
|
||||
$year = date('Y');
|
||||
|
||||
return <<<EOT
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Politica de Privacidade - {$company}</title>
|
||||
<style>
|
||||
body{font-family:Arial,sans-serif;line-height:1.8;color:#333;max-width:900px;margin:0 auto;padding:2rem}
|
||||
h1{color:#1a1a2e;font-size:1.8rem;border-bottom:2px solid #4e73df;padding-bottom:0.5rem}
|
||||
h2{color:#2c3e50;font-size:1.3rem;margin-top:2rem}
|
||||
p{margin-bottom:1rem;text-align:justify}
|
||||
ul{margin-bottom:1rem;padding-left:2rem}
|
||||
footer{margin-top:3rem;padding-top:1rem;border-top:1px solid #dee2e6;font-size:0.85rem;color:#6c757d}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Politica de Privacidade - {$company} (LGPD)</h1>
|
||||
<p><strong>Versao:</strong> 1.0 | <strong>Data:</strong> {$year}</p>
|
||||
|
||||
<h2>1. Informacoes Gerais</h2>
|
||||
<p>Esta Politica de Privacidade descreve como a {$company} coleta, utiliza, armazena e protege os dados pessoais dos usuarios, em conformidade com a Lei Geral de Protecao de Dados Pessoais (LGPD - Lei no 13.709/2018).</p>
|
||||
|
||||
<h2>2. Titular do Tratamento</h2>
|
||||
<p>{$company}</p>
|
||||
<p>E-mail de contato disponivel no site oficial.</p>
|
||||
|
||||
<h2>3. Dados Pessoais Coletados</h2>
|
||||
<p><strong>3.1. Dados fornecidos pelo usuario:</strong></p>
|
||||
<ul>
|
||||
<li>Nome completo</li>
|
||||
<li>Endereco de e-mail</li>
|
||||
<li>Senha de acesso (armazenada com criptografia)</li>
|
||||
<li>Informacoes de contato, quando fornecidas</li>
|
||||
</ul>
|
||||
<p><strong>3.2. Dados coletados automaticamente:</strong></p>
|
||||
<ul>
|
||||
<li>Endereco IP</li>
|
||||
<li>Agente do navegador (user agent)</li>
|
||||
<li>Preferencias de cookies</li>
|
||||
<li>Dados de uso da plataforma</li>
|
||||
<li>Data e hora das interacoes</li>
|
||||
</ul>
|
||||
|
||||
<h2>4. Finalidades do Tratamento</h2>
|
||||
<ul>
|
||||
<li>Autenticacao e autorizacao de acesso</li>
|
||||
<li>Prestacao dos servicos contratados</li>
|
||||
<li>Comunicacoes sobre o servico</li>
|
||||
<li>Seguranca e prevencao de fraudes</li>
|
||||
<li>Cumprimento de obrigacoes legais</li>
|
||||
<li>Melhoria continua dos servicos</li>
|
||||
</ul>
|
||||
|
||||
<h2>5. Bases Legais para o Tratamento (LGPD - Art. 7o)</h2>
|
||||
<ul>
|
||||
<li>Consentimento do titular (Art. 7o, I)</li>
|
||||
<li>Execucao de contrato (Art. 7o, V)</li>
|
||||
<li>Cumprimento de obrigacao legal (Art. 7o, II)</li>
|
||||
<li>Legitimo interesse (Art. 7o, IX)</li>
|
||||
</ul>
|
||||
|
||||
<h2>6. Compartilhamento de Dados</h2>
|
||||
<p>6.1. Seus dados nao sao compartilhados com terceiros, exceto quando necessario para a prestacao dos servicos ou quando exigido por lei.</p>
|
||||
<p>6.2. Nao vendemos dados pessoais a terceiros.</p>
|
||||
|
||||
<h2>7. Armazenamento e Seguranca</h2>
|
||||
<p>7.1. Os dados sao armazenados em servidores seguros com acesso restrito.</p>
|
||||
<p>7.2. Adotamos medidas tecnicas e organizacionais para proteger os dados contra acesso nao autorizado.</p>
|
||||
<p>7.3. O periodo de armazenamento e o necessario para cumprir as finalidades descritas nesta politica.</p>
|
||||
|
||||
<h2>8. Direitos do Titular (LGPD - Art. 18)</h2>
|
||||
<p>O titular dos dados tem direito a:</p>
|
||||
<ul>
|
||||
<li>Confirmar a existencia de tratamento</li>
|
||||
<li>Acessar seus dados pessoais</li>
|
||||
<li>Corrigir dados incompletos ou desatualizados</li>
|
||||
<li>Solicitar a eliminacao de dados desnecessarios</li>
|
||||
<li>Solicitar a portabilidade dos dados</li>
|
||||
<li>Revogar o consentimento a qualquer momento</li>
|
||||
</ul>
|
||||
|
||||
<h2>9. Cookies</h2>
|
||||
<p>9.1. Utilizamos cookies necessarios para o funcionamento da plataforma.</p>
|
||||
<p>9.2. Cookies opcionais (estatisticas, marketing, preferencias) dependem do seu consentimento.</p>
|
||||
<p>9.3. Voce pode gerenciar suas preferencias de cookies atraves do banner de cookies.</p>
|
||||
|
||||
<h2>10. Consentimento</h2>
|
||||
<p>Ao utilizar a plataforma, voce declara ter lido e compreendido esta Politica de Privacidade e autoriza o tratamento de seus dados conforme aqui descrito.</p>
|
||||
|
||||
<h2>11. Alteracoes</h2>
|
||||
<p>Esta politica pode ser atualizada periodicamente. Alteracoes significativas serao comunicadas aos usuarios.</p>
|
||||
|
||||
<h2>12. Contato e DPO</h2>
|
||||
<p>Para exercer seus direitos ou esclarecer duvidas sobre privacidade, entre em contato atraves dos canais oficiais da {$company}.</p>
|
||||
<p>Prazo de resposta: ate 15 dias uteis (LGPD - Art. 19).</p>
|
||||
|
||||
<footer>
|
||||
<p>© {$year} {$company}. Todos os direitos reservados.</p>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
EOT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all standard files with their contents for the project.
|
||||
*
|
||||
* @return array<string, string>
|
||||
*/
|
||||
public function getStandardFiles(PromptProject $project): array
|
||||
{
|
||||
return [
|
||||
'LICENSE' => $this->generateLicenseContent($project),
|
||||
'README.md' => $this->generateReadmeContent($project),
|
||||
'RULES.md' => $this->generateRulesContent($project),
|
||||
'cookies.html' => $this->generateCookieConsentContent($project),
|
||||
'termos-de-uso.html' => $this->generateTermsContent($project),
|
||||
'privacidade.html' => $this->generatePrivacyContent($project),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert text to a URL-friendly slug.
|
||||
*/
|
||||
private function slugify(string $text): string
|
||||
{
|
||||
$text = preg_replace('/[^a-zA-Z0-9-]/', '-', $text);
|
||||
$text = preg_replace('/-+/', '-', $text);
|
||||
$text = trim($text, '-');
|
||||
|
||||
return strtolower($text);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,4 +5,5 @@ use App\Providers\AppServiceProvider;
|
||||
return [
|
||||
App\Providers\AppServiceProvider::class,
|
||||
App\Providers\AuthServiceProvider::class,
|
||||
Barryvdh\DomPDF\ServiceProvider::class,
|
||||
];
|
||||
|
||||
+2
-2
@@ -7,9 +7,9 @@
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.3",
|
||||
"barryvdh/laravel-dompdf": "^3.1",
|
||||
"laravel/framework": "^13.8",
|
||||
"laravel/tinker": "^3.0",
|
||||
"barryvdh/laravel-dompdf": "^3.0"
|
||||
"laravel/tinker": "^3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.23",
|
||||
|
||||
Generated
+378
-1
@@ -4,8 +4,85 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "16e72b11427154de902612c561b9c304",
|
||||
"content-hash": "2a63f5b976767b68f7e581743095bd53",
|
||||
"packages": [
|
||||
{
|
||||
"name": "barryvdh/laravel-dompdf",
|
||||
"version": "v3.1.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/barryvdh/laravel-dompdf.git",
|
||||
"reference": "ee3b72b19ccdf57d0243116ecb2b90261344dedc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/ee3b72b19ccdf57d0243116ecb2b90261344dedc",
|
||||
"reference": "ee3b72b19ccdf57d0243116ecb2b90261344dedc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"dompdf/dompdf": "^3.0",
|
||||
"illuminate/support": "^9|^10|^11|^12|^13.0",
|
||||
"php": "^8.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"larastan/larastan": "^2.7|^3.0",
|
||||
"orchestra/testbench": "^7|^8|^9.16|^10|^11.0",
|
||||
"phpro/grumphp": "^2.5",
|
||||
"squizlabs/php_codesniffer": "^3.5"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"aliases": {
|
||||
"PDF": "Barryvdh\\DomPDF\\Facade\\Pdf",
|
||||
"Pdf": "Barryvdh\\DomPDF\\Facade\\Pdf"
|
||||
},
|
||||
"providers": [
|
||||
"Barryvdh\\DomPDF\\ServiceProvider"
|
||||
]
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-master": "3.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Barryvdh\\DomPDF\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Barry vd. Heuvel",
|
||||
"email": "barryvdh@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "A DOMPDF Wrapper for Laravel",
|
||||
"keywords": [
|
||||
"dompdf",
|
||||
"laravel",
|
||||
"pdf"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/barryvdh/laravel-dompdf/issues",
|
||||
"source": "https://github.com/barryvdh/laravel-dompdf/tree/v3.1.2"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://fruitcake.nl",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/barryvdh",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-02-21T08:51:10+00:00"
|
||||
},
|
||||
{
|
||||
"name": "brick/math",
|
||||
"version": "0.18.0",
|
||||
@@ -376,6 +453,161 @@
|
||||
],
|
||||
"time": "2024-02-05T11:56:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "dompdf/dompdf",
|
||||
"version": "v3.1.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/dompdf/dompdf.git",
|
||||
"reference": "6d4b4eb8500f7a786da8868ba463a71b725a4005"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/dompdf/dompdf/zipball/6d4b4eb8500f7a786da8868ba463a71b725a4005",
|
||||
"reference": "6d4b4eb8500f7a786da8868ba463a71b725a4005",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"dompdf/php-font-lib": "^1.0.0",
|
||||
"dompdf/php-svg-lib": "^1.0.0",
|
||||
"ext-dom": "*",
|
||||
"ext-mbstring": "*",
|
||||
"masterminds/html5": "^2.0",
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-gd": "*",
|
||||
"ext-json": "*",
|
||||
"ext-zip": "*",
|
||||
"mockery/mockery": "^1.3",
|
||||
"phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-gd": "Needed to process images",
|
||||
"ext-gmagick": "Improves image processing performance",
|
||||
"ext-imagick": "Improves image processing performance",
|
||||
"ext-zlib": "Needed for pdf stream compression"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Dompdf\\": "src/"
|
||||
},
|
||||
"classmap": [
|
||||
"lib/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-2.1"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "The Dompdf Community",
|
||||
"homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
|
||||
}
|
||||
],
|
||||
"description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
|
||||
"homepage": "https://github.com/dompdf/dompdf",
|
||||
"support": {
|
||||
"issues": "https://github.com/dompdf/dompdf/issues",
|
||||
"source": "https://github.com/dompdf/dompdf/tree/v3.1.6"
|
||||
},
|
||||
"time": "2026-07-20T12:29:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "dompdf/php-font-lib",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/dompdf/php-font-lib.git",
|
||||
"reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a6e9a688a2a80016ac080b97be73d3e10c444c9a",
|
||||
"reference": "a6e9a688a2a80016ac080b97be73d3e10c444c9a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-mbstring": "*",
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11 || ^12"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"FontLib\\": "src/FontLib"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-2.1-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "The FontLib Community",
|
||||
"homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md"
|
||||
}
|
||||
],
|
||||
"description": "A library to read, parse, export and make subsets of different types of font files.",
|
||||
"homepage": "https://github.com/dompdf/php-font-lib",
|
||||
"support": {
|
||||
"issues": "https://github.com/dompdf/php-font-lib/issues",
|
||||
"source": "https://github.com/dompdf/php-font-lib/tree/1.0.2"
|
||||
},
|
||||
"time": "2026-01-20T14:10:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "dompdf/php-svg-lib",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/dompdf/php-svg-lib.git",
|
||||
"reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/8259ffb930817e72b1ff1caef5d226501f3dfeb1",
|
||||
"reference": "8259ffb930817e72b1ff1caef5d226501f3dfeb1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-mbstring": "*",
|
||||
"php": "^7.1 || ^8.0",
|
||||
"sabberworm/php-css-parser": "^8.4 || ^9.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Svg\\": "src/Svg"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-3.0-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "The SvgLib Community",
|
||||
"homepage": "https://github.com/dompdf/php-svg-lib/blob/master/AUTHORS.md"
|
||||
}
|
||||
],
|
||||
"description": "A library to read, parse and export to PDF SVG files.",
|
||||
"homepage": "https://github.com/dompdf/php-svg-lib",
|
||||
"support": {
|
||||
"issues": "https://github.com/dompdf/php-svg-lib/issues",
|
||||
"source": "https://github.com/dompdf/php-svg-lib/tree/1.0.2"
|
||||
},
|
||||
"time": "2026-01-02T16:01:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "dragonmantank/cron-expression",
|
||||
"version": "v3.6.0",
|
||||
@@ -2032,6 +2264,73 @@
|
||||
],
|
||||
"time": "2026-03-08T20:05:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "masterminds/html5",
|
||||
"version": "2.11.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Masterminds/html5-php.git",
|
||||
"reference": "a1e7a2f88ee13635d86fc61cfbdf2306a76ddfc7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Masterminds/html5-php/zipball/a1e7a2f88ee13635d86fc61cfbdf2306a76ddfc7",
|
||||
"reference": "a1e7a2f88ee13635d86fc61cfbdf2306a76ddfc7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-dom": "*",
|
||||
"php": ">=7.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^6 || ^7 || ^8 || ^9 || ^10"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "2.7-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Masterminds\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Matt Butcher",
|
||||
"email": "technosophos@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Matt Farina",
|
||||
"email": "matt@mattfarina.com"
|
||||
},
|
||||
{
|
||||
"name": "Asmir Mustafic",
|
||||
"email": "goetas@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "An HTML5 parser and serializer.",
|
||||
"homepage": "http://masterminds.github.io/html5-php",
|
||||
"keywords": [
|
||||
"HTML5",
|
||||
"dom",
|
||||
"html",
|
||||
"parser",
|
||||
"querypath",
|
||||
"serializer",
|
||||
"xml"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/Masterminds/html5-php/issues",
|
||||
"source": "https://github.com/Masterminds/html5-php/tree/2.11.0"
|
||||
},
|
||||
"time": "2026-08-18T06:18:41+00:00"
|
||||
},
|
||||
{
|
||||
"name": "monolog/monolog",
|
||||
"version": "3.10.0",
|
||||
@@ -3306,6 +3605,84 @@
|
||||
},
|
||||
"time": "2026-06-18T03:57:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sabberworm/php-css-parser",
|
||||
"version": "v9.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
|
||||
"reference": "f284e63b6e891e0c28631e54ba06c3ed102a9ef3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/f284e63b6e891e0c28631e54ba06c3ed102a9ef3",
|
||||
"reference": "f284e63b6e891e0c28631e54ba06c3ed102a9ef3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-iconv": "*",
|
||||
"php": "^7.2.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0 || ~8.6.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"php-parallel-lint/php-parallel-lint": "1.4.0",
|
||||
"phpstan/extension-installer": "1.4.3",
|
||||
"phpstan/phpstan": "1.12.33 || 2.2.9",
|
||||
"phpstan/phpstan-phpunit": "1.4.2 || 2.0.18",
|
||||
"phpstan/phpstan-strict-rules": "1.6.2 || 2.0.12",
|
||||
"phpunit/phpunit": "8.5.54",
|
||||
"rawr/phpunit-data-provider": "3.3.1",
|
||||
"rector/rector": "1.2.10 || 2.6.2",
|
||||
"rector/type-perfect": "1.0.0 || 2.1.4",
|
||||
"squizlabs/php_codesniffer": "4.0.4"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-mbstring": "for parsing UTF-8 CSS"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "9.6.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/Rule/Rule.php",
|
||||
"src/RuleSet/RuleContainer.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Sabberworm\\CSS\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Raphael Schweikert"
|
||||
},
|
||||
{
|
||||
"name": "Oliver Klee",
|
||||
"email": "github@oliverklee.de"
|
||||
},
|
||||
{
|
||||
"name": "Jake Hotson",
|
||||
"email": "jake.github@qzdesign.co.uk"
|
||||
}
|
||||
],
|
||||
"description": "Parser for CSS Files written in PHP",
|
||||
"homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
|
||||
"keywords": [
|
||||
"css",
|
||||
"parser",
|
||||
"stylesheet"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
|
||||
"source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.5.0"
|
||||
},
|
||||
"time": "2026-09-20T15:02:00+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/clock",
|
||||
"version": "v7.4.8",
|
||||
|
||||
@@ -0,0 +1,301 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Settings
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set some default values. It is possible to add all defines that can be set
|
||||
| in dompdf_config.inc.php. You can also override the entire config file.
|
||||
|
|
||||
*/
|
||||
'show_warnings' => false, // Throw an Exception on warnings from dompdf
|
||||
|
||||
'public_path' => null, // Override the public path if needed
|
||||
|
||||
/*
|
||||
* Dejavu Sans font is missing glyphs for converted entities, turn it off if you need to show € and £.
|
||||
*/
|
||||
'convert_entities' => true,
|
||||
|
||||
'options' => [
|
||||
/**
|
||||
* The location of the DOMPDF font directory
|
||||
*
|
||||
* The location of the directory where DOMPDF will store fonts and font metrics
|
||||
* Note: This directory must exist and be writable by the webserver process.
|
||||
* *Please note the trailing slash.*
|
||||
*
|
||||
* Notes regarding fonts:
|
||||
* Additional .afm font metrics can be added by executing load_font.php from command line.
|
||||
*
|
||||
* Only the original "Base 14 fonts" are present on all pdf viewers. Additional fonts must
|
||||
* be embedded in the pdf file or the PDF may not display correctly. This can significantly
|
||||
* increase file size unless font subsetting is enabled. Before embedding a font please
|
||||
* review your rights under the font license.
|
||||
*
|
||||
* Any font specification in the source HTML is translated to the closest font available
|
||||
* in the font directory.
|
||||
*
|
||||
* The pdf standard "Base 14 fonts" are:
|
||||
* Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique,
|
||||
* Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique,
|
||||
* Times-Roman, Times-Bold, Times-BoldItalic, Times-Italic,
|
||||
* Symbol, ZapfDingbats.
|
||||
*/
|
||||
'font_dir' => storage_path('fonts'), // advised by dompdf (https://github.com/dompdf/dompdf/pull/782)
|
||||
|
||||
/**
|
||||
* The location of the DOMPDF font cache directory
|
||||
*
|
||||
* This directory contains the cached font metrics for the fonts used by DOMPDF.
|
||||
* This directory can be the same as DOMPDF_FONT_DIR
|
||||
*
|
||||
* Note: This directory must exist and be writable by the webserver process.
|
||||
*/
|
||||
'font_cache' => storage_path('fonts'),
|
||||
|
||||
/**
|
||||
* The location of a temporary directory.
|
||||
*
|
||||
* The directory specified must be writeable by the webserver process.
|
||||
* The temporary directory is required to download remote images and when
|
||||
* using the PDFLib back end.
|
||||
*/
|
||||
'temp_dir' => sys_get_temp_dir(),
|
||||
|
||||
/**
|
||||
* ==== IMPORTANT ====
|
||||
*
|
||||
* dompdf's "chroot": Prevents dompdf from accessing system files or other
|
||||
* files on the webserver. All local files opened by dompdf must be in a
|
||||
* subdirectory of this directory. DO NOT set it to '/' since this could
|
||||
* allow an attacker to use dompdf to read any files on the server. This
|
||||
* should be an absolute path.
|
||||
* This is only checked on command line call by dompdf.php, but not by
|
||||
* direct class use like:
|
||||
* $dompdf = new DOMPDF(); $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output();
|
||||
*/
|
||||
'chroot' => realpath(base_path()),
|
||||
|
||||
/**
|
||||
* Protocol whitelist
|
||||
*
|
||||
* Protocols and PHP wrappers allowed in URIs, and the validation rules
|
||||
* that determine if a resouce may be loaded. Full support is not guaranteed
|
||||
* for the protocols/wrappers specified
|
||||
* by this array.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
'allowed_protocols' => [
|
||||
'data://' => ['rules' => []],
|
||||
'file://' => ['rules' => []],
|
||||
'http://' => ['rules' => []],
|
||||
'https://' => ['rules' => []],
|
||||
],
|
||||
|
||||
/**
|
||||
* Operational artifact (log files, temporary files) path validation
|
||||
*/
|
||||
'artifactPathValidation' => null,
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
'log_output_file' => null,
|
||||
|
||||
/**
|
||||
* Whether to enable font subsetting or not.
|
||||
*/
|
||||
'enable_font_subsetting' => false,
|
||||
|
||||
/**
|
||||
* The PDF rendering backend to use
|
||||
*
|
||||
* Valid settings are 'PDFLib', 'CPDF' (the bundled R&OS PDF class), 'GD' and
|
||||
* 'auto'. 'auto' will look for PDFLib and use it if found, or if not it will
|
||||
* fall back on CPDF. 'GD' renders PDFs to graphic files.
|
||||
* {@link * Canvas_Factory} ultimately determines which rendering class to
|
||||
* instantiate based on this setting.
|
||||
*
|
||||
* Both PDFLib & CPDF rendering backends provide sufficient rendering
|
||||
* capabilities for dompdf, however additional features (e.g. object,
|
||||
* image and font support, etc.) differ between backends. Please see
|
||||
* {@link PDFLib_Adapter} for more information on the PDFLib backend
|
||||
* and {@link CPDF_Adapter} and lib/class.pdf.php for more information
|
||||
* on CPDF. Also see the documentation for each backend at the links
|
||||
* below.
|
||||
*
|
||||
* The GD rendering backend is a little different than PDFLib and
|
||||
* CPDF. Several features of CPDF and PDFLib are not supported or do
|
||||
* not make any sense when creating image files. For example,
|
||||
* multiple pages are not supported, nor are PDF 'objects'. Have a
|
||||
* look at {@link GD_Adapter} for more information. GD support is
|
||||
* experimental, so use it at your own risk.
|
||||
*
|
||||
* @link http://www.pdflib.com
|
||||
* @link http://www.ros.co.nz/pdf
|
||||
* @link http://www.php.net/image
|
||||
*/
|
||||
'pdf_backend' => 'CPDF',
|
||||
|
||||
/**
|
||||
* html target media view which should be rendered into pdf.
|
||||
* List of types and parsing rules for future extensions:
|
||||
* http://www.w3.org/TR/REC-html40/types.html
|
||||
* screen, tty, tv, projection, handheld, print, braille, aural, all
|
||||
* Note: aural is deprecated in CSS 2.1 because it is replaced by speech in CSS 3.
|
||||
* Note, even though the generated pdf file is intended for print output,
|
||||
* the desired content might be different (e.g. screen or projection view of html file).
|
||||
* Therefore allow specification of content here.
|
||||
*/
|
||||
'default_media_type' => 'screen',
|
||||
|
||||
/**
|
||||
* The default paper size.
|
||||
*
|
||||
* North America standard is "letter"; other countries generally "a4"
|
||||
*
|
||||
* @see CPDF_Adapter::PAPER_SIZES for valid sizes ('letter', 'legal', 'A4', etc.)
|
||||
*/
|
||||
'default_paper_size' => 'a4',
|
||||
|
||||
/**
|
||||
* The default paper orientation.
|
||||
*
|
||||
* The orientation of the page (portrait or landscape).
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
'default_paper_orientation' => 'portrait',
|
||||
|
||||
/**
|
||||
* The default font family
|
||||
*
|
||||
* Used if no suitable fonts can be found. This must exist in the font folder.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
'default_font' => 'serif',
|
||||
|
||||
/**
|
||||
* Image DPI setting
|
||||
*
|
||||
* This setting determines the default DPI setting for images and fonts. The
|
||||
* DPI may be overridden for inline images by explictly setting the
|
||||
* image's width & height style attributes (i.e. if the image's native
|
||||
* width is 600 pixels and you specify the image's width as 72 points,
|
||||
* the image will have a DPI of 600 in the rendered PDF. The DPI of
|
||||
* background images can not be overridden and is controlled entirely
|
||||
* via this parameter.
|
||||
*
|
||||
* For the purposes of DOMPDF, pixels per inch (PPI) = dots per inch (DPI).
|
||||
* If a size in html is given as px (or without unit as image size),
|
||||
* this tells the corresponding size in pt.
|
||||
* This adjusts the relative sizes to be similar to the rendering of the
|
||||
* html page in a reference browser.
|
||||
*
|
||||
* In pdf, always 1 pt = 1/72 inch
|
||||
*
|
||||
* Rendering resolution of various browsers in px per inch:
|
||||
* Windows Firefox and Internet Explorer:
|
||||
* SystemControl->Display properties->FontResolution: Default:96, largefonts:120, custom:?
|
||||
* Linux Firefox:
|
||||
* about:config *resolution: Default:96
|
||||
* (xorg screen dimension in mm and Desktop font dpi settings are ignored)
|
||||
*
|
||||
* Take care about extra font/image zoom factor of browser.
|
||||
*
|
||||
* In images, <img> size in pixel attribute, img css style, are overriding
|
||||
* the real image dimension in px for rendering.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
'dpi' => 96,
|
||||
|
||||
/**
|
||||
* Enable embedded PHP
|
||||
*
|
||||
* If this setting is set to true then DOMPDF will automatically evaluate embedded PHP contained
|
||||
* within <script type="text/php"> ... </script> tags.
|
||||
*
|
||||
* ==== IMPORTANT ==== Enabling this for documents you do not trust (e.g. arbitrary remote html pages)
|
||||
* is a security risk.
|
||||
* Embedded scripts are run with the same level of system access available to dompdf.
|
||||
* Set this option to false (recommended) if you wish to process untrusted documents.
|
||||
* This setting may increase the risk of system exploit.
|
||||
* Do not change this settings without understanding the consequences.
|
||||
* Additional documentation is available on the dompdf wiki at:
|
||||
* https://github.com/dompdf/dompdf/wiki
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
'enable_php' => false,
|
||||
|
||||
/**
|
||||
* Enable inline JavaScript
|
||||
*
|
||||
* If this setting is set to true then DOMPDF will automatically insert JavaScript code contained
|
||||
* within <script type="text/javascript"> ... </script> tags as written into the PDF.
|
||||
* NOTE: This is PDF-based JavaScript to be executed by the PDF viewer,
|
||||
* not browser-based JavaScript executed by Dompdf.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
'enable_javascript' => true,
|
||||
|
||||
/**
|
||||
* Enable remote file access
|
||||
*
|
||||
* If this setting is set to true, DOMPDF will access remote sites for
|
||||
* images and CSS files as required.
|
||||
*
|
||||
* ==== IMPORTANT ====
|
||||
* This can be a security risk, in particular in combination with isPhpEnabled and
|
||||
* allowing remote html code to be passed to $dompdf = new DOMPDF(); $dompdf->load_html(...);
|
||||
* This allows anonymous users to download legally doubtful internet content which on
|
||||
* tracing back appears to being downloaded by your server, or allows malicious php code
|
||||
* in remote html pages to be executed by your server with your account privileges.
|
||||
*
|
||||
* This setting may increase the risk of system exploit. Do not change
|
||||
* this settings without understanding the consequences. Additional
|
||||
* documentation is available on the dompdf wiki at:
|
||||
* https://github.com/dompdf/dompdf/wiki
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
'enable_remote' => false,
|
||||
|
||||
/**
|
||||
* List of allowed remote hosts
|
||||
*
|
||||
* Each value of the array must be a valid hostname.
|
||||
*
|
||||
* This will be used to filter which resources can be loaded in combination with
|
||||
* isRemoteEnabled. If enable_remote is FALSE, then this will have no effect.
|
||||
*
|
||||
* Leave to NULL to allow any remote host.
|
||||
*
|
||||
* @var array|null
|
||||
*/
|
||||
'allowed_remote_hosts' => null,
|
||||
|
||||
/**
|
||||
* A ratio applied to the fonts height to be more like browsers' line height
|
||||
*/
|
||||
'font_height_ratio' => 1.1,
|
||||
|
||||
/**
|
||||
* Use the HTML5 Lib parser
|
||||
*
|
||||
* @deprecated This feature is now always on in dompdf 2.x
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
'enable_html5_parser' => true,
|
||||
],
|
||||
|
||||
];
|
||||
@@ -61,25 +61,42 @@ class AiProviderSeeder extends Seeder
|
||||
{
|
||||
$models = [
|
||||
'openrouter' => [
|
||||
['name' => 'inclusionai/ling-2.6-flash', 'slug' => 'inclusionai/ling-2.6-flash', 'max_tokens' => 4096],
|
||||
['name' => 'inclusionai/ling-3.0-tiny:free', 'slug' => 'inclusionai/ling-3.0-tiny:free', 'max_tokens' => 4096],
|
||||
['name' => 'poolside/laguna-s-2.1:free', 'slug' => 'poolside/laguna-s-2.1:free', 'max_tokens' => 4096],
|
||||
['name' => 'poolside/laguna-xs-2.1:free', 'slug' => 'poolside/laguna-xs-2.1:free', 'max_tokens' => 4096],
|
||||
['name' => 'apodex/apodex-1.1-mini:free', 'slug' => 'apodex/apodex-1.1-mini:free', 'max_tokens' => 4096],
|
||||
['name' => 'cohere/north-mini-code:free', 'slug' => 'cohere/north-mini-code:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3.5-content-safety:free', 'slug' => 'nvidia/nemotron-3.5-content-safety:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3-ultra-550b-a55b:free', 'slug' => 'nvidia/nemotron-3-ultra-550b-a55b:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free', 'slug' => 'nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free', 'max_tokens' => 4096],
|
||||
['name' => 'deepseek/deepseek-v4-flash', 'slug' => 'deepseek/deepseek-v4-flash', 'max_tokens' => 8192],
|
||||
['name' => 'deepseek/deepseek-v4-flash-0731:free', 'slug' => 'deepseek/deepseek-v4-flash-0731:free', 'max_tokens' => 8192],
|
||||
['name' => 'deepseek/deepseek-v4.1-flash', 'slug' => 'deepseek/deepseek-v4.1-flash', 'max_tokens' => 8192],
|
||||
['name' => 'dots-studio/dots-3-note-preview:free', 'slug' => 'dots-studio/dots-3-note-preview:free', 'max_tokens' => 4096],
|
||||
['name' => 'google/gemma-4-26b-a4b-it:free', 'slug' => 'google/gemma-4-26b-a4b-it:free', 'max_tokens' => 4096],
|
||||
['name' => 'google/gemma-4-31b-it:free', 'slug' => 'google/gemma-4-31b-it:free', 'max_tokens' => 4096],
|
||||
['name' => 'google/lyria-3-pro-preview', 'slug' => 'google/lyria-3-pro-preview', 'max_tokens' => 4096],
|
||||
['name' => 'google/lyria-3-clip-preview', 'slug' => 'google/lyria-3-clip-preview', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3-super-120b-a12b:free', 'slug' => 'nvidia/nemotron-3-super-120b-a12b:free', 'max_tokens' => 4096],
|
||||
['name' => 'openrouter/free', 'slug' => 'openrouter/free', 'max_tokens' => 4096],
|
||||
['name' => 'inclusionai/ling-3.0-flash-sante:free', 'slug' => 'inclusionai/ling-3.0-flash-sante:free', 'max_tokens' => 4096],
|
||||
['name' => 'inclusionai/ling-3.0-flash-vl:free', 'slug' => 'inclusionai/ling-3.0-flash-vl:free', 'max_tokens' => 4096],
|
||||
['name' => 'liquid/lfm-2.5-2.6b:free', 'slug' => 'liquid/lfm-2.5-2.6b:free', 'max_tokens' => 4096],
|
||||
['name' => 'minimax/minimax-m2', 'slug' => 'minimax/minimax-m2', 'max_tokens' => 8192],
|
||||
['name' => 'minimax/minimax-m3', 'slug' => 'minimax/minimax-m3', 'max_tokens' => 8192],
|
||||
['name' => 'nvidia/nemotron-3-nano-30b-a3b:free', 'slug' => 'nvidia/nemotron-3-nano-30b-a3b:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free', 'slug' => 'nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3-super-120b-a12b:free', 'slug' => 'nvidia/nemotron-3-super-120b-a12b:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3-ultra-550b-a55b:free', 'slug' => 'nvidia/nemotron-3-ultra-550b-a55b:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3.5-content-safety:free', 'slug' => 'nvidia/nemotron-3.5-content-safety:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-3.5-lightning:free', 'slug' => 'nvidia/nemotron-3.5-lightning:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-nano-12b-v2-vl:free', 'slug' => 'nvidia/nemotron-nano-12b-v2-vl:free', 'max_tokens' => 4096],
|
||||
['name' => 'nvidia/nemotron-nano-9b-v2:free', 'slug' => 'nvidia/nemotron-nano-9b-v2:free', 'max_tokens' => 4096],
|
||||
['name' => 'openai/gpt-oss-20b:free', 'slug' => 'openai/gpt-oss-20b:free', 'max_tokens' => 4096],
|
||||
['name' => 'deepseek/deepseek-v4-flash', 'slug' => 'deepseek/deepseek-v4-flash', 'max_tokens' => 8192],
|
||||
['name' => 'openrouter/free', 'slug' => 'openrouter/free', 'max_tokens' => 4096],
|
||||
['name' => 'poolside/laguna-m.1', 'slug' => 'poolside/laguna-m.1', 'max_tokens' => 4096],
|
||||
['name' => 'poolside/laguna-m.1:free', 'slug' => 'poolside/laguna-m.1:free', 'max_tokens' => 4096],
|
||||
['name' => 'poolside/laguna-s-2.1:free', 'slug' => 'poolside/laguna-s-2.1:free', 'max_tokens' => 4096],
|
||||
['name' => 'poolside/laguna-xs-2.1:free', 'slug' => 'poolside/laguna-xs-2.1:free', 'max_tokens' => 4096],
|
||||
['name' => 'qwen/qwen3-coder-next', 'slug' => 'qwen/qwen3-coder-next', 'max_tokens' => 8192],
|
||||
['name' => 'qwen/qwen3.7-flash:free', 'slug' => 'qwen/qwen3.7-flash:free', 'max_tokens' => 4096],
|
||||
['name' => 'qwen/qwen3.8-27b:free', 'slug' => 'qwen/qwen3.8-27b:free', 'max_tokens' => 8192],
|
||||
['name' => 'qwen/qwen3.8-flash', 'slug' => 'qwen/qwen3.8-flash', 'max_tokens' => 4096],
|
||||
['name' => 'thinkingmachines/inkling:free', 'slug' => 'thinkingmachines/inkling:free', 'max_tokens' => 4096],
|
||||
['name' => 'thinkingmachines/inkling-small:free', 'slug' => 'thinkingmachines/inkling-small:free', 'max_tokens' => 4096],
|
||||
['name' => 'xiaomi/mimo-v2.5', 'slug' => 'xiaomi/mimo-v2.5', 'max_tokens' => 4096],
|
||||
['name' => 'xiaomi/mimo-v2.6-flash', 'slug' => 'xiaomi/mimo-v2.6-flash', 'max_tokens' => 4096],
|
||||
['name' => 'z-ai/glm-5.3-flash', 'slug' => 'z-ai/glm-5.3-flash', 'max_tokens' => 4096],
|
||||
],
|
||||
'stepfun' => [
|
||||
['name' => 'step-3.5-flash', 'slug' => 'step-3.5-flash', 'max_tokens' => 8192],
|
||||
|
||||
@@ -15,6 +15,7 @@ class DatabaseSeeder extends Seeder
|
||||
UserSeeder::class,
|
||||
AiProviderSeeder::class,
|
||||
PromptTemplateSeeder::class,
|
||||
LegalDocumentSeeder::class,
|
||||
TutorialSeeder::class,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -18,90 +18,158 @@ class LegalDocumentSeeder extends Seeder
|
||||
$superadmin = User::where('role', 'superadmin')->first();
|
||||
|
||||
$termsContent = <<<EOT
|
||||
TERMOS DE USO
|
||||
TERMOS DE USO - GPrompt
|
||||
|
||||
1. Aceitação dos Termos
|
||||
Ao acessar e utilizar o sistema GPrompt, você concorda em cumprir estes Termos de Uso.
|
||||
1. ACEITAÇÃO DOS TERMOS
|
||||
Ao acessar e utilizar o sistema GPrompt, você concorda em cumprir integralmente estes Termos de Uso. Caso não concorde com qualquer disposição deste documento, você não deve utilizar o sistema.
|
||||
|
||||
2. Descrição do Serviço
|
||||
O GPrompt é um sistema de geração de prompts para inteligência artificial.
|
||||
2. DEFINIÇÕES
|
||||
- Sistema: GPrompt, plataforma de geração de prompts para inteligência artificial
|
||||
- Usuário: pessoa física ou jurídica que utiliza o sistema
|
||||
- Conteúdo: qualquer informação, dado ou material inserido ou gerado pelo sistema
|
||||
- LGPD: Lei Geral de Proteção de Dados Pessoais (Lei nº 13.709/2018)
|
||||
|
||||
3. Conta de Usuário
|
||||
Você é responsável por manter a confidencialidade de sua conta e senha.
|
||||
3. DESCRIÇÃO DO SERVIÇO
|
||||
O GPrompt é um sistema de geração de prompts para inteligência artificial, permitindo a criação, gestão e otimização de prompts estruturados com suporte a múltiplos provedores de IA.
|
||||
|
||||
4. Conduta do Usuário
|
||||
Você concorda em utilizar o sistema de acordo com as leis aplicáveis.
|
||||
4. CADASTRO E CONTA DE USUÁRIO
|
||||
4.1. Para utilizar o sistema, o usuário deve criar uma conta fornecendo informações precisas e atualizadas.
|
||||
4.2. O usuário é integralmente responsável pela confidencialidade de suas credenciais de acesso.
|
||||
4.3. O usuário compromete-se a notificar imediatamente qualquer uso não autorizado de sua conta.
|
||||
4.4. O acesso de usuários não aprovados depende de autorização prévia do administrador.
|
||||
|
||||
5. Propriedade Intelectual
|
||||
Todo o conteúdo e funcionalidades são de propriedade da Syspanel.
|
||||
5. OBRIGAÇÕES DO USUÁRIO
|
||||
5.1. Utilizar o sistema em conformidade com as leis brasileiras.
|
||||
5.2. Não realizar atividades que possam comprometer a segurança do sistema.
|
||||
5.3. Não inserir conteúdo ilegal, ofensivo ou que viole direitos de terceiros.
|
||||
5.4. Não reproduzir, distribuir ou modificar o sistema sem autorização.
|
||||
|
||||
6. Limitação de Responsabilidade
|
||||
O sistema é fornecido "como está", sem garantias.
|
||||
6. PROPRIEDADE INTELECTUAL
|
||||
6.1. O sistema GPrompt e todos os seus componentes são propriedade da Syspanel.
|
||||
6.2. O conteúdo gerado pelo usuário através do sistema é de propriedade do usuário.
|
||||
6.3. É proibida a engenharia reversa, descompilação ou tentativa de extrair o código fonte.
|
||||
|
||||
7. Modificações
|
||||
Estes termos podem ser alterados a qualquer momento.
|
||||
7. LIMITAÇÃO DE RESPONSABILIDADE
|
||||
7.1. O sistema é fornecido "como está", sem garantias de disponibilidade contínua.
|
||||
7.2. A Syspanel não se responsabiliza por danos decorrentes do uso ou da impossibilidade de uso do sistema.
|
||||
7.3. A Syspanel não se responsabiliza pelo conteúdo gerado pela inteligência artificial através do sistema.
|
||||
|
||||
8. Lei Aplicável
|
||||
Estes termos são regidos pelas leis brasileiras.
|
||||
8. PRIVACIDADE E PROTEÇÃO DE DADOS
|
||||
8.1. O tratamento de dados pessoais segue integralmente a LGPD.
|
||||
8.2. Os dados coletados são utilizados exclusivamente para as finalidades descritas na Política de Privacidade.
|
||||
8.3. O usuário pode exercer seus direitos de titular de dados a qualquer momento.
|
||||
|
||||
9. DISPOSIÇÕES GERAIS
|
||||
9.1. Estes termos podem ser alterados a qualquer momento, mediante comunicação aos usuários.
|
||||
9.2. O uso continuado após alterações constitui aceitação dos novos termos.
|
||||
9.3. Foro: Comarca de São Paulo/SP para eventuais controvérsias.
|
||||
|
||||
10. CONTATO
|
||||
Para esclarecimentos sobre estes termos, entre em contato: contato@syspanel.com.br
|
||||
EOT;
|
||||
|
||||
$privacyContent = <<<EOT
|
||||
POLÍTICA DE PRIVACIDADE
|
||||
POLÍTICA DE PRIVACIDADE - GPrompt (LGPD)
|
||||
|
||||
1. Informações Gerais
|
||||
Esta Política de Privacidade descreve como o GPrompt coleta e utiliza dados pessoais.
|
||||
1. INFORMAÇÕES GERAIS
|
||||
Esta Política de Privacidade descreve como o GPrompt coleta, utiliza, armazena e protege os dados pessoais dos usuários, em conformidade com a Lei Geral de Proteção de Dados Pessoais (Lei nº 13.709/2018).
|
||||
|
||||
2. Dados Coletados
|
||||
- Nome e e-mail
|
||||
- Senha (armazenada de forma segura)
|
||||
- Dados de uso do sistema
|
||||
2. TITULAR DO TRATAMENTO
|
||||
Syspanel
|
||||
CNPJ: XX.XXX.XXX/XXXX-XX
|
||||
E-mail: contato@syspanel.com.br
|
||||
|
||||
3. DADOS PESSOAIS COLETADOS
|
||||
3.1. Dados fornecidos pelo usuário:
|
||||
- Nome completo
|
||||
- Endereço de e-mail
|
||||
- Senha de acesso (armazenada com criptografia hash - bcrypt)
|
||||
- Dados da empresa (nome, endereço, WhatsApp, website, redes sociais)
|
||||
|
||||
3.2. Dados coletados automaticamente:
|
||||
- Endereço IP
|
||||
- Agente do navegador (user agent)
|
||||
- Preferências de cookies
|
||||
- Dados de uso do sistema
|
||||
- Data e hora das interações
|
||||
|
||||
3. Finalidade da Coleta
|
||||
- Autenticação e acesso ao sistema
|
||||
- Geração de prompts com IA
|
||||
4. FINALIDADES DO TRATAMENTO
|
||||
- Autenticação e autorização de acesso ao sistema
|
||||
- Geração e otimização de prompts com IA
|
||||
- Histórico de gerações e projetos
|
||||
- Comunicações sobre o serviço
|
||||
- Segurança e prevenção de fraudes
|
||||
- Cumprimento de obrigações legais
|
||||
- Melhoria contínua do sistema
|
||||
|
||||
4. Base Legal
|
||||
- Consentimento do usuário
|
||||
- Execução de contrato
|
||||
- Cumprimento de obrigação legal
|
||||
- Legítimo interesse
|
||||
5. BASES LEGAIS PARA O TRATAMENTO (LGPD - Art. 7º)
|
||||
- Consentimento do titular (Art. 7º, I)
|
||||
- Execução de contrato (Art. 7º, V)
|
||||
- Cumprimento de obrigação legal ou regulatória (Art. 7º, II)
|
||||
- Legítimo interesse (Art. 7º, IX)
|
||||
|
||||
5. Compartilhamento
|
||||
Seus dados não são compartilhados com terceiros, exceto quando exigido por lei.
|
||||
6. COMPARTILHAMENTO DE DADOS
|
||||
6.1. Seus dados não são compartilhados com terceiros, exceto:
|
||||
- Provedores de IA selecionados para geração de prompts (conforme sua escolha)
|
||||
- Autoridades legais, quando exigido por lei
|
||||
- Serviços de infraestrutura (hospedagem, banco de dados)
|
||||
|
||||
6. Armazenamento
|
||||
Os dados são armazenados em servidores seguros durante o tempo necessário.
|
||||
6.2. Não vendemos dados pessoais a terceiros.
|
||||
|
||||
7. Direitos do Titular
|
||||
- Acesso aos dados
|
||||
- Correção de informações
|
||||
- Exclusão da conta
|
||||
- Portabilidade
|
||||
- Revogação do consentimento
|
||||
7. ARMAZENAMENTO E SEGURANÇA
|
||||
7.1. Os dados são armazenados em servidores seguros com acesso restrito.
|
||||
7.2. Adotamos medidas técnicas e organizacionais para proteger os dados contra acesso não autorizado.
|
||||
7.3. O período de armazenamento é o necessário para cumprir as finalidades descritas nesta política.
|
||||
7.4. Dados de usuários inativos podem ser removidos após 12 meses.
|
||||
|
||||
8. Contato
|
||||
Para exercer seus direitos, entre em contato: contato@syspanel.com.br
|
||||
8. DIREITOS DO TITULAR (LGPD - Art. 18)
|
||||
O titular dos dados tem direito a:
|
||||
- Confirmar a existência de tratamento
|
||||
- Acessar seus dados pessoais
|
||||
- Corrigir dados incompletos, inexatos ou desatualizados
|
||||
- Solicitar a anonimização, bloqueio ou eliminação de dados desnecessários
|
||||
- Solicitar a portabilidade dos dados
|
||||
- Revogar o consentimento a qualquer momento
|
||||
- Solicitar a exclusão dos dados tratados com base no consentimento
|
||||
- Ser informado sobre compartilhamento com entidades públicas e privadas
|
||||
|
||||
9. COOKIES
|
||||
9.1. Utilizamos cookies necessários para o funcionamento do sistema.
|
||||
9.2. Cookies opcionais (estatísticas, marketing, preferências) dependem do seu consentimento.
|
||||
9.3. Você pode gerenciar suas preferências de cookies através do banner de cookies.
|
||||
|
||||
10. CONSENTIMENTO
|
||||
Ao utilizar o sistema, você declara ter lido e compreendido esta Política de Privacidade e autoriza o tratamento de seus dados conforme aqui descrito.
|
||||
|
||||
11. ALTERAÇÕES
|
||||
Esta política pode ser atualizada periodicamente. Alterações significativas serão comunicadas aos usuários.
|
||||
|
||||
12. CONTATO E DPO
|
||||
Para exercer seus direitos ou esclarecer dúvidas sobre privacidade:
|
||||
E-mail: contato@syspanel.com.br
|
||||
Prazo de resposta: até 15 dias úteis (LGPD - Art. 19)
|
||||
EOT;
|
||||
|
||||
LegalDocument::create([
|
||||
'type' => 'terms-of-service',
|
||||
'title' => 'Termos de Uso',
|
||||
'content' => $termsContent,
|
||||
'version' => '1.0',
|
||||
'published_by' => $superadmin?->id,
|
||||
'published_at' => now(),
|
||||
]);
|
||||
LegalDocument::updateOrCreate(
|
||||
['type' => 'terms-of-service'],
|
||||
[
|
||||
'title' => 'Termos de Uso',
|
||||
'content' => $termsContent,
|
||||
'version' => '1.0',
|
||||
'published_by' => $superadmin?->id,
|
||||
'published_at' => now(),
|
||||
]
|
||||
);
|
||||
|
||||
LegalDocument::create([
|
||||
'type' => 'privacy-policy',
|
||||
'title' => 'Política de Privacidade',
|
||||
'content' => $privacyContent,
|
||||
'version' => '1.0',
|
||||
'published_by' => $superadmin?->id,
|
||||
'published_at' => now(),
|
||||
]);
|
||||
LegalDocument::updateOrCreate(
|
||||
['type' => 'privacy-policy'],
|
||||
[
|
||||
'title' => 'Política de Privacidade',
|
||||
'content' => $privacyContent,
|
||||
'version' => '1.0',
|
||||
'published_by' => $superadmin?->id,
|
||||
'published_at' => now(),
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -23,12 +23,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'A empresa atende pequenas e médias empresas com soluções de tecnologia. A landing page deve transmitir confiança, inovação e credibilidade, com design moderno e responsivo.',
|
||||
'persona' => 'Você é um especialista em UI/UX e Frontend com foco em conversão. Domina HTML5, CSS3, JavaScript, Bootstrap 5 e práticas de SEO.',
|
||||
'tone' => 'Profissional, tecnológico, confiável e moderno. Linguagem acessível mas sofisticada.',
|
||||
'constraints' => "- HTML5 semântico e acessível.\n- CSS responsivo mobile-first.\n- Máximo de 800 linhas.\n- SEO otimizado.\n- Sem dependências externas além de Bootstrap 5 e Bootstrap Icons.\n- Animações suaves com CSS.",
|
||||
'constraints' => "- HTML5 semântico e acessível.\n- CSS responsivo mobile-first.\n- SEO otimizado.\n- Sem dependências externas além de Bootstrap 5 e Bootstrap Icons.\n- Animações suaves com CSS.",
|
||||
'output_format' => 'Código HTML completo em arquivo único com CSS embutido e JavaScript mínimo para interações.',
|
||||
'examples' => "Hero section com headline, subtítulo, CTA.\nCards de serviços.\nDepoimentos.\nFormulário de contato.\nFooter completo.",
|
||||
'variables' => 'nome_empresa, slogan, telefone, email, endereco, linkedin_url',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -42,12 +43,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'SaaS B2B ou B2C com modelo de assinatura. Precisa convencer visitantes a experimentar ou assinar o produto.',
|
||||
'persona' => 'Especialista em Growth-Driven Design e CRO (Conversion Rate Optimization) para SaaS.',
|
||||
'tone' => 'Moderno, direto, orientado a resultados. Linguagem clara e orientada a benefícios.',
|
||||
'constraints' => "- Foco em conversão e captura de leads.\n- Design moderno com animações.\n- Responsivo.\n- SEO otimizado.\n- Máximo de 900 linhas.",
|
||||
'constraints' => "- Foco em conversão e captura de leads.\n- Design moderno com animações.\n- Responsivo.\n- SEO otimizado.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Features, Pricing, FAQ, CTA final, Footer.',
|
||||
'examples' => 'Hero com trial grátis, grid de funcionalidades, tabela de preços com destaque no plano recomendado.',
|
||||
'variables' => 'nome_produto, slogan, trial_dias, preco_inicial, url_signup',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -61,12 +63,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Produto digital voltado para criadores de conteúdo, desenvolvedores ou profissionais de marketing.',
|
||||
'persona' => 'Especialista em lançamentos digitais e páginas de alta conversão.',
|
||||
'tone' => 'Persuasivo, entusiasta e confiável.',
|
||||
'constraints' => "- Foco em conversão.\n- Design moderno.\n- Responsivo.\n- Máximo de 800 linhas.",
|
||||
'constraints' => "- Foco em conversão.\n- Design moderno.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Problema/Solução, Benefícios, Prova social, Oferta, FAQ, CTA.',
|
||||
'examples' => 'Hero com vídeo ou imagem, seção de benefícios com ícones, depoimentos, contador de oferta.',
|
||||
'variables' => 'nome_produto, preco, desconto, url_checkout',
|
||||
'temperature' => 0.8,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -80,12 +83,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Evento corporativo, conferência, workshop ou webinar. Público de 100 a 5000 participantes.',
|
||||
'persona' => 'Especialista em eventos e experiência do usuário para inscrições.',
|
||||
'tone' => 'Animado, profissional, informativo.',
|
||||
'constraints' => "- Design impactante.\n- Informações claras.\n- Formulário de inscrição.\n- Responsivo.\n- Máximo de 700 linhas.",
|
||||
'constraints' => "- Design impactante.\n- Informações claras.\n- Formulário de inscrição.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Sobre, Programação, Palestrantes, Inscrição, Local/Online, Footer.',
|
||||
'examples' => 'Hero com contador regressivo, cards de palestrantes, timeline do evento, mapa ou link de transmissão.',
|
||||
'variables' => 'nome_evento, data, local, url_inscricao, valor',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -99,12 +103,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Marketing de conteúdo para nutrição de leads. O material é oferecido em troca de e-mail.',
|
||||
'persona' => 'Especialista em marketing de conteúdo e inbound marketing.',
|
||||
'tone' => 'Educativo, confiável, persuasivo.',
|
||||
'constraints' => "- Foco em captura de leads.\n- Design clean.\n- Responsivo.\n- Máximo de 600 linhas.",
|
||||
'constraints' => "- Foco em captura de leads.\n- Design clean.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, O que você vai aprender, Sobre o autor, Formulário de captura, Footer.',
|
||||
'examples' => 'Hero com capa do e-book, bullets de benefícios, formulário simples (nome + email), CTA destacado.',
|
||||
'variables' => 'titulo_ebook, autor, numero_paginas, url_download',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -118,12 +123,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Curso online de desenvolvimento web, marketing digital, design ou área tech. Público iniciante a intermediário.',
|
||||
'persona' => 'Especialista em educação a distância e páginas de venda de cursos.',
|
||||
'tone' => 'Motivador, educativo, confiável.',
|
||||
'constraints' => "- Foco em conversão.\n- Design moderno.\n- Responsivo.\n- Máximo de 900 linhas.",
|
||||
'constraints' => "- Foco em conversão.\n- Design moderno.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Para quem é, Conteúdo programático, Instrutor, Depoimentos, Garantia, Preço, FAQ, CTA.',
|
||||
'examples' => 'Hero com vídeo de apresentação, accordion de módulos, selo de garantia, depoimentos em vídeo.',
|
||||
'variables' => 'nome_curso, instrutor, carga_horaria, preco, url_matricula',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -137,12 +143,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'App de produtividade, finanças, saúde ou social. Disponível para iOS e Android.',
|
||||
'persona' => 'Especialista em mobile apps e ASO (App Store Optimization).',
|
||||
'tone' => 'Moderno, dinâmico, fresco.',
|
||||
'constraints' => "- Design moderno com mockups.\n- Responsivo.\n- Links para App Store e Google Play.\n- Máximo de 800 linhas.",
|
||||
'constraints' => "- Design moderno com mockups.\n- Responsivo.\n- Links para App Store e Google Play.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Funcionalidades, Telas, Reviews, Download, FAQ, Footer.',
|
||||
'examples' => 'Hero com phone mockup, grid de funcionalidades com ícones, badges de avaliação, botões de download.',
|
||||
'variables' => 'nome_app, slogan, url_ios, url_android, categoria',
|
||||
'temperature' => 0.8,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -156,12 +163,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Agência digital que oferece serviços de branding, design, desenvolvimento e marketing. Atende startups e PMEs.',
|
||||
'persona' => 'Especialista em branding e experiência digital para agências.',
|
||||
'tone' => 'Criativo, profissional, ousado.',
|
||||
'constraints' => "- Design impactante.\n- Portfólio em destaque.\n- Responsivo.\n- Máximo de 900 linhas.",
|
||||
'constraints' => "- Design impactante.\n- Portfólio em destaque.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Serviços, Portfólio, Processo, Clientes, Depoimentos, Contato, Footer.',
|
||||
'examples' => 'Hero com vídeo background, grid de projetos, logos de clientes, formulário de orçamento.',
|
||||
'variables' => 'nome_agencia, especialidades, url_portfolio, telefone, email',
|
||||
'temperature' => 0.8,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -175,12 +183,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Restaurante de culinária contemporânea, com ambiente acolhedor e delivery.',
|
||||
'persona' => 'Especialista em design para gastronomia e experiência do usuário.',
|
||||
'tone' => 'Acolhedor, sofisticado, saboroso.',
|
||||
'constraints' => "- Design elegante.\n- Cardápio visual.\n- Sistema de reservas.\n- Responsivo.\n- Máximo de 700 linhas.",
|
||||
'constraints' => "- Design elegante.\n- Cardápio visual.\n- Sistema de reservas.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Sobre, Cardápio, Reservas, Depoimentos, Localização, Footer.',
|
||||
'examples' => 'Hero com imagem do ambiente, cards de pratos com fotos, mapa integrado, botão de reserva.',
|
||||
'variables' => 'nome_restaurante, cozinha, telefone, endereco, url_reserva',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -194,12 +203,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Imobiliária que vende e aluga imóveis residenciais e comerciais. Atua em grandes cidades.',
|
||||
'persona' => 'Especialista em imóveis e experiência do usuário para vendas.',
|
||||
'tone' => 'Sofisticado, confiável, aspiracional.',
|
||||
'constraints' => "- Design premium.\n- Galeria de imagens.\n- Filtros de busca.\n- Responsivo.\n- Máximo de 800 linhas.",
|
||||
'constraints' => "- Design premium.\n- Galeria de imagens.\n- Filtros de busca.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Busca, Destaques, Sobre, Contato, Footer.',
|
||||
'examples' => 'Hero com slider de imóveis, cards com fotos e preços, mapa de localização, formulário de contato.',
|
||||
'variables' => 'nome_imobiliaria, cidade, telefone, email, url_portfolio',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -213,12 +223,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Clínica de fisioterapia, academia boutique ou spa urbano. Público preocupado com saúde e bem-estar.',
|
||||
'persona' => 'Especialista em saúde digital e experiência do usuário para clínicas.',
|
||||
'tone' => 'Acolhedor, profissional, saudável.',
|
||||
'constraints' => "- Design clean e acolhedor.\n- Sistema de agendamento.\n- Responsivo.\n- Máximo de 700 linhas.",
|
||||
'constraints' => "- Design clean e acolhedor.\n- Sistema de agendamento.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Serviços, Profissionais, Depoimentos, Agendamento, Localização, Footer.',
|
||||
'examples' => 'Hero com imagem relaxante, cards de serviços, equipe com fotos, botão de agendamento WhatsApp.',
|
||||
'variables' => 'nome_clinica, servicos, telefone, endereco, url_agendamento',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -232,12 +243,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Faculdade, curso técnico ou escola de idiomas. Público jovem e adultos em busca de qualificação.',
|
||||
'persona' => 'Especialista em educação e experiência do usuário para instituições de ensino.',
|
||||
'tone' => 'Institucional, inspirador, educativo.',
|
||||
'constraints' => "- Design institucional.\n- Informações claras.\n- Responsivo.\n- Máximo de 800 linhas.",
|
||||
'constraints' => "- Design institucional.\n- Informações claras.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Cursos, Diferenciais, Infraestrutura, Depoimentos, Matrícula, Footer.',
|
||||
'examples' => 'Hero com campus, cards de cursos, galeria de fotos, formulário de matrícula.',
|
||||
'variables' => 'nome_escola, cursos, telefone, email, url_matricula',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -251,12 +263,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Empresa consolidada que precisa de presença digital profissional. Pode ser indústria, comércio ou serviços.',
|
||||
'persona' => 'Especialista em sites institucionais e identidade digital.',
|
||||
'tone' => 'Institucional, profissional, confiável.',
|
||||
'constraints' => "- HTML5 semântico.\n- Múltiplas seções.\n- SEO otimizado.\n- Responsivo.\n- Máximo de 1000 linhas.",
|
||||
'constraints' => "- HTML5 semântico.\n- Múltiplas seções.\n- SEO otimizado.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Header, Hero, Sobre, Serviços, Cases, Equipe, Contato, Footer.',
|
||||
'examples' => 'Header fixo, hero com imagem institucional, grid de serviços, timeline da empresa, formulário de contato.',
|
||||
'variables' => 'nome_empresa, slogan, missao, telefone, email, endereco',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -270,12 +283,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Profissional de tecnologia ou design que quer showcase de projetos e experiência.',
|
||||
'persona' => 'Especialista em portfolios e experiência do usuário para profissionais.',
|
||||
'tone' => 'Minimalista, moderno, profissional.',
|
||||
'constraints' => "- Design clean.\n- Foco nos projetos.\n- Responsivo.\n- Máximo de 700 linhas.",
|
||||
'constraints' => "- Design clean.\n- Foco nos projetos.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Sobre, Experiência, Projetos, Skills, Contato, Footer.',
|
||||
'examples' => 'Hero com foto, timeline de experiência, grid de projetos com screenshots, lista de skills.',
|
||||
'variables' => 'nome, profissao, email, linkedin, github, url_portfolio',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -289,12 +303,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Profissional criativo que precisa de um site impactante e visualmente marcante.',
|
||||
'persona' => 'Especialista em design criativo e experiência visual imersiva.',
|
||||
'tone' => 'Criativo, ousado, artístico.',
|
||||
'constraints' => "- Design criativo e impactante.\n- Galeria de imagens.\n- Animações suaves.\n- Responsivo.\n- Máximo de 800 linhas.",
|
||||
'constraints' => "- Design criativo e impactante.\n- Galeria de imagens.\n- Animações suaves.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Galeria, Sobre, Processo, Contato, Footer.',
|
||||
'examples' => 'Hero com animação, grid masonry de trabalhos, lightbox de imagens, formulário de contato minimalista.',
|
||||
'variables' => 'nome, profissao, estilo, url_portfolio, instagram',
|
||||
'temperature' => 0.9,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -308,12 +323,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Blog de tecnologia, lifestyle ou produtividade. Conteúdo em português.',
|
||||
'persona' => 'Especialista em UX para blogs e conteúdo.',
|
||||
'tone' => 'Acessível, envolvente, informativo.',
|
||||
'constraints' => "- Design legível.\n- Layout de blog.\n- Responsivo.\n- Máximo de 900 linhas.",
|
||||
'constraints' => "- Design legível.\n- Layout de blog.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Header, Hero, Lista de posts, Sidebar, Newsletter, Footer.',
|
||||
'examples' => 'Lista de posts com thumbnails, sidebar com categorias, formulário de newsletter, paginação.',
|
||||
'variables' => 'nome_autor, categoria_principal, url_newsletter',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -327,12 +343,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Loja de roupas, eletrônicos ou produtos artesanais. Catálogo com até 20 produtos.',
|
||||
'persona' => 'Especialista em e-commerce e experiência de compra online.',
|
||||
'tone' => 'Comercial, confiável, envolvente.',
|
||||
'constraints' => "- Design moderno.\n- Catálogo de produtos.\n- Carrinho funcional.\n- Responsivo.\n- Máximo de 1200 linhas.",
|
||||
'constraints' => "- Design moderno.\n- Catálogo de produtos.\n- Carrinho funcional.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Header, Hero, Catálogo, Carrinho, Checkout, Footer.',
|
||||
'examples' => 'Grid de produtos, filtros, carrinho lateral, formulário de checkout, badges de desconto.',
|
||||
'variables' => 'nome_loja, categoria, moeda, url_checkout',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -346,12 +363,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Sistema de gestão de projetos, CRM ou ferramenta de produtividade para equipes.',
|
||||
'persona' => 'Especialista em UX para aplicativos web e dashboards.',
|
||||
'tone' => 'Profissional, limpo, eficiente.',
|
||||
'constraints' => "- Interface limpa.\n- Dashboard com gráficos.\n- Responsivo.\n- Máximo de 1000 linhas.",
|
||||
'constraints' => "- Interface limpa.\n- Dashboard com gráficos.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Login, Dashboard, Sidebar, Tabelas, Forms, Perfil.',
|
||||
'examples' => 'Sidebar de navegação, cards de métricas, tabela de dados, gráficos com Chart.js.',
|
||||
'variables' => 'nome_sistema, modulo_principal, url_app',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -365,12 +383,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Painel de administração para gerenciar usuários, conteúdo e configurações.',
|
||||
'persona' => 'Especialista em painéis administrativos e data visualization.',
|
||||
'tone' => 'Profissional, limpo, informativo.',
|
||||
'constraints' => "- Design clean.\n- Gráficos interativos.\n- Tabelas responsivas.\n- Máximo de 900 linhas.",
|
||||
'constraints' => "- Design clean.\n- Gráficos interativos.\n- Tabelas responsivas.",
|
||||
'output_format' => 'HTML completo com seções: Sidebar, Header, Cards de métricas, Gráficos, Tabela, Footer.',
|
||||
'examples' => 'Cards de KPIs, gráfico de linha com Chart.js, tabela de usuários, filtros de data.',
|
||||
'variables' => 'nome_sistema, metricas, periodo',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -384,12 +403,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Restaurante, lanchonete ou pizzaria que oferece delivery. Integração com WhatsApp ou iFood.',
|
||||
'persona' => 'Especialista em delivery e experiência de pedido online.',
|
||||
'tone' => 'Descontraído, saboroso, rápido.',
|
||||
'constraints' => "- Cardápio visual.\n- Botão de pedido.\n- Responsivo.\n- Máximo de 700 linhas.",
|
||||
'constraints' => "- Cardápio visual.\n- Botão de pedido.\n- Responsivo.",
|
||||
'output_format' => 'HTML completo com seções: Hero, Cardápio, Destaques, Avaliações, Pedido, Footer.',
|
||||
'examples' => 'Hero com imagem de comida, cards de categorias, botão de pedido WhatsApp, avaliações.',
|
||||
'variables' => 'nome_restaurante, categoria, telefone, url_cardapio',
|
||||
'temperature' => 0.8,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -403,12 +423,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto fullstack PHP com Laravel 13, seguindo PSR-12, strict types, policies e validações robustas. Banco MySQL/MariaDB.',
|
||||
'persona' => 'Você é um arquiteto de software especializado em Laravel, com profundo conhecimento de PHP 8.3, Eloquent ORM, Filament, Livewire e boas práticas.',
|
||||
'tone' => 'Técnico, estruturado, didático.',
|
||||
'constraints' => "- PHP 8.3 com strict_types.\n- PSR-12 compliance.\n- Migrations, seeders e factories.\n- Validações com Form Requests.\n- Policies e Gates para autorização.\n- Máximo de 2500 linhas de código.",
|
||||
'constraints' => "- PHP 8.3 com strict_types.\n- PSR-12 compliance.\n- Migrations, seeders e factories.\n- Validações com Form Requests.\n- Policies e Gates para autorização.",
|
||||
'output_format' => 'Código completo: migration, model, controller, request, view Blade, routes, seeder e factory.',
|
||||
'examples' => 'CRUD completo de Produtos com relacionamentos e upload de imagem.',
|
||||
'variables' => 'nome_modulo, entidade, nome_tabela',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -422,12 +443,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto de API REST estruturada com Slim 4, usando containers DI, middlewares, validação e documentação OpenAPI.',
|
||||
'persona' => 'Você é um backend specialist especializado em PHP, APIs REST e arquitetura hexagonal.',
|
||||
'tone' => 'Técnico, limpo, escalável.',
|
||||
'constraints' => "- PHP 8.3 com strict_types.\n- Slim 4 com rotas agrupadas.\n- Middlewares de autenticação, CORS e rate limiting.\n- Eloquent ORM para banco de dados.\n- Documentação Swagger/OpenAPI.\n- Máximo de 2000 linhas.",
|
||||
'constraints' => "- PHP 8.3 com strict_types.\n- Slim 4 com rotas agrupadas.\n- Middlewares de autenticação, CORS e rate limiting.\n- Eloquent ORM para banco de dados.\n- Documentação Swagger/OpenAPI.",
|
||||
'output_format' => 'Código completo: index.php, rotas, controllers, middlewares, modelos Eloquent, migrations.',
|
||||
'examples' => 'CRUD de usuários com autenticação JWT e rate limiting.',
|
||||
'variables' => 'nome_recurso, nome_modelo, campos_customizados',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -441,12 +463,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto Laravel 13 focado em API com autenticação via token, versionamento de rotas, rate limiting e documentação com Scribe.',
|
||||
'persona' => 'Especialista em Laravel APIs com foco em performance, segurança e boas práticas.',
|
||||
'tone' => 'Técnico, robusto, seguro.',
|
||||
'constraints' => "- Laravel 13 + Sanctum.\n- API Resources para transformação de dados.\n- Form Requests para validação.\n- Testes Feature e Unit.\n- Máximo de 2500 linhas.",
|
||||
'constraints' => "- Laravel 13 + Sanctum.\n- API Resources para transformação de dados.\n- Form Requests para validação.\n- Testes Feature e Unit.",
|
||||
'output_format' => 'Migration, Model, Controller, API Resource, Request, Routes, Testes.',
|
||||
'examples' => 'CRUD de Produtos com imagens, paginação e filtros.',
|
||||
'variables' => 'nome_modulo, entidade, campos_filtros',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -460,12 +483,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto Slim 4 com estrutura MVC, templates Twig, Flash messages e CSRF protection.',
|
||||
'persona' => 'Especialista em micro-frameworks PHP e arquitetura limpa.',
|
||||
'tone' => 'Didático, organizado, prático.',
|
||||
'constraints' => "- PHP 8.3.\n- Slim 4 com DI container.\n- Twig para views.\n- Middlewares de sessão e CSRF.\n- Máximo de 2000 linhas.",
|
||||
'constraints' => "- PHP 8.3.\n- Slim 4 com DI container.\n- Twig para views.\n- Middlewares de sessão e CSRF.",
|
||||
'output_format' => 'Arquivos: index.php, rotas, controllers, views Twig, middlewares, migrations.',
|
||||
'examples' => 'Blog simples com autenticação e CRUD de posts.',
|
||||
'variables' => 'nome_projeto, tema, modulo_principal',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -479,12 +503,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto frontend moderno com Vue 3 Composition API, TypeScript opcional, estado global com Pinia e requisições HTTP.',
|
||||
'persona' => 'Especialista em Vue.js e arquitetura frontend moderna.',
|
||||
'tone' => 'Moderno, componentizado, reutilizável.',
|
||||
'constraints' => "- Vue 3 com Composition API.\n- Vite como bundler.\n- Pinia para estado global.\n- Vue Router para navegação.\n- Axios para HTTP.\n- Máximo de 2500 linhas.",
|
||||
'constraints' => "- Vue 3 com Composition API.\n- Vite como bundler.\n- Pinia para estado global.\n- Vue Router para navegação.\n- Axios para HTTP.",
|
||||
'output_format' => 'Estrutura completa: src/components, src/views, src/stores, src/router, src/services.',
|
||||
'examples' => 'Dashboard com sidebar, gráficos, tabela de dados e formulários.',
|
||||
'variables' => 'nome_app, tema_cores, modulo_principal',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -498,12 +523,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto React moderno com hooks, componentização, estado global e integração com APIs.',
|
||||
'persona' => 'Especialista em React e ecossistema JavaScript moderno.',
|
||||
'tone' => 'Moderno, performático, escalável.',
|
||||
'constraints' => "- React 18+ com hooks.\n- Vite.\n- Redux Toolkit para estado.\n- React Router v6.\n- Axios para HTTP.\n- Máximo de 2500 linhas.",
|
||||
'constraints' => "- React 18+ com hooks.\n- Vite.\n- Redux Toolkit para estado.\n- React Router v6.\n- Axios para HTTP.",
|
||||
'output_format' => 'Estrutura completa: src/components, src/pages, src/store, src/router, src/services.',
|
||||
'examples' => 'Dashboard com gráficos, tabela paginada e formulários.',
|
||||
'variables' => 'nome_app, tema_cores, modulo_principal',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -517,12 +543,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto fullstack React com Next.js 14, usando App Router, Server Actions, middleware de autenticação e Prisma com PostgreSQL.',
|
||||
'persona' => 'Especialista em Next.js, React Server Components e fullstack TypeScript.',
|
||||
'tone' => 'Moderno, performático, type-safe.',
|
||||
'constraints' => "- Next.js 14+.\n- App Router com Server Components.\n- Tailwind CSS.\n- Prisma ORM.\n- Autenticação com NextAuth.js.\n- Máximo de 3000 linhas.",
|
||||
'constraints' => "- Next.js 14+.\n- App Router com Server Components.\n- Tailwind CSS.\n- Prisma ORM.\n- Autenticação com NextAuth.js.",
|
||||
'output_format' => 'Estrutura completa: app/, components/, lib/, prisma/, middleware.ts.',
|
||||
'examples' => 'Blog com CMS, autenticação e painel admin.',
|
||||
'variables' => 'nome_projeto, database_url, modulo_principal',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -536,12 +563,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto backend Node.js com estrutura em camadas (controllers, services, repositories), validação com Zod e testes.',
|
||||
'persona' => 'Especialista em Node.js, TypeScript e arquitetura backend escalável.',
|
||||
'tone' => 'Técnico, estruturado, type-safe.',
|
||||
'constraints' => "- Node.js + TypeScript.\n- Express com middlewares.\n- Prisma ORM.\n- Zod para validação.\n- JWT para autenticação.\n- Máximo de 2500 linhas.",
|
||||
'constraints' => "- Node.js + TypeScript.\n- Express com middlewares.\n- Prisma ORM.\n- Zod para validação.\n- JWT para autenticação.",
|
||||
'output_format' => 'Estrutura completa: src/controllers, src/services, src/repositories, src/middlewares, prisma/schema.',
|
||||
'examples' => 'CRUD de usuários com validação, hash de senha e refresh token.',
|
||||
'variables' => 'nome_modulo, entidade, campos_customizados',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -555,12 +583,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto Python com FastAPI, banco PostgreSQL, validação automática, documentação interativa e testes.',
|
||||
'persona' => 'Especialista em Python, FastAPI e arquitetura de microsserviços.',
|
||||
'tone' => 'Técnico, limpo, performático.',
|
||||
'constraints' => "- Python 3.11+.\n- FastAPI com Pydantic v2.\n- SQLAlchemy 2.0 ORM.\n- Autenticação OAuth2 com JWT.\n- Testes com pytest.\n- Máximo de 2500 linhas.",
|
||||
'constraints' => "- Python 3.11+.\n- FastAPI com Pydantic v2.\n- SQLAlchemy 2.0 ORM.\n- Autenticação OAuth2 com JWT.\n- Testes com pytest.",
|
||||
'output_format' => 'Estrutura completa: main.py, routers, models, schemas, dependencies, tests.',
|
||||
'examples' => 'CRUD de produtos com upload de imagens e cache com Redis.',
|
||||
'variables' => 'nome_modulo, entidade, campos_customizados',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -574,12 +603,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto fullstack separado: backend Laravel 13 com API REST e frontend Vue 3 consumindo a API. Comunicação via axios e Sanctum.',
|
||||
'persona' => 'Arquiteto fullstack especializado em Laravel e Vue.js.',
|
||||
'tone' => 'Integrado, moderno, seguro.',
|
||||
'constraints' => "- Laravel 13 + Sanctum.\n- Vue 3 com Composition API.\n- Axios para requisições.\n- CORS configurado.\n- Validações em ambos os lados.\n- Máximo de 3000 linhas.",
|
||||
'constraints' => "- Laravel 13 + Sanctum.\n- Vue 3 com Composition API.\n- Axios para requisições.\n- CORS configurado.\n- Validações em ambos os lados.",
|
||||
'output_format' => 'Código completo backend (routes, controllers, models) + frontend (components, stores, router).',
|
||||
'examples' => 'Sistema de gestão de tarefas com autenticação e drag-and-drop.',
|
||||
'variables' => 'nome_projeto, modulo_principal, entidades',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -593,12 +623,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Projeto Laravel 13 com stack moderna: frontend com Tailwind CSS 4, Blade e Vue.js 3; backend com Laravel Reverb para tempo real, Sanctum para API auth, Spatie Permission para RBAC.',
|
||||
'persona' => 'Você é um arquiteto fullstack sênior especializado em Laravel 13, PHP 8.3, Tailwind CSS 4, Vue.js 3 e integrações de IA multi-provider.',
|
||||
'tone' => 'Técnico, estruturado, moderno e objetivo. Segue rigorosamente PSR-12 e strict_types.',
|
||||
'constraints' => "- PHP 8.3 com strict_types e declare(strict_types=1).\n- PSR-12 compliance com Laravel Pint.\n- Eloquent ORM com relacionamentos e mutators.\n- Policies e Gates para toda autorização.\n- Form Requests para validação.\n- Integração multi-provider de IA via service container.\n- Laravel Reverb para eventos em tempo real.\n- Sanctum para autenticação API.\n- Spatie Permission para RBAC.\n- Mews Captcha (math) para formulários públicos.\n- ApexCharts no frontend via Vue.js 3.\n- Máximo de 4000 linhas de código.",
|
||||
'constraints' => "- PHP 8.3 com strict_types e declare(strict_types=1).\n- PSR-12 compliance com Laravel Pint.\n- Eloquent ORM com relacionamentos e mutators.\n- Policies e Gates para toda autorização.\n- Form Requests para validação.\n- Integração multi-provider de IA via service container.\n- Laravel Reverb para eventos em tempo real.\n- Sanctum para autenticação API.\n- Spatie Permission para RBAC.\n- Mews Captcha (math) para formulários públicos.\n- ApexCharts no frontend via Vue.js 3.",
|
||||
'output_format' => 'Código completo: migration, model, controller, request, policy, service, view Blade, Vue.js 3 component, routes, seeder, factory e testes Feature/Unit.',
|
||||
'examples' => 'Dashboard com ApexCharts mostrando métricas de gerações de prompt por provedor de IA, formulário de criação com Mews Captcha.',
|
||||
'variables' => 'nome_modulo, entidade, nome_tabela, provedores_ia, permissoes',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -612,12 +643,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'API RESTful com sistema de autenticação robusto, múltiplos roles (admin, user, manager), proteção de rotas e refresh token automático.',
|
||||
'persona' => 'Especialista em segurança de APIs e autenticação stateless.',
|
||||
'tone' => 'Seguro, robusto, documentado.',
|
||||
'constraints' => "- JWT com access e refresh tokens.\n- Roles e permissões.\n- Middleware de autenticação.\n- Rate limiting.\n- Máximo de 2000 linhas.",
|
||||
'constraints' => "- JWT com access e refresh tokens.\n- Roles e permissões.\n- Middleware de autenticação.\n- Rate limiting.",
|
||||
'output_format' => 'Estrutura completa: auth controller, middleware, JWT service, rotas protegidas.',
|
||||
'examples' => 'Login, registro, refresh token, esqueci senha, verificação de email.',
|
||||
'variables' => 'nome_api, roles, provedor_ia',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -631,12 +663,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Sistema distribuído com múltiplos serviços (usuários, pagamentos, notificações), API Gateway, message broker e observabilidade.',
|
||||
'persona' => 'Arquiteto de software especializado em microsserviços, DDD e cloud native.',
|
||||
'tone' => 'Arquitetural, escalável, resiliente.',
|
||||
'constraints' => "- Docker + Docker Compose.\n- Comunicação via HTTP/gRPC.\n- Message broker (RabbitMQ/Kafka).\n- Monitoramento (Prometheus/Grafana).\n- Máximo de 3500 linhas.",
|
||||
'constraints' => "- Docker + Docker Compose.\n- Comunicação via HTTP/gRPC.\n- Message broker (RabbitMQ/Kafka).\n- Monitoramento (Prometheus/Grafana).",
|
||||
'output_format' => 'Dockerfiles, docker-compose, código dos serviços, gateway, migrations.',
|
||||
'examples' => 'E-commerce com serviços: usuários, produtos, pedidos, pagamentos, notificações.',
|
||||
'variables' => 'nome_sistema, servicos, broker_mensagens',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -650,12 +683,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Chatbot web ou WhatsApp com backend em PHP/Node.js, integração com modelos de linguagem, embeddings e vector database.',
|
||||
'persona' => 'Especialista em IA generativa, LLMs e aplicações conversationais.',
|
||||
'tone' => 'Inovador, inteligente, conversacional.',
|
||||
'constraints' => "- Integração com pelo menos 1 provedor de IA.\n- Histórico de conversas.\n- Tratamento de contexto.\n- Interface web moderna.\n- Máximo de 2500 linhas.",
|
||||
'constraints' => "- Integração com pelo menos 1 provedor de IA.\n- Histórico de conversas.\n- Tratamento de contexto.\n- Interface web moderna.",
|
||||
'output_format' => 'Backend (API) + Frontend (chat interface) + integração IA.',
|
||||
'examples' => 'Chat de atendimento ao cliente com respostas contextuais.',
|
||||
'variables' => 'nome_bot, provedor_ia, modelo, contexto',
|
||||
'temperature' => 0.8,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -669,12 +703,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Plataforma de automação estilo Zapier/Make, onde usuários criam fluxos automáticos entre aplicativos.',
|
||||
'persona' => 'Especialista em automação, integrações e arquitetura event-driven.',
|
||||
'tone' => 'Prático, modular, escalável.',
|
||||
'constraints' => "- Interface visual de fluxos.\n- Triggers e actions.\n- Integrações webhook.\n- Logs e monitoramento.\n- Máximo de 3000 linhas.",
|
||||
'constraints' => "- Interface visual de fluxos.\n- Triggers e actions.\n- Integrações webhook.\n- Logs e monitoramento.",
|
||||
'output_format' => 'Backend API + Frontend editor de fluxos + webhooks.',
|
||||
'examples' => 'Automação: quando chegar e-mail → extrair anexo → salvar no Drive → notificar Slack.',
|
||||
'variables' => 'nome_plataforma, integracoes, acoes',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
@@ -688,12 +723,13 @@ class PromptTemplateSeeder extends Seeder
|
||||
'context' => 'Serviço que consome múltiplas APIs (pagamentos, CRM, ERP) e centraliza dados em uma única interface.',
|
||||
'persona' => 'Especialista em integrações, webhooks e APIs externas.',
|
||||
'tone' => 'Técnico, robusto, manutenível.',
|
||||
'constraints' => "- Tratamento de erros e retries.\n- Logs estruturados.\n- Cache.\n- Monitoramento.\n- Máximo de 2500 linhas.",
|
||||
'constraints' => "- Tratamento de erros e retries.\n- Logs estruturados.\n- Cache.\n- Monitoramento.",
|
||||
'output_format' => 'Serviço de integração + testes de integração + documentação.',
|
||||
'examples' => 'Syncronização entre ERP e plataforma de e-commerce.',
|
||||
'variables' => 'nome_servico, apis_origem, api_destino',
|
||||
'temperature' => 0.7,
|
||||
'max_tokens' => 4096,
|
||||
'standard_files' => true,
|
||||
],
|
||||
'is_public' => true,
|
||||
],
|
||||
|
||||
Binary file not shown.
@@ -7,7 +7,10 @@
|
||||
<div class="col-md-6 text-center text-md-end">
|
||||
<a href="{{ route('legal.document.show', 'terms-of-service') }}" class="text-white text-decoration-none small me-3">@lang('footer.terms_of_service')</a>
|
||||
<a href="{{ route('legal.document.show', 'privacy-policy') }}" class="text-white text-decoration-none small me-3">@lang('footer.privacy_policy')</a>
|
||||
<a href="javascript:void(0)" onclick="cookieConsent.showPreferences()" class="text-white text-decoration-none small">@lang('footer.cookie_preferences')</a>
|
||||
<a href="javascript:void(0)" onclick="cookieConsent.showPreferences()" class="text-white text-decoration-none small me-3">@lang('footer.cookie_preferences')</a>
|
||||
@auth
|
||||
<a href="{{ route('ebook.download') }}" class="text-white text-decoration-none small"><i class="bi bi-file-pdf me-1"></i>Ebook</a>
|
||||
@endauth
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,345 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>GPrompt - Ebook para Desenvolvedores</title>
|
||||
<style>
|
||||
body { font-family: 'DejaVu Sans', sans-serif; color: #333; line-height: 1.6; font-size: 10pt; margin: 20px; }
|
||||
h1 { font-size: 18pt; color: #4e73df; border-bottom: 2px solid #4e73df; padding-bottom: 5px; margin-top: 20px; }
|
||||
h2 { font-size: 13pt; color: #2c3e50; margin-top: 15px; }
|
||||
h3 { font-size: 11pt; color: #555; margin-top: 12px; }
|
||||
p { margin-bottom: 8px; text-align: justify; }
|
||||
ul, ol { margin-bottom: 8px; padding-left: 18px; }
|
||||
li { margin-bottom: 3px; }
|
||||
.cover { text-align: center; padding-top: 100px; }
|
||||
.cover h1 { font-size: 28pt; border: none; }
|
||||
.cover h2 { font-size: 14pt; color: #666; font-weight: normal; }
|
||||
.cover p { font-size: 11pt; color: #888; text-align: center; }
|
||||
.page-break { page-break-before: always; }
|
||||
.box { border: 1px solid #4e73df; padding: 10px; margin: 10px 0; background: #f8f9fc; }
|
||||
.box h3 { color: #4e73df; margin-top: 0; }
|
||||
.alert { border: 1px solid #1cc88a; padding: 10px; margin: 10px 0; background: #f0fdf4; }
|
||||
.alert h3 { color: #1cc88a; margin-top: 0; }
|
||||
.warning { border: 1px solid #e74a3b; padding: 10px; margin: 10px 0; background: #fff5f5; }
|
||||
.warning h3 { color: #e74a3b; margin-top: 0; }
|
||||
table { width: 100%; border-collapse: collapse; margin: 10px 0; font-size: 9pt; }
|
||||
th { background: #4e73df; color: #fff; padding: 5px; text-align: left; }
|
||||
td { padding: 5px; border-bottom: 1px solid #ddd; }
|
||||
code { font-family: 'DejaVu Sans Mono', monospace; font-size: 8pt; background: #f4f4f4; padding: 1px 3px; }
|
||||
pre { background: #f4f4f4; padding: 8px; font-size: 8pt; font-family: 'DejaVu Sans Mono', monospace; border-left: 3px solid #4e73df; }
|
||||
.toc li { padding: 3px 0; }
|
||||
.cover .badge { background: #4e73df; color: #fff; padding: 5px 15px; border-radius: 3px; font-size: 10pt; }
|
||||
.footer { text-align: center; color: #999; font-size: 7pt; margin-top: 20px; padding-top: 10px; border-top: 1px solid #eee; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="cover">
|
||||
<h1>GPrompt</h1>
|
||||
<h2>Sistema de Geração de Prompts Inteligentes</h2>
|
||||
<br>
|
||||
<p><strong>Ebook para Desenvolvedores</strong></p>
|
||||
<p>Crie sites, landing pages e aplicativos com a potência da IA</p>
|
||||
<br><br>
|
||||
<p>Versão 1.0 — Outubro 2026</p>
|
||||
</div>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>Sumário</h1>
|
||||
<ul class="toc">
|
||||
<li>1. O que é o GPrompt?</li>
|
||||
<li>2. Conceitos Fundamentais</li>
|
||||
<li>3. Primeiros Passos</li>
|
||||
<li>4. Templates de Projeto</li>
|
||||
<li>5. Arquivos Padrão (LGPD)</li>
|
||||
<li>6. Requisitos de Sistema</li>
|
||||
<li>7. Provedores de IA</li>
|
||||
<li>8. Casos de Uso Práticos</li>
|
||||
<li>9. Boas Práticas</li>
|
||||
<li>10. Conclusão</li>
|
||||
</ul>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>1. O que é o GPrompt?</h1>
|
||||
<p>O GPrompt é um sistema web completo para geração de prompts inteligentes destinados à criação de sites, landing pages, aplicativos e sistemas web. Ele foi projetado para desenvolvedores que desejam acelerar seu fluxo de trabalho utilizando Inteligência Artificial, mantendo total controle sobre o resultado final.</p>
|
||||
|
||||
<div class="alert">
|
||||
<h3>Para quem este ebook foi feito</h3>
|
||||
<p>Desenvolvedores front-end e full-stack, designers que codam, agências digitais, freelancers e qualquer profissional que crie sites, landing pages ou aplicativos web e queira usar IA para aumentar sua produtividade.</p>
|
||||
</div>
|
||||
|
||||
<p>Diferente de ferramentas genéricas de IA, o GPrompt entende o contexto brasileiro: templates em português, conformidade com a LGPD (Lei Geral de Proteção de Dados), termos de uso e política de privacidade adequados à legislação brasileira, e geração automática de arquivos essenciais como LICENSE, README.md e RULES.md.</p>
|
||||
|
||||
<h2>Principais Diferenciais</h2>
|
||||
<ul>
|
||||
<li>36 templates prontos para diversos tipos de projeto (landing pages, sistemas SaaS, APIs, e-commerce, blogs, dashboards)</li>
|
||||
<li>Múltiplos provedores de IA: OpenRouter, StepFun e Llama.cpp local</li>
|
||||
<li>Arquivos padrão automáticos: LICENSE, README.md, RULES.md, banner de cookies LGPD, termos de uso e política de privacidade</li>
|
||||
<li>Requisitos de sistema embutidos: design responsivo, SEO completo, dependências com licença MIT, toggle de senha</li>
|
||||
<li>Geração multi-arquivo: o prompt gerado instrui a criação de projetos completos com estrutura de pastas organizada</li>
|
||||
</ul>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>2. Conceitos Fundamentais</h1>
|
||||
|
||||
<h2>2.1 O que é Prompt Engineering?</h2>
|
||||
<p>Prompt Engineering é a arte e a ciência de criar instruções precisas para Inteligências Artificiais. Um prompt bem elaborado produz resultados muito superiores a um prompt genérico. O GPrompt automatiza exatamente este processo: ele pega suas especificações e constrói o prompt ideal para cada tipo de projeto.</p>
|
||||
|
||||
<h2>2.2 Como o GPrompt Funciona</h2>
|
||||
<div class="box">
|
||||
<h3>Fluxo de Trabalho</h3>
|
||||
<ol>
|
||||
<li>Crie um Projeto: Defina o objetivo, contexto, persona, tom, restrições e formato de saída</li>
|
||||
<li>Escolha um Template: Selecione entre 36 templates pré-configurados ou crie o seu próprio</li>
|
||||
<li>Selecione o Provedor/Modelo de IA: OpenRouter, StepFun ou Llama.cpp local</li>
|
||||
<li>Gere o Prompt: O sistema monta um prompt otimizado com todas as especificações</li>
|
||||
<li>Use o Prompt: Copie o prompt gerado e utilize no VSCode, Cursor, ou qualquer ferramenta de IA</li>
|
||||
<li>Obtenha o Projeto Completo: A IA cria todos os arquivos do projeto</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<h2>2.3 A Arquitetura do Sistema</h2>
|
||||
<table>
|
||||
<tr><th>Componente</th><th>Função</th></tr>
|
||||
<tr><td>Projetos de Prompt</td><td>Onde você define as especificações do seu projeto</td></tr>
|
||||
<tr><td>Templates</td><td>Modelos pré-configurados para iniciar rapidamente</td></tr>
|
||||
<tr><td>Provedores IA</td><td>Configuração dos serviços de IA (OpenRouter, StepFun, Llama.cpp)</td></tr>
|
||||
<tr><td>Serviço de Geração</td><td>Monta o prompt otimizado e se comunica com a IA</td></tr>
|
||||
<tr><td>Arquivos Padrão</td><td>Gera automaticamente LICENSE, README.md, RULES.md, documentos LGPD</td></tr>
|
||||
<tr><td>Histórico</td><td>Mantém registro de todas as gerações realizadas</td></tr>
|
||||
</table>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>3. Primeiros Passos</h1>
|
||||
|
||||
<div class="alert">
|
||||
<h3>Passo a Passo</h3>
|
||||
<ol>
|
||||
<li>Acesse o sistema e faça login com suas credenciais</li>
|
||||
<li>No menu lateral, clique em "Projetos de Prompt"</li>
|
||||
<li>Clique em "Novo Projeto"</li>
|
||||
<li>Preencha os dados da empresa (nome, endereço, WhatsApp, website, redes sociais)</li>
|
||||
<li>Defina o Objetivo do projeto</li>
|
||||
<li>Forneça o Contexto</li>
|
||||
<li>Defina a Persona</li>
|
||||
<li>Escolha o Tom/Estilo</li>
|
||||
<li>Adicione Restrições importantes</li>
|
||||
<li>Defina o Formato de Saída</li>
|
||||
<li>Selecione o Provedor de IA</li>
|
||||
<li>Clique em "Salvar"</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<h2>3.1 Usando Templates</h2>
|
||||
<p>Os templates são a maneira mais rápida de começar. Ao criar um novo projeto, digite no campo "Modelo de Projeto" para buscar entre os 36 templates disponíveis.</p>
|
||||
|
||||
<table>
|
||||
<tr><th>Categoria</th><th>Templates</th></tr>
|
||||
<tr><td>Landing Pages</td><td>Corporativa, SaaS, Produto Digital, Evento, E-book, Curso Online, App Mobile, Agência, Restaurante, Imobiliária, Saúde, Educação, Delivery</td></tr>
|
||||
<tr><td>Sites</td><td>Institucional, Portfolio Profissional, Portfolio Criativo, Blog Pessoal</td></tr>
|
||||
<tr><td>Sistemas</td><td>E-commerce, Sistema SaaS, Dashboard Admin</td></tr>
|
||||
<tr><td>Frameworks</td><td>Laravel + Blade, Slim Framework, Vue.js + Vite, React + Vite, Next.js, Node.js + Express, FastAPI + Python</td></tr>
|
||||
<tr><td>Arquitetura</td><td>Microsserviços, API REST, JWT, Chatbot com IA, Automação de Workflow</td></tr>
|
||||
</table>
|
||||
|
||||
<p>Ao selecionar um template, todos os campos do formulário são preenchidos automaticamente com as configurações ideais para aquele tipo de projeto.</p>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>4. Templates de Projeto</h1>
|
||||
|
||||
<h2>4.1 Estrutura de um Template</h2>
|
||||
<table>
|
||||
<tr><th>Campo</th><th>Descrição</th></tr>
|
||||
<tr><td>Title</td><td>Nome do template</td></tr>
|
||||
<tr><td>Objective</td><td>Objetivo principal do projeto</td></tr>
|
||||
<tr><td>Context</td><td>Contexto e informações de fundo</td></tr>
|
||||
<tr><td>Persona</td><td>Papel que a IA deve assumir</td></tr>
|
||||
<tr><td>Tone</td><td>Tom e estilo de comunicação</td></tr>
|
||||
<tr><td>Constraints</td><td>Restrições técnicas e regras</td></tr>
|
||||
<tr><td>Output Format</td><td>Formato esperado do resultado</td></tr>
|
||||
<tr><td>Examples</td><td>Exemplos de entrada/saída</td></tr>
|
||||
<tr><td>Variables</td><td>Variáveis dinâmicas do projeto</td></tr>
|
||||
<tr><td>Temperature</td><td>Criatividade da IA (0.0 a 1.0)</td></tr>
|
||||
<tr><td>Max Tokens</td><td>Limite de tokens na resposta</td></tr>
|
||||
<tr><td>Standard Files</td><td>Se inclui arquivos padrão (true/false)</td></tr>
|
||||
</table>
|
||||
|
||||
<h2>4.2 Criando seus Próprios Templates</h2>
|
||||
<p>Desenvolvedores podem criar templates personalizados. Basta acessar "Templates" -> "Novo" e preencher os dados no formato JSON:</p>
|
||||
<pre>{
|
||||
"title": "Meu Template",
|
||||
"objective": "Criar um sistema...",
|
||||
"persona": "Especialista em...",
|
||||
"constraints": "Restrições...",
|
||||
"standard_files": true
|
||||
}</pre>
|
||||
|
||||
<div class="warning">
|
||||
<h3>Importante</h3>
|
||||
<p>O campo <code>standard_files</code> controla se os arquivos padrão serão incluídos. Para a maioria dos projetos, mantenha como true.</p>
|
||||
</div>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>5. Arquivos Padrão</h1>
|
||||
<p>Um dos grandes diferenciais do GPrompt é a geração automática de arquivos essenciais para qualquer projeto profissional. Estes arquivos são gerados em duas camadas:</p>
|
||||
<ol>
|
||||
<li>Pelo sistema: O GPrompt gera os arquivos na seção "Arquivos Padrão do Projeto"</li>
|
||||
<li>Pela IA: O prompt gerado instrui a criação destes mesmos arquivos com conteúdo completo</li>
|
||||
</ol>
|
||||
|
||||
<h2>5.1 Os 6 Arquivos Padrão</h2>
|
||||
<table>
|
||||
<tr><th>Arquivo</th><th>Conteúdo</th></tr>
|
||||
<tr><td>LICENSE</td><td>Licença MIT com nome da empresa e ano</td></tr>
|
||||
<tr><td>README.md</td><td>Documentação completa do projeto</td></tr>
|
||||
<tr><td>RULES.md</td><td>Regras de desenvolvimento e padrões de código</td></tr>
|
||||
<tr><td>cookies.html</td><td>Banner de cookies LGPD completo (Aceitar/Recusar/Personalizar)</td></tr>
|
||||
<tr><td>termos-de-uso.html</td><td>Termos de Uso conforme legislação brasileira</td></tr>
|
||||
<tr><td>privacidade.html</td><td>Política de Privacidade conforme LGPD (Lei 13.709/2018)</td></tr>
|
||||
</table>
|
||||
|
||||
<h2>5.2 Conformidade com a LGPD</h2>
|
||||
<p>A Lei Geral de Proteção de Dados (Lei 13.709/2018) exige que sites e aplicativos que coletam dados pessoais tenham:</p>
|
||||
<ul>
|
||||
<li>Política de Privacidade clara e acessível</li>
|
||||
<li>Termos de Uso com as condições do serviço</li>
|
||||
<li>Banner de Cookies com opção de aceitar, recusar ou personalizar</li>
|
||||
<li>Canais de contato do DPO</li>
|
||||
<li>Prazo de resposta de até 15 dias úteis (Art. 19)</li>
|
||||
</ul>
|
||||
<p>Todos estes requisitos são atendidos automaticamente pelos arquivos padrão do GPrompt.</p>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>6. Requisitos de Sistema</h1>
|
||||
<p>Todo projeto gerado pelo GPrompt inclui automaticamente requisitos de sistema que garantem qualidade e conformidade.</p>
|
||||
|
||||
<h2>6.1 Design Responsivo</h2>
|
||||
<p>Mobile-first é a abordagem padrão. Todo projeto gerado é responsivo em todos os tamanhos de tela: smartphones (320px), tablets (768px), desktops (1024px) e telas grandes (1440px).</p>
|
||||
|
||||
<h2>6.2 Dependências com Licença MIT</h2>
|
||||
<p>Todas as dependências devem ter licença MIT ou permissiva para segurança jurídica em projetos comerciais:</p>
|
||||
<ul>
|
||||
<li>Ícones: Bootstrap Icons, Font Awesome (gratuito)</li>
|
||||
<li>Fontes: Google Fonts</li>
|
||||
<li>Imagens: Unsplash, Pexels (domínio público)</li>
|
||||
<li>Frameworks: Bootstrap 5 (MIT), Vue.js (MIT), React (MIT)</li>
|
||||
</ul>
|
||||
|
||||
<h2>6.3 Campo de Senha com Toggle</h2>
|
||||
<p>Todo campo de senha deve incluir um botão com ícone "olho" para mostrar/esconder a senha, seguindo as melhores práticas de UX.</p>
|
||||
|
||||
<h2>6.4 SEO Completo</h2>
|
||||
<ul>
|
||||
<li>HTML5 semântico</li>
|
||||
<li>Meta tags: title, description, keywords, viewport</li>
|
||||
<li>Open Graph: og:title, og:description, og:image</li>
|
||||
<li>JSON-LD: dados estruturados</li>
|
||||
<li>Sitemap.xml e Robots.txt</li>
|
||||
<li>Acessibilidade: aria labels, alt text</li>
|
||||
</ul>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>7. Provedores de IA</h1>
|
||||
<p>O GPrompt suporta múltiplos provedores de Inteligência Artificial:</p>
|
||||
|
||||
<h2>7.1 OpenRouter</h2>
|
||||
<p>Gateway que unifica dezenas de modelos de IA em um único ponto de acesso. Modelos: deepseek/deepseek-v4-flash, nvidia/nemotron-3, openai/gpt, google/gemma. Configure a OPENROUTER_API_KEY no .env.</p>
|
||||
|
||||
<h2>7.2 StepFun</h2>
|
||||
<p>Provedor com modelos de alta performance. Modelos: step-3.5-flash, step-3.7-flash. Configure a STEPFUN_API_KEY no .env.</p>
|
||||
|
||||
<h2>7.3 Llama.cpp (Local)</h2>
|
||||
<p>Execute modelos de IA localmente, sem depender de serviços externos. Modelos: Qwen3-8B, Llama-3.2-3B. Configure LLAMACPP_BASE_URL no .env.</p>
|
||||
|
||||
<h2>7.4 Escolhendo o Modelo Ideal</h2>
|
||||
<table>
|
||||
<tr><th>Para gerar</th><th>Modelo recomendado</th></tr>
|
||||
<tr><td>Landing Pages HTML/CSS</td><td>deepseek/deepseek-v4-flash</td></tr>
|
||||
<tr><td>Documentação</td><td>nvidia/nemotron-3-super</td></tr>
|
||||
<tr><td>Sistemas complexos</td><td>openrouter/free</td></tr>
|
||||
<tr><td>Projetos offline</td><td>Llama.cpp local (Qwen3-8B)</td></tr>
|
||||
</table>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>8. Casos de Uso Práticos</h1>
|
||||
|
||||
<h2>8.1 Landing Page Corporativa</h2>
|
||||
<p>Cenário: Uma empresa precisa de uma landing page profissional para divulgar serviços B2B.</p>
|
||||
<p>Solução: Selecione o template "Landing Page Corporativa", preencha os dados da empresa, gere o prompt com deepseek/deepseek-v4-flash, e use o prompt no VSCode para receber o projeto completo com index.html, style.css, LICENSE, README.md, cookies.html e os demais arquivos padrão.</p>
|
||||
|
||||
<h2>8.2 Sistema SaaS com Laravel + Vue.js</h2>
|
||||
<p>Cenário: Desenvolvimento de um sistema SaaS completo com backend Laravel e frontend Vue.js.</p>
|
||||
<p>Solução: Selecione o template "Laravel 13 + Vue.js 3 Fullstack" e gere o prompt. O resultado conterá instruções para criar toda a estrutura do sistema.</p>
|
||||
|
||||
<h2>8.3 API RESTful com Autenticação JWT</h2>
|
||||
<p>Cenário: Criação de uma API REST com autenticação JWT.</p>
|
||||
<p>Solução: Selecione o template "API com Autenticação JWT". O prompt gerará instruções para controllers, middleware, testes, e docker-compose.</p>
|
||||
|
||||
<h2>8.4 Chatbot com IA</h2>
|
||||
<p>Cenário: Implementação de um chatbot com integração a provedores de IA.</p>
|
||||
<p>Solução: Selecione o template "Chatbot com IA". O prompt incluirá interface de chat, histórico, e integração com API de IA.</p>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>9. Boas Práticas</h1>
|
||||
|
||||
<h2>9.1 Criando Prompts Eficientes</h2>
|
||||
<ul>
|
||||
<li>Seja específico: "Criar um sistema de gestão de tarefas" é melhor que "Criar um sistema"</li>
|
||||
<li>Forneça contexto: Explique o público-alvo e o ambiente técnico</li>
|
||||
<li>Defina restrições claras: Tecnologias, frameworks, limitações</li>
|
||||
<li>Use exemplos: Mostre à IA o formato esperado do resultado</li>
|
||||
<li>Ajuste a temperatura: 0.3 para código preciso, 0.7 para criatividade balanceada</li>
|
||||
</ul>
|
||||
|
||||
<h2>9.2 Dicas para Diferentes Modelos</h2>
|
||||
<table>
|
||||
<tr><th>Modelo</th><th>Dica</th></tr>
|
||||
<tr><td>deepseek/deepseek-v4-flash</td><td>Excelente para código HTML/CSS/JS</td></tr>
|
||||
<tr><td>nvidia/nemotron-3-super</td><td>Ótimo para documentação e prompts longos</td></tr>
|
||||
<tr><td>Llama.cpp local</td><td>Ideal para projetos sensíveis</td></tr>
|
||||
<tr><td>openrouter/free</td><td>Roteia para o melhor modelo gratuito</td></tr>
|
||||
</table>
|
||||
|
||||
<h2>9.3 Versionamento e Manutenção</h2>
|
||||
<ul>
|
||||
<li>Sempre inclua LICENSE, README.md e RULES.md no repositório</li>
|
||||
<li>Mantenha os documentos LGPD atualizados</li>
|
||||
<li>Revise periodicamente os templates</li>
|
||||
<li>Use o histórico de gerações para referência</li>
|
||||
</ul>
|
||||
|
||||
<div class="page-break"></div>
|
||||
<h1>10. Conclusão</h1>
|
||||
<p>O GPrompt representa uma nova forma de desenvolver projetos web, combinando a potência da Inteligência Artificial com a estruturação profissional que todo projeto merece.</p>
|
||||
|
||||
<div class="alert">
|
||||
<h3>O que você ganha usando o GPrompt</h3>
|
||||
<ul>
|
||||
<li>Produtividade: Gere projetos completos em minutos</li>
|
||||
<li>Qualidade: Prompts otimizados produzem resultados superiores</li>
|
||||
<li>Conformidade: LGPD, termos de uso e privacidade sempre inclusos</li>
|
||||
<li>Padronização: Todos os projetos seguem as mesmas boas práticas</li>
|
||||
<li>Flexibilidade: Escolha o modelo de IA ideal para cada tarefa</li>
|
||||
<li>Controle: Você decide cada aspecto do projeto através dos templates</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>Comece hoje mesmo a transformar sua forma de desenvolver. Crie seu primeiro projeto no GPrompt e experimente a diferença de ter um sistema que entende suas necessidades.</p>
|
||||
|
||||
<div class="box">
|
||||
<h3>Continue Aprendendo</h3>
|
||||
<ul>
|
||||
<li>Explore os 36 templates disponíveis</li>
|
||||
<li>Crie seus próprios templates</li>
|
||||
<li>Experimente diferentes provedores de IA</li>
|
||||
<li>Compartilhe templates com sua equipe</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
<p>GPrompt — Sistema de Geração de Prompts Inteligentes</p>
|
||||
<p>© 2026 Syspanel. Todos os direitos reservados.</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -23,6 +23,19 @@
|
||||
<div class="legal-content">
|
||||
{!! nl2br(e($document->content)) !!}
|
||||
</div>
|
||||
@if($pendingAcceptance ?? false)
|
||||
<hr>
|
||||
<div class="alert alert-info">
|
||||
<i class="bi bi-info-circle me-2"></i>
|
||||
Para continuar utilizando o sistema, você precisa aceitar esta versão dos {{ $document->type === 'terms-of-service' ? 'Termos de Uso' : 'Política de Privacidade' }}.
|
||||
</div>
|
||||
<form method="POST" action="{{ route('legal.document.accept', $document->type) }}">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-primary btn-lg w-100">
|
||||
<i class="bi bi-check-circle me-2"></i> Aceitar {{ $document->type === 'terms-of-service' ? 'Termos de Uso' : 'Política de Privacidade' }}
|
||||
</button>
|
||||
</form>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@@ -342,6 +342,14 @@
|
||||
document.getElementById('variables').value = template.variables || '';
|
||||
document.getElementById('temperature').value = template.temperature ?? 0.7;
|
||||
document.getElementById('max_tokens').value = template.max_tokens ?? 1024;
|
||||
|
||||
if (template.standard_files !== false) {
|
||||
const stdFilesNote = "\n\n---\nNOTA: O projeto gerado deve conter MULTIPLOS ARQUIVOS em estrutura de pastas organizada. CRIE cada um dos seguintes arquivos padrao DO ZERO com conteudo completo e pronto para uso: LICENSE (MIT), README.md (documentacao completa), RULES.md (regras de codigo), cookies.html (banner LGPD completo com HTML/CSS/JS), termos-de-uso.html (Termos de Uso completos), privacidade.html (Politica de Privacidade LGPD completa). Nao apenas descreva o conteudo — gere o conteudo completo de cada arquivo.";
|
||||
const constraintsEl = document.getElementById('constraints');
|
||||
if (constraintsEl && !constraintsEl.value.includes('Arquivos padrao')) {
|
||||
constraintsEl.value = constraintsEl.value.trim() + stdFilesNote;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const fields = ['title', 'objective', 'context', 'persona', 'tone', 'constraints', 'output_format', 'examples', 'variables', 'temperature', 'max_tokens'];
|
||||
fields.forEach(field => {
|
||||
|
||||
@@ -173,6 +173,51 @@
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="card shadow mb-4">
|
||||
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
||||
<h6 class="m-0 fw-bold text-primary">Arquivos Padrão do Projeto</h6>
|
||||
<span class="badge bg-info">LICENSE · README.md · RULES.md · LGPD</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="alert alert-info small mb-3">
|
||||
<i class="bi bi-info-circle me-1"></i>
|
||||
Estes arquivos são gerados automaticamente com base nos dados do projeto e devem ser incluídos no repositório.
|
||||
</div>
|
||||
<ul class="nav nav-tabs mb-3" id="standardFilesTab" role="tablist">
|
||||
@foreach($standardFiles as $filename => $content)
|
||||
<li class="nav-item" role="presentation">
|
||||
<button class="nav-link {{ $loop->first ? 'active' : '' }}"
|
||||
id="file-{{ Str::slug($filename) }}-tab"
|
||||
data-bs-toggle="tab"
|
||||
data-bs-target="#file-{{ Str::slug($filename) }}"
|
||||
type="button" role="tab">
|
||||
<i class="bi bi-file-text me-1"></i>{{ $filename }}
|
||||
</button>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
<div class="tab-content" id="standardFilesTabContent">
|
||||
@foreach($standardFiles as $filename => $content)
|
||||
<div class="tab-pane fade {{ $loop->first ? 'show active' : '' }}"
|
||||
id="file-{{ Str::slug($filename) }}" role="tabpanel">
|
||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
||||
<small class="text-muted">{{ $filename }} — {{ str_word_count($content) }} palavras</small>
|
||||
<div>
|
||||
<a href="{{ route('prompt-projects.download-file', [$promptProject, $filename]) }}" class="btn btn-sm btn-outline-primary me-1" download>
|
||||
<i class="bi bi-download me-1"></i> Download
|
||||
</a>
|
||||
<button class="btn btn-sm btn-outline-secondary copy-btn" type="button" data-target="file-content-{{ Str::slug($filename) }}">
|
||||
<i class="bi bi-clipboard me-1"></i> Copiar
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<textarea class="form-control font-monospace small" id="file-content-{{ Str::slug($filename) }}" rows="15" readonly>{{ $content }}</textarea>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@section('scripts')
|
||||
<script>
|
||||
document.getElementById('model').addEventListener('change', function() {
|
||||
|
||||
@@ -34,10 +34,46 @@
|
||||
<input type="text" class="form-control" id="category" name="category" value="{{ old('category') }}">
|
||||
@error('category') <div class="text-danger small">{{ $message }}</div> @enderror
|
||||
</div>
|
||||
|
||||
<div class="card mb-3 border-info">
|
||||
<div class="card-header bg-info bg-opacity-10 py-2">
|
||||
<h6 class="mb-0 text-info"><i class="bi bi-file-earmark-text me-1"></i>Arquivos Padrão do Projeto</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="small text-muted mb-2">Estes arquivos serao gerados automaticamente em todo projeto criado com este template, em conformidade com a legislacao brasileira (LGPD):</p>
|
||||
<div class="row row-cols-2 row-cols-md-3 g-2">
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-file-text me-1 text-primary"></i>LICENSE</span></div>
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-file-text me-1 text-success"></i>README.md</span></div>
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-file-text me-1 text-warning"></i>RULES.md</span></div>
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-cookie me-1 text-info"></i>cookies.html</span></div>
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-shield-check me-1 text-secondary"></i>termos-de-uso.html</span></div>
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-lock me-1 text-danger"></i>privacidade.html</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="template_data" class="form-label">Dados do Template (JSON)</label>
|
||||
<textarea class="form-control font-monospace" id="template_data" name="template_data" rows="20" required>{{ old('template_data') }}</textarea>
|
||||
@error('template_data') <div class="text-danger small">{{ $message }}</div> @enderror
|
||||
<div class="form-text small">
|
||||
O campo <code>standard_files</code> (true/false) controla se os arquivos padrao serao incluidos.
|
||||
Use o exemplo abaixo como referencia:
|
||||
<pre class="mt-1 p-2 bg-light rounded small">{
|
||||
"title": "Meu Template",
|
||||
"objective": "Objetivo do projeto",
|
||||
"context": "Contexto do projeto",
|
||||
"persona": "Persona do assistente",
|
||||
"tone": "Tom de comunicação",
|
||||
"constraints": "Restrições e regras",
|
||||
"output_format": "Formato de saída esperado",
|
||||
"examples": "Exemplos de entrada/saída",
|
||||
"variables": "var1, var2",
|
||||
"temperature": 0.7,
|
||||
"max_tokens": 4096,
|
||||
"standard_files": true
|
||||
}</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3 form-check">
|
||||
<input type="checkbox" class="form-check-input" id="is_public" name="is_public" value="1" {{ old('is_public', true) ? 'checked' : '' }}>
|
||||
|
||||
@@ -35,6 +35,25 @@
|
||||
<input type="text" class="form-control" id="category" name="category" value="{{ old('category', $promptTemplate->category) }}">
|
||||
@error('category') <div class="text-danger small">{{ $message }}</div> @enderror
|
||||
</div>
|
||||
|
||||
<div class="card mb-3 border-info">
|
||||
<div class="card-header bg-info bg-opacity-10 py-2">
|
||||
<h6 class="mb-0 text-info"><i class="bi bi-file-earmark-text me-1"></i>Arquivos Padrão do Projeto</h6>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<p class="small text-muted mb-2">Estes arquivos serao gerados automaticamente em todo projeto criado com este template, em conformidade com a LGPD:</p>
|
||||
<div class="row row-cols-2 row-cols-md-3 g-2">
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-file-text me-1 text-primary"></i>LICENSE</span></div>
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-file-text me-1 text-success"></i>README.md</span></div>
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-file-text me-1 text-warning"></i>RULES.md</span></div>
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-cookie me-1 text-info"></i>cookies.html</span></div>
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-shield-check me-1 text-secondary"></i>termos-de-uso.html</span></div>
|
||||
<div class="col"><span class="badge bg-light text-dark border p-2 w-100 text-start"><i class="bi bi-lock me-1 text-danger"></i>privacidade.html</span></div>
|
||||
</div>
|
||||
<p class="small text-muted mt-2 mb-0">Campo <code>standard_files</code> no JSON: <code>true</code> para incluir, <code>false</code> para desativar.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="template_data" class="form-label">Dados do Template (JSON)</label>
|
||||
<textarea class="form-control font-monospace" id="template_data" name="template_data" rows="20" required>{{ old('template_data', json_encode($promptTemplate->template_data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)) }}</textarea>
|
||||
|
||||
@@ -58,6 +58,10 @@ Route::middleware(['auth', 'verified', 'user.approved', 'documents.accepted'])->
|
||||
->name('prompt-projects.generate');
|
||||
Route::get('prompt-projects/{promptProject}/prompt', [PromptProjectController::class, 'getPrompt'])
|
||||
->name('prompt-projects.prompt');
|
||||
Route::get('prompt-projects/{promptProject}/standard-files', [PromptProjectController::class, 'getStandardFiles'])
|
||||
->name('prompt-projects.standard-files');
|
||||
Route::get('prompt-projects/{promptProject}/standard-files/{filename}/download', [PromptProjectController::class, 'downloadFile'])
|
||||
->name('prompt-projects.download-file');
|
||||
Route::resource('prompt-generations', PromptGenerationController::class)->only(['index']);
|
||||
Route::delete('prompt-generations/{generation}', [PromptGenerationController::class, 'destroy'])
|
||||
->name('prompt-generations.destroy');
|
||||
@@ -95,6 +99,11 @@ Route::get('legal/documents/{type}', [App\Http\Controllers\Legal\LegalDocumentCo
|
||||
->where('type', 'terms-of-service|privacy-policy')
|
||||
->name('legal.document.show');
|
||||
|
||||
Route::post('legal/documents/{type}/accept', [App\Http\Controllers\Legal\LegalDocumentController::class, 'accept'])
|
||||
->where('type', 'terms-of-service|privacy-policy')
|
||||
->middleware(['auth'])
|
||||
->name('legal.document.accept');
|
||||
|
||||
Route::get('terms-of-service', function () {
|
||||
return redirect()->route('legal.document.show', 'terms-of-service');
|
||||
});
|
||||
@@ -107,4 +116,12 @@ Route::post('/cookie-consent', [App\Http\Controllers\Legal\CookieConsentControll
|
||||
->middleware(['web'])
|
||||
->name('cookie.consent.store');
|
||||
|
||||
Route::get('ebook/download', function () {
|
||||
$path = public_path('ebooks/GPrompt-Ebook-Desenvolvedores-v1.pdf');
|
||||
if (!file_exists($path)) {
|
||||
abort(404, 'Ebook não encontrado');
|
||||
}
|
||||
return response()->file($path, ['Content-Type' => 'application/pdf']);
|
||||
})->name('ebook.download');
|
||||
|
||||
require __DIR__.'/auth.php';
|
||||
|
||||
Reference in New Issue
Block a user