Fix/dreamsync welcome - #676

Merged
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome
Jan 16, 2026
Merged

Fix/dreamsync welcome#676
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome

Conversation

@grv-saini-20

@grv-saini-20grv-saini-20 commented Jan 16, 2026

Copy link
Copy Markdown
Collaborator

Description of change

Fixed the dreamsync welcome with user name.
image

Issue Number

closes#629

Type of change

  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)

How the change has been tested

Manual

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features

    • Profile follow UI improved: clearer loading state and a distinct "Following" confirmation.
    • Follow state tracking refined to provide smoother animations and consistent feedback.
  • Bug Fixes / Improvements

    • Welcome name display updated to prefer a consolidated name field with email fallback.
  • Chores

    • Simplified follow interaction logic for more reliable UX and faster UI resets.

✏️ Tip: You can customize this high-level summary in your review settings.

@grv-saini-20grv-saini-20 self-assigned this Jan 16, 2026
@coderabbitai

coderabbitaiBot commented Jan 16, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Updated user display to use user?.name (with fallbacks) and added name?: string to UserWithProfile. Enhanced profile follow UI by adding isFollowing and didFollowed state, wiring them between page and Profile component, and simplifying follow request logic/animation.

Changes

Cohort / File(s)Summary
User name & schema
platforms/dreamSync/client/src/pages/wishlist-editor.tsx, platforms/dreamSync/shared/schema.ts
Replace user?.firstName with user?.name (fallback to email or 'User'); add optional name?: string to UserWithProfile type.
Profile follow UI & state
platforms/pictique/src/lib/fragments/Profile/Profile.svelte, platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
Add exported didFollowed prop and isFollowing/didFollowed bindings; remove requestSent flow; simplify follow handler to set isFollowing, call follow API, set didFollowed, trigger brief animation/1s delay then refresh profile, and reset flags. UI shows final state using didFollowed.

Sequence Diagram(s)

sequenceDiagram
participant User
participant ProfilePage as Profile Page (Svelte)
participant ProfileComponent as Profile.svelte
participant API as /api/users/:id/follow
participant Backend as Server/DB
User->>ProfileComponent: Click "Follow" button
ProfileComponent->>ProfilePage: emit follow action (bound)
ProfilePage->>ProfilePage: set isFollowing = true
ProfilePage->>API: POST /api/users/{id}/follow
API->>Backend: persist follow
Backend-->>API: 200 OK
API-->>ProfilePage: success
ProfilePage->>ProfileComponent: set didFollowed = true (bound)
ProfileComponent-->>ProfilePage: visual animation (btnScale) / display Tick
ProfilePage->>ProfilePage: wait 1s, set didFollowed = false
ProfilePage->>ProfilePage: fetchProfile() to refresh state
ProfilePage->>ProfileComponent: update props (isFollowing=false or updated)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 I hopped in with a tiny cheer,
No more "User" whispering here.
Names now spring and buttons prance,
A follow click, a joyful dance. ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3
❌ Failed checks (2 warnings, 1 inconclusive)
Check nameStatusExplanationResolution
Out of Scope Changes check⚠️ WarningThe PR includes changes to the Profile.svelte component and follow functionality that appear unrelated to the Dreamsync welcome message fix described in the objectives.Review whether changes to pictique Profile component's didFollowed prop and follow functionality are intentional or should be excluded from this PR.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check❓ InconclusiveThe title 'Fix/dreamsync welcome' is vague and uses generic phrasing that doesn't clearly convey the specific change of displaying actual user names instead of placeholders.Consider revising to something more specific like 'Show actual user name in Dreamsync welcome message' or 'Fix hardcoded User placeholder in welcome message'.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description check✅ PassedThe pull request description is mostly complete, following the template with Issue Number, Type of change, How tested, and Change checklist all properly filled out.
Linked Issues check✅ PassedThe pull request successfully addresses issue #629 by replacing the hardcoded 'User' placeholder with actual user name, email fallback, and proper type definition in the schema.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.



📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f0a0af and b54c566.

📒 Files selected for processing (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
🚧 Files skipped from review as they are similar to previous changes (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: lint

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/lib/fragments/Profile/Profile.svelte`:
- Around line 30-37: wrappedFollow currently sets requestSent unconditionally
after await handleFollow(), causing failures to be treated as success; modify
handleFollow to return a boolean success flag (or rethrow on failure) and then
update wrappedFollow to capture that return value and only set requestSent =
true when success === true; ensure btnScale.target is restored to 1 in a finally
block so the button animation resets regardless of outcome.
🧹 Nitpick comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

57-83: Check button variant hierarchy for Follow vs Message.

In Pictique, variant="primary" is visually secondary while variant="secondary" reads as primary. If “Follow” should be the primary CTA, consider swapping variants for the follow and message buttons.

Based on learnings, the Button variant mapping in this codebase is intentionally inverted for visual hierarchy.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6dc3c7 and c2faa2d.

📒 Files selected for processing (4)
  • platforms/dreamSync/client/src/pages/wishlist-editor.tsx
  • platforms/dreamSync/shared/schema.ts
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/lib/fragments/Profile/Profile.svelte

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/routes/`(auth)/auth/+page.svelte:
- Around line 150-152: The onDestroy cleanup is currently registered inside the
onMount block and can be skipped when auto-login returns early; move the
onDestroy(...) call so it is declared alongside (and before) onMount(...) to
ensure it always runs; specifically, ensure the onDestroy handler clears
timerInterval (if set) and removes the window resize listener that references
checkMobile (the same listener added earlier) so the resize listener and
interval are always cleaned up even when auto-login short-circuits.
♻️ Duplicate comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

29-35: Reset button scale even if follow fails.
If handleFollow throws, the scale never resets. Wrap it in try/finally to guarantee the UI returns to normal.

🐛 Suggested fix
 async function wrappedFollow() {
btnScale.target = 0.95;
-	await handleFollow();-	btnScale.target = 1;+	try {+ await handleFollow();+	} finally {+ btnScale.target = 1;+	}
}
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c2faa2d and 900ba62.

📒 Files selected for processing (3)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build
🔇 Additional comments (9)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (2)

4-25: Follow-state props wiring looks good.
Props/defaults for isFollowing and didFollowed plus the message handler align cleanly with the new UI state surface.


54-80: Follow button state rendering is clear.
The disabled logic and Follow / Following / Followed visuals read well and should feel responsive.

platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte (3)

30-31: Local follow state tracking looks good.
Clear separation of isFollowing and didFollowed makes the UI state readable.


53-66: Follow request flow is solid.
Setting isFollowing before the request and resetting in finally keeps UI state consistent.


105-108: Bindings correctly wire follow state to the Profile component.
Two‑way bindings match the new child props and should keep UI in sync.

platforms/pictique/src/routes/(auth)/auth/+page.svelte (4)

19-20: State additions for countdown are clear.

The new state and interval handle read well and are easy to follow.


74-83: Timer loop is straightforward and self-terminating.

Interval decrement + reload-on-expiry is easy to reason about.


109-110: Starting the timer after QR data is fetched is appropriate.

Keeps the expiry aligned with the QR/session lifetime.


226-231: Dynamic countdown messaging reads well.

Conditional styling for the last 10 seconds is a nice touch.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/routes/(auth)/auth/+page.svelte
@coodos
coodos merged commit a6c5925 into mainJan 16, 2026
4 checks passed
@coodos
coodos deleted the fix/dreamsync-welcome branch January 16, 2026 12:54
Sign up for freeto 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.

[Bug] Dreamsync welcomes users

2 participants

@grv-saini-20@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fix/dreamsync welcome - #676

Merged
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome
Jan 16, 2026
Merged

Fix/dreamsync welcome#676
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome

Conversation

@grv-saini-20

@grv-saini-20grv-saini-20 commented Jan 16, 2026

Copy link
Copy Markdown
Collaborator

Description of change

Fixed the dreamsync welcome with user name.
image

Issue Number

closes#629

Type of change

  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)

How the change has been tested

Manual

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features

    • Profile follow UI improved: clearer loading state and a distinct "Following" confirmation.
    • Follow state tracking refined to provide smoother animations and consistent feedback.
  • Bug Fixes / Improvements

    • Welcome name display updated to prefer a consolidated name field with email fallback.
  • Chores

    • Simplified follow interaction logic for more reliable UX and faster UI resets.

✏️ Tip: You can customize this high-level summary in your review settings.

@grv-saini-20grv-saini-20 self-assigned this Jan 16, 2026
@coderabbitai

coderabbitaiBot commented Jan 16, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Updated user display to use user?.name (with fallbacks) and added name?: string to UserWithProfile. Enhanced profile follow UI by adding isFollowing and didFollowed state, wiring them between page and Profile component, and simplifying follow request logic/animation.

Changes

Cohort / File(s)Summary
User name & schema
platforms/dreamSync/client/src/pages/wishlist-editor.tsx, platforms/dreamSync/shared/schema.ts
Replace user?.firstName with user?.name (fallback to email or 'User'); add optional name?: string to UserWithProfile type.
Profile follow UI & state
platforms/pictique/src/lib/fragments/Profile/Profile.svelte, platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
Add exported didFollowed prop and isFollowing/didFollowed bindings; remove requestSent flow; simplify follow handler to set isFollowing, call follow API, set didFollowed, trigger brief animation/1s delay then refresh profile, and reset flags. UI shows final state using didFollowed.

Sequence Diagram(s)

sequenceDiagram
participant User
participant ProfilePage as Profile Page (Svelte)
participant ProfileComponent as Profile.svelte
participant API as /api/users/:id/follow
participant Backend as Server/DB
User->>ProfileComponent: Click "Follow" button
ProfileComponent->>ProfilePage: emit follow action (bound)
ProfilePage->>ProfilePage: set isFollowing = true
ProfilePage->>API: POST /api/users/{id}/follow
API->>Backend: persist follow
Backend-->>API: 200 OK
API-->>ProfilePage: success
ProfilePage->>ProfileComponent: set didFollowed = true (bound)
ProfileComponent-->>ProfilePage: visual animation (btnScale) / display Tick
ProfilePage->>ProfilePage: wait 1s, set didFollowed = false
ProfilePage->>ProfilePage: fetchProfile() to refresh state
ProfilePage->>ProfileComponent: update props (isFollowing=false or updated)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 I hopped in with a tiny cheer,
No more "User" whispering here.
Names now spring and buttons prance,
A follow click, a joyful dance. ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3
❌ Failed checks (2 warnings, 1 inconclusive)
Check nameStatusExplanationResolution
Out of Scope Changes check⚠️ WarningThe PR includes changes to the Profile.svelte component and follow functionality that appear unrelated to the Dreamsync welcome message fix described in the objectives.Review whether changes to pictique Profile component's didFollowed prop and follow functionality are intentional or should be excluded from this PR.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check❓ InconclusiveThe title 'Fix/dreamsync welcome' is vague and uses generic phrasing that doesn't clearly convey the specific change of displaying actual user names instead of placeholders.Consider revising to something more specific like 'Show actual user name in Dreamsync welcome message' or 'Fix hardcoded User placeholder in welcome message'.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description check✅ PassedThe pull request description is mostly complete, following the template with Issue Number, Type of change, How tested, and Change checklist all properly filled out.
Linked Issues check✅ PassedThe pull request successfully addresses issue #629 by replacing the hardcoded 'User' placeholder with actual user name, email fallback, and proper type definition in the schema.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.



📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f0a0af and b54c566.

📒 Files selected for processing (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
🚧 Files skipped from review as they are similar to previous changes (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: lint

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/lib/fragments/Profile/Profile.svelte`:
- Around line 30-37: wrappedFollow currently sets requestSent unconditionally
after await handleFollow(), causing failures to be treated as success; modify
handleFollow to return a boolean success flag (or rethrow on failure) and then
update wrappedFollow to capture that return value and only set requestSent =
true when success === true; ensure btnScale.target is restored to 1 in a finally
block so the button animation resets regardless of outcome.
🧹 Nitpick comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

57-83: Check button variant hierarchy for Follow vs Message.

In Pictique, variant="primary" is visually secondary while variant="secondary" reads as primary. If “Follow” should be the primary CTA, consider swapping variants for the follow and message buttons.

Based on learnings, the Button variant mapping in this codebase is intentionally inverted for visual hierarchy.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6dc3c7 and c2faa2d.

📒 Files selected for processing (4)
  • platforms/dreamSync/client/src/pages/wishlist-editor.tsx
  • platforms/dreamSync/shared/schema.ts
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/lib/fragments/Profile/Profile.svelte

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/routes/`(auth)/auth/+page.svelte:
- Around line 150-152: The onDestroy cleanup is currently registered inside the
onMount block and can be skipped when auto-login returns early; move the
onDestroy(...) call so it is declared alongside (and before) onMount(...) to
ensure it always runs; specifically, ensure the onDestroy handler clears
timerInterval (if set) and removes the window resize listener that references
checkMobile (the same listener added earlier) so the resize listener and
interval are always cleaned up even when auto-login short-circuits.
♻️ Duplicate comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

29-35: Reset button scale even if follow fails.
If handleFollow throws, the scale never resets. Wrap it in try/finally to guarantee the UI returns to normal.

🐛 Suggested fix
 async function wrappedFollow() {
btnScale.target = 0.95;
-	await handleFollow();-	btnScale.target = 1;+	try {+ await handleFollow();+	} finally {+ btnScale.target = 1;+	}
}
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c2faa2d and 900ba62.

📒 Files selected for processing (3)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build
🔇 Additional comments (9)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (2)

4-25: Follow-state props wiring looks good.
Props/defaults for isFollowing and didFollowed plus the message handler align cleanly with the new UI state surface.


54-80: Follow button state rendering is clear.
The disabled logic and Follow / Following / Followed visuals read well and should feel responsive.

platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte (3)

30-31: Local follow state tracking looks good.
Clear separation of isFollowing and didFollowed makes the UI state readable.


53-66: Follow request flow is solid.
Setting isFollowing before the request and resetting in finally keeps UI state consistent.


105-108: Bindings correctly wire follow state to the Profile component.
Two‑way bindings match the new child props and should keep UI in sync.

platforms/pictique/src/routes/(auth)/auth/+page.svelte (4)

19-20: State additions for countdown are clear.

The new state and interval handle read well and are easy to follow.


74-83: Timer loop is straightforward and self-terminating.

Interval decrement + reload-on-expiry is easy to reason about.


109-110: Starting the timer after QR data is fetched is appropriate.

Keeps the expiry aligned with the QR/session lifetime.


226-231: Dynamic countdown messaging reads well.

Conditional styling for the last 10 seconds is a nice touch.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/routes/(auth)/auth/+page.svelte
@coodos
coodos merged commit a6c5925 into mainJan 16, 2026
4 checks passed
@coodos
coodos deleted the fix/dreamsync-welcome branch January 16, 2026 12:54
Sign up for freeto 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.

[Bug] Dreamsync welcomes users

2 participants

@grv-saini-20@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix/dreamsync welcome - #676

Merged
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome
Jan 16, 2026
Merged

Fix/dreamsync welcome#676
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome

Conversation

@grv-saini-20

@grv-saini-20grv-saini-20 commented Jan 16, 2026

Copy link
Copy Markdown
Collaborator

Description of change

Fixed the dreamsync welcome with user name.
image

Issue Number

closes#629

Type of change

  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)

How the change has been tested

Manual

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features

    • Profile follow UI improved: clearer loading state and a distinct "Following" confirmation.
    • Follow state tracking refined to provide smoother animations and consistent feedback.
  • Bug Fixes / Improvements

    • Welcome name display updated to prefer a consolidated name field with email fallback.
  • Chores

    • Simplified follow interaction logic for more reliable UX and faster UI resets.

✏️ Tip: You can customize this high-level summary in your review settings.

@grv-saini-20grv-saini-20 self-assigned this Jan 16, 2026
@coderabbitai

coderabbitaiBot commented Jan 16, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Updated user display to use user?.name (with fallbacks) and added name?: string to UserWithProfile. Enhanced profile follow UI by adding isFollowing and didFollowed state, wiring them between page and Profile component, and simplifying follow request logic/animation.

Changes

Cohort / File(s)Summary
User name & schema
platforms/dreamSync/client/src/pages/wishlist-editor.tsx, platforms/dreamSync/shared/schema.ts
Replace user?.firstName with user?.name (fallback to email or 'User'); add optional name?: string to UserWithProfile type.
Profile follow UI & state
platforms/pictique/src/lib/fragments/Profile/Profile.svelte, platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
Add exported didFollowed prop and isFollowing/didFollowed bindings; remove requestSent flow; simplify follow handler to set isFollowing, call follow API, set didFollowed, trigger brief animation/1s delay then refresh profile, and reset flags. UI shows final state using didFollowed.

Sequence Diagram(s)

sequenceDiagram
participant User
participant ProfilePage as Profile Page (Svelte)
participant ProfileComponent as Profile.svelte
participant API as /api/users/:id/follow
participant Backend as Server/DB
User->>ProfileComponent: Click "Follow" button
ProfileComponent->>ProfilePage: emit follow action (bound)
ProfilePage->>ProfilePage: set isFollowing = true
ProfilePage->>API: POST /api/users/{id}/follow
API->>Backend: persist follow
Backend-->>API: 200 OK
API-->>ProfilePage: success
ProfilePage->>ProfileComponent: set didFollowed = true (bound)
ProfileComponent-->>ProfilePage: visual animation (btnScale) / display Tick
ProfilePage->>ProfilePage: wait 1s, set didFollowed = false
ProfilePage->>ProfilePage: fetchProfile() to refresh state
ProfilePage->>ProfileComponent: update props (isFollowing=false or updated)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 I hopped in with a tiny cheer,
No more "User" whispering here.
Names now spring and buttons prance,
A follow click, a joyful dance. ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3
❌ Failed checks (2 warnings, 1 inconclusive)
Check nameStatusExplanationResolution
Out of Scope Changes check⚠️ WarningThe PR includes changes to the Profile.svelte component and follow functionality that appear unrelated to the Dreamsync welcome message fix described in the objectives.Review whether changes to pictique Profile component's didFollowed prop and follow functionality are intentional or should be excluded from this PR.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check❓ InconclusiveThe title 'Fix/dreamsync welcome' is vague and uses generic phrasing that doesn't clearly convey the specific change of displaying actual user names instead of placeholders.Consider revising to something more specific like 'Show actual user name in Dreamsync welcome message' or 'Fix hardcoded User placeholder in welcome message'.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description check✅ PassedThe pull request description is mostly complete, following the template with Issue Number, Type of change, How tested, and Change checklist all properly filled out.
Linked Issues check✅ PassedThe pull request successfully addresses issue #629 by replacing the hardcoded 'User' placeholder with actual user name, email fallback, and proper type definition in the schema.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.



📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f0a0af and b54c566.

📒 Files selected for processing (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
🚧 Files skipped from review as they are similar to previous changes (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: lint

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/lib/fragments/Profile/Profile.svelte`:
- Around line 30-37: wrappedFollow currently sets requestSent unconditionally
after await handleFollow(), causing failures to be treated as success; modify
handleFollow to return a boolean success flag (or rethrow on failure) and then
update wrappedFollow to capture that return value and only set requestSent =
true when success === true; ensure btnScale.target is restored to 1 in a finally
block so the button animation resets regardless of outcome.
🧹 Nitpick comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

57-83: Check button variant hierarchy for Follow vs Message.

In Pictique, variant="primary" is visually secondary while variant="secondary" reads as primary. If “Follow” should be the primary CTA, consider swapping variants for the follow and message buttons.

Based on learnings, the Button variant mapping in this codebase is intentionally inverted for visual hierarchy.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6dc3c7 and c2faa2d.

📒 Files selected for processing (4)
  • platforms/dreamSync/client/src/pages/wishlist-editor.tsx
  • platforms/dreamSync/shared/schema.ts
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/lib/fragments/Profile/Profile.svelte

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/routes/`(auth)/auth/+page.svelte:
- Around line 150-152: The onDestroy cleanup is currently registered inside the
onMount block and can be skipped when auto-login returns early; move the
onDestroy(...) call so it is declared alongside (and before) onMount(...) to
ensure it always runs; specifically, ensure the onDestroy handler clears
timerInterval (if set) and removes the window resize listener that references
checkMobile (the same listener added earlier) so the resize listener and
interval are always cleaned up even when auto-login short-circuits.
♻️ Duplicate comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

29-35: Reset button scale even if follow fails.
If handleFollow throws, the scale never resets. Wrap it in try/finally to guarantee the UI returns to normal.

🐛 Suggested fix
 async function wrappedFollow() {
btnScale.target = 0.95;
-	await handleFollow();-	btnScale.target = 1;+	try {+ await handleFollow();+	} finally {+ btnScale.target = 1;+	}
}
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c2faa2d and 900ba62.

📒 Files selected for processing (3)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build
🔇 Additional comments (9)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (2)

4-25: Follow-state props wiring looks good.
Props/defaults for isFollowing and didFollowed plus the message handler align cleanly with the new UI state surface.


54-80: Follow button state rendering is clear.
The disabled logic and Follow / Following / Followed visuals read well and should feel responsive.

platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte (3)

30-31: Local follow state tracking looks good.
Clear separation of isFollowing and didFollowed makes the UI state readable.


53-66: Follow request flow is solid.
Setting isFollowing before the request and resetting in finally keeps UI state consistent.


105-108: Bindings correctly wire follow state to the Profile component.
Two‑way bindings match the new child props and should keep UI in sync.

platforms/pictique/src/routes/(auth)/auth/+page.svelte (4)

19-20: State additions for countdown are clear.

The new state and interval handle read well and are easy to follow.


74-83: Timer loop is straightforward and self-terminating.

Interval decrement + reload-on-expiry is easy to reason about.


109-110: Starting the timer after QR data is fetched is appropriate.

Keeps the expiry aligned with the QR/session lifetime.


226-231: Dynamic countdown messaging reads well.

Conditional styling for the last 10 seconds is a nice touch.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/routes/(auth)/auth/+page.svelte
@coodos
coodos merged commit a6c5925 into mainJan 16, 2026
4 checks passed
@coodos
coodos deleted the fix/dreamsync-welcome branch January 16, 2026 12:54
Sign up for freeto 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.

[Bug] Dreamsync welcomes users

2 participants

@grv-saini-20@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix/dreamsync welcome - #676

Merged
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome
Jan 16, 2026
Merged

Fix/dreamsync welcome#676
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome

Conversation

@grv-saini-20

@grv-saini-20grv-saini-20 commented Jan 16, 2026

Copy link
Copy Markdown
Collaborator

Description of change

Fixed the dreamsync welcome with user name.
image

Issue Number

closes#629

Type of change

  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)

How the change has been tested

Manual

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features

    • Profile follow UI improved: clearer loading state and a distinct "Following" confirmation.
    • Follow state tracking refined to provide smoother animations and consistent feedback.
  • Bug Fixes / Improvements

    • Welcome name display updated to prefer a consolidated name field with email fallback.
  • Chores

    • Simplified follow interaction logic for more reliable UX and faster UI resets.

✏️ Tip: You can customize this high-level summary in your review settings.

@grv-saini-20grv-saini-20 self-assigned this Jan 16, 2026
@coderabbitai

coderabbitaiBot commented Jan 16, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Updated user display to use user?.name (with fallbacks) and added name?: string to UserWithProfile. Enhanced profile follow UI by adding isFollowing and didFollowed state, wiring them between page and Profile component, and simplifying follow request logic/animation.

Changes

Cohort / File(s)Summary
User name & schema
platforms/dreamSync/client/src/pages/wishlist-editor.tsx, platforms/dreamSync/shared/schema.ts
Replace user?.firstName with user?.name (fallback to email or 'User'); add optional name?: string to UserWithProfile type.
Profile follow UI & state
platforms/pictique/src/lib/fragments/Profile/Profile.svelte, platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
Add exported didFollowed prop and isFollowing/didFollowed bindings; remove requestSent flow; simplify follow handler to set isFollowing, call follow API, set didFollowed, trigger brief animation/1s delay then refresh profile, and reset flags. UI shows final state using didFollowed.

Sequence Diagram(s)

sequenceDiagram
participant User
participant ProfilePage as Profile Page (Svelte)
participant ProfileComponent as Profile.svelte
participant API as /api/users/:id/follow
participant Backend as Server/DB
User->>ProfileComponent: Click "Follow" button
ProfileComponent->>ProfilePage: emit follow action (bound)
ProfilePage->>ProfilePage: set isFollowing = true
ProfilePage->>API: POST /api/users/{id}/follow
API->>Backend: persist follow
Backend-->>API: 200 OK
API-->>ProfilePage: success
ProfilePage->>ProfileComponent: set didFollowed = true (bound)
ProfileComponent-->>ProfilePage: visual animation (btnScale) / display Tick
ProfilePage->>ProfilePage: wait 1s, set didFollowed = false
ProfilePage->>ProfilePage: fetchProfile() to refresh state
ProfilePage->>ProfileComponent: update props (isFollowing=false or updated)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 I hopped in with a tiny cheer,
No more "User" whispering here.
Names now spring and buttons prance,
A follow click, a joyful dance. ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3
❌ Failed checks (2 warnings, 1 inconclusive)
Check nameStatusExplanationResolution
Out of Scope Changes check⚠️ WarningThe PR includes changes to the Profile.svelte component and follow functionality that appear unrelated to the Dreamsync welcome message fix described in the objectives.Review whether changes to pictique Profile component's didFollowed prop and follow functionality are intentional or should be excluded from this PR.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check❓ InconclusiveThe title 'Fix/dreamsync welcome' is vague and uses generic phrasing that doesn't clearly convey the specific change of displaying actual user names instead of placeholders.Consider revising to something more specific like 'Show actual user name in Dreamsync welcome message' or 'Fix hardcoded User placeholder in welcome message'.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description check✅ PassedThe pull request description is mostly complete, following the template with Issue Number, Type of change, How tested, and Change checklist all properly filled out.
Linked Issues check✅ PassedThe pull request successfully addresses issue #629 by replacing the hardcoded 'User' placeholder with actual user name, email fallback, and proper type definition in the schema.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.



📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f0a0af and b54c566.

📒 Files selected for processing (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
🚧 Files skipped from review as they are similar to previous changes (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: lint

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/lib/fragments/Profile/Profile.svelte`:
- Around line 30-37: wrappedFollow currently sets requestSent unconditionally
after await handleFollow(), causing failures to be treated as success; modify
handleFollow to return a boolean success flag (or rethrow on failure) and then
update wrappedFollow to capture that return value and only set requestSent =
true when success === true; ensure btnScale.target is restored to 1 in a finally
block so the button animation resets regardless of outcome.
🧹 Nitpick comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

57-83: Check button variant hierarchy for Follow vs Message.

In Pictique, variant="primary" is visually secondary while variant="secondary" reads as primary. If “Follow” should be the primary CTA, consider swapping variants for the follow and message buttons.

Based on learnings, the Button variant mapping in this codebase is intentionally inverted for visual hierarchy.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6dc3c7 and c2faa2d.

📒 Files selected for processing (4)
  • platforms/dreamSync/client/src/pages/wishlist-editor.tsx
  • platforms/dreamSync/shared/schema.ts
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/lib/fragments/Profile/Profile.svelte

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/routes/`(auth)/auth/+page.svelte:
- Around line 150-152: The onDestroy cleanup is currently registered inside the
onMount block and can be skipped when auto-login returns early; move the
onDestroy(...) call so it is declared alongside (and before) onMount(...) to
ensure it always runs; specifically, ensure the onDestroy handler clears
timerInterval (if set) and removes the window resize listener that references
checkMobile (the same listener added earlier) so the resize listener and
interval are always cleaned up even when auto-login short-circuits.
♻️ Duplicate comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

29-35: Reset button scale even if follow fails.
If handleFollow throws, the scale never resets. Wrap it in try/finally to guarantee the UI returns to normal.

🐛 Suggested fix
 async function wrappedFollow() {
btnScale.target = 0.95;
-	await handleFollow();-	btnScale.target = 1;+	try {+ await handleFollow();+	} finally {+ btnScale.target = 1;+	}
}
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c2faa2d and 900ba62.

📒 Files selected for processing (3)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build
🔇 Additional comments (9)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (2)

4-25: Follow-state props wiring looks good.
Props/defaults for isFollowing and didFollowed plus the message handler align cleanly with the new UI state surface.


54-80: Follow button state rendering is clear.
The disabled logic and Follow / Following / Followed visuals read well and should feel responsive.

platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte (3)

30-31: Local follow state tracking looks good.
Clear separation of isFollowing and didFollowed makes the UI state readable.


53-66: Follow request flow is solid.
Setting isFollowing before the request and resetting in finally keeps UI state consistent.


105-108: Bindings correctly wire follow state to the Profile component.
Two‑way bindings match the new child props and should keep UI in sync.

platforms/pictique/src/routes/(auth)/auth/+page.svelte (4)

19-20: State additions for countdown are clear.

The new state and interval handle read well and are easy to follow.


74-83: Timer loop is straightforward and self-terminating.

Interval decrement + reload-on-expiry is easy to reason about.


109-110: Starting the timer after QR data is fetched is appropriate.

Keeps the expiry aligned with the QR/session lifetime.


226-231: Dynamic countdown messaging reads well.

Conditional styling for the last 10 seconds is a nice touch.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/routes/(auth)/auth/+page.svelte
@coodos
coodos merged commit a6c5925 into mainJan 16, 2026
4 checks passed
@coodos
coodos deleted the fix/dreamsync-welcome branch January 16, 2026 12:54
Sign up for freeto 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.

[Bug] Dreamsync welcomes users

2 participants

@grv-saini-20@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fix/dreamsync welcome - #676

Merged
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome
Jan 16, 2026
Merged

Fix/dreamsync welcome#676
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome

Conversation

@grv-saini-20

@grv-saini-20grv-saini-20 commented Jan 16, 2026

Copy link
Copy Markdown
Collaborator

Description of change

Fixed the dreamsync welcome with user name.
image

Issue Number

closes#629

Type of change

  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)

How the change has been tested

Manual

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features

    • Profile follow UI improved: clearer loading state and a distinct "Following" confirmation.
    • Follow state tracking refined to provide smoother animations and consistent feedback.
  • Bug Fixes / Improvements

    • Welcome name display updated to prefer a consolidated name field with email fallback.
  • Chores

    • Simplified follow interaction logic for more reliable UX and faster UI resets.

✏️ Tip: You can customize this high-level summary in your review settings.

@grv-saini-20grv-saini-20 self-assigned this Jan 16, 2026
@coderabbitai

coderabbitaiBot commented Jan 16, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Updated user display to use user?.name (with fallbacks) and added name?: string to UserWithProfile. Enhanced profile follow UI by adding isFollowing and didFollowed state, wiring them between page and Profile component, and simplifying follow request logic/animation.

Changes

Cohort / File(s)Summary
User name & schema
platforms/dreamSync/client/src/pages/wishlist-editor.tsx, platforms/dreamSync/shared/schema.ts
Replace user?.firstName with user?.name (fallback to email or 'User'); add optional name?: string to UserWithProfile type.
Profile follow UI & state
platforms/pictique/src/lib/fragments/Profile/Profile.svelte, platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
Add exported didFollowed prop and isFollowing/didFollowed bindings; remove requestSent flow; simplify follow handler to set isFollowing, call follow API, set didFollowed, trigger brief animation/1s delay then refresh profile, and reset flags. UI shows final state using didFollowed.

Sequence Diagram(s)

sequenceDiagram
participant User
participant ProfilePage as Profile Page (Svelte)
participant ProfileComponent as Profile.svelte
participant API as /api/users/:id/follow
participant Backend as Server/DB
User->>ProfileComponent: Click "Follow" button
ProfileComponent->>ProfilePage: emit follow action (bound)
ProfilePage->>ProfilePage: set isFollowing = true
ProfilePage->>API: POST /api/users/{id}/follow
API->>Backend: persist follow
Backend-->>API: 200 OK
API-->>ProfilePage: success
ProfilePage->>ProfileComponent: set didFollowed = true (bound)
ProfileComponent-->>ProfilePage: visual animation (btnScale) / display Tick
ProfilePage->>ProfilePage: wait 1s, set didFollowed = false
ProfilePage->>ProfilePage: fetchProfile() to refresh state
ProfilePage->>ProfileComponent: update props (isFollowing=false or updated)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 I hopped in with a tiny cheer,
No more "User" whispering here.
Names now spring and buttons prance,
A follow click, a joyful dance. ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3
❌ Failed checks (2 warnings, 1 inconclusive)
Check nameStatusExplanationResolution
Out of Scope Changes check⚠️ WarningThe PR includes changes to the Profile.svelte component and follow functionality that appear unrelated to the Dreamsync welcome message fix described in the objectives.Review whether changes to pictique Profile component's didFollowed prop and follow functionality are intentional or should be excluded from this PR.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check❓ InconclusiveThe title 'Fix/dreamsync welcome' is vague and uses generic phrasing that doesn't clearly convey the specific change of displaying actual user names instead of placeholders.Consider revising to something more specific like 'Show actual user name in Dreamsync welcome message' or 'Fix hardcoded User placeholder in welcome message'.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description check✅ PassedThe pull request description is mostly complete, following the template with Issue Number, Type of change, How tested, and Change checklist all properly filled out.
Linked Issues check✅ PassedThe pull request successfully addresses issue #629 by replacing the hardcoded 'User' placeholder with actual user name, email fallback, and proper type definition in the schema.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.



📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f0a0af and b54c566.

📒 Files selected for processing (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
🚧 Files skipped from review as they are similar to previous changes (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: lint

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/lib/fragments/Profile/Profile.svelte`:
- Around line 30-37: wrappedFollow currently sets requestSent unconditionally
after await handleFollow(), causing failures to be treated as success; modify
handleFollow to return a boolean success flag (or rethrow on failure) and then
update wrappedFollow to capture that return value and only set requestSent =
true when success === true; ensure btnScale.target is restored to 1 in a finally
block so the button animation resets regardless of outcome.
🧹 Nitpick comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

57-83: Check button variant hierarchy for Follow vs Message.

In Pictique, variant="primary" is visually secondary while variant="secondary" reads as primary. If “Follow” should be the primary CTA, consider swapping variants for the follow and message buttons.

Based on learnings, the Button variant mapping in this codebase is intentionally inverted for visual hierarchy.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6dc3c7 and c2faa2d.

📒 Files selected for processing (4)
  • platforms/dreamSync/client/src/pages/wishlist-editor.tsx
  • platforms/dreamSync/shared/schema.ts
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/lib/fragments/Profile/Profile.svelte

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/routes/`(auth)/auth/+page.svelte:
- Around line 150-152: The onDestroy cleanup is currently registered inside the
onMount block and can be skipped when auto-login returns early; move the
onDestroy(...) call so it is declared alongside (and before) onMount(...) to
ensure it always runs; specifically, ensure the onDestroy handler clears
timerInterval (if set) and removes the window resize listener that references
checkMobile (the same listener added earlier) so the resize listener and
interval are always cleaned up even when auto-login short-circuits.
♻️ Duplicate comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

29-35: Reset button scale even if follow fails.
If handleFollow throws, the scale never resets. Wrap it in try/finally to guarantee the UI returns to normal.

🐛 Suggested fix
 async function wrappedFollow() {
btnScale.target = 0.95;
-	await handleFollow();-	btnScale.target = 1;+	try {+ await handleFollow();+	} finally {+ btnScale.target = 1;+	}
}
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c2faa2d and 900ba62.

📒 Files selected for processing (3)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build
🔇 Additional comments (9)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (2)

4-25: Follow-state props wiring looks good.
Props/defaults for isFollowing and didFollowed plus the message handler align cleanly with the new UI state surface.


54-80: Follow button state rendering is clear.
The disabled logic and Follow / Following / Followed visuals read well and should feel responsive.

platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte (3)

30-31: Local follow state tracking looks good.
Clear separation of isFollowing and didFollowed makes the UI state readable.


53-66: Follow request flow is solid.
Setting isFollowing before the request and resetting in finally keeps UI state consistent.


105-108: Bindings correctly wire follow state to the Profile component.
Two‑way bindings match the new child props and should keep UI in sync.

platforms/pictique/src/routes/(auth)/auth/+page.svelte (4)

19-20: State additions for countdown are clear.

The new state and interval handle read well and are easy to follow.


74-83: Timer loop is straightforward and self-terminating.

Interval decrement + reload-on-expiry is easy to reason about.


109-110: Starting the timer after QR data is fetched is appropriate.

Keeps the expiry aligned with the QR/session lifetime.


226-231: Dynamic countdown messaging reads well.

Conditional styling for the last 10 seconds is a nice touch.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/routes/(auth)/auth/+page.svelte
@coodos
coodos merged commit a6c5925 into mainJan 16, 2026
4 checks passed
@coodos
coodos deleted the fix/dreamsync-welcome branch January 16, 2026 12:54
Sign up for freeto 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.

[Bug] Dreamsync welcomes users

2 participants

@grv-saini-20@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix/dreamsync welcome - #676

Merged
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome
Jan 16, 2026
Merged

Fix/dreamsync welcome#676
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome

Conversation

@grv-saini-20

@grv-saini-20grv-saini-20 commented Jan 16, 2026

Copy link
Copy Markdown
Collaborator

Description of change

Fixed the dreamsync welcome with user name.
image

Issue Number

closes#629

Type of change

  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)

How the change has been tested

Manual

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features

    • Profile follow UI improved: clearer loading state and a distinct "Following" confirmation.
    • Follow state tracking refined to provide smoother animations and consistent feedback.
  • Bug Fixes / Improvements

    • Welcome name display updated to prefer a consolidated name field with email fallback.
  • Chores

    • Simplified follow interaction logic for more reliable UX and faster UI resets.

✏️ Tip: You can customize this high-level summary in your review settings.

@grv-saini-20grv-saini-20 self-assigned this Jan 16, 2026
@coderabbitai

coderabbitaiBot commented Jan 16, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Updated user display to use user?.name (with fallbacks) and added name?: string to UserWithProfile. Enhanced profile follow UI by adding isFollowing and didFollowed state, wiring them between page and Profile component, and simplifying follow request logic/animation.

Changes

Cohort / File(s)Summary
User name & schema
platforms/dreamSync/client/src/pages/wishlist-editor.tsx, platforms/dreamSync/shared/schema.ts
Replace user?.firstName with user?.name (fallback to email or 'User'); add optional name?: string to UserWithProfile type.
Profile follow UI & state
platforms/pictique/src/lib/fragments/Profile/Profile.svelte, platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
Add exported didFollowed prop and isFollowing/didFollowed bindings; remove requestSent flow; simplify follow handler to set isFollowing, call follow API, set didFollowed, trigger brief animation/1s delay then refresh profile, and reset flags. UI shows final state using didFollowed.

Sequence Diagram(s)

sequenceDiagram
participant User
participant ProfilePage as Profile Page (Svelte)
participant ProfileComponent as Profile.svelte
participant API as /api/users/:id/follow
participant Backend as Server/DB
User->>ProfileComponent: Click "Follow" button
ProfileComponent->>ProfilePage: emit follow action (bound)
ProfilePage->>ProfilePage: set isFollowing = true
ProfilePage->>API: POST /api/users/{id}/follow
API->>Backend: persist follow
Backend-->>API: 200 OK
API-->>ProfilePage: success
ProfilePage->>ProfileComponent: set didFollowed = true (bound)
ProfileComponent-->>ProfilePage: visual animation (btnScale) / display Tick
ProfilePage->>ProfilePage: wait 1s, set didFollowed = false
ProfilePage->>ProfilePage: fetchProfile() to refresh state
ProfilePage->>ProfileComponent: update props (isFollowing=false or updated)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 I hopped in with a tiny cheer,
No more "User" whispering here.
Names now spring and buttons prance,
A follow click, a joyful dance. ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3
❌ Failed checks (2 warnings, 1 inconclusive)
Check nameStatusExplanationResolution
Out of Scope Changes check⚠️ WarningThe PR includes changes to the Profile.svelte component and follow functionality that appear unrelated to the Dreamsync welcome message fix described in the objectives.Review whether changes to pictique Profile component's didFollowed prop and follow functionality are intentional or should be excluded from this PR.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check❓ InconclusiveThe title 'Fix/dreamsync welcome' is vague and uses generic phrasing that doesn't clearly convey the specific change of displaying actual user names instead of placeholders.Consider revising to something more specific like 'Show actual user name in Dreamsync welcome message' or 'Fix hardcoded User placeholder in welcome message'.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description check✅ PassedThe pull request description is mostly complete, following the template with Issue Number, Type of change, How tested, and Change checklist all properly filled out.
Linked Issues check✅ PassedThe pull request successfully addresses issue #629 by replacing the hardcoded 'User' placeholder with actual user name, email fallback, and proper type definition in the schema.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.



📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f0a0af and b54c566.

📒 Files selected for processing (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
🚧 Files skipped from review as they are similar to previous changes (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: lint

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/lib/fragments/Profile/Profile.svelte`:
- Around line 30-37: wrappedFollow currently sets requestSent unconditionally
after await handleFollow(), causing failures to be treated as success; modify
handleFollow to return a boolean success flag (or rethrow on failure) and then
update wrappedFollow to capture that return value and only set requestSent =
true when success === true; ensure btnScale.target is restored to 1 in a finally
block so the button animation resets regardless of outcome.
🧹 Nitpick comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

57-83: Check button variant hierarchy for Follow vs Message.

In Pictique, variant="primary" is visually secondary while variant="secondary" reads as primary. If “Follow” should be the primary CTA, consider swapping variants for the follow and message buttons.

Based on learnings, the Button variant mapping in this codebase is intentionally inverted for visual hierarchy.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6dc3c7 and c2faa2d.

📒 Files selected for processing (4)
  • platforms/dreamSync/client/src/pages/wishlist-editor.tsx
  • platforms/dreamSync/shared/schema.ts
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/lib/fragments/Profile/Profile.svelte

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/routes/`(auth)/auth/+page.svelte:
- Around line 150-152: The onDestroy cleanup is currently registered inside the
onMount block and can be skipped when auto-login returns early; move the
onDestroy(...) call so it is declared alongside (and before) onMount(...) to
ensure it always runs; specifically, ensure the onDestroy handler clears
timerInterval (if set) and removes the window resize listener that references
checkMobile (the same listener added earlier) so the resize listener and
interval are always cleaned up even when auto-login short-circuits.
♻️ Duplicate comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

29-35: Reset button scale even if follow fails.
If handleFollow throws, the scale never resets. Wrap it in try/finally to guarantee the UI returns to normal.

🐛 Suggested fix
 async function wrappedFollow() {
btnScale.target = 0.95;
-	await handleFollow();-	btnScale.target = 1;+	try {+ await handleFollow();+	} finally {+ btnScale.target = 1;+	}
}
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c2faa2d and 900ba62.

📒 Files selected for processing (3)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build
🔇 Additional comments (9)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (2)

4-25: Follow-state props wiring looks good.
Props/defaults for isFollowing and didFollowed plus the message handler align cleanly with the new UI state surface.


54-80: Follow button state rendering is clear.
The disabled logic and Follow / Following / Followed visuals read well and should feel responsive.

platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte (3)

30-31: Local follow state tracking looks good.
Clear separation of isFollowing and didFollowed makes the UI state readable.


53-66: Follow request flow is solid.
Setting isFollowing before the request and resetting in finally keeps UI state consistent.


105-108: Bindings correctly wire follow state to the Profile component.
Two‑way bindings match the new child props and should keep UI in sync.

platforms/pictique/src/routes/(auth)/auth/+page.svelte (4)

19-20: State additions for countdown are clear.

The new state and interval handle read well and are easy to follow.


74-83: Timer loop is straightforward and self-terminating.

Interval decrement + reload-on-expiry is easy to reason about.


109-110: Starting the timer after QR data is fetched is appropriate.

Keeps the expiry aligned with the QR/session lifetime.


226-231: Dynamic countdown messaging reads well.

Conditional styling for the last 10 seconds is a nice touch.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/routes/(auth)/auth/+page.svelte
@coodos
coodos merged commit a6c5925 into mainJan 16, 2026
4 checks passed
@coodos
coodos deleted the fix/dreamsync-welcome branch January 16, 2026 12:54
Sign up for freeto 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.

[Bug] Dreamsync welcomes users

2 participants

@grv-saini-20@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix/dreamsync welcome - #676

Merged
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome
Jan 16, 2026
Merged

Fix/dreamsync welcome#676
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome

Conversation

@grv-saini-20

@grv-saini-20grv-saini-20 commented Jan 16, 2026

Copy link
Copy Markdown
Collaborator

Description of change

Fixed the dreamsync welcome with user name.
image

Issue Number

closes#629

Type of change

  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)

How the change has been tested

Manual

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features

    • Profile follow UI improved: clearer loading state and a distinct "Following" confirmation.
    • Follow state tracking refined to provide smoother animations and consistent feedback.
  • Bug Fixes / Improvements

    • Welcome name display updated to prefer a consolidated name field with email fallback.
  • Chores

    • Simplified follow interaction logic for more reliable UX and faster UI resets.

✏️ Tip: You can customize this high-level summary in your review settings.

@grv-saini-20grv-saini-20 self-assigned this Jan 16, 2026
@coderabbitai

coderabbitaiBot commented Jan 16, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Updated user display to use user?.name (with fallbacks) and added name?: string to UserWithProfile. Enhanced profile follow UI by adding isFollowing and didFollowed state, wiring them between page and Profile component, and simplifying follow request logic/animation.

Changes

Cohort / File(s)Summary
User name & schema
platforms/dreamSync/client/src/pages/wishlist-editor.tsx, platforms/dreamSync/shared/schema.ts
Replace user?.firstName with user?.name (fallback to email or 'User'); add optional name?: string to UserWithProfile type.
Profile follow UI & state
platforms/pictique/src/lib/fragments/Profile/Profile.svelte, platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
Add exported didFollowed prop and isFollowing/didFollowed bindings; remove requestSent flow; simplify follow handler to set isFollowing, call follow API, set didFollowed, trigger brief animation/1s delay then refresh profile, and reset flags. UI shows final state using didFollowed.

Sequence Diagram(s)

sequenceDiagram
participant User
participant ProfilePage as Profile Page (Svelte)
participant ProfileComponent as Profile.svelte
participant API as /api/users/:id/follow
participant Backend as Server/DB
User->>ProfileComponent: Click "Follow" button
ProfileComponent->>ProfilePage: emit follow action (bound)
ProfilePage->>ProfilePage: set isFollowing = true
ProfilePage->>API: POST /api/users/{id}/follow
API->>Backend: persist follow
Backend-->>API: 200 OK
API-->>ProfilePage: success
ProfilePage->>ProfileComponent: set didFollowed = true (bound)
ProfileComponent-->>ProfilePage: visual animation (btnScale) / display Tick
ProfilePage->>ProfilePage: wait 1s, set didFollowed = false
ProfilePage->>ProfilePage: fetchProfile() to refresh state
ProfilePage->>ProfileComponent: update props (isFollowing=false or updated)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 I hopped in with a tiny cheer,
No more "User" whispering here.
Names now spring and buttons prance,
A follow click, a joyful dance. ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3
❌ Failed checks (2 warnings, 1 inconclusive)
Check nameStatusExplanationResolution
Out of Scope Changes check⚠️ WarningThe PR includes changes to the Profile.svelte component and follow functionality that appear unrelated to the Dreamsync welcome message fix described in the objectives.Review whether changes to pictique Profile component's didFollowed prop and follow functionality are intentional or should be excluded from this PR.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check❓ InconclusiveThe title 'Fix/dreamsync welcome' is vague and uses generic phrasing that doesn't clearly convey the specific change of displaying actual user names instead of placeholders.Consider revising to something more specific like 'Show actual user name in Dreamsync welcome message' or 'Fix hardcoded User placeholder in welcome message'.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description check✅ PassedThe pull request description is mostly complete, following the template with Issue Number, Type of change, How tested, and Change checklist all properly filled out.
Linked Issues check✅ PassedThe pull request successfully addresses issue #629 by replacing the hardcoded 'User' placeholder with actual user name, email fallback, and proper type definition in the schema.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.



📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f0a0af and b54c566.

📒 Files selected for processing (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
🚧 Files skipped from review as they are similar to previous changes (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: lint

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/lib/fragments/Profile/Profile.svelte`:
- Around line 30-37: wrappedFollow currently sets requestSent unconditionally
after await handleFollow(), causing failures to be treated as success; modify
handleFollow to return a boolean success flag (or rethrow on failure) and then
update wrappedFollow to capture that return value and only set requestSent =
true when success === true; ensure btnScale.target is restored to 1 in a finally
block so the button animation resets regardless of outcome.
🧹 Nitpick comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

57-83: Check button variant hierarchy for Follow vs Message.

In Pictique, variant="primary" is visually secondary while variant="secondary" reads as primary. If “Follow” should be the primary CTA, consider swapping variants for the follow and message buttons.

Based on learnings, the Button variant mapping in this codebase is intentionally inverted for visual hierarchy.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6dc3c7 and c2faa2d.

📒 Files selected for processing (4)
  • platforms/dreamSync/client/src/pages/wishlist-editor.tsx
  • platforms/dreamSync/shared/schema.ts
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/lib/fragments/Profile/Profile.svelte

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/routes/`(auth)/auth/+page.svelte:
- Around line 150-152: The onDestroy cleanup is currently registered inside the
onMount block and can be skipped when auto-login returns early; move the
onDestroy(...) call so it is declared alongside (and before) onMount(...) to
ensure it always runs; specifically, ensure the onDestroy handler clears
timerInterval (if set) and removes the window resize listener that references
checkMobile (the same listener added earlier) so the resize listener and
interval are always cleaned up even when auto-login short-circuits.
♻️ Duplicate comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

29-35: Reset button scale even if follow fails.
If handleFollow throws, the scale never resets. Wrap it in try/finally to guarantee the UI returns to normal.

🐛 Suggested fix
 async function wrappedFollow() {
btnScale.target = 0.95;
-	await handleFollow();-	btnScale.target = 1;+	try {+ await handleFollow();+	} finally {+ btnScale.target = 1;+	}
}
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c2faa2d and 900ba62.

📒 Files selected for processing (3)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build
🔇 Additional comments (9)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (2)

4-25: Follow-state props wiring looks good.
Props/defaults for isFollowing and didFollowed plus the message handler align cleanly with the new UI state surface.


54-80: Follow button state rendering is clear.
The disabled logic and Follow / Following / Followed visuals read well and should feel responsive.

platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte (3)

30-31: Local follow state tracking looks good.
Clear separation of isFollowing and didFollowed makes the UI state readable.


53-66: Follow request flow is solid.
Setting isFollowing before the request and resetting in finally keeps UI state consistent.


105-108: Bindings correctly wire follow state to the Profile component.
Two‑way bindings match the new child props and should keep UI in sync.

platforms/pictique/src/routes/(auth)/auth/+page.svelte (4)

19-20: State additions for countdown are clear.

The new state and interval handle read well and are easy to follow.


74-83: Timer loop is straightforward and self-terminating.

Interval decrement + reload-on-expiry is easy to reason about.


109-110: Starting the timer after QR data is fetched is appropriate.

Keeps the expiry aligned with the QR/session lifetime.


226-231: Dynamic countdown messaging reads well.

Conditional styling for the last 10 seconds is a nice touch.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/routes/(auth)/auth/+page.svelte
@coodos
coodos merged commit a6c5925 into mainJan 16, 2026
4 checks passed
@coodos
coodos deleted the fix/dreamsync-welcome branch January 16, 2026 12:54
Sign up for freeto 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.

[Bug] Dreamsync welcomes users

2 participants

@grv-saini-20@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fix/dreamsync welcome - #676

Merged
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome
Jan 16, 2026
Merged

Fix/dreamsync welcome#676
coodos merged 8 commits into
mainfrom
fix/dreamsync-welcome

Conversation

@grv-saini-20

@grv-saini-20grv-saini-20 commented Jan 16, 2026

Copy link
Copy Markdown
Collaborator

Description of change

Fixed the dreamsync welcome with user name.
image

Issue Number

closes#629

Type of change

  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)

How the change has been tested

Manual

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features

    • Profile follow UI improved: clearer loading state and a distinct "Following" confirmation.
    • Follow state tracking refined to provide smoother animations and consistent feedback.
  • Bug Fixes / Improvements

    • Welcome name display updated to prefer a consolidated name field with email fallback.
  • Chores

    • Simplified follow interaction logic for more reliable UX and faster UI resets.

✏️ Tip: You can customize this high-level summary in your review settings.

@grv-saini-20grv-saini-20 self-assigned this Jan 16, 2026
@coderabbitai

coderabbitaiBot commented Jan 16, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Updated user display to use user?.name (with fallbacks) and added name?: string to UserWithProfile. Enhanced profile follow UI by adding isFollowing and didFollowed state, wiring them between page and Profile component, and simplifying follow request logic/animation.

Changes

Cohort / File(s)Summary
User name & schema
platforms/dreamSync/client/src/pages/wishlist-editor.tsx, platforms/dreamSync/shared/schema.ts
Replace user?.firstName with user?.name (fallback to email or 'User'); add optional name?: string to UserWithProfile type.
Profile follow UI & state
platforms/pictique/src/lib/fragments/Profile/Profile.svelte, platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
Add exported didFollowed prop and isFollowing/didFollowed bindings; remove requestSent flow; simplify follow handler to set isFollowing, call follow API, set didFollowed, trigger brief animation/1s delay then refresh profile, and reset flags. UI shows final state using didFollowed.

Sequence Diagram(s)

sequenceDiagram
participant User
participant ProfilePage as Profile Page (Svelte)
participant ProfileComponent as Profile.svelte
participant API as /api/users/:id/follow
participant Backend as Server/DB
User->>ProfileComponent: Click "Follow" button
ProfileComponent->>ProfilePage: emit follow action (bound)
ProfilePage->>ProfilePage: set isFollowing = true
ProfilePage->>API: POST /api/users/{id}/follow
API->>Backend: persist follow
Backend-->>API: 200 OK
API-->>ProfilePage: success
ProfilePage->>ProfileComponent: set didFollowed = true (bound)
ProfileComponent-->>ProfilePage: visual animation (btnScale) / display Tick
ProfilePage->>ProfilePage: wait 1s, set didFollowed = false
ProfilePage->>ProfilePage: fetchProfile() to refresh state
ProfilePage->>ProfileComponent: update props (isFollowing=false or updated)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 I hopped in with a tiny cheer,
No more "User" whispering here.
Names now spring and buttons prance,
A follow click, a joyful dance. ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3
❌ Failed checks (2 warnings, 1 inconclusive)
Check nameStatusExplanationResolution
Out of Scope Changes check⚠️ WarningThe PR includes changes to the Profile.svelte component and follow functionality that appear unrelated to the Dreamsync welcome message fix described in the objectives.Review whether changes to pictique Profile component's didFollowed prop and follow functionality are intentional or should be excluded from this PR.
Docstring Coverage⚠️ WarningDocstring coverage is 0.00% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check❓ InconclusiveThe title 'Fix/dreamsync welcome' is vague and uses generic phrasing that doesn't clearly convey the specific change of displaying actual user names instead of placeholders.Consider revising to something more specific like 'Show actual user name in Dreamsync welcome message' or 'Fix hardcoded User placeholder in welcome message'.
✅ Passed checks (2 passed)
Check nameStatusExplanation
Description check✅ PassedThe pull request description is mostly complete, following the template with Issue Number, Type of change, How tested, and Change checklist all properly filled out.
Linked Issues check✅ PassedThe pull request successfully addresses issue #629 by replacing the hardcoded 'User' placeholder with actual user name, email fallback, and proper type definition in the schema.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.



📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 1f0a0af and b54c566.

📒 Files selected for processing (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
🚧 Files skipped from review as they are similar to previous changes (1)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: lint

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/lib/fragments/Profile/Profile.svelte`:
- Around line 30-37: wrappedFollow currently sets requestSent unconditionally
after await handleFollow(), causing failures to be treated as success; modify
handleFollow to return a boolean success flag (or rethrow on failure) and then
update wrappedFollow to capture that return value and only set requestSent =
true when success === true; ensure btnScale.target is restored to 1 in a finally
block so the button animation resets regardless of outcome.
🧹 Nitpick comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

57-83: Check button variant hierarchy for Follow vs Message.

In Pictique, variant="primary" is visually secondary while variant="secondary" reads as primary. If “Follow” should be the primary CTA, consider swapping variants for the follow and message buttons.

Based on learnings, the Button variant mapping in this codebase is intentionally inverted for visual hierarchy.

📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d6dc3c7 and c2faa2d.

📒 Files selected for processing (4)
  • platforms/dreamSync/client/src/pages/wishlist-editor.tsx
  • platforms/dreamSync/shared/schema.ts
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/lib/fragments/Profile/Profile.svelte

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@platforms/pictique/src/routes/`(auth)/auth/+page.svelte:
- Around line 150-152: The onDestroy cleanup is currently registered inside the
onMount block and can be skipped when auto-login returns early; move the
onDestroy(...) call so it is declared alongside (and before) onMount(...) to
ensure it always runs; specifically, ensure the onDestroy handler clears
timerInterval (if set) and removes the window resize listener that references
checkMobile (the same listener added earlier) so the resize listener and
interval are always cleaned up even when auto-login short-circuits.
♻️ Duplicate comments (1)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (1)

29-35: Reset button scale even if follow fails.
If handleFollow throws, the scale never resets. Wrap it in try/finally to guarantee the UI returns to normal.

🐛 Suggested fix
 async function wrappedFollow() {
btnScale.target = 0.95;
-	await handleFollow();-	btnScale.target = 1;+	try {+ await handleFollow();+	} finally {+ btnScale.target = 1;+	}
}
📜 Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c2faa2d and 900ba62.

📒 Files selected for processing (3)
  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-08T06:01:19.105Z
Learnt from: grv-saini-20
Repo: MetaState-Prototype-Project/prototype PR: 651
File: platforms/pictique/src/routes/(protected)/messages/+page.svelte:569-587
Timestamp: 2026-01-08T06:01:19.105Z
Learning: In the Pictique platform codebase at platforms/pictique, the Button component's `variant="primary"` visually appears more like a secondary button, while `variant="secondary"` appears more prominent/primary. Developers intentionally swap these variants to achieve the desired visual hierarchy.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
📚 Learning: 2026-01-05T11:46:43.214Z
Learnt from: Bekiboo
Repo: MetaState-Prototype-Project/prototype PR: 653
File: platforms/pictique/src/routes/(auth)/auth/+page.svelte:173-173
Timestamp: 2026-01-05T11:46:43.214Z
Learning: In Tailwind CSS v4, gradient utilities were renamed from bg-gradient-to-{direction} to bg-linear-to-{direction}. For all Svelte components (e.g., any .svelte files in the project), replace usages like bg-gradient-to-r, bg-gradient-to-l, etc. with bg-linear-to-r, bg-linear-to-l, etc. Ensure consistency across the codebase, update any documentation or design tokens, and run visual/test checks to confirm gradients render as intended.

Applied to files:

  • platforms/pictique/src/lib/fragments/Profile/Profile.svelte
  • platforms/pictique/src/routes/(auth)/auth/+page.svelte
  • platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: lint
  • GitHub Check: build
🔇 Additional comments (9)
platforms/pictique/src/lib/fragments/Profile/Profile.svelte (2)

4-25: Follow-state props wiring looks good.
Props/defaults for isFollowing and didFollowed plus the message handler align cleanly with the new UI state surface.


54-80: Follow button state rendering is clear.
The disabled logic and Follow / Following / Followed visuals read well and should feel responsive.

platforms/pictique/src/routes/(protected)/profile/[id]/+page.svelte (3)

30-31: Local follow state tracking looks good.
Clear separation of isFollowing and didFollowed makes the UI state readable.


53-66: Follow request flow is solid.
Setting isFollowing before the request and resetting in finally keeps UI state consistent.


105-108: Bindings correctly wire follow state to the Profile component.
Two‑way bindings match the new child props and should keep UI in sync.

platforms/pictique/src/routes/(auth)/auth/+page.svelte (4)

19-20: State additions for countdown are clear.

The new state and interval handle read well and are easy to follow.


74-83: Timer loop is straightforward and self-terminating.

Interval decrement + reload-on-expiry is easy to reason about.


109-110: Starting the timer after QR data is fetched is appropriate.

Keeps the expiry aligned with the QR/session lifetime.


226-231: Dynamic countdown messaging reads well.

Conditional styling for the last 10 seconds is a nice touch.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment threadplatforms/pictique/src/routes/(auth)/auth/+page.svelte
@coodos
coodos merged commit a6c5925 into mainJan 16, 2026
4 checks passed
@coodos
coodos deleted the fix/dreamsync-welcome branch January 16, 2026 12:54
Sign up for freeto 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.

[Bug] Dreamsync welcomes users

2 participants

@grv-saini-20@coodos