Skip to content

feat: agrega pagina guiada de contribucion#46

Open
CamiloMaria wants to merge 5 commits intomidudev:mainfrom
CamiloMaria:feature/contribuir
Open

feat: agrega pagina guiada de contribucion#46
CamiloMaria wants to merge 5 commits intomidudev:mainfrom
CamiloMaria:feature/contribuir

Conversation

@CamiloMaria
Copy link
Copy Markdown
Contributor

@CamiloMaria CamiloMaria commented Apr 24, 2026

Resumen

  • Agrega la pagina guiada /contribuir/ para proponer libros gratuitos de programacion sin editar codigo.
  • Genera titulo y cuerpo de issue desde el formulario, con validacion de URL, advertencias de duplicados, copia al portapapeles y vista previa de catalogo.
  • Actualiza el CTA de la portada y la guia de contribucion para apuntar al nuevo flujo guiado.

Verificacion

  • pnpm build
  • Revision desktop con Playwright: sin overflow horizontal, botones de accion lado a lado.
  • Revision mobile con Playwright: sin overflow horizontal, botones de accion apilados.

@CamiloMaria CamiloMaria changed the title feat: add guided contribution page feat: agrega pagina guiada de contribucion Apr 24, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.ts para normalización, detección de duplicados y construcción de title/body/url de issues.
  • Actualiza CONTRIBUTING.md para 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.

Comment thread web/src/lib/contribution.ts Outdated
Comment on lines +74 to +88
'## 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',
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot apply changes based on this feedback

Comment thread web/src/pages/contribuir.astro Outdated
Comment thread web/src/pages/contribuir.astro Outdated
Comment on lines +318 to +326
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.';
}
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot apply changes based on this feedback

Comment on lines +55 to +63
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);
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot apply changes based on this feedback

Comment thread web/src/pages/contribuir.astro Outdated
Comment on lines +171 to +174
<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>
Copy link

Copilot AI Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot apply changes based on this feedback

midudev and others added 4 commits April 24, 2026 19:59
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants