Skip to content

Conversation

@vvava
Copy link
Contributor

@vvava vvava commented Sep 16, 2025

Description

Implement the Concierge with the new UI.

Changes

Put the button and the animation to the header in the portfolio page. Create the Concierge page.

Testing

Go to Concierge page and play around with it. Also try the turn on and off in settings and feature flag out.

Screenshots:

Screen.Recording.2025-09-22.at.9.47.02.mov
Screen.Recording.2025-09-22.at.9.47.59.mov

Checklist for the author

Tick each of them when done or if not applicable.

  • I've covered new/modified business logic with Jest test cases.
  • I've tested the changes myself before sending it to code review and QA.

@vvava vvava marked this pull request as ready for review September 22, 2025 07:24
@vvava vvava changed the title feat: initial funcionality, send placeholder feat: CP-11851 Core concierge Sep 22, 2025
@vvava
Copy link
Contributor Author

vvava commented Sep 24, 2025

Feature flags are missing

Copy link
Member

@meeh0w meeh0w left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I noted the only comment that actually requires an action for me to approve the PR, please let me know once done 👍

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required: Please create a follow-up ticket to break this down into separate files / hooks. It's very hard to parse this file in its current shape.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment on lines +94 to +96
text={message.content}
scrollToBottom={scrollToBottom}
typingSpeed={typingSpeed}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But the text length is clearly the single thing it actually cares about when it comes to the typing speed. It's not business logic, it's the presentation logic.

And tbh I think deriving the typing speed based on the text length is the only thing that makes sense, otherwise the component would become super clunky imho (I mean, it's good that longer text translates into higher typing speed).

The only other way I could see it be is that the message typing duration could always be constant (e.g. no matter the content, it would always take 1s for the message to appear). But I feel like this could also not be super user-friendly.

Just saying, leave it be if you wish -- no action required.

'Get Core to work for you. Whether it’s transferring, sending crypto, just ask away!',
)}
checked={coreAssistant}
onChange={() => setCoreAssistant(!coreAssistant)}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should use a state setter's callback when the new state depends on the previous state, such as incrementing a counter or reversing boolean flags. Using the callback ensures your update is based on the most current state, preventing issues from React's state update batching and potential race conditions.

Low risk here, but it's a good thing to remember especially with more complex state variables (e.g. objects, arrays). Also useful inside useEffect or useCallback - you don't need the state itself as a dependency.

@vvava vvava requested a review from meeh0w November 10, 2025 08:28
meeh0w
meeh0w previously approved these changes Nov 10, 2025
frichards
frichards previously approved these changes Nov 10, 2025
Copy link
Contributor

@frichards frichards left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌈 🦄 Approved!
Manually tested

meeh0w
meeh0w previously approved these changes Nov 12, 2025
Comment on lines 143 to 147
'&.backdrop-enter': {
display: 'flex',
},
'&.backdrop-enter-done': {
display: 'flex',

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please replace class name literals with constants to have a link between the selectors and the logic applying the CSS classes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants