Feature: Expand Profile Quest into membership categories #499

Open
opened 2026-04-28 07:06:42 +00:00 by jjalangtry · 0 comments
jjalangtry commented 2026-04-28 07:06:42 +00:00 (Migrated from github.com)

Problem

The existing Profile Quest is field-based and hardcoded around five profile fields:

  • Graduation Term
  • Graduation Year
  • Major
  • GitHub
  • LinkedIn

Those fields currently behave like one flat checklist. This makes the quest stricter than intended and does not leave room for members who want to provide other useful contact/profile info instead of every current field.

Current implementation references:

  • next/app/(main)/profile/[id]/ProfileContent.tsx defines QUEST_FIELDS and renders the quest checklist inline
  • next/lib/services/profileCompletionService.ts grants membership only when all current profile fields are filled
  • next/lib/services/authLevelService.ts and next/lib/authLevelResolver.ts duplicate the same profile-complete check

Proposed Solution

Break the Profile Quest into five completion categories:

Category Completion rule
RIT Info graduationTerm, graduationYear, and major are filled
LinkedIn linkedIn is filled
GitHub gitHub is filled
Personal Email New personal email field is filled and valid
Personal Website New personal website URL field is filled and valid

This keeps the existing RIT info fields grouped together as one category, while adding two new optional ways for a member to complete enough profile information for membership.

Scope

In scope:

  • Add profile data fields for personal email and personal website URL
  • Add Prisma migration for the new fields
  • Update user/profile API request and response payloads
  • Update profile edit UI to let the profile owner edit personal email and personal website
  • Update read-only profile display to show these values where appropriate
  • Replace the flat quest field checklist with category-based quest items
  • Normalize/validate personal website URLs so saved links are usable
  • Validate personal email separately from the account/RIT email used for authentication

Out of scope:

  • Email broadcast consent/preferences
  • Public privacy settings for individual fields unless already required by existing profile visibility rules
  • Admin tooling for quest definitions

Acceptance Criteria

  • The Profile Quest shows five category items: RIT Info, LinkedIn, GitHub, Personal Email, Personal Website
  • RIT Info is marked complete only when graduation term, graduation year, and major are all filled
  • LinkedIn and GitHub preserve the existing profile fields and edit behavior
  • Profile owners can add/edit personal email and personal website from their profile edit form
  • Personal email is validated as an email address and does not replace the user's authentication email
  • Personal website is validated/normalized as a URL and renders as a working link
  • Existing users without personal email or website continue to load without errors
  • The quest UI no longer treats graduation term, graduation year, and major as three separate progress items

Additional Context

Related existing quest work:

  • Epic: #472
  • Existing Membership Quests System issue: #474

This issue prepares the profile data and UI for the separate membership eligibility rule: membership should be awarded when any 3 of the 5 categories are complete.

## Problem The existing **Profile Quest** is field-based and hardcoded around five profile fields: - Graduation Term - Graduation Year - Major - GitHub - LinkedIn Those fields currently behave like one flat checklist. This makes the quest stricter than intended and does not leave room for members who want to provide other useful contact/profile info instead of every current field. Current implementation references: - `next/app/(main)/profile/[id]/ProfileContent.tsx` defines `QUEST_FIELDS` and renders the quest checklist inline - `next/lib/services/profileCompletionService.ts` grants membership only when all current profile fields are filled - `next/lib/services/authLevelService.ts` and `next/lib/authLevelResolver.ts` duplicate the same profile-complete check ## Proposed Solution Break the Profile Quest into five completion categories: | Category | Completion rule | |---|---| | RIT Info | `graduationTerm`, `graduationYear`, and `major` are filled | | LinkedIn | `linkedIn` is filled | | GitHub | `gitHub` is filled | | Personal Email | New personal email field is filled and valid | | Personal Website | New personal website URL field is filled and valid | This keeps the existing RIT info fields grouped together as one category, while adding two new optional ways for a member to complete enough profile information for membership. ## Scope In scope: - Add profile data fields for personal email and personal website URL - Add Prisma migration for the new fields - Update user/profile API request and response payloads - Update profile edit UI to let the profile owner edit personal email and personal website - Update read-only profile display to show these values where appropriate - Replace the flat quest field checklist with category-based quest items - Normalize/validate personal website URLs so saved links are usable - Validate personal email separately from the account/RIT email used for authentication Out of scope: - Email broadcast consent/preferences - Public privacy settings for individual fields unless already required by existing profile visibility rules - Admin tooling for quest definitions ## Acceptance Criteria - [ ] The Profile Quest shows five category items: RIT Info, LinkedIn, GitHub, Personal Email, Personal Website - [ ] RIT Info is marked complete only when graduation term, graduation year, and major are all filled - [ ] LinkedIn and GitHub preserve the existing profile fields and edit behavior - [ ] Profile owners can add/edit personal email and personal website from their profile edit form - [ ] Personal email is validated as an email address and does not replace the user's authentication email - [ ] Personal website is validated/normalized as a URL and renders as a working link - [ ] Existing users without personal email or website continue to load without errors - [ ] The quest UI no longer treats graduation term, graduation year, and major as three separate progress items ## Additional Context Related existing quest work: - Epic: #472 - Existing Membership Quests System issue: #474 This issue prepares the profile data and UI for the separate membership eligibility rule: membership should be awarded when any 3 of the 5 categories are complete.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
SSE/WebsiteTheSSEquel#499
No description provided.