Onboarding
Los usuarios nuevos pasan por un flujo de onboarding obligatorio antes de poder usar la app: elegir intereses y luego seguir al menos 5 cuentas.
Cada checkbox indica si esa pieza está implementada de punta a punta (frontend + backend).
- Paso de intereses — elegir temas (Música, Deportes, Gaming, Moda, …); se almacenan como slugs estables
- Paso de seguir — hay que seguir al menos 5 cuentas para continuar (el botón Finalizar permanece bloqueado hasta entonces)
- Sugerencias basadas en intereses en el paso de seguir (primero cuentas con intereses en común, complementadas con sugerencias más amplias para que nunca esté vacío)
- Cuadro de búsqueda para encontrar y seguir cualquier cuenta durante el onboarding
- Bloqueo persistente — un usuario que no completó el proceso es redirigido a
/onboardingen cada inicio de sesión (según el flagisOnboardingCompleteddel servidor), incluso después de cerrar sesión y volver a iniciarla - Verificación del lado del servidor —
completeOnboardingrechaza finalizar con menos de 5 seguidos - Opción de cerrar sesión disponible dentro de la vista de onboarding
- Sin destello del feed — el inicio de sesión envía a los usuarios que no terminaron directamente a
/onboarding; el feed protegido nunca se renderiza primero
Cómo funciona
- Después de registrarse (o de iniciar sesión sin haber terminado), el usuario llega a
/onboarding. - Paso 1 — Intereses: selecciona temas. Los valores almacenados son slugs independientes del idioma (
music,sports, …), de modo que la coincidencia funciona entre distintos locales. - Paso 2 — Seguir: la app llama a
interestSuggestionscon los intereses elegidos y muestra cuentas para seguir, además de un cuadro de búsqueda. El usuario debe seguir a ≥5. - Al finalizar,
completeOnboarding(interests)estableceisOnboardingCompleted = true(y almacena los intereses mediante la semántica deupdateInterests), y la app entra al feed.
Bloqueo
La redirección se aplica en ProtectedRoute.tsx: cuando user.isOnboardingCompleted === false y la ruta no es /onboarding, no renderiza nada y redirige. Como el flag vive en el servidor y se devuelve en el payload de login/registro, cerrar sesión y volver a iniciarla vuelve a activar el bloqueo para una cuenta que no ha terminado.
Archivos clave
- Backend:
graphql/resolvers/user-social.resolver.js(completeOnboarding),graphql/resolvers/user-search-discovery.resolver.js(interestSuggestions),data-access-services/user/user.access-service.js(getUsersByInterests). - Frontend:
page-components/OnboardingPage.tsx,app/onboarding/page.tsx, bloqueo encomponents/ProtectedRoute.tsx, redirección de login encomponents/Login.tsx.
Relacionado
Los intereses se pueden editar después — ver Configuración → Intereses y el documento de Descubrimiento para sugerencias basadas en intereses.