Feat: edit Display Name & remove "continue" step - #987

Merged
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow
Jun 2, 2026
Merged

Feat: edit Display Name & remove "continue" step#987
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow

Conversation

@Bekiboo

@BekibooBekiboo commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Description of change

  • Home greeting: trim redundant top padding, source display name from the self-binding doc (so KYC's legal name doesn't overwrite the handle the user typed), and re-enable the edit-name pencil with a bottom-sheet flow that re-issues the self-binding doc (create-new + delete-old, since evault-core has no update mutation).
  • Login flow: fire biometric over the splash itself for returning users — success routes straight to /main with no /login flash; cancel/fail slides into /login with a sessionStorage flag so /login skips its own biometric retry. Shared post-auth chores extracted to $lib/utils/postLogin.ts.
  • PIN screen: tapping the background refocuses the hidden PIN input to summon the soft keyboard without aiming for the dots. PinDots now exposes inputEl as $bindable.

Issue Number

Closes#982
Closes#981

Type of change

  • New (a change which implements a new feature)
  • Fix (a change which fixes an issue)

How the change has been tested

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

    • Users can now edit their display name from the main screen.
    • Automatic biometric authentication for returning users on splash screen.
  • Bug Fixes

    • Removed manual "Continue" button for returning users; streamlined authentication flow.
    • Improved PIN input focus handling for better keyboard interaction.
  • Refactor

    • Consolidated post-authentication logic for consistent handling across flows.

@BekibooBekiboo self-assigned this Jun 1, 2026
@coderabbitai

coderabbitaiBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR replaces the splash-screen "Continue" button for returning users with automatic biometric authentication, and adds display-name loading, caching, and editing on the home screen. Users can now edit their display name via a new bottom sheet on the wallet home screen, and returning users automatically attempt biometric unlock instead of tapping "Continue."

Changes

Authentication, Display Name, and User Profile Management

Layer / File(s)Summary
Splash Screen UI simplification
infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
Remove optional oncontinue prop from ISplashScreenProps; splash drawer now always renders Create/Restore actions and terms/privacy text.
PIN input element binding
infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
PinDots accepts optional bindable inputEl prop to enable parent-controlled focus and refocus behavior.
Self-binding document creation
infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
New createSelfBindingDoc utility re-issues the user's self-binding document (display name) via GraphQL mutation with owner signature.
Post-login flow consolidation
infrastructure/eid-wallet/src/lib/utils/postLogin.ts
New shared continueAfterSuccessfulAuth helper performs fire-and-forget eVault chores (health check, public-key sync, device registration) and handles deep-link routing after authentication.
Display name loading and caching on home screen
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Module-scope caches persist display name and self-binding doc ID; loadBindingDocuments parses both id_document and self binding entries from GraphQL response and updates caches.
EditNameSheet bottom-sheet component
infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
New component with bindable isOpen, controlled name input, trimming/validation logic, save() and close() handlers, and error display; seeds name from currentName on open via $effect.
Home screen display name integration and editing
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Home page wires display name to Greeting, adds handleEditNameSave to create new self-binding, update caches, and delete prior doc, and mounts EditNameSheet; styling adjusts top container padding.
Edit button visibility in Greeting component
infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
Uncomment and fix conditional rendering: replace commented-out template markers with real {#if !tourActive} wrapper to conditionally show edit affordance.
Biometric auto-auth on splash screen
infrastructure/eid-wallet/src/routes/+page.svelte
Splash route adds biometric configuration and returning-user auto-navigation: checks for existing PIN, redirects to /onboarding if none, probes biometric availability, runs biometric auth with sessionStorage tracking, and routes to shared post-login logic on success or /login on failure.
Login page PIN input management and biometric tracking
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
Login page imports shared continueAfterSuccessfulAuth, introduces BIOMETRIC_ATTEMPTED_KEY for single-use biometric skip, manages pinInput ref, adds background click handler to refocus PIN input while skipping interactive elements, and wires PinDots to use managed input element.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • MetaState-Prototype-Project/prototype#437: The main PR's continueAfterSuccessfulAuth post-login helper performs an eVault health check, which depends on the VaultController.checkHealth functionality added in this PR.

Suggested labels

evault-refactor

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 A splash screen's "Continue" hops away,
Returning users biometrically play,
Display names now editable with care,
A fresh, swift login—no waiting there! 🌟

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 66.67% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check❓ InconclusiveThe PR description covers key changes to home greeting, login flow, and PIN screen but lacks testing details and has incomplete checklist.Add a 'How the change has been tested' section with specific testing steps, environments, and verification methods to demonstrate the features work as intended.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the two main changes: adding display name editing and removing the continue step for registered users.
Linked Issues check✅ PassedCode changes directly address both requirements: display name editing with UI component and edit flow [#982], and biometric/PIN flow skipping splash for registered users [#981].
Out of Scope Changes check✅ PassedAll changes are scoped to the two linked issues; no unrelated modifications detected in UI, utilities, or routing logic.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task/improvte-greeting-page-and-login-flow

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.

@BekibooBekiboo changed the title Tighten home page top spacingFeat: edit Display Name & remove "continue" stepJun 2, 2026
@Bekiboo
Bekiboo marked this pull request as ready for review June 2, 2026 06:13
@Bekiboo
Bekiboo requested a review from coodos as a code ownerJune 2, 2026 06:13

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
infrastructure/eid-wallet/src/routes/+page.svelte (1)

63-81: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't default failed user-state reads to the first-time-user flow.

If getGlobalState() never resolves here, or either state read throws, onboardingComplete and userExists stay false and the code later falls into the Create/Restore drawer. That misclassifies returning users during slow init or transient state errors and defeats the new auto-auth path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@infrastructure/eid-wallet/src/routes/`+page.svelte around lines 63 - 81, The
current logic defaults onboardingComplete and userExists to false when
getGlobalState() is slow or reads throw, causing returning users to be
misrouted; change onboardingComplete and userExists to start as undefined (or
null) and only set them to boolean true/false after successfully reading
globalState.isOnboardingComplete and globalState.userController.user; in the
retry/failure paths (after the retries loop or inside the catch) leave them
undefined and surface a loading/error state instead of falling back to the
Create/Restore drawer; update any downstream checks that inspect
onboardingComplete/userExists to treat undefined as "unknown" and defer routing
until a definitive boolean is available.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte`:
- Around line 113-129: The two anchor elements in SplashScreen.svelte that
render "Terms & Conditions" and "Privacy Policy" currently point to the same
generic URL; update the href attributes on the corresponding <a> tags in the
SplashScreen.svelte fragment so each link targets its specific document (replace
the first link with the real Terms & Conditions URL and the second with the real
Privacy Policy URL), preserving target="_blank" and rel="noopener noreferrer"
and keeping class="text-primary".
In `@infrastructure/eid-wallet/src/lib/utils/postLogin.ts`:
- Around line 55-65: The code sets sessionStorage key "deepLinkData" from
pendingDeepLink before awaiting goto("/scan-qr") but only removes
"pendingDeepLink" in the catch, leaving stale "deepLinkData" if navigation
fails; update the error handling in the pendingDeepLink block (the try/catch
around sessionStorage.setItem("deepLinkData") and await goto("/scan-qr")) to
also remove sessionStorage.removeItem("deepLinkData") when an exception is
caught so the stale payload cannot be replayed, ensuring both pendingDeepLink
and deepLinkData are cleared on navigation failure.
---
Outside diff comments:
In `@infrastructure/eid-wallet/src/routes/`+page.svelte:
- Around line 63-81: The current logic defaults onboardingComplete and
userExists to false when getGlobalState() is slow or reads throw, causing
returning users to be misrouted; change onboardingComplete and userExists to
start as undefined (or null) and only set them to boolean true/false after
successfully reading globalState.isOnboardingComplete and
globalState.userController.user; in the retry/failure paths (after the retries
loop or inside the catch) leave them undefined and surface a loading/error state
instead of falling back to the Create/Restore drawer; update any downstream
checks that inspect onboardingComplete/userExists to treat undefined as
"unknown" and defer routing until a definitive boolean is available.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1200afd2-03c5-4f28-b364-16234b888d8f

📥 Commits

Reviewing files that changed from the base of the PR and between 35a8c6d and f2e6e61.

📒 Files selected for processing (9)
  • infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
  • infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
  • infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
  • infrastructure/eid-wallet/src/lib/utils/postLogin.ts
  • infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
  • infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
  • infrastructure/eid-wallet/src/routes/+page.svelte

Comment threadinfrastructure/eid-wallet/src/lib/utils/postLogin.ts
@coodos
coodos merged commit 7548bdf into mainJun 2, 2026
4 checks passed
@coodos
coodos deleted the task/improvte-greeting-page-and-login-flow branch June 2, 2026 11:53
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.

eID Wallet: Reduce top spacing, show display name, and add edit button Hide "Continue" button on splash screen for already-registered users

2 participants

@Bekiboo@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

Feat: edit Display Name & remove "continue" step - #987

Merged
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow
Jun 2, 2026
Merged

Feat: edit Display Name & remove "continue" step#987
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow

Conversation

@Bekiboo

@BekibooBekiboo commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Description of change

  • Home greeting: trim redundant top padding, source display name from the self-binding doc (so KYC's legal name doesn't overwrite the handle the user typed), and re-enable the edit-name pencil with a bottom-sheet flow that re-issues the self-binding doc (create-new + delete-old, since evault-core has no update mutation).
  • Login flow: fire biometric over the splash itself for returning users — success routes straight to /main with no /login flash; cancel/fail slides into /login with a sessionStorage flag so /login skips its own biometric retry. Shared post-auth chores extracted to $lib/utils/postLogin.ts.
  • PIN screen: tapping the background refocuses the hidden PIN input to summon the soft keyboard without aiming for the dots. PinDots now exposes inputEl as $bindable.

Issue Number

Closes#982
Closes#981

Type of change

  • New (a change which implements a new feature)
  • Fix (a change which fixes an issue)

How the change has been tested

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

    • Users can now edit their display name from the main screen.
    • Automatic biometric authentication for returning users on splash screen.
  • Bug Fixes

    • Removed manual "Continue" button for returning users; streamlined authentication flow.
    • Improved PIN input focus handling for better keyboard interaction.
  • Refactor

    • Consolidated post-authentication logic for consistent handling across flows.

@BekibooBekiboo self-assigned this Jun 1, 2026
@coderabbitai

coderabbitaiBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR replaces the splash-screen "Continue" button for returning users with automatic biometric authentication, and adds display-name loading, caching, and editing on the home screen. Users can now edit their display name via a new bottom sheet on the wallet home screen, and returning users automatically attempt biometric unlock instead of tapping "Continue."

Changes

Authentication, Display Name, and User Profile Management

Layer / File(s)Summary
Splash Screen UI simplification
infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
Remove optional oncontinue prop from ISplashScreenProps; splash drawer now always renders Create/Restore actions and terms/privacy text.
PIN input element binding
infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
PinDots accepts optional bindable inputEl prop to enable parent-controlled focus and refocus behavior.
Self-binding document creation
infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
New createSelfBindingDoc utility re-issues the user's self-binding document (display name) via GraphQL mutation with owner signature.
Post-login flow consolidation
infrastructure/eid-wallet/src/lib/utils/postLogin.ts
New shared continueAfterSuccessfulAuth helper performs fire-and-forget eVault chores (health check, public-key sync, device registration) and handles deep-link routing after authentication.
Display name loading and caching on home screen
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Module-scope caches persist display name and self-binding doc ID; loadBindingDocuments parses both id_document and self binding entries from GraphQL response and updates caches.
EditNameSheet bottom-sheet component
infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
New component with bindable isOpen, controlled name input, trimming/validation logic, save() and close() handlers, and error display; seeds name from currentName on open via $effect.
Home screen display name integration and editing
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Home page wires display name to Greeting, adds handleEditNameSave to create new self-binding, update caches, and delete prior doc, and mounts EditNameSheet; styling adjusts top container padding.
Edit button visibility in Greeting component
infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
Uncomment and fix conditional rendering: replace commented-out template markers with real {#if !tourActive} wrapper to conditionally show edit affordance.
Biometric auto-auth on splash screen
infrastructure/eid-wallet/src/routes/+page.svelte
Splash route adds biometric configuration and returning-user auto-navigation: checks for existing PIN, redirects to /onboarding if none, probes biometric availability, runs biometric auth with sessionStorage tracking, and routes to shared post-login logic on success or /login on failure.
Login page PIN input management and biometric tracking
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
Login page imports shared continueAfterSuccessfulAuth, introduces BIOMETRIC_ATTEMPTED_KEY for single-use biometric skip, manages pinInput ref, adds background click handler to refocus PIN input while skipping interactive elements, and wires PinDots to use managed input element.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • MetaState-Prototype-Project/prototype#437: The main PR's continueAfterSuccessfulAuth post-login helper performs an eVault health check, which depends on the VaultController.checkHealth functionality added in this PR.

Suggested labels

evault-refactor

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 A splash screen's "Continue" hops away,
Returning users biometrically play,
Display names now editable with care,
A fresh, swift login—no waiting there! 🌟

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 66.67% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check❓ InconclusiveThe PR description covers key changes to home greeting, login flow, and PIN screen but lacks testing details and has incomplete checklist.Add a 'How the change has been tested' section with specific testing steps, environments, and verification methods to demonstrate the features work as intended.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the two main changes: adding display name editing and removing the continue step for registered users.
Linked Issues check✅ PassedCode changes directly address both requirements: display name editing with UI component and edit flow [#982], and biometric/PIN flow skipping splash for registered users [#981].
Out of Scope Changes check✅ PassedAll changes are scoped to the two linked issues; no unrelated modifications detected in UI, utilities, or routing logic.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task/improvte-greeting-page-and-login-flow

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.

@BekibooBekiboo changed the title Tighten home page top spacingFeat: edit Display Name & remove "continue" stepJun 2, 2026
@Bekiboo
Bekiboo marked this pull request as ready for review June 2, 2026 06:13
@Bekiboo
Bekiboo requested a review from coodos as a code ownerJune 2, 2026 06:13

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
infrastructure/eid-wallet/src/routes/+page.svelte (1)

63-81: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't default failed user-state reads to the first-time-user flow.

If getGlobalState() never resolves here, or either state read throws, onboardingComplete and userExists stay false and the code later falls into the Create/Restore drawer. That misclassifies returning users during slow init or transient state errors and defeats the new auto-auth path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@infrastructure/eid-wallet/src/routes/`+page.svelte around lines 63 - 81, The
current logic defaults onboardingComplete and userExists to false when
getGlobalState() is slow or reads throw, causing returning users to be
misrouted; change onboardingComplete and userExists to start as undefined (or
null) and only set them to boolean true/false after successfully reading
globalState.isOnboardingComplete and globalState.userController.user; in the
retry/failure paths (after the retries loop or inside the catch) leave them
undefined and surface a loading/error state instead of falling back to the
Create/Restore drawer; update any downstream checks that inspect
onboardingComplete/userExists to treat undefined as "unknown" and defer routing
until a definitive boolean is available.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte`:
- Around line 113-129: The two anchor elements in SplashScreen.svelte that
render "Terms & Conditions" and "Privacy Policy" currently point to the same
generic URL; update the href attributes on the corresponding <a> tags in the
SplashScreen.svelte fragment so each link targets its specific document (replace
the first link with the real Terms & Conditions URL and the second with the real
Privacy Policy URL), preserving target="_blank" and rel="noopener noreferrer"
and keeping class="text-primary".
In `@infrastructure/eid-wallet/src/lib/utils/postLogin.ts`:
- Around line 55-65: The code sets sessionStorage key "deepLinkData" from
pendingDeepLink before awaiting goto("/scan-qr") but only removes
"pendingDeepLink" in the catch, leaving stale "deepLinkData" if navigation
fails; update the error handling in the pendingDeepLink block (the try/catch
around sessionStorage.setItem("deepLinkData") and await goto("/scan-qr")) to
also remove sessionStorage.removeItem("deepLinkData") when an exception is
caught so the stale payload cannot be replayed, ensuring both pendingDeepLink
and deepLinkData are cleared on navigation failure.
---
Outside diff comments:
In `@infrastructure/eid-wallet/src/routes/`+page.svelte:
- Around line 63-81: The current logic defaults onboardingComplete and
userExists to false when getGlobalState() is slow or reads throw, causing
returning users to be misrouted; change onboardingComplete and userExists to
start as undefined (or null) and only set them to boolean true/false after
successfully reading globalState.isOnboardingComplete and
globalState.userController.user; in the retry/failure paths (after the retries
loop or inside the catch) leave them undefined and surface a loading/error state
instead of falling back to the Create/Restore drawer; update any downstream
checks that inspect onboardingComplete/userExists to treat undefined as
"unknown" and defer routing until a definitive boolean is available.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1200afd2-03c5-4f28-b364-16234b888d8f

📥 Commits

Reviewing files that changed from the base of the PR and between 35a8c6d and f2e6e61.

📒 Files selected for processing (9)
  • infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
  • infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
  • infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
  • infrastructure/eid-wallet/src/lib/utils/postLogin.ts
  • infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
  • infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
  • infrastructure/eid-wallet/src/routes/+page.svelte

Comment threadinfrastructure/eid-wallet/src/lib/utils/postLogin.ts
@coodos
coodos merged commit 7548bdf into mainJun 2, 2026
4 checks passed
@coodos
coodos deleted the task/improvte-greeting-page-and-login-flow branch June 2, 2026 11:53
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.

eID Wallet: Reduce top spacing, show display name, and add edit button Hide "Continue" button on splash screen for already-registered users

2 participants

@Bekiboo@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

Feat: edit Display Name & remove "continue" step - #987

Merged
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow
Jun 2, 2026
Merged

Feat: edit Display Name & remove "continue" step#987
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow

Conversation

@Bekiboo

@BekibooBekiboo commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Description of change

  • Home greeting: trim redundant top padding, source display name from the self-binding doc (so KYC's legal name doesn't overwrite the handle the user typed), and re-enable the edit-name pencil with a bottom-sheet flow that re-issues the self-binding doc (create-new + delete-old, since evault-core has no update mutation).
  • Login flow: fire biometric over the splash itself for returning users — success routes straight to /main with no /login flash; cancel/fail slides into /login with a sessionStorage flag so /login skips its own biometric retry. Shared post-auth chores extracted to $lib/utils/postLogin.ts.
  • PIN screen: tapping the background refocuses the hidden PIN input to summon the soft keyboard without aiming for the dots. PinDots now exposes inputEl as $bindable.

Issue Number

Closes#982
Closes#981

Type of change

  • New (a change which implements a new feature)
  • Fix (a change which fixes an issue)

How the change has been tested

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

    • Users can now edit their display name from the main screen.
    • Automatic biometric authentication for returning users on splash screen.
  • Bug Fixes

    • Removed manual "Continue" button for returning users; streamlined authentication flow.
    • Improved PIN input focus handling for better keyboard interaction.
  • Refactor

    • Consolidated post-authentication logic for consistent handling across flows.

@BekibooBekiboo self-assigned this Jun 1, 2026
@coderabbitai

coderabbitaiBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR replaces the splash-screen "Continue" button for returning users with automatic biometric authentication, and adds display-name loading, caching, and editing on the home screen. Users can now edit their display name via a new bottom sheet on the wallet home screen, and returning users automatically attempt biometric unlock instead of tapping "Continue."

Changes

Authentication, Display Name, and User Profile Management

Layer / File(s)Summary
Splash Screen UI simplification
infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
Remove optional oncontinue prop from ISplashScreenProps; splash drawer now always renders Create/Restore actions and terms/privacy text.
PIN input element binding
infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
PinDots accepts optional bindable inputEl prop to enable parent-controlled focus and refocus behavior.
Self-binding document creation
infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
New createSelfBindingDoc utility re-issues the user's self-binding document (display name) via GraphQL mutation with owner signature.
Post-login flow consolidation
infrastructure/eid-wallet/src/lib/utils/postLogin.ts
New shared continueAfterSuccessfulAuth helper performs fire-and-forget eVault chores (health check, public-key sync, device registration) and handles deep-link routing after authentication.
Display name loading and caching on home screen
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Module-scope caches persist display name and self-binding doc ID; loadBindingDocuments parses both id_document and self binding entries from GraphQL response and updates caches.
EditNameSheet bottom-sheet component
infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
New component with bindable isOpen, controlled name input, trimming/validation logic, save() and close() handlers, and error display; seeds name from currentName on open via $effect.
Home screen display name integration and editing
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Home page wires display name to Greeting, adds handleEditNameSave to create new self-binding, update caches, and delete prior doc, and mounts EditNameSheet; styling adjusts top container padding.
Edit button visibility in Greeting component
infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
Uncomment and fix conditional rendering: replace commented-out template markers with real {#if !tourActive} wrapper to conditionally show edit affordance.
Biometric auto-auth on splash screen
infrastructure/eid-wallet/src/routes/+page.svelte
Splash route adds biometric configuration and returning-user auto-navigation: checks for existing PIN, redirects to /onboarding if none, probes biometric availability, runs biometric auth with sessionStorage tracking, and routes to shared post-login logic on success or /login on failure.
Login page PIN input management and biometric tracking
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
Login page imports shared continueAfterSuccessfulAuth, introduces BIOMETRIC_ATTEMPTED_KEY for single-use biometric skip, manages pinInput ref, adds background click handler to refocus PIN input while skipping interactive elements, and wires PinDots to use managed input element.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • MetaState-Prototype-Project/prototype#437: The main PR's continueAfterSuccessfulAuth post-login helper performs an eVault health check, which depends on the VaultController.checkHealth functionality added in this PR.

Suggested labels

evault-refactor

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 A splash screen's "Continue" hops away,
Returning users biometrically play,
Display names now editable with care,
A fresh, swift login—no waiting there! 🌟

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 66.67% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check❓ InconclusiveThe PR description covers key changes to home greeting, login flow, and PIN screen but lacks testing details and has incomplete checklist.Add a 'How the change has been tested' section with specific testing steps, environments, and verification methods to demonstrate the features work as intended.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the two main changes: adding display name editing and removing the continue step for registered users.
Linked Issues check✅ PassedCode changes directly address both requirements: display name editing with UI component and edit flow [#982], and biometric/PIN flow skipping splash for registered users [#981].
Out of Scope Changes check✅ PassedAll changes are scoped to the two linked issues; no unrelated modifications detected in UI, utilities, or routing logic.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task/improvte-greeting-page-and-login-flow

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.

@BekibooBekiboo changed the title Tighten home page top spacingFeat: edit Display Name & remove "continue" stepJun 2, 2026
@Bekiboo
Bekiboo marked this pull request as ready for review June 2, 2026 06:13
@Bekiboo
Bekiboo requested a review from coodos as a code ownerJune 2, 2026 06:13

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
infrastructure/eid-wallet/src/routes/+page.svelte (1)

63-81: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't default failed user-state reads to the first-time-user flow.

If getGlobalState() never resolves here, or either state read throws, onboardingComplete and userExists stay false and the code later falls into the Create/Restore drawer. That misclassifies returning users during slow init or transient state errors and defeats the new auto-auth path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@infrastructure/eid-wallet/src/routes/`+page.svelte around lines 63 - 81, The
current logic defaults onboardingComplete and userExists to false when
getGlobalState() is slow or reads throw, causing returning users to be
misrouted; change onboardingComplete and userExists to start as undefined (or
null) and only set them to boolean true/false after successfully reading
globalState.isOnboardingComplete and globalState.userController.user; in the
retry/failure paths (after the retries loop or inside the catch) leave them
undefined and surface a loading/error state instead of falling back to the
Create/Restore drawer; update any downstream checks that inspect
onboardingComplete/userExists to treat undefined as "unknown" and defer routing
until a definitive boolean is available.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte`:
- Around line 113-129: The two anchor elements in SplashScreen.svelte that
render "Terms & Conditions" and "Privacy Policy" currently point to the same
generic URL; update the href attributes on the corresponding <a> tags in the
SplashScreen.svelte fragment so each link targets its specific document (replace
the first link with the real Terms & Conditions URL and the second with the real
Privacy Policy URL), preserving target="_blank" and rel="noopener noreferrer"
and keeping class="text-primary".
In `@infrastructure/eid-wallet/src/lib/utils/postLogin.ts`:
- Around line 55-65: The code sets sessionStorage key "deepLinkData" from
pendingDeepLink before awaiting goto("/scan-qr") but only removes
"pendingDeepLink" in the catch, leaving stale "deepLinkData" if navigation
fails; update the error handling in the pendingDeepLink block (the try/catch
around sessionStorage.setItem("deepLinkData") and await goto("/scan-qr")) to
also remove sessionStorage.removeItem("deepLinkData") when an exception is
caught so the stale payload cannot be replayed, ensuring both pendingDeepLink
and deepLinkData are cleared on navigation failure.
---
Outside diff comments:
In `@infrastructure/eid-wallet/src/routes/`+page.svelte:
- Around line 63-81: The current logic defaults onboardingComplete and
userExists to false when getGlobalState() is slow or reads throw, causing
returning users to be misrouted; change onboardingComplete and userExists to
start as undefined (or null) and only set them to boolean true/false after
successfully reading globalState.isOnboardingComplete and
globalState.userController.user; in the retry/failure paths (after the retries
loop or inside the catch) leave them undefined and surface a loading/error state
instead of falling back to the Create/Restore drawer; update any downstream
checks that inspect onboardingComplete/userExists to treat undefined as
"unknown" and defer routing until a definitive boolean is available.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1200afd2-03c5-4f28-b364-16234b888d8f

📥 Commits

Reviewing files that changed from the base of the PR and between 35a8c6d and f2e6e61.

📒 Files selected for processing (9)
  • infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
  • infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
  • infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
  • infrastructure/eid-wallet/src/lib/utils/postLogin.ts
  • infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
  • infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
  • infrastructure/eid-wallet/src/routes/+page.svelte

Comment threadinfrastructure/eid-wallet/src/lib/utils/postLogin.ts
@coodos
coodos merged commit 7548bdf into mainJun 2, 2026
4 checks passed
@coodos
coodos deleted the task/improvte-greeting-page-and-login-flow branch June 2, 2026 11:53
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.

eID Wallet: Reduce top spacing, show display name, and add edit button Hide "Continue" button on splash screen for already-registered users

2 participants

@Bekiboo@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

Feat: edit Display Name & remove "continue" step - #987

Merged
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow
Jun 2, 2026
Merged

Feat: edit Display Name & remove "continue" step#987
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow

Conversation

@Bekiboo

@BekibooBekiboo commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Description of change

  • Home greeting: trim redundant top padding, source display name from the self-binding doc (so KYC's legal name doesn't overwrite the handle the user typed), and re-enable the edit-name pencil with a bottom-sheet flow that re-issues the self-binding doc (create-new + delete-old, since evault-core has no update mutation).
  • Login flow: fire biometric over the splash itself for returning users — success routes straight to /main with no /login flash; cancel/fail slides into /login with a sessionStorage flag so /login skips its own biometric retry. Shared post-auth chores extracted to $lib/utils/postLogin.ts.
  • PIN screen: tapping the background refocuses the hidden PIN input to summon the soft keyboard without aiming for the dots. PinDots now exposes inputEl as $bindable.

Issue Number

Closes#982
Closes#981

Type of change

  • New (a change which implements a new feature)
  • Fix (a change which fixes an issue)

How the change has been tested

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

    • Users can now edit their display name from the main screen.
    • Automatic biometric authentication for returning users on splash screen.
  • Bug Fixes

    • Removed manual "Continue" button for returning users; streamlined authentication flow.
    • Improved PIN input focus handling for better keyboard interaction.
  • Refactor

    • Consolidated post-authentication logic for consistent handling across flows.

@BekibooBekiboo self-assigned this Jun 1, 2026
@coderabbitai

coderabbitaiBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR replaces the splash-screen "Continue" button for returning users with automatic biometric authentication, and adds display-name loading, caching, and editing on the home screen. Users can now edit their display name via a new bottom sheet on the wallet home screen, and returning users automatically attempt biometric unlock instead of tapping "Continue."

Changes

Authentication, Display Name, and User Profile Management

Layer / File(s)Summary
Splash Screen UI simplification
infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
Remove optional oncontinue prop from ISplashScreenProps; splash drawer now always renders Create/Restore actions and terms/privacy text.
PIN input element binding
infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
PinDots accepts optional bindable inputEl prop to enable parent-controlled focus and refocus behavior.
Self-binding document creation
infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
New createSelfBindingDoc utility re-issues the user's self-binding document (display name) via GraphQL mutation with owner signature.
Post-login flow consolidation
infrastructure/eid-wallet/src/lib/utils/postLogin.ts
New shared continueAfterSuccessfulAuth helper performs fire-and-forget eVault chores (health check, public-key sync, device registration) and handles deep-link routing after authentication.
Display name loading and caching on home screen
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Module-scope caches persist display name and self-binding doc ID; loadBindingDocuments parses both id_document and self binding entries from GraphQL response and updates caches.
EditNameSheet bottom-sheet component
infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
New component with bindable isOpen, controlled name input, trimming/validation logic, save() and close() handlers, and error display; seeds name from currentName on open via $effect.
Home screen display name integration and editing
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Home page wires display name to Greeting, adds handleEditNameSave to create new self-binding, update caches, and delete prior doc, and mounts EditNameSheet; styling adjusts top container padding.
Edit button visibility in Greeting component
infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
Uncomment and fix conditional rendering: replace commented-out template markers with real {#if !tourActive} wrapper to conditionally show edit affordance.
Biometric auto-auth on splash screen
infrastructure/eid-wallet/src/routes/+page.svelte
Splash route adds biometric configuration and returning-user auto-navigation: checks for existing PIN, redirects to /onboarding if none, probes biometric availability, runs biometric auth with sessionStorage tracking, and routes to shared post-login logic on success or /login on failure.
Login page PIN input management and biometric tracking
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
Login page imports shared continueAfterSuccessfulAuth, introduces BIOMETRIC_ATTEMPTED_KEY for single-use biometric skip, manages pinInput ref, adds background click handler to refocus PIN input while skipping interactive elements, and wires PinDots to use managed input element.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • MetaState-Prototype-Project/prototype#437: The main PR's continueAfterSuccessfulAuth post-login helper performs an eVault health check, which depends on the VaultController.checkHealth functionality added in this PR.

Suggested labels

evault-refactor

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 A splash screen's "Continue" hops away,
Returning users biometrically play,
Display names now editable with care,
A fresh, swift login—no waiting there! 🌟

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 66.67% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check❓ InconclusiveThe PR description covers key changes to home greeting, login flow, and PIN screen but lacks testing details and has incomplete checklist.Add a 'How the change has been tested' section with specific testing steps, environments, and verification methods to demonstrate the features work as intended.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the two main changes: adding display name editing and removing the continue step for registered users.
Linked Issues check✅ PassedCode changes directly address both requirements: display name editing with UI component and edit flow [#982], and biometric/PIN flow skipping splash for registered users [#981].
Out of Scope Changes check✅ PassedAll changes are scoped to the two linked issues; no unrelated modifications detected in UI, utilities, or routing logic.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task/improvte-greeting-page-and-login-flow

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.

@BekibooBekiboo changed the title Tighten home page top spacingFeat: edit Display Name & remove "continue" stepJun 2, 2026
@Bekiboo
Bekiboo marked this pull request as ready for review June 2, 2026 06:13
@Bekiboo
Bekiboo requested a review from coodos as a code ownerJune 2, 2026 06:13

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
infrastructure/eid-wallet/src/routes/+page.svelte (1)

63-81: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't default failed user-state reads to the first-time-user flow.

If getGlobalState() never resolves here, or either state read throws, onboardingComplete and userExists stay false and the code later falls into the Create/Restore drawer. That misclassifies returning users during slow init or transient state errors and defeats the new auto-auth path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@infrastructure/eid-wallet/src/routes/`+page.svelte around lines 63 - 81, The
current logic defaults onboardingComplete and userExists to false when
getGlobalState() is slow or reads throw, causing returning users to be
misrouted; change onboardingComplete and userExists to start as undefined (or
null) and only set them to boolean true/false after successfully reading
globalState.isOnboardingComplete and globalState.userController.user; in the
retry/failure paths (after the retries loop or inside the catch) leave them
undefined and surface a loading/error state instead of falling back to the
Create/Restore drawer; update any downstream checks that inspect
onboardingComplete/userExists to treat undefined as "unknown" and defer routing
until a definitive boolean is available.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte`:
- Around line 113-129: The two anchor elements in SplashScreen.svelte that
render "Terms & Conditions" and "Privacy Policy" currently point to the same
generic URL; update the href attributes on the corresponding <a> tags in the
SplashScreen.svelte fragment so each link targets its specific document (replace
the first link with the real Terms & Conditions URL and the second with the real
Privacy Policy URL), preserving target="_blank" and rel="noopener noreferrer"
and keeping class="text-primary".
In `@infrastructure/eid-wallet/src/lib/utils/postLogin.ts`:
- Around line 55-65: The code sets sessionStorage key "deepLinkData" from
pendingDeepLink before awaiting goto("/scan-qr") but only removes
"pendingDeepLink" in the catch, leaving stale "deepLinkData" if navigation
fails; update the error handling in the pendingDeepLink block (the try/catch
around sessionStorage.setItem("deepLinkData") and await goto("/scan-qr")) to
also remove sessionStorage.removeItem("deepLinkData") when an exception is
caught so the stale payload cannot be replayed, ensuring both pendingDeepLink
and deepLinkData are cleared on navigation failure.
---
Outside diff comments:
In `@infrastructure/eid-wallet/src/routes/`+page.svelte:
- Around line 63-81: The current logic defaults onboardingComplete and
userExists to false when getGlobalState() is slow or reads throw, causing
returning users to be misrouted; change onboardingComplete and userExists to
start as undefined (or null) and only set them to boolean true/false after
successfully reading globalState.isOnboardingComplete and
globalState.userController.user; in the retry/failure paths (after the retries
loop or inside the catch) leave them undefined and surface a loading/error state
instead of falling back to the Create/Restore drawer; update any downstream
checks that inspect onboardingComplete/userExists to treat undefined as
"unknown" and defer routing until a definitive boolean is available.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1200afd2-03c5-4f28-b364-16234b888d8f

📥 Commits

Reviewing files that changed from the base of the PR and between 35a8c6d and f2e6e61.

📒 Files selected for processing (9)
  • infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
  • infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
  • infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
  • infrastructure/eid-wallet/src/lib/utils/postLogin.ts
  • infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
  • infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
  • infrastructure/eid-wallet/src/routes/+page.svelte

Comment threadinfrastructure/eid-wallet/src/lib/utils/postLogin.ts
@coodos
coodos merged commit 7548bdf into mainJun 2, 2026
4 checks passed
@coodos
coodos deleted the task/improvte-greeting-page-and-login-flow branch June 2, 2026 11:53
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.

eID Wallet: Reduce top spacing, show display name, and add edit button Hide "Continue" button on splash screen for already-registered users

2 participants

@Bekiboo@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

Feat: edit Display Name & remove "continue" step - #987

Merged
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow
Jun 2, 2026
Merged

Feat: edit Display Name & remove "continue" step#987
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow

Conversation

@Bekiboo

@BekibooBekiboo commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Description of change

  • Home greeting: trim redundant top padding, source display name from the self-binding doc (so KYC's legal name doesn't overwrite the handle the user typed), and re-enable the edit-name pencil with a bottom-sheet flow that re-issues the self-binding doc (create-new + delete-old, since evault-core has no update mutation).
  • Login flow: fire biometric over the splash itself for returning users — success routes straight to /main with no /login flash; cancel/fail slides into /login with a sessionStorage flag so /login skips its own biometric retry. Shared post-auth chores extracted to $lib/utils/postLogin.ts.
  • PIN screen: tapping the background refocuses the hidden PIN input to summon the soft keyboard without aiming for the dots. PinDots now exposes inputEl as $bindable.

Issue Number

Closes#982
Closes#981

Type of change

  • New (a change which implements a new feature)
  • Fix (a change which fixes an issue)

How the change has been tested

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

    • Users can now edit their display name from the main screen.
    • Automatic biometric authentication for returning users on splash screen.
  • Bug Fixes

    • Removed manual "Continue" button for returning users; streamlined authentication flow.
    • Improved PIN input focus handling for better keyboard interaction.
  • Refactor

    • Consolidated post-authentication logic for consistent handling across flows.

@BekibooBekiboo self-assigned this Jun 1, 2026
@coderabbitai

coderabbitaiBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR replaces the splash-screen "Continue" button for returning users with automatic biometric authentication, and adds display-name loading, caching, and editing on the home screen. Users can now edit their display name via a new bottom sheet on the wallet home screen, and returning users automatically attempt biometric unlock instead of tapping "Continue."

Changes

Authentication, Display Name, and User Profile Management

Layer / File(s)Summary
Splash Screen UI simplification
infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
Remove optional oncontinue prop from ISplashScreenProps; splash drawer now always renders Create/Restore actions and terms/privacy text.
PIN input element binding
infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
PinDots accepts optional bindable inputEl prop to enable parent-controlled focus and refocus behavior.
Self-binding document creation
infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
New createSelfBindingDoc utility re-issues the user's self-binding document (display name) via GraphQL mutation with owner signature.
Post-login flow consolidation
infrastructure/eid-wallet/src/lib/utils/postLogin.ts
New shared continueAfterSuccessfulAuth helper performs fire-and-forget eVault chores (health check, public-key sync, device registration) and handles deep-link routing after authentication.
Display name loading and caching on home screen
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Module-scope caches persist display name and self-binding doc ID; loadBindingDocuments parses both id_document and self binding entries from GraphQL response and updates caches.
EditNameSheet bottom-sheet component
infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
New component with bindable isOpen, controlled name input, trimming/validation logic, save() and close() handlers, and error display; seeds name from currentName on open via $effect.
Home screen display name integration and editing
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Home page wires display name to Greeting, adds handleEditNameSave to create new self-binding, update caches, and delete prior doc, and mounts EditNameSheet; styling adjusts top container padding.
Edit button visibility in Greeting component
infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
Uncomment and fix conditional rendering: replace commented-out template markers with real {#if !tourActive} wrapper to conditionally show edit affordance.
Biometric auto-auth on splash screen
infrastructure/eid-wallet/src/routes/+page.svelte
Splash route adds biometric configuration and returning-user auto-navigation: checks for existing PIN, redirects to /onboarding if none, probes biometric availability, runs biometric auth with sessionStorage tracking, and routes to shared post-login logic on success or /login on failure.
Login page PIN input management and biometric tracking
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
Login page imports shared continueAfterSuccessfulAuth, introduces BIOMETRIC_ATTEMPTED_KEY for single-use biometric skip, manages pinInput ref, adds background click handler to refocus PIN input while skipping interactive elements, and wires PinDots to use managed input element.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • MetaState-Prototype-Project/prototype#437: The main PR's continueAfterSuccessfulAuth post-login helper performs an eVault health check, which depends on the VaultController.checkHealth functionality added in this PR.

Suggested labels

evault-refactor

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 A splash screen's "Continue" hops away,
Returning users biometrically play,
Display names now editable with care,
A fresh, swift login—no waiting there! 🌟

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 66.67% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check❓ InconclusiveThe PR description covers key changes to home greeting, login flow, and PIN screen but lacks testing details and has incomplete checklist.Add a 'How the change has been tested' section with specific testing steps, environments, and verification methods to demonstrate the features work as intended.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the two main changes: adding display name editing and removing the continue step for registered users.
Linked Issues check✅ PassedCode changes directly address both requirements: display name editing with UI component and edit flow [#982], and biometric/PIN flow skipping splash for registered users [#981].
Out of Scope Changes check✅ PassedAll changes are scoped to the two linked issues; no unrelated modifications detected in UI, utilities, or routing logic.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task/improvte-greeting-page-and-login-flow

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.

@BekibooBekiboo changed the title Tighten home page top spacingFeat: edit Display Name & remove "continue" stepJun 2, 2026
@Bekiboo
Bekiboo marked this pull request as ready for review June 2, 2026 06:13
@Bekiboo
Bekiboo requested a review from coodos as a code ownerJune 2, 2026 06:13

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
infrastructure/eid-wallet/src/routes/+page.svelte (1)

63-81: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't default failed user-state reads to the first-time-user flow.

If getGlobalState() never resolves here, or either state read throws, onboardingComplete and userExists stay false and the code later falls into the Create/Restore drawer. That misclassifies returning users during slow init or transient state errors and defeats the new auto-auth path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@infrastructure/eid-wallet/src/routes/`+page.svelte around lines 63 - 81, The
current logic defaults onboardingComplete and userExists to false when
getGlobalState() is slow or reads throw, causing returning users to be
misrouted; change onboardingComplete and userExists to start as undefined (or
null) and only set them to boolean true/false after successfully reading
globalState.isOnboardingComplete and globalState.userController.user; in the
retry/failure paths (after the retries loop or inside the catch) leave them
undefined and surface a loading/error state instead of falling back to the
Create/Restore drawer; update any downstream checks that inspect
onboardingComplete/userExists to treat undefined as "unknown" and defer routing
until a definitive boolean is available.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte`:
- Around line 113-129: The two anchor elements in SplashScreen.svelte that
render "Terms & Conditions" and "Privacy Policy" currently point to the same
generic URL; update the href attributes on the corresponding <a> tags in the
SplashScreen.svelte fragment so each link targets its specific document (replace
the first link with the real Terms & Conditions URL and the second with the real
Privacy Policy URL), preserving target="_blank" and rel="noopener noreferrer"
and keeping class="text-primary".
In `@infrastructure/eid-wallet/src/lib/utils/postLogin.ts`:
- Around line 55-65: The code sets sessionStorage key "deepLinkData" from
pendingDeepLink before awaiting goto("/scan-qr") but only removes
"pendingDeepLink" in the catch, leaving stale "deepLinkData" if navigation
fails; update the error handling in the pendingDeepLink block (the try/catch
around sessionStorage.setItem("deepLinkData") and await goto("/scan-qr")) to
also remove sessionStorage.removeItem("deepLinkData") when an exception is
caught so the stale payload cannot be replayed, ensuring both pendingDeepLink
and deepLinkData are cleared on navigation failure.
---
Outside diff comments:
In `@infrastructure/eid-wallet/src/routes/`+page.svelte:
- Around line 63-81: The current logic defaults onboardingComplete and
userExists to false when getGlobalState() is slow or reads throw, causing
returning users to be misrouted; change onboardingComplete and userExists to
start as undefined (or null) and only set them to boolean true/false after
successfully reading globalState.isOnboardingComplete and
globalState.userController.user; in the retry/failure paths (after the retries
loop or inside the catch) leave them undefined and surface a loading/error state
instead of falling back to the Create/Restore drawer; update any downstream
checks that inspect onboardingComplete/userExists to treat undefined as
"unknown" and defer routing until a definitive boolean is available.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1200afd2-03c5-4f28-b364-16234b888d8f

📥 Commits

Reviewing files that changed from the base of the PR and between 35a8c6d and f2e6e61.

📒 Files selected for processing (9)
  • infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
  • infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
  • infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
  • infrastructure/eid-wallet/src/lib/utils/postLogin.ts
  • infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
  • infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
  • infrastructure/eid-wallet/src/routes/+page.svelte

Comment threadinfrastructure/eid-wallet/src/lib/utils/postLogin.ts
@coodos
coodos merged commit 7548bdf into mainJun 2, 2026
4 checks passed
@coodos
coodos deleted the task/improvte-greeting-page-and-login-flow branch June 2, 2026 11:53
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.

eID Wallet: Reduce top spacing, show display name, and add edit button Hide "Continue" button on splash screen for already-registered users

2 participants

@Bekiboo@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

Feat: edit Display Name & remove "continue" step - #987

Merged
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow
Jun 2, 2026
Merged

Feat: edit Display Name & remove "continue" step#987
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow

Conversation

@Bekiboo

@BekibooBekiboo commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Description of change

  • Home greeting: trim redundant top padding, source display name from the self-binding doc (so KYC's legal name doesn't overwrite the handle the user typed), and re-enable the edit-name pencil with a bottom-sheet flow that re-issues the self-binding doc (create-new + delete-old, since evault-core has no update mutation).
  • Login flow: fire biometric over the splash itself for returning users — success routes straight to /main with no /login flash; cancel/fail slides into /login with a sessionStorage flag so /login skips its own biometric retry. Shared post-auth chores extracted to $lib/utils/postLogin.ts.
  • PIN screen: tapping the background refocuses the hidden PIN input to summon the soft keyboard without aiming for the dots. PinDots now exposes inputEl as $bindable.

Issue Number

Closes#982
Closes#981

Type of change

  • New (a change which implements a new feature)
  • Fix (a change which fixes an issue)

How the change has been tested

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

    • Users can now edit their display name from the main screen.
    • Automatic biometric authentication for returning users on splash screen.
  • Bug Fixes

    • Removed manual "Continue" button for returning users; streamlined authentication flow.
    • Improved PIN input focus handling for better keyboard interaction.
  • Refactor

    • Consolidated post-authentication logic for consistent handling across flows.

@BekibooBekiboo self-assigned this Jun 1, 2026
@coderabbitai

coderabbitaiBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR replaces the splash-screen "Continue" button for returning users with automatic biometric authentication, and adds display-name loading, caching, and editing on the home screen. Users can now edit their display name via a new bottom sheet on the wallet home screen, and returning users automatically attempt biometric unlock instead of tapping "Continue."

Changes

Authentication, Display Name, and User Profile Management

Layer / File(s)Summary
Splash Screen UI simplification
infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
Remove optional oncontinue prop from ISplashScreenProps; splash drawer now always renders Create/Restore actions and terms/privacy text.
PIN input element binding
infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
PinDots accepts optional bindable inputEl prop to enable parent-controlled focus and refocus behavior.
Self-binding document creation
infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
New createSelfBindingDoc utility re-issues the user's self-binding document (display name) via GraphQL mutation with owner signature.
Post-login flow consolidation
infrastructure/eid-wallet/src/lib/utils/postLogin.ts
New shared continueAfterSuccessfulAuth helper performs fire-and-forget eVault chores (health check, public-key sync, device registration) and handles deep-link routing after authentication.
Display name loading and caching on home screen
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Module-scope caches persist display name and self-binding doc ID; loadBindingDocuments parses both id_document and self binding entries from GraphQL response and updates caches.
EditNameSheet bottom-sheet component
infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
New component with bindable isOpen, controlled name input, trimming/validation logic, save() and close() handlers, and error display; seeds name from currentName on open via $effect.
Home screen display name integration and editing
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Home page wires display name to Greeting, adds handleEditNameSave to create new self-binding, update caches, and delete prior doc, and mounts EditNameSheet; styling adjusts top container padding.
Edit button visibility in Greeting component
infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
Uncomment and fix conditional rendering: replace commented-out template markers with real {#if !tourActive} wrapper to conditionally show edit affordance.
Biometric auto-auth on splash screen
infrastructure/eid-wallet/src/routes/+page.svelte
Splash route adds biometric configuration and returning-user auto-navigation: checks for existing PIN, redirects to /onboarding if none, probes biometric availability, runs biometric auth with sessionStorage tracking, and routes to shared post-login logic on success or /login on failure.
Login page PIN input management and biometric tracking
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
Login page imports shared continueAfterSuccessfulAuth, introduces BIOMETRIC_ATTEMPTED_KEY for single-use biometric skip, manages pinInput ref, adds background click handler to refocus PIN input while skipping interactive elements, and wires PinDots to use managed input element.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • MetaState-Prototype-Project/prototype#437: The main PR's continueAfterSuccessfulAuth post-login helper performs an eVault health check, which depends on the VaultController.checkHealth functionality added in this PR.

Suggested labels

evault-refactor

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 A splash screen's "Continue" hops away,
Returning users biometrically play,
Display names now editable with care,
A fresh, swift login—no waiting there! 🌟

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 66.67% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check❓ InconclusiveThe PR description covers key changes to home greeting, login flow, and PIN screen but lacks testing details and has incomplete checklist.Add a 'How the change has been tested' section with specific testing steps, environments, and verification methods to demonstrate the features work as intended.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the two main changes: adding display name editing and removing the continue step for registered users.
Linked Issues check✅ PassedCode changes directly address both requirements: display name editing with UI component and edit flow [#982], and biometric/PIN flow skipping splash for registered users [#981].
Out of Scope Changes check✅ PassedAll changes are scoped to the two linked issues; no unrelated modifications detected in UI, utilities, or routing logic.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task/improvte-greeting-page-and-login-flow

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.

@BekibooBekiboo changed the title Tighten home page top spacingFeat: edit Display Name & remove "continue" stepJun 2, 2026
@Bekiboo
Bekiboo marked this pull request as ready for review June 2, 2026 06:13
@Bekiboo
Bekiboo requested a review from coodos as a code ownerJune 2, 2026 06:13

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
infrastructure/eid-wallet/src/routes/+page.svelte (1)

63-81: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't default failed user-state reads to the first-time-user flow.

If getGlobalState() never resolves here, or either state read throws, onboardingComplete and userExists stay false and the code later falls into the Create/Restore drawer. That misclassifies returning users during slow init or transient state errors and defeats the new auto-auth path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@infrastructure/eid-wallet/src/routes/`+page.svelte around lines 63 - 81, The
current logic defaults onboardingComplete and userExists to false when
getGlobalState() is slow or reads throw, causing returning users to be
misrouted; change onboardingComplete and userExists to start as undefined (or
null) and only set them to boolean true/false after successfully reading
globalState.isOnboardingComplete and globalState.userController.user; in the
retry/failure paths (after the retries loop or inside the catch) leave them
undefined and surface a loading/error state instead of falling back to the
Create/Restore drawer; update any downstream checks that inspect
onboardingComplete/userExists to treat undefined as "unknown" and defer routing
until a definitive boolean is available.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte`:
- Around line 113-129: The two anchor elements in SplashScreen.svelte that
render "Terms & Conditions" and "Privacy Policy" currently point to the same
generic URL; update the href attributes on the corresponding <a> tags in the
SplashScreen.svelte fragment so each link targets its specific document (replace
the first link with the real Terms & Conditions URL and the second with the real
Privacy Policy URL), preserving target="_blank" and rel="noopener noreferrer"
and keeping class="text-primary".
In `@infrastructure/eid-wallet/src/lib/utils/postLogin.ts`:
- Around line 55-65: The code sets sessionStorage key "deepLinkData" from
pendingDeepLink before awaiting goto("/scan-qr") but only removes
"pendingDeepLink" in the catch, leaving stale "deepLinkData" if navigation
fails; update the error handling in the pendingDeepLink block (the try/catch
around sessionStorage.setItem("deepLinkData") and await goto("/scan-qr")) to
also remove sessionStorage.removeItem("deepLinkData") when an exception is
caught so the stale payload cannot be replayed, ensuring both pendingDeepLink
and deepLinkData are cleared on navigation failure.
---
Outside diff comments:
In `@infrastructure/eid-wallet/src/routes/`+page.svelte:
- Around line 63-81: The current logic defaults onboardingComplete and
userExists to false when getGlobalState() is slow or reads throw, causing
returning users to be misrouted; change onboardingComplete and userExists to
start as undefined (or null) and only set them to boolean true/false after
successfully reading globalState.isOnboardingComplete and
globalState.userController.user; in the retry/failure paths (after the retries
loop or inside the catch) leave them undefined and surface a loading/error state
instead of falling back to the Create/Restore drawer; update any downstream
checks that inspect onboardingComplete/userExists to treat undefined as
"unknown" and defer routing until a definitive boolean is available.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1200afd2-03c5-4f28-b364-16234b888d8f

📥 Commits

Reviewing files that changed from the base of the PR and between 35a8c6d and f2e6e61.

📒 Files selected for processing (9)
  • infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
  • infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
  • infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
  • infrastructure/eid-wallet/src/lib/utils/postLogin.ts
  • infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
  • infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
  • infrastructure/eid-wallet/src/routes/+page.svelte

Comment threadinfrastructure/eid-wallet/src/lib/utils/postLogin.ts
@coodos
coodos merged commit 7548bdf into mainJun 2, 2026
4 checks passed
@coodos
coodos deleted the task/improvte-greeting-page-and-login-flow branch June 2, 2026 11:53
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.

eID Wallet: Reduce top spacing, show display name, and add edit button Hide "Continue" button on splash screen for already-registered users

2 participants

@Bekiboo@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

Feat: edit Display Name & remove "continue" step - #987

Merged
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow
Jun 2, 2026
Merged

Feat: edit Display Name & remove "continue" step#987
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow

Conversation

@Bekiboo

@BekibooBekiboo commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Description of change

  • Home greeting: trim redundant top padding, source display name from the self-binding doc (so KYC's legal name doesn't overwrite the handle the user typed), and re-enable the edit-name pencil with a bottom-sheet flow that re-issues the self-binding doc (create-new + delete-old, since evault-core has no update mutation).
  • Login flow: fire biometric over the splash itself for returning users — success routes straight to /main with no /login flash; cancel/fail slides into /login with a sessionStorage flag so /login skips its own biometric retry. Shared post-auth chores extracted to $lib/utils/postLogin.ts.
  • PIN screen: tapping the background refocuses the hidden PIN input to summon the soft keyboard without aiming for the dots. PinDots now exposes inputEl as $bindable.

Issue Number

Closes#982
Closes#981

Type of change

  • New (a change which implements a new feature)
  • Fix (a change which fixes an issue)

How the change has been tested

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

    • Users can now edit their display name from the main screen.
    • Automatic biometric authentication for returning users on splash screen.
  • Bug Fixes

    • Removed manual "Continue" button for returning users; streamlined authentication flow.
    • Improved PIN input focus handling for better keyboard interaction.
  • Refactor

    • Consolidated post-authentication logic for consistent handling across flows.

@BekibooBekiboo self-assigned this Jun 1, 2026
@coderabbitai

coderabbitaiBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR replaces the splash-screen "Continue" button for returning users with automatic biometric authentication, and adds display-name loading, caching, and editing on the home screen. Users can now edit their display name via a new bottom sheet on the wallet home screen, and returning users automatically attempt biometric unlock instead of tapping "Continue."

Changes

Authentication, Display Name, and User Profile Management

Layer / File(s)Summary
Splash Screen UI simplification
infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
Remove optional oncontinue prop from ISplashScreenProps; splash drawer now always renders Create/Restore actions and terms/privacy text.
PIN input element binding
infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
PinDots accepts optional bindable inputEl prop to enable parent-controlled focus and refocus behavior.
Self-binding document creation
infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
New createSelfBindingDoc utility re-issues the user's self-binding document (display name) via GraphQL mutation with owner signature.
Post-login flow consolidation
infrastructure/eid-wallet/src/lib/utils/postLogin.ts
New shared continueAfterSuccessfulAuth helper performs fire-and-forget eVault chores (health check, public-key sync, device registration) and handles deep-link routing after authentication.
Display name loading and caching on home screen
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Module-scope caches persist display name and self-binding doc ID; loadBindingDocuments parses both id_document and self binding entries from GraphQL response and updates caches.
EditNameSheet bottom-sheet component
infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
New component with bindable isOpen, controlled name input, trimming/validation logic, save() and close() handlers, and error display; seeds name from currentName on open via $effect.
Home screen display name integration and editing
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Home page wires display name to Greeting, adds handleEditNameSave to create new self-binding, update caches, and delete prior doc, and mounts EditNameSheet; styling adjusts top container padding.
Edit button visibility in Greeting component
infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
Uncomment and fix conditional rendering: replace commented-out template markers with real {#if !tourActive} wrapper to conditionally show edit affordance.
Biometric auto-auth on splash screen
infrastructure/eid-wallet/src/routes/+page.svelte
Splash route adds biometric configuration and returning-user auto-navigation: checks for existing PIN, redirects to /onboarding if none, probes biometric availability, runs biometric auth with sessionStorage tracking, and routes to shared post-login logic on success or /login on failure.
Login page PIN input management and biometric tracking
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
Login page imports shared continueAfterSuccessfulAuth, introduces BIOMETRIC_ATTEMPTED_KEY for single-use biometric skip, manages pinInput ref, adds background click handler to refocus PIN input while skipping interactive elements, and wires PinDots to use managed input element.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • MetaState-Prototype-Project/prototype#437: The main PR's continueAfterSuccessfulAuth post-login helper performs an eVault health check, which depends on the VaultController.checkHealth functionality added in this PR.

Suggested labels

evault-refactor

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 A splash screen's "Continue" hops away,
Returning users biometrically play,
Display names now editable with care,
A fresh, swift login—no waiting there! 🌟

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 66.67% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check❓ InconclusiveThe PR description covers key changes to home greeting, login flow, and PIN screen but lacks testing details and has incomplete checklist.Add a 'How the change has been tested' section with specific testing steps, environments, and verification methods to demonstrate the features work as intended.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the two main changes: adding display name editing and removing the continue step for registered users.
Linked Issues check✅ PassedCode changes directly address both requirements: display name editing with UI component and edit flow [#982], and biometric/PIN flow skipping splash for registered users [#981].
Out of Scope Changes check✅ PassedAll changes are scoped to the two linked issues; no unrelated modifications detected in UI, utilities, or routing logic.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task/improvte-greeting-page-and-login-flow

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.

@BekibooBekiboo changed the title Tighten home page top spacingFeat: edit Display Name & remove "continue" stepJun 2, 2026
@Bekiboo
Bekiboo marked this pull request as ready for review June 2, 2026 06:13
@Bekiboo
Bekiboo requested a review from coodos as a code ownerJune 2, 2026 06:13

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
infrastructure/eid-wallet/src/routes/+page.svelte (1)

63-81: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't default failed user-state reads to the first-time-user flow.

If getGlobalState() never resolves here, or either state read throws, onboardingComplete and userExists stay false and the code later falls into the Create/Restore drawer. That misclassifies returning users during slow init or transient state errors and defeats the new auto-auth path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@infrastructure/eid-wallet/src/routes/`+page.svelte around lines 63 - 81, The
current logic defaults onboardingComplete and userExists to false when
getGlobalState() is slow or reads throw, causing returning users to be
misrouted; change onboardingComplete and userExists to start as undefined (or
null) and only set them to boolean true/false after successfully reading
globalState.isOnboardingComplete and globalState.userController.user; in the
retry/failure paths (after the retries loop or inside the catch) leave them
undefined and surface a loading/error state instead of falling back to the
Create/Restore drawer; update any downstream checks that inspect
onboardingComplete/userExists to treat undefined as "unknown" and defer routing
until a definitive boolean is available.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte`:
- Around line 113-129: The two anchor elements in SplashScreen.svelte that
render "Terms & Conditions" and "Privacy Policy" currently point to the same
generic URL; update the href attributes on the corresponding <a> tags in the
SplashScreen.svelte fragment so each link targets its specific document (replace
the first link with the real Terms & Conditions URL and the second with the real
Privacy Policy URL), preserving target="_blank" and rel="noopener noreferrer"
and keeping class="text-primary".
In `@infrastructure/eid-wallet/src/lib/utils/postLogin.ts`:
- Around line 55-65: The code sets sessionStorage key "deepLinkData" from
pendingDeepLink before awaiting goto("/scan-qr") but only removes
"pendingDeepLink" in the catch, leaving stale "deepLinkData" if navigation
fails; update the error handling in the pendingDeepLink block (the try/catch
around sessionStorage.setItem("deepLinkData") and await goto("/scan-qr")) to
also remove sessionStorage.removeItem("deepLinkData") when an exception is
caught so the stale payload cannot be replayed, ensuring both pendingDeepLink
and deepLinkData are cleared on navigation failure.
---
Outside diff comments:
In `@infrastructure/eid-wallet/src/routes/`+page.svelte:
- Around line 63-81: The current logic defaults onboardingComplete and
userExists to false when getGlobalState() is slow or reads throw, causing
returning users to be misrouted; change onboardingComplete and userExists to
start as undefined (or null) and only set them to boolean true/false after
successfully reading globalState.isOnboardingComplete and
globalState.userController.user; in the retry/failure paths (after the retries
loop or inside the catch) leave them undefined and surface a loading/error state
instead of falling back to the Create/Restore drawer; update any downstream
checks that inspect onboardingComplete/userExists to treat undefined as
"unknown" and defer routing until a definitive boolean is available.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1200afd2-03c5-4f28-b364-16234b888d8f

📥 Commits

Reviewing files that changed from the base of the PR and between 35a8c6d and f2e6e61.

📒 Files selected for processing (9)
  • infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
  • infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
  • infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
  • infrastructure/eid-wallet/src/lib/utils/postLogin.ts
  • infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
  • infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
  • infrastructure/eid-wallet/src/routes/+page.svelte

Comment threadinfrastructure/eid-wallet/src/lib/utils/postLogin.ts
@coodos
coodos merged commit 7548bdf into mainJun 2, 2026
4 checks passed
@coodos
coodos deleted the task/improvte-greeting-page-and-login-flow branch June 2, 2026 11:53
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.

eID Wallet: Reduce top spacing, show display name, and add edit button Hide "Continue" button on splash screen for already-registered users

2 participants

@Bekiboo@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

Feat: edit Display Name & remove "continue" step - #987

Merged
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow
Jun 2, 2026
Merged

Feat: edit Display Name & remove "continue" step#987
coodos merged 7 commits into
mainfrom
task/improvte-greeting-page-and-login-flow

Conversation

@Bekiboo

@BekibooBekiboo commented Jun 1, 2026

Copy link
Copy Markdown
Collaborator

Description of change

  • Home greeting: trim redundant top padding, source display name from the self-binding doc (so KYC's legal name doesn't overwrite the handle the user typed), and re-enable the edit-name pencil with a bottom-sheet flow that re-issues the self-binding doc (create-new + delete-old, since evault-core has no update mutation).
  • Login flow: fire biometric over the splash itself for returning users — success routes straight to /main with no /login flash; cancel/fail slides into /login with a sessionStorage flag so /login skips its own biometric retry. Shared post-auth chores extracted to $lib/utils/postLogin.ts.
  • PIN screen: tapping the background refocuses the hidden PIN input to summon the soft keyboard without aiming for the dots. PinDots now exposes inputEl as $bindable.

Issue Number

Closes#982
Closes#981

Type of change

  • New (a change which implements a new feature)
  • Fix (a change which fixes an issue)

How the change has been tested

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

    • Users can now edit their display name from the main screen.
    • Automatic biometric authentication for returning users on splash screen.
  • Bug Fixes

    • Removed manual "Continue" button for returning users; streamlined authentication flow.
    • Improved PIN input focus handling for better keyboard interaction.
  • Refactor

    • Consolidated post-authentication logic for consistent handling across flows.

@BekibooBekiboo self-assigned this Jun 1, 2026
@coderabbitai

coderabbitaiBot commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR replaces the splash-screen "Continue" button for returning users with automatic biometric authentication, and adds display-name loading, caching, and editing on the home screen. Users can now edit their display name via a new bottom sheet on the wallet home screen, and returning users automatically attempt biometric unlock instead of tapping "Continue."

Changes

Authentication, Display Name, and User Profile Management

Layer / File(s)Summary
Splash Screen UI simplification
infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
Remove optional oncontinue prop from ISplashScreenProps; splash drawer now always renders Create/Restore actions and terms/privacy text.
PIN input element binding
infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
PinDots accepts optional bindable inputEl prop to enable parent-controlled focus and refocus behavior.
Self-binding document creation
infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
New createSelfBindingDoc utility re-issues the user's self-binding document (display name) via GraphQL mutation with owner signature.
Post-login flow consolidation
infrastructure/eid-wallet/src/lib/utils/postLogin.ts
New shared continueAfterSuccessfulAuth helper performs fire-and-forget eVault chores (health check, public-key sync, device registration) and handles deep-link routing after authentication.
Display name loading and caching on home screen
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Module-scope caches persist display name and self-binding doc ID; loadBindingDocuments parses both id_document and self binding entries from GraphQL response and updates caches.
EditNameSheet bottom-sheet component
infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
New component with bindable isOpen, controlled name input, trimming/validation logic, save() and close() handlers, and error display; seeds name from currentName on open via $effect.
Home screen display name integration and editing
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
Home page wires display name to Greeting, adds handleEditNameSave to create new self-binding, update caches, and delete prior doc, and mounts EditNameSheet; styling adjusts top container padding.
Edit button visibility in Greeting component
infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
Uncomment and fix conditional rendering: replace commented-out template markers with real {#if !tourActive} wrapper to conditionally show edit affordance.
Biometric auto-auth on splash screen
infrastructure/eid-wallet/src/routes/+page.svelte
Splash route adds biometric configuration and returning-user auto-navigation: checks for existing PIN, redirects to /onboarding if none, probes biometric availability, runs biometric auth with sessionStorage tracking, and routes to shared post-login logic on success or /login on failure.
Login page PIN input management and biometric tracking
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
Login page imports shared continueAfterSuccessfulAuth, introduces BIOMETRIC_ATTEMPTED_KEY for single-use biometric skip, manages pinInput ref, adds background click handler to refocus PIN input while skipping interactive elements, and wires PinDots to use managed input element.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • MetaState-Prototype-Project/prototype#437: The main PR's continueAfterSuccessfulAuth post-login helper performs an eVault health check, which depends on the VaultController.checkHealth functionality added in this PR.

Suggested labels

evault-refactor

Suggested reviewers

  • coodos
  • sosweetham

Poem

🐰 A splash screen's "Continue" hops away,
Returning users biometrically play,
Display names now editable with care,
A fresh, swift login—no waiting there! 🌟

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check nameStatusExplanationResolution
Docstring Coverage⚠️ WarningDocstring coverage is 66.67% which is insufficient. The required threshold is 80.00%.Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check❓ InconclusiveThe PR description covers key changes to home greeting, login flow, and PIN screen but lacks testing details and has incomplete checklist.Add a 'How the change has been tested' section with specific testing steps, environments, and verification methods to demonstrate the features work as intended.
✅ Passed checks (3 passed)
Check nameStatusExplanation
Title check✅ PassedThe title clearly summarizes the two main changes: adding display name editing and removing the continue step for registered users.
Linked Issues check✅ PassedCode changes directly address both requirements: display name editing with UI component and edit flow [#982], and biometric/PIN flow skipping splash for registered users [#981].
Out of Scope Changes check✅ PassedAll changes are scoped to the two linked issues; no unrelated modifications detected in UI, utilities, or routing logic.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task/improvte-greeting-page-and-login-flow

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.

@BekibooBekiboo changed the title Tighten home page top spacingFeat: edit Display Name & remove "continue" stepJun 2, 2026
@Bekiboo
Bekiboo marked this pull request as ready for review June 2, 2026 06:13
@Bekiboo
Bekiboo requested a review from coodos as a code ownerJune 2, 2026 06:13

@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: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
infrastructure/eid-wallet/src/routes/+page.svelte (1)

63-81: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Don't default failed user-state reads to the first-time-user flow.

If getGlobalState() never resolves here, or either state read throws, onboardingComplete and userExists stay false and the code later falls into the Create/Restore drawer. That misclassifies returning users during slow init or transient state errors and defeats the new auto-auth path.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@infrastructure/eid-wallet/src/routes/`+page.svelte around lines 63 - 81, The
current logic defaults onboardingComplete and userExists to false when
getGlobalState() is slow or reads throw, causing returning users to be
misrouted; change onboardingComplete and userExists to start as undefined (or
null) and only set them to boolean true/false after successfully reading
globalState.isOnboardingComplete and globalState.userController.user; in the
retry/failure paths (after the retries loop or inside the catch) leave them
undefined and surface a loading/error state instead of falling back to the
Create/Restore drawer; update any downstream checks that inspect
onboardingComplete/userExists to treat undefined as "unknown" and defer routing
until a definitive boolean is available.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte`:
- Around line 113-129: The two anchor elements in SplashScreen.svelte that
render "Terms & Conditions" and "Privacy Policy" currently point to the same
generic URL; update the href attributes on the corresponding <a> tags in the
SplashScreen.svelte fragment so each link targets its specific document (replace
the first link with the real Terms & Conditions URL and the second with the real
Privacy Policy URL), preserving target="_blank" and rel="noopener noreferrer"
and keeping class="text-primary".
In `@infrastructure/eid-wallet/src/lib/utils/postLogin.ts`:
- Around line 55-65: The code sets sessionStorage key "deepLinkData" from
pendingDeepLink before awaiting goto("/scan-qr") but only removes
"pendingDeepLink" in the catch, leaving stale "deepLinkData" if navigation
fails; update the error handling in the pendingDeepLink block (the try/catch
around sessionStorage.setItem("deepLinkData") and await goto("/scan-qr")) to
also remove sessionStorage.removeItem("deepLinkData") when an exception is
caught so the stale payload cannot be replayed, ensuring both pendingDeepLink
and deepLinkData are cleared on navigation failure.
---
Outside diff comments:
In `@infrastructure/eid-wallet/src/routes/`+page.svelte:
- Around line 63-81: The current logic defaults onboardingComplete and
userExists to false when getGlobalState() is slow or reads throw, causing
returning users to be misrouted; change onboardingComplete and userExists to
start as undefined (or null) and only set them to boolean true/false after
successfully reading globalState.isOnboardingComplete and
globalState.userController.user; in the retry/failure paths (after the retries
loop or inside the catch) leave them undefined and surface a loading/error state
instead of falling back to the Create/Restore drawer; update any downstream
checks that inspect onboardingComplete/userExists to treat undefined as
"unknown" and defer routing until a definitive boolean is available.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1200afd2-03c5-4f28-b364-16234b888d8f

📥 Commits

Reviewing files that changed from the base of the PR and between 35a8c6d and f2e6e61.

📒 Files selected for processing (9)
  • infrastructure/eid-wallet/src/lib/fragments/SplashScreen/SplashScreen.svelte
  • infrastructure/eid-wallet/src/lib/ui/PinDots/PinDots.svelte
  • infrastructure/eid-wallet/src/lib/utils/personalBinding.ts
  • infrastructure/eid-wallet/src/lib/utils/postLogin.ts
  • infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/EditNameSheet.svelte
  • infrastructure/eid-wallet/src/routes/(app)/main/components/Greeting.svelte
  • infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
  • infrastructure/eid-wallet/src/routes/+page.svelte

Comment threadinfrastructure/eid-wallet/src/lib/utils/postLogin.ts
@coodos
coodos merged commit 7548bdf into mainJun 2, 2026
4 checks passed
@coodos
coodos deleted the task/improvte-greeting-page-and-login-flow branch June 2, 2026 11:53
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.

eID Wallet: Reduce top spacing, show display name, and add edit button Hide "Continue" button on splash screen for already-registered users

2 participants

@Bekiboo@coodos