Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Phase 3: Implement personalization signals (branch/year onboarding + ranking boost)

Abierto
#34 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@Aryan-Techie ya está trabajando en esto.

Desde el 20/10/2026.

  • #105 de @Aryan-Techie — abierto

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
45/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
postgresql, supabase, typescript

Línea de trabajo

Start with PRD §8.8 and inspect src/db/schema.ts, src/app/onboarding/page.tsx, src/app/onboarding/actions.ts, src/lib/resources.ts, src/components/directory/directory-client.tsx, src/proxy.ts, and scripts/normalize-data.ts. Trace the existing authentication, directory sorting, resource tags, and database conventions before choosing among the listed branch-mapping options. Done means optional branch/year onboarding, persisted profiles, incomplete-profile routing, and a non-filtering personalized ranking are covered by the acceptance criteria.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

enhancement

Description

Implement personalization signals as specified in PRD §8.8. This is a P1 requirement for Phase 3.

Acceptance Criteria (from PRD §8.8)

  • Onboarding asks branch + year (optional, skippable)
  • Resources tagged to a branch (e.g., MATLAB, SolidWorks → ECE/Mechanical) sort higher for matching users — a ranking boost, never a hard filter

Current State

  • No user profile table exists yet (only Supabase auth.users)
  • Resources have tags but no branch mapping
  • No onboarding flow exists
  • Directory sorting currently: recommended (Fuse.js relevance), name, recent

Implementation Plan

  1. Create profiles table (extends Supabase auth.users):
    • userId (uuid, PK, references auth.users)
    • branch (text, nullable) - e.g., "CSE", "ECE", "Mechanical", "Civil", etc.
    • year (integer, nullable) - 1, 2, 3, 4, 5+
    • completedOnboarding (boolean, default false)
  2. Add branch tags to resources:
    • Map existing tags to branches (e.g., "MATLAB" → "ECE", "SolidWorks" → "Mechanical")
    • Could add branchTags column to resources or use existing tags with a mapping
  3. Onboarding flow:
    • After first sign-in, redirect to /onboarding if not completed
    • Simple form: branch (select), year (select), skip button
    • Store in profiles table
  4. Personalized sorting:
    • New sort option: "For you" (default for logged-in users with profile)
    • Boost resources matching user's branch/year
    • Ranking boost, not hard filter — all resources still visible

Files to Create/Modify

  • src/db/schema.ts - add profiles table
  • src/app/onboarding/page.tsx (new) - onboarding form
  • src/app/onboarding/actions.ts (new) - Server Action to save profile
  • src/lib/resources.ts - add getUserProfile(), getPersonalizedResources()
  • src/components/directory/directory-client.tsx - add "For you" sort option
  • src/proxy.ts - redirect to onboarding if profile incomplete
  • scripts/normalize-data.ts - add branch tag mapping (or separate seed)

Database Schema Addition

export const profiles = pgTable('profiles', {
  userId: uuid('user_id').notNull().references(() => auth.users.id).primaryKey(),
  branch: text('branch'), // 'CSE', 'ECE', 'Mechanical', 'Civil', 'EEE', etc.
  year: integer('year'), // 1, 2, 3, 4, 5
  completedOnboarding: boolean('completed_onboarding').notNull().default(false),
  createdAt: timestamp('created_at').notNull().defaultNow(),
  updatedAt: timestamp('updated_at').notNull().defaultNow(),
}).enableRLS();

Branch Mapping Strategy

Option A: Add branchTags array column to resources (explicit mapping)
Option B: Use existing tags with a static mapping in code (e.g., BRANCH_TAG_MAP = { 'MATLAB': 'ECE', ... })
Option C: Add branch column to resources (single branch per resource)

Recommend Option B for simplicity - use existing tags with a mapping config.

Sorting Algorithm

  • Base score from Fuse.js (if searching) or 1.0
  • If user has branch: +0.5 for each matching branch tag
  • If user has year: +0.2 for resources relevant to that year (e.g., internships for year 3-4)
  • Sort by combined score descending
Lenguaje dominante
TypeScript
Estrellas
1
Forks
6
Merge medio
1 d 41 min
PR fusionados (30 d)
28

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Your-Voldemort/StudentStack

Todos los issues de Your-Voldemort/StudentStack

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.