feat: invitar a un proyecto por correo a alguien que aun no es usuario

Al agregar un miembro, el popup ahora permite elegir un usuario existente
o escribir un correo nuevo. Si ese correo no pertenece a nadie, se crea
una cuenta en estado 'invited' (nombre/clave placeholder) y se le manda
un correo con un enlace de un solo uso para que complete su registro
(elige su nombre y clave). La fila de project_members se crea de una vez
al invitar, asi que en cuanto acepta ya es miembro sin pasos adicionales.
A diferencia del autorregistro publico, no pasa por aprobacion de un
admin -- quien lo agrego a su proyecto ya lo vetó.

Nuevos endpoints publicos GET /api/auth/invite y POST /api/auth/accept-invite.
Nueva pagina AcceptInvitePage (/aceptar-invitacion). Migracion 004 agrega
el status 'invited' al enum de users.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-09-09 23:55:02 -05:00
parent 53c7bd7f95
commit d7478d0f21
20 changed files with 320 additions and 23 deletions
+11
View File
@@ -1,5 +1,16 @@
# Changelog - project.linkedcorp.net
## [1.7.0] - 2026-09-10
### Added
- Agregar miembro a un proyecto ahora acepta un **correo que todavía no es usuario del sistema**
(campo "Invitar por correo" en el popup de Miembros, alternativo a elegir uno existente). Si el
correo no pertenece a nadie, se crea una cuenta en estado `invited` y se le manda un correo con
un enlace de un solo uso (`/aceptar-invitacion?token=...`, vence en 7 días) para que complete su
propio registro (elige nombre y clave); la fila de `project_members` ya queda creada de una vez,
así que en cuanto acepta ya aparece como miembro sin pasos adicionales. A diferencia del
autorregistro público, no pasa por aprobación de un admin — quien lo agregó a su proyecto ya lo
vetó. Nuevos endpoints públicos `GET /api/auth/invite` y `POST /api/auth/accept-invite`.
## [1.6.1] - 2026-09-09
### Changed
- Nuevo ícono/logo de la app derivado del ícono original de LinkedCorp (círculo azul de marca