feat: agrega pagina guiada de contribucion#46
feat: agrega pagina guiada de contribucion#46CamiloMaria wants to merge 5 commits intomidudev:mainfrom
Conversation
b7d6036 to
c9b9b39
Compare
c9b9b39 to
4f39bbc
Compare
There was a problem hiding this comment.
Pull request overview
Este PR incorpora un flujo guiado en la web para proponer nuevos libros/recursos gratuitos mediante un formulario que prepara una issue de GitHub, y actualiza los puntos de entrada para dirigir a ese nuevo flujo.
Changes:
- Actualiza el CTA de la portada para apuntar a
/contribuir/. - Agrega la nueva página
/contribuir/con formulario, preview de catálogo, detección de duplicados y acciones de copiar/crear issue. - Añade utilidades en
web/src/lib/contribution.tspara normalización, detección de duplicados y construcción de title/body/url de issues. - Actualiza
CONTRIBUTING.mdpara mencionar el flujo guiado.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 6 comments.
| File | Description |
|---|---|
| web/src/pages/index.astro | Cambia el CTA principal para usar el nuevo flujo guiado /contribuir/. |
| web/src/pages/contribuir.astro | Nueva página con formulario guiado, preview y lógica de interacción en cliente. |
| web/src/lib/contribution.ts | Helpers para validar/normalizar y armar la issue de GitHub. |
| CONTRIBUTING.md | Documenta el nuevo camino para contribuir sin tocar código. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| '## Datos del recurso', | ||
| '', | ||
| `- **Titulo:** ${form.title.trim()}`, | ||
| `- **Autor o proyecto:** ${author}`, | ||
| `- **Enlace:** ${form.url.trim()}`, | ||
| `- **Categoria sugerida:** ${form.category}`, | ||
| `- **Formato:** ${form.format}`, | ||
| '- **Idioma:** Espanol', | ||
| '', | ||
| '## Confirmaciones', | ||
| '', | ||
| `- [${form.isFree ? 'x' : ' '}] Es gratuito, sin paywall ni trial`, | ||
| `- [${form.isSpanish ? 'x' : ' '}] Esta en espanol`, | ||
| '', | ||
| '## Por que deberia estar en el catalogo', |
There was a problem hiding this comment.
En el cuerpo de la issue se usan etiquetas sin tildes ("Titulo", "Categoria", "Espanol", "Por que..."). Dado que esto queda publicado tal cual en GitHub, conviene corregir la ortografía ("Título", "Categoría", "Español", "Por qué...") para consistencia con el resto del proyecto.
| const fallback = document.createElement('textarea'); | ||
| fallback.className = 'copy-fallback'; | ||
| fallback.value = proposal; | ||
| fallback.readOnly = true; | ||
| copyButton.insertAdjacentElement('afterend', fallback); | ||
| fallback.focus(); | ||
| fallback.select(); | ||
| formStatus.textContent = 'No se pudo copiar automaticamente. Selecciona el texto mostrado.'; | ||
| } |
There was a problem hiding this comment.
En el fallback de copiado, cada fallo agrega un nuevo <textarea> junto al botón sin limpiar el anterior. Si el usuario reintenta, se acumulan elementos en el DOM y se degrada la UX. Reutiliza un único elemento de fallback (o elimínalo antes de insertar uno nuevo) y/o intenta copiar con document.execCommand('copy') como fallback final.
| return catalog | ||
| .filter((entry) => { | ||
| const sameUrl = proposedUrl && normalizeUrl(entry.href) === proposedUrl; | ||
| const sameTitle = | ||
| proposedTitle.length >= 4 && normalizeText(entry.title) === proposedTitle; | ||
|
|
||
| return sameUrl || sameTitle; | ||
| }) | ||
| .slice(0, 3); |
There was a problem hiding this comment.
findPotentialDuplicates normaliza entry.href y entry.title dentro del .filter(...) en cada llamada. Como update() se ejecuta en cada input/change, esto puede volverse costoso con un catálogo grande (O(n) por pulsación con trabajo extra de normalización). Considera precomputar/almacenar versiones normalizadas del catálogo una sola vez (o usar un índice por URL/título) para reducir el trabajo por actualización.
| <p class="status-line" data-form-status aria-live="polite">Faltan campos obligatorios para crear la issue.</p> | ||
| <button class="secondary-action" type="button" data-copy-proposal>Copiar propuesta</button> | ||
| <a class="primary-action is-disabled" data-create-issue href={sourceRepository.href} aria-disabled="true" role="button">Crear issue en GitHub</a> | ||
| </div> |
There was a problem hiding this comment.
El CTA de "Crear issue" se renderiza como <a role="button"> con aria-disabled, pero sigue siendo enfocable y puede confundir a usuarios de teclado/lectores de pantalla cuando está deshabilitado. Considera gestionar también tabindex (p. ej. -1 cuando está deshabilitado y restaurarlo al habilitar), o usar un <button> real que abra la URL cuando sea válido.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Resumen
/contribuir/para proponer libros gratuitos de programacion sin editar codigo.Verificacion
pnpm build