Yoleo's picture
Add 2 files
ce127cf verified
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Generador de Prompts para Plugins WordPress</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.feature-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0,0,0,0.1);
}
.prompt-container {
transition: all 0.3s ease;
max-height: 0;
overflow: hidden;
}
.prompt-container.show {
max-height: 1000px;
}
.customize-panel {
transition: max-height 0.5s ease-in-out;
max-height: 0;
overflow: hidden;
}
.customize-panel.open {
max-height: 500px;
}
#promptOutput {
white-space: pre-wrap;
word-break: break-word;
}
</style>
</head>
<body class="bg-gray-50 min-h-screen">
<div class="container mx-auto px-4 py-12">
<header class="text-center mb-12">
<h1 class="text-4xl font-bold text-indigo-700 mb-4">Generador de Prompts para Plugins WordPress</h1>
<p class="text-gray-600 text-lg max-w-2xl mx-auto">Crea el prompt perfecto para generar plugins de WordPress con las caracter铆sticas que necesitas.</p>
</header>
<div class="bg-white rounded-xl shadow-lg overflow-hidden mb-8">
<div class="p-6">
<h2 class="text-2xl font-semibold text-gray-800 mb-6">Paso 1: Informaci贸n B谩sica</h2>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-8">
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Nombre del Plugin</label>
<input type="text" id="pluginName" placeholder="Mi Plugin Incre铆ble"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500">
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">Prop贸sito/Funcionalidad</label>
<textarea id="pluginPurpose" rows="2" placeholder="Describe brevemente qu茅 debe hacer tu plugin..."
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500"></textarea>
</div>
</div>
</div>
</div>
<div class="bg-white rounded-xl shadow-lg overflow-hidden mb-8">
<div class="p-6">
<h2 class="text-2xl font-semibold text-gray-800 mb-6">Paso 2: Seleccionar Caracter铆sticas</h2>
<p class="text-gray-600 mb-6">Selecciona las caracter铆sticas que debe incluir tu plugin:</p>
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mb-8">
<div class="feature-card bg-gray-50 border border-gray-200 rounded-lg p-4 cursor-pointer transition-all"
onclick="toggleFeature(this, 'admin_panel')">
<div class="flex items-center">
<input type="checkbox" id="admin_panel" class="h-5 w-5 text-indigo-600">
<label for="admin_panel" class="ml-3 font-medium text-gray-700">Panel de Administraci贸n</label>
</div>
<p class="text-sm text-gray-500 mt-2">Interfaz personalizada en el admin para configuraciones</p>
</div>
<div class="feature-card bg-gray-50 border border-gray-200 rounded-lg p-4 cursor-pointer transition-all"
onclick="toggleFeature(this, 'shortcodes')">
<div class="flex items-center">
<input type="checkbox" id="shortcodes" class="h-5 w-5 text-indigo-600">
<label for="shortcodes" class="ml-3 font-medium text-gray-700">Shortcodes</label>
</div>
<p class="text-sm text-gray-500 mt-2">Crea shortcodes personalizados para mostrar contenido</p>
</div>
<div class="feature-card bg-gray-50 border border-gray-200 rounded-lg p-4 cursor-pointer transition-all"
onclick="toggleFeature(this, 'widgets')">
<div class="flex items-center">
<input type="checkbox" id="widgets" class="h-5 w-5 text-indigo-600">
<label for="widgets" class="ml-3 font-medium text-gray-700">Widgets</label>
</div>
<p class="text-sm text-gray-500 mt-2">A帽ade widgets personalizados para arrastrar y soltar</p>
</div>
<div class="feature-card bg-gray-50 border border-gray-200 rounded-lg p-4 cursor-pointer transition-all"
onclick="toggleFeature(this, 'rest_api')">
<div class="flex items-center">
<input type="checkbox" id="rest_api" class="h-5 w-5 text-indigo-600">
<label for="rest_api" class="ml-3 font-medium text-gray-700">REST API</label>
</div>
<p class="text-sm text-gray-500 mt-2">Expone endpoints para integraciones externas</p>
</div>
<div class="feature-card bg-gray-50 border border-gray-200 rounded-lg p-4 cursor-pointer transition-all"
onclick="toggleFeature(this, 'cpt')">
<div class="flex items-center">
<input type="checkbox" id="cpt" class="h-5 w-5 text-indigo-600">
<label for="cpt" class="ml-3 font-medium text-gray-700">Tipos de Entrada Personalizados</label>
</div>
<p class="text-sm text-gray-500 mt-2">Crea y gestiona tipos de contenido personalizados</p>
</div>
<div class="feature-card bg-gray-50 border border-gray-200 rounded-lg p-4 cursor-pointer transition-all"
onclick="toggleFeature(this, 'taxonomy')">
<div class="flex items-center">
<input type="checkbox" id="taxonomy" class="h-5 w-5 text-indigo-600">
<label for="taxonomy" class="ml-3 font-medium text-gray-700">Taxonom铆as Personalizadas</label>
</div>
<p class="text-sm text-gray-500 mt-2">A帽ade sistemas de clasificaci贸n y organizaci贸n</p>
</div>
<div class="feature-card bg-gray-50 border border-gray-200 rounded-lg p-4 cursor-pointer transition-all"
onclick="toggleFeature(this, 'settings_page')">
<div class="flex items-center">
<input type="checkbox" id="settings_page" class="h-5 w-5 text-indigo-600">
<label for="settings_page" class="ml-3 font-medium text-gray-700">P谩gina de Configuraci贸n</label>
</div>
<p class="text-sm text-gray-500 mt-2">Crea opciones para personalizar el comportamiento</p>
</div>
<div class="feature-card bg-gray-50 border border-gray-200 rounded-lg p-4 cursor-pointer transition-all"
onclick="toggleFeature(this, 'cron_jobs')">
<div class="flex items-center">
<input type="checkbox" id="cron_jobs" class="h-5 w-5 text-indigo-600">
<label for="cron_jobs" class="ml-3 font-medium text-gray-700">Tareas Programadas</label>
</div>
<p class="text-sm text-gray-500 mt-2">Programa tareas autom谩ticas en segundo plano</p>
</div>
<div class="feature-card bg-gray-50 border border-gray-200 rounded-lg p-4 cursor-pointer transition-all"
onclick="toggleFeature(this, 'multilingual')">
<div class="flex items-center">
<input type="checkbox" id="multilingual" class="h-5 w-5 text-indigo-600">
<label for="multilingual" class="ml-3 font-medium text-gray-700">Multiling眉e</label>
</div>
<p class="text-sm text-gray-500 mt-2">Preparado para traducci贸n (i18n ready)</p>
</div>
</div>
<!-- Opciones avanzadas -->
<div class="flex items-center justify-center mb-6">
<button id="advancedToggle" class="flex items-center text-indigo-600 hover:text-indigo-800">
<span class="mr-2">Mostrar Opciones Avanzadas</span>
<i class="fas fa-chevron-down text-sm"></i>
</button>
</div>
<!-- Panel de opciones avanzadas -->
<div id="advancedOptions" class="customize-panel border-t border-gray-200 pt-6">
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Enfoque de Desarrollo</label>
<select id="devApproach" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500">
<option value="oop">Programaci贸n Orientada a Objetos (POO)</option>
<option value="functional">Programaci贸n Funcional</option>
<option value="mixed">Enfoque Mixto</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Est谩ndares de C贸digo</label>
<select id="codeStandards" class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500">
<option value="wp">Est谩ndares de Codificaci贸n WordPress</option>
<option value="psr">Est谩ndares PSR</option>
<option value="custom">Est谩ndares personalizados</option>
</select>
</div>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Requisitos de Seguridad</label>
<div class="space-y-2">
<div class="flex items-center">
<input type="checkbox" id="nonces" class="h-4 w-4 text-indigo-600">
<label for="nonces" class="ml-2 text-gray-700">Nonces para todos los formularios</label>
</div>
<div class="flex items-center">
<input type="checkbox" id="sanitization" class="h-4 w-4 text-indigo-600">
<label for="sanitization" class="ml-2 text-gray-700">Saneamiento de datos</label>
</div>
<div class="flex items-center">
<input type="checkbox" id="escaping" class="h-4 w-4 text-indigo-600">
<label for="escaping" class="ml-2 text-gray-700">Escape de salida</label>
</div>
<div class="flex items-center">
<input type="checkbox" id="capabilities" class="h-4 w-4 text-indigo-600">
<label for="capabilities" class="ml-2 text-gray-700">Verificaci贸n de capacidades</label>
</div>
</div>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Pruebas</label>
<div class="space-y-2">
<div class="flex items-center">
<input type="checkbox" id="unit_tests" class="h-4 w-4 text-indigo-600">
<label for="unit_tests" class="ml-2 text-gray-700">Pruebas unitarias</label>
</div>
<div class="flex items-center">
<input type="checkbox" id="integration_tests" class="h-4 w-4 text-indigo-600">
<label for="integration_tests" class="ml-2 text-gray-700">Pruebas de integraci贸n</label>
</div>
<div class="flex items-center">
<input type="checkbox" id="phpunit" class="h-4 w-4 text-indigo-600">
<label for="phpunit" class="ml-2 text-gray-700">Configuraci贸n PHPUnit</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="bg-white rounded-xl shadow-lg overflow-hidden mb-8">
<div class="p-6">
<h2 class="text-2xl font-semibold text-gray-800 mb-6">Paso 3: Requisitos Adicionales</h2>
<div class="mb-6">
<label class="block text-sm font-medium text-gray-700 mb-2">Integraciones con Third-Party</label>
<div class="flex flex-wrap gap-2">
<span class="integration-tag bg-blue-100 text-blue-800 px-3 py-1 rounded-full text-sm flex items-center"
onclick="toggleIntegration(this)" data-value="woocommerce">
<input type="checkbox" class="hidden" id="int_woocommerce" value="woocommerce">
WooCommerce <i class="fas fa-check ml-2"></i>
</span>
<span class="integration-tag bg-blue-100 text-blue-800 px-3 py-1 rounded-full text-sm flex items-center"
onclick="toggleIntegration(this)" data-value="gravity_forms">
<input type="checkbox" class="hidden" id="int_gravity_forms" value="gravity_forms">
Gravity Forms <i class="fas fa-check ml-2"></i>
</span>
<span class="integration-tag bg-blue-100 text-blue-800 px-3 py-1 rounded-full text-sm flex items-center"
onclick="toggleIntegration(this)" data-value="cf7">
<input type="checkbox" class="hidden" id="int_cf7" value="cf7">
Contact Form 7 <i class="fas fa-check ml-2"></i>
</span>
<span class="integration-tag bg-blue-100 text-blue-800 px-3 py-1 rounded-full text-sm flex items-center"
onclick="toggleIntegration(this)" data-value="elementor">
<input type="checkbox" class="hidden" id="int_elementor" value="elementor">
Elementor <i class="fas fa-check ml-2"></i>
</span>
<span class="integration-tag bg-blue-100 text-blue-800 px-3 py-1 rounded-full text-sm flex items-center"
onclick="toggleIntegration(this)" data-value="acf">
<input type="checkbox" class="hidden" id="int_acf" value="acf">
ACF <i class="fas fa-check ml-2"></i>
</span>
</div>
</div>
<div>
<label for="customRequirements" class="block text-sm font-medium text-gray-700 mb-2">Requisitos Personalizados</label>
<textarea id="customRequirements" rows="3" placeholder="Cualquier otro requisito espec铆fico para tu plugin..."
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 mb-4"></textarea>
</div>
<div class="flex justify-center mt-8">
<button id="generatePrompt" class="px-8 py-3 bg-indigo-600 text-white font-medium rounded-lg hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition-colors flex items-center">
<i class="fas fa-magic mr-2"></i> Generar Prompt
</button>
</div>
</div>
</div>
<!-- Resultado del Prompt -->
<div class="prompt-container bg-white rounded-xl shadow-lg overflow-hidden">
<div class="p-6">
<div class="flex justify-between items-center mb-6">
<h2 class="text-2xl font-semibold text-gray-800">Tu Prompt Generado</h2>
<button id="copyPrompt" class="flex items-center text-sm text-indigo-600 hover:text-indigo-800">
<i class="fas fa-copy mr-1"></i> Copiar al Portapapeles
</button>
</div>
<div id="promptOutput" class="bg-gray-50 p-6 rounded-lg text-gray-800 font-mono text-sm overflow-x-auto"></div>
<div class="mt-6 text-right">
<button id="copyPrompt" class="px-6 py-2 bg-indigo-100 text-indigo-700 font-medium rounded-lg hover:bg-indigo-200 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 transition-colors flex items-center ml-auto" onclick="copyToClipboard()">
<i class="fas fa-copy mr-2"></i> Copiar Prompt
</button>
</div>
</div>
</div>
</div>
<script>
// Alternar selecci贸n de caracter铆sticas
function toggleFeature(card, featureId) {
const checkbox = card.querySelector('input[type="checkbox"]');
checkbox.checked = !checkbox.checked;
if (checkbox.checked) {
card.classList.add('bg-indigo-50', 'border-indigo-300');
} else {
card.classList.remove('bg-indigo-50', 'border-indigo-300');
}
}
// Alternar selecci贸n de integraciones
function toggleIntegration(tag) {
const checkbox = tag.querySelector('input[type="checkbox"]');
checkbox.checked = !checkbox.checked;
if (checkbox.checked) {
tag.classList.add('bg-indigo-200', 'text-indigo-900');
} else {
tag.classList.remove('bg-indigo-200', 'text-indigo-900');
}
}
// Alternar opciones avanzadas
document.getElementById('advancedToggle').addEventListener('click', function() {
const panel = document.getElementById('advancedOptions');
const icon = this.querySelector('i');
panel.classList.toggle('open');
if (panel.classList.contains('open')) {
this.innerHTML = '<span class="mr-2">Ocultar Opciones Avanzadas</span><i class="fas fa-chevron-up text-sm"></i>';
} else {
this.innerHTML = '<span class="mr-2">Mostrar Opciones Avanzadas</span><i class="fas fa-chevron-down text-sm"></i>';
}
});
// Generar el prompt
document.getElementById('generatePrompt').addEventListener('click', function() {
const pluginName = document.getElementById('pluginName').value.trim();
const pluginPurpose = document.getElementById('pluginPurpose').value.trim();
if (!pluginName || !pluginPurpose) {
alert('Por favor completa el nombre y prop贸sito del plugin antes de generar el prompt.');
return;
}
// Recoger caracter铆sticas
const features = [];
document.querySelectorAll('.feature-card input[type="checkbox"]:checked').forEach(checkbox => {
const label = checkbox.nextElementSibling.textContent;
features.push(label);
});
// Recoger opciones avanzadas
const devApproach = document.getElementById('devApproach').value;
const codeStandards = document.getElementById('codeStandards').value;
// Recoger requisitos de seguridad
const security = [];
document.querySelectorAll('#advancedOptions input[type="checkbox"]:checked').forEach(checkbox => {
security.push(checkbox.nextElementSibling.textContent);
});
// Recoger integraciones
const integrations = [];
document.querySelectorAll('.integration-tag input[type="checkbox"]:checked').forEach(checkbox => {
integrations.push(checkbox.value);
});
const customRequirements = document.getElementById('customRequirements').value.trim();
// Construir el prompt
let prompt = `Crea un plugin de WordPress llamado "${pluginName}" con las siguientes especificaciones:\n\n`;
prompt += `=== PROP脫SITO ===\n${pluginPurpose}\n\n`;
if (features.length > 0) {
prompt += `=== CARACTER脥STICAS REQUERIDAS ===\n`;
prompt += `${features.join('\n')}\n\n`;
}
if (integrations.length > 0) {
prompt += `=== INTEGRACIONES ===\n`;
prompt += integrations.map(int => {
switch(int) {
case 'woocommerce': return "Integraci贸n con WooCommerce";
case 'gravity_forms': return "Integraci贸n con Gravity Forms";
case 'cf7': return "Integraci贸n con Contact Form 7";
case 'elementor': return "Integraci贸n con Elementor";
case 'acf': return "Integraci贸n con Advanced Custom Fields";
default: return `Integraci贸n con ${int}`;
}
}).join('\n') + '\n\n';
}
prompt += `=== ENFOQUE DE DESARROLLO ===\n`;
switch(devApproach) {
case 'oop': prompt += "Usa programaci贸n orientada a objetos con estructura de clases adecuada.\n"; break;
case 'functional': prompt += "Usa enfoque de programaci贸n funcional.\n"; break;
case 'mixed': prompt += "Usa una combinaci贸n de POO y programaci贸n funcional seg煤n corresponda.\n"; break;
}
prompt += `=== EST脕NDARES DE C脫DIGO ===\n`;
switch(codeStandards) {
case 'wp': prompt += "Sigue los est谩ndares de codificaci贸n de WordPress.\n"; break;
case 'psr': prompt += "Sigue est谩ndares PSR (especifica cu谩les si es necesario).\n"; break;
case 'custom': prompt += "Sigue est谩ndares organizacionales personalizados.\n"; break;
}
if (security.length > 0) {
prompt += `=== REQUISITOS DE SEGURIDAD ===\n`;
prompt += `${security.join('\n')}\n\n`;
}
if (customRequirements) {
prompt += `=== REQUISITOS ADICIONALES ===\n`;
prompt += `${customRequirements}\n\n`;
}
prompt += `=== FORMATO DE SALIDA ===\n`;
prompt += `Proporciona el c贸digo completo del plugin en un solo archivo con comentarios y documentaci贸n adecuados. Incluye instrucciones de instalaci贸n y ejemplos b谩sicos de uso.`;
// Mostrar el prompt
document.getElementById('promptOutput').textContent = prompt;
document.querySelector('.prompt-container').classList.add('show');
});
// Copiar al portapapeles
function copyToClipboard() {
const promptText = document.getElementById('promptOutput').textContent;
if (!promptText) {
alert('Por favor genera un prompt primero.');
return;
}
navigator.clipboard.writeText(promptText).then(() => {
const copyBtn = document.querySelector('#copyPrompt');
copyBtn.innerHTML = '<i class="fas fa-check mr-2"></i> 隆Copiado!';
setTimeout(() => {
copyBtn.innerHTML = '<i class="fas fa-copy mr-2"></i> Copiar Prompt';
}, 2000);
});
}
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - <a href="https://enzostvs-deepsite.hf.space?remix=smashmash/wordpress-prompts" style="color: #fff;text-decoration: underline;" target="_blank" >馃К Remix</a></p><p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 馃К <a href="https://enzostvs-deepsite.hf.space?remix=Yoleo/prompts-para-crear-plugins-wp" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>