Phase 3: Implement personalization signals (branch/year onboarding + ranking boost)
Los mantenedores suelen responder en 1 día
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
- Área
- authentication, database, frontend, full-stack
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
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
- 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)
- Add branch tags to resources:
- Map existing tags to branches (e.g., "MATLAB" → "ECE", "SolidWorks" → "Mechanical")
- Could add
branchTagscolumn to resources or use existing tags with a mapping
- Onboarding flow:
- After first sign-in, redirect to
/onboardingif not completed - Simple form: branch (select), year (select), skip button
- Store in profiles table
- After first sign-in, redirect to
- 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- addprofilestablesrc/app/onboarding/page.tsx(new) - onboarding formsrc/app/onboarding/actions.ts(new) - Server Action to save profilesrc/lib/resources.ts- addgetUserProfile(),getPersonalizedResources()src/components/directory/directory-client.tsx- add "For you" sort optionsrc/proxy.ts- redirect to onboarding if profile incompletescripts/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
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de Your-Voldemort/StudentStack
-
Feature (Phase 3): Accountless localStorage eligibility profile ('Only what I'm eligible for' toggle) + auth sync & per-user ICSPosiblemente ocupada @Aryan-Techie la tomó hoy. Abiertoenhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
Your-Voldemort/StudentStack#84 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Feature (Phase 2): Implement named ingestion sources (RSS feeds, GitHub markdown/YAML lists, Apify actors) & deadline expiry rulesPosiblemente ocupada @Aryan-Techie la tomó hoy. Abiertoenhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 18/100
Your-Voldemort/StudentStack#83 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Feature (Phase 4): Expand public API (/api/resources filters & /api/resources/[slug]), add API & Agents page + llms.txt, and community freshness/creditsPosiblemente ocupada @Aryan-Techie la tomó hoy. Abiertoenhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 12/100
Your-Voldemort/StudentStack#82 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Content/Data (Phase 1): Import student_resources.json (tensorboy 91 net-new rows), curate 40+ flagship deadlines, and seed mentorship programsPosiblemente ocupada @Aryan-Techie la tomó hoy. Abiertoenhancement
Dificultad 4/5 Más de una semana Aptitud para principiantes 22/100
Your-Voldemort/StudentStack#79 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Feature (Phase 1): Extend resources schema for opportunities (kind, opensAt, recurrence, amount, provider, eligibility)Posiblemente ocupada @Aryan-Techie la tomó hoy. Abiertoenhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Your-Voldemort/StudentStack#78 · 4 comentarios ·
Los mantenedores suelen responder en 1 día
Todos los issues de Your-Voldemort/StudentStack
Issues similares
-
Area/Cloud Needs Triage Type/Bug
Dificultad 1/5 1-3 horas Aptitud para principiantes 86/100
wso2/product-integrator#2847 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
bluesky-social/social-app#12118 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
heygen-com/hyperframes#6021 ·
Los mantenedores suelen responder en 1 día
-
Edit: Tele Posadas HDAbiertocheck:passed streams:edit
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día