Skip to content

Enhanced Contact Page UX: Real-time Updates, Auto QRZ Lookup, and Improved Layout - #136

Merged
patrickrb merged 4 commits into
mainfrom
copilot/fix-135
Aug 21, 2025
Merged

Enhanced Contact Page UX: Real-time Updates, Auto QRZ Lookup, and Improved Layout#136
patrickrb merged 4 commits into
mainfrom
copilot/fix-135

Conversation

Copilot AI commented Aug 21, 2025

Copy link
Copy Markdown
Contributor

Significantly improved the Contact page user experience by implementing real-time updates, automatic QRZ lookup, and optimized layout design based on user feedback.

Key Improvements

Real-time Responsiveness

  • Faster updates: Reduced debounce delay from 500ms to 300ms for more responsive contact history and map updates
  • Automatic QRZ lookup: Removed manual search button and implemented automatic callsign lookup as users type
  • Live feedback: Added loading spinner inside callsign input field during QRZ queries

Optimized Layout Design

  • Map repositioned: Moved Contact Location Map above Recent Contacts for better visual hierarchy since map maintains consistent size
  • Always-visible sections: Both map and contact history sections now display immediately with informative placeholders
  • Improved visual balance: Right sidebar maintains consistent content presence even before data entry

Enhanced User Experience

  • Seamless workflow: Map and contacts update simultaneously as users type callsigns
  • Clear guidance: Dynamic placeholder messages guide users on expected functionality
  • Streamlined interface: Removed unnecessary UI elements (manual search button) in favor of automatic behavior
  • Updated shortcuts: Simplified keyboard shortcuts to reflect automatic QRZ lookup

Technical Implementation

The changes preserve all existing functionality while providing a more polished and intuitive interface:

  • Updated conditional rendering logic to always show both sections with context-aware placeholders
  • Implemented automatic QRZ lookup with debounced API calls
  • Enhanced loading states with inline spinner indicators
  • Optimized layout order for better visual flow and user expectations

These improvements create a more professional and user-friendly contact logging experience that responds immediately to user input while maintaining clear visual hierarchy and functionality.

Fixes #135.


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

@vercel

vercel Bot commented Aug 21, 2025

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
nodelog Ready Ready Preview Comment Aug 21, 2025 3:40pm

…t sidebar

Co-authored-by: patrickrb <6586559+patrickrb@users.noreply.github.com>
Copilot AI changed the title [WIP] UI Update: Move Recent Contacts and Map to Right Side of Contact Page UI Update: Move Recent Contacts and Map to Right Side of Contact Page Aug 21, 2025
Copilot AI requested a review from patrickrb August 21, 2025 15:07

@patrickrb patrickrb left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

@copilot

I love it, But lets have a placeholder on page load for the previous contacts and map instead of hiding them until the user types a call sign

Co-authored-by: patrickrb <6586559+patrickrb@users.noreply.github.com>

Copilot AI commented Aug 21, 2025

Copy link
Copy Markdown
Contributor Author

@copilot

I love it, But lets have a placeholder on page load for the previous contacts and map instead of hiding them until the user types a call sign

Done! I've implemented placeholders for both the Recent Contacts and Map sections that now show immediately on page load instead of being hidden.

Changes made (commit 45a79d1):

Recent Contacts Section:

  • Always visible with informative placeholder: "Enter a callsign to see previous contacts"
  • Shows different messages for "no callsign entered" vs "callsign entered but no contacts found"
  • Card description updates dynamically based on user input

Contact Location Map Section:

  • Always visible with informative placeholder: "No Contact Selected - Enter a callsign or location data to see the contact on the map"
  • Shows different placeholder messages based on whether a callsign is entered
  • Card description updates dynamically

Key Improvements:

  • Both sections provide immediate visual context about what will appear
  • Helpful placeholder content guides users on expected behavior
  • Dynamic descriptions that update as user interacts with the form
  • All existing functionality preserved while improving the user experience

The layout now provides better visual balance with consistent content in the right sidebar, making it clear what functionality is available even before the user enters any data.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --mute-audio --crashpad-handler-pid=3789 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6834604161195413516,17657762450725585998,262144 --disable-features=AcceptCHFrame,AutoDeElevate,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --variations-seed-version (dns block)
    • Triggering command: /opt/google/chrome/chrome --disable-field-trial-config --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-REDACTED-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-REDACTEDing --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --enable-automation --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --remote-debugging-pipe --no-startup-window (dns block)
    • Triggering command: /home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js (dns block)
  • clients2.google.com
    • Triggering command: /opt/google/chrome/chrome --disable-field-trial-config --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-REDACTED-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-REDACTEDing --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --enable-automation --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --remote-debugging-pipe --no-startup-window (dns block)
  • content-autofill.googleapis.com
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --mute-audio --crashpad-handler-pid=3789 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6834604161195413516,17657762450725585998,262144 --disable-features=AcceptCHFrame,AutoDeElevate,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --variations-seed-version (dns block)
    • Triggering command: /opt/google/chrome/chrome --disable-field-trial-config --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-REDACTED-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-REDACTEDing --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --enable-automation --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --remote-debugging-pipe --no-startup-window (dns block)
  • optimizationguide-pa.googleapis.com
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --mute-audio --crashpad-handler-pid=3789 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6834604161195413516,17657762450725585998,262144 --disable-features=AcceptCHFrame,AutoDeElevate,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --variations-seed-version (dns block)
    • Triggering command: /opt/google/chrome/chrome --disable-field-trial-config --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-REDACTED-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-REDACTEDing --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --enable-automation --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --remote-debugging-pipe --no-startup-window (dns block)
  • redirector.gvt1.com
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --mute-audio --crashpad-handler-pid=3789 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6834604161195413516,17657762450725585998,262144 --disable-features=AcceptCHFrame,AutoDeElevate,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --variations-seed-version (dns block)
    • Triggering command: /opt/google/chrome/chrome --disable-field-trial-config --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-REDACTED-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-REDACTEDing --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --enable-automation --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --remote-debugging-pipe --no-startup-window (dns block)
  • safebrowsingohttpgateway.googleapis.com
    • Triggering command: /opt/google/chrome/chrome --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --disable-dev-shm-usage --use-angle=swiftshader-webgl --mute-audio --crashpad-handler-pid=3789 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6834604161195413516,17657762450725585998,262144 --disable-features=AcceptCHFrame,AutoDeElevate,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --variations-seed-version (dns block)
    • Triggering command: /opt/google/chrome/chrome --disable-field-trial-config --disable-REDACTED-networking --disable-REDACTED-timer-throttling --disable-REDACTEDing-occluded-windows --disable-back-forward-cache --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-REDACTED-pages --disable-component-update --no-default-browser-check --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate --allow-pre-commit-input --disable-hang-monitor --disable-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-REDACTEDing --force-color-profile=srgb --metrics-recording-only --no-first-run --password-store=basic --use-mock-keychain --no-service-autorun --export-tagged-pdf --disable-search-engine-choice-screen --unsafely-disable-devtools-self-xss-warnings --edge-skip-compat-layer-relaunch --enable-automation --headless --hide-scrollbars --mute-audio --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-7REl4C --remote-debugging-pipe --no-startup-window (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot AI changed the title UI Update: Move Recent Contacts and Map to Right Side of Contact Page UI Update: Add Placeholders for Recent Contacts and Map on Contact Page Load Aug 21, 2025
Copilot AI requested a review from patrickrb August 21, 2025 15:29

@patrickrb patrickrb left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

@copilot Perfect! now lets put the map on top since its always the same size. Also, lets make sure the map and the contacts update at the same time as the user types. Lets show a spinner while it queries QRZ but we dont need the search button.

Co-authored-by: patrickrb <6586559+patrickrb@users.noreply.github.com>

Copilot AI commented Aug 21, 2025

Copy link
Copy Markdown
Contributor Author

@copilot Perfect! now lets put the map on top since its always the same size. Also, lets make sure the map and the contacts update at the same time as the user types. Lets show a spinner while it qu...

Done! I've implemented all the requested improvements (commit 90017a6):

🔄 Map on top: Contact Location Map now appears above Recent Contacts for better visual hierarchy

Real-time updates: Both map and contacts now update as you type with reduced 300ms debounce (was 500ms)

🔍 Auto QRZ lookup: Removed search button and added automatic lookup with spinner indicator in the callsign field

Key Changes Made:

  • Swapped layout order: Map → Recent Contacts (consistent size positioning)
  • Automatic QRZ lookup triggers as user types (no button required)
  • Loading spinner appears inside callsign input during lookup
  • Updated keyboard shortcuts (removed Ctrl+Q since lookup is automatic)
  • Reduced debounce delay for more responsive updates

The interface now provides immediate visual feedback as users type, with the map maintaining consistent size at the top and both sections updating seamlessly in real-time.

Copilot AI changed the title UI Update: Add Placeholders for Recent Contacts and Map on Contact Page Load Enhanced Contact Page UX: Real-time Updates, Auto QRZ Lookup, and Improved Layout Aug 21, 2025
Copilot AI requested a review from patrickrb August 21, 2025 15:42
@patrickrb
patrickrb marked this pull request as ready for review August 21, 2025 15:51

@patrickrb patrickrb left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Nice work! Merging!

@patrickrb
patrickrb merged commit 9d25cf9 into main Aug 21, 2025
5 checks passed
@patrickrb
patrickrb deleted the copilot/fix-135 branch August 21, 2025 15:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

UI Update: Move Recent Contacts and Map to Right Side of Contact Page

2 participants