Repository navigation
♻️ Add IDOL redesign shell, profile, appearance settings, and help - #1228
clementroze wants to merge 8 commits into
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the
|
|
[diff-counting] Significant lines: 3382. This diff might be too big! Developer leads are invited to review the code. |
| type Props = { readonly containerRef: RefObject<HTMLDivElement> }; | ||
| type Point = { x: number; y: number }; | ||
|
|
||
| // Uneven overlapping contours, rather than a circular cutout around the cursor. |
There was a problem hiding this comment.
that's because I want it to be more natural and less geometric
| /** A soft light field that yields locally to the pointer when motion is allowed. */ | ||
| export default function LoginGlow({ containerRef }: Props): JSX.Element { | ||
| const glow = useRef<HTMLDivElement>(null); |
There was a problem hiding this comment.
in other words - based on the cursor position, the blob moves slightly around. just a fun fact :)
| // Randomize only after hydration, and only when motion is allowed. | ||
| phase = Math.random() * Math.PI * 2; |
There was a problem hiding this comment.
this means that on page load the animation should be different each time
and also it only activates if OS reduce motion preferences are off
|
|
||
| const SignIn = (props: JSX.IntrinsicAttributes & { children?: React.ReactNode }): JSX.Element => ( | ||
| <Suspense fallback={null}> | ||
| <Suspense fallback={<LoadingScreen />}> |
There was a problem hiding this comment.
Updated loading screen:
Screen.Recording.2026-11-04.at.10.10.20.PM.mov
| popupProps={{ | ||
| onDragEnter: (event) => { | ||
| if (!Array.from(event.dataTransfer.types).includes('Files') || profile.savingPhoto) | ||
| return; | ||
| event.preventDefault(); | ||
| dragDepth.current += 1; | ||
| setDragging(true); | ||
| }, | ||
| onDragOver: (event) => { | ||
| if (!Array.from(event.dataTransfer.types).includes('Files')) return; | ||
| event.preventDefault(); | ||
| const { dataTransfer } = event; | ||
| dataTransfer.dropEffect = profile.savingPhoto ? 'none' : 'copy'; | ||
| }, | ||
| onDragLeave: (event) => { |
| /** Accept pasted URLs, domains, or usernames without duplicating the fixed field prefix. */ | ||
| export function socialDisplay(kind: SocialKind, input: string): string { | ||
| let value = input.trim().replace(/^(?:(?:https?:)?\/\/)+/i, ''); | ||
| if (kind === 'website') return value; | ||
| value = value.replace(/^www\./i, ''); | ||
| const host = SOCIAL_PREFIXES[kind].slice(0, -1); | ||
| if (value.toLowerCase() === host) return ''; |
There was a problem hiding this comment.
this offers the best user experience possible by stripping away unneccessary parts of what they paste so that it records their input as correctly as possible
There was a problem hiding this comment.
A new page!! This is basically a simple with a searchable glossary of relevant DTI and IDOL terms, and a quick explanation of the primary a features a normal DTI user would use.
also includes full catalogue of our products + their descriptions (pulled from cornelldti.org website!)
and theres also link to the slack ##idol-support channel for more help too
There was a problem hiding this comment.
no longer used but helpful when developping half-baked ideas and need a shell to test things out on
| <g className={styles[theme]}> | ||
| <rect width="128" height="80" fill="var(--mini-bg)" /> | ||
| <rect | ||
| x="5" | ||
| y="5" | ||
| width="118" | ||
| height="70" | ||
| rx="5" | ||
| fill="var(--mini-panel)" | ||
| stroke="var(--mini-stroke)" |
zkdlinyne
left a comment
There was a problem hiding this comment.
Hey Clément, thanks for implementing all of this ! I left a couple comments, generally just one thing that really requires action though. I also love the Help page, looks super sleek and also love that it links to every product and that #idol-support is reachable directly through there. Love the little glossary too.
Tested locally and didn't find any breaking changes.
| * Validates required profile fields and updates the member information. | ||
| * Shows an error notification if required fields are empty. | ||
| */ | ||
| const saveProfileInfo = () => { |
There was a problem hiding this comment.
hey clement, i know this piece of code over here just validates that the info can be saved (all required fields have been entered), but just had a comment about the Save Changes button under Home -> Edit Profile itself. Super nit but I think the Save Changes button is blue and available to be clicked regardless of whether the user has made changes to their profile or not. I like that we get a confirmation modal pop up once we click Save Changes and everything saves successfully, so this is kinda an extra thing but maybe would be cleaner to have the Save Changes only be clickable if edits are made.
There was a problem hiding this comment.
good point! done here, it's now disabled until you edit something
| 'blue', | ||
| 'purple', | ||
| 'pink', | ||
| 'red', |
There was a problem hiding this comment.
Love the idea of allowing users to pick which color theme they want, and love how it reflects across various buttons on IDOL!
There was a problem hiding this comment.
Anything else you plan on adding to the scope of the color change other than buttons?
There was a problem hiding this comment.
yay glad you like it!
i think since we're using tokens and variables it should be easy to swap out the other colors too. I'll work on some other themes other than Light/Dark that can change the other surfaces too!
| @@ -27,3 +27,21 @@ export { QuestionIcon } from '@phosphor-icons/react/dist/csr/Question'; | |||
| export { RocketLaunchIcon } from '@phosphor-icons/react/dist/csr/RocketLaunch'; | |||
| export { ScalesIcon } from '@phosphor-icons/react/dist/csr/Scales'; | |||
There was a problem hiding this comment.
Is the scale icon the right one to have for candidate decider ?
There was a problem hiding this comment.
i think so! it's about debating the pros and cons of the candidate, so kinda like weighing between 2 things no?
the icons are from Phosphor here, so feel free to browse thru and lmk if you find a better alternative!
2bb4e59 to
4f4e177
Compare



Summary
Connect the new UI toggle to the redesigned app shell, profile menu, and profile/settings/help pages. Persist the toggle and appearance preferences; redirect away from redesign-only routes when the toggle is disabled.
Changes
Notion/Figma Link
IDOL redesign
Test Plan
git diff --checkpasses.Note: