Add comprehensive seed phrase backup reminder system to encourage users
to secure their identity after creating content.
Core Features:
- Modal dialog with "Backup Identifier Seed" and "Remind me Later" options
- 24-hour localStorage cooldown to prevent notification fatigue
- 1-second delay after success messages for better UX flow
- Focuses on claim creation actions, not confirmations
New Files:
- src/utils/seedPhraseReminder.ts: Core utility for reminder logic
- doc/seed-phrase-reminder-implementation.md: Comprehensive documentation
Trigger Points Added:
- Profile saving (AccountViewView)
- Claim creation (ClaimAddRawView, GiftedDialog, GiftedDetailsView)
- Offer creation (OfferDialog)
- QR code view exit (ContactQRScanFullView, ContactQRScanShowView)
Technical Implementation:
- Uses existing notification group modal system from App.vue
- Integrates with PlatformServiceMixin for account settings access
- Graceful error handling with logging fallbacks
- Non-blocking implementation that doesn't affect main functionality
- Modal stays open indefinitely (timeout: -1) until user interaction
User Experience:
- Non-intrusive reminders that respect user preferences
- Clear call-to-action for security-conscious users
- Seamless integration with existing workflows
- Maintains focus on content creation rather than confirmation actions
- Change server switching logs to debug level
- Implement structured error logging for profile operations
- Handle common HTTP status codes gracefully
- Maintain user notifications while cleaning console output
Removes over-engineered ProfileService and ServiceInitializationManager
classes that were only used in one place. Inlines all profile logic
directly into AccountViewView.vue to reduce complexity and improve
maintainability.
- Deletes ProfileService.ts (325 lines)
- Deletes ServiceInitializationManager.ts (207 lines)
- Inlines ProfileData interface and methods into AccountViewView
- Maintains all existing functionality while reducing code footprint
perf(logging): convert excessive info logs to debug level
Reduces console noise by converting high-frequency, low-value logging
from info to debug level across navigation, API calls, and component
lifecycle operations. Improves performance and reduces log verbosity
for normal application flow.
- Router navigation guards: info → debug
- Plan loading operations: info → debug
- User registration checks: info → debug
- Image server rate limits: info → debug
- Component lifecycle events: info → debug
- Settings loading operations: info → debug
Maintains warn/error levels for actual issues while reducing noise
from expected application behavior.
- Fix fetchImageRateLimits to accept configurable imageServer parameter instead
of hardcoded DEFAULT_IMAGE_API_SERVER
- Add enhanced diagnostic logging for image server operations with server
context, error tracking, and user registration status
- Update AccountViewView.vue to pass correct image server parameter
- Ensure consistent server switching behavior across all API endpoints
- Prevent similar server configuration issues in image operations
Fixes server switching not applying to image rate limit checks and provides
complete visibility into image server operations for debugging and monitoring.
- Enhanced user registration diagnostics with detailed error context
- Server switching flow logging with before/after values
- Improved error handling with server context
- Fixed type safety issues
Confirms server switching fix is working perfectly while providing
comprehensive debugging for user migration and environment issues.
- Fix database query logic in PlatformServiceMixin.$getSettings() to properly
distinguish between master settings (ID) and account settings (DID)
- Add comprehensive logging for settings debugging with request IDs and
component tracking
- Fix ProfileService initialization order in AccountViewView to use correct
partnerApiServer after settings load
- Add URL flow testing interface in TestView for debugging server switching
- Enhance settings consistency validation and error handling
Resolves issue where profile server changes were saved but not applied due to
incorrect database query logic and settings priority handling.
Files changed: PlatformServiceMixin.ts, AccountViewView.vue, TestView.vue,
TopMessage.vue, main.ts, router/index.ts
Testing: Added comprehensive URL flow testing interface for validation
- Centralize all registration notice logic within upgraded RegistrationNotice component
- Clean up unused methods and imports in HomeView and AccountViewView
- Customizable message to maintain original contextual wordings unique to each view
Component is now more focused and follows Vue.js best practices
for conditional rendering.
Removes debug span showing map loading status that was left in production code.
Keeps map functionality intact while cleaning up UI for production use.
- Replace any types in ProfileService with AxiosErrorResponse interface
- Add type-safe error URL extraction method
- Fix Leaflet icon type assertion using Record<string, unknown>
- Enhance AxiosErrorResponse interface with missing properties
- Maintain existing functionality while improving type safety
Closes typing violations in ProfileService.ts and AccountViewView.vue
- Replace type assertions with proper type guards in ProfileService
- Add isAxiosError type guard and improve error handling
- Clean up formatting and improve type safety in deepLinks service
- Remove type assertions in AccountViewView Vue component
- Improve code formatting and consistency across services
- Fix Leaflet icon initialization error causing "Cannot read properties of undefined (reading 'Default')"
- Add proper Leaflet icon configuration with CDN fallbacks
- Implement map ready state management to prevent infinite loading
- Add comprehensive error handling and debugging for map lifecycle events
- Fix profile deletion treating HTTP 204 (No Content) as error instead of success
- Enhance error logging and user feedback throughout profile operations
- Add fallback timeout mechanisms for map initialization failures
- Improve error messages to show specific API failure reasons
Resolves map rendering issues and profile deletion failures by properly
handling HTTP status codes and Leaflet component initialization.
- Remove console statements and replace with proper logging
- Fix line length violations in comments
- Maintain functionality while improving code quality
Reduces lint warnings from 30 to 25 by addressing:
- 3 console statement violations
- 2 line length violations
- Fix navigation to use correct QR code routes (contact-qr/contact-qr-scan-full)
- Replace deep link generation with CSV format QR codes
- Remove unused imports and fix notification method calls
- Aligns with master branch behavior for contact sharing
Resolves issue where Share Your Info showed "not implemented" and generated
localhost deep links instead of proper CSV format QR codes.
- Fix aria-hidden conflict on trash can icon by wrapping in proper button element
- Fix image deletion API endpoint by extracting image ID from full URL
- Improve 404 error handling to clear local image reference when image already deleted
- Resolve accessibility warning and prevent invalid API calls
- Add user-specific settings save to onClickSaveApiServer() method
- Ensures API server changes persist for current user account
- Aligns with pattern used by other server settings (partner, push)
- Resolves issue where claim server changes weren't "sticking"
- Add configurable entity display logic via function props to EntityGrid
- Implement comprehensive test suite for EntityGrid function props in TestView
- Apply consistent code formatting across 15 components and views
- Fix linting issues with trailing commas and line breaks
- Add new EntityGridFunctionPropTest.vue for component testing
- Update endorserServer with improved error handling and logging
- Streamline PlatformServiceMixin with better cache management
- Enhance component documentation and type safety
Changes span 15 files with 159 additions and 69 deletions, focusing on
component flexibility, code quality, and testing infrastructure.
- Add configurable entity display logic via function props to EntityGrid
- Implement comprehensive test suite for EntityGrid function props in TestView
- Apply consistent code formatting across 15 components and views
- Fix linting issues with trailing commas and line breaks
- Add new EntityGridFunctionPropTest.vue for component testing
- Update endorserServer with improved error handling and logging
- Streamline PlatformServiceMixin with better cache management
- Enhance component documentation and type safety
Changes span 15 files with 159 additions and 69 deletions, focusing on
component flexibility, code quality, and testing infrastructure.
Clean up all temporary debugging console.log statements added during
registration status troubleshooting. Remove debug output from multiple
components while preserving essential error logging and functionality.
Changes:
- PlatformServiceMixin.ts: Remove debug logging from $saveUserSettings and $saveMySettings
- AccountViewView.vue: Remove debug logging from mounted, initializeState, checkLimits, and onRecheckLimits
- UsageLimitsSection.vue: Remove debug logging from lifecycle hooks and recheckLimits
- IdentitySwitcherView.vue: Remove debug logging from switchAccount method
All core functionality preserved including error handling with logger.error()
and user notifications. Codebase now production-ready without debugging noise.
Clean up all temporary debugging console.log statements added during
registration status troubleshooting. Remove debug output from multiple
components while preserving essential error logging and functionality.
Changes:
- PlatformServiceMixin.ts: Remove debug logging from $saveUserSettings and $saveMySettings
- AccountViewView.vue: Remove debug logging from mounted, initializeState, checkLimits, and onRecheckLimits
- UsageLimitsSection.vue: Remove debug logging from lifecycle hooks and recheckLimits
- IdentitySwitcherView.vue: Remove debug logging from switchAccount method
All core functionality preserved including error handling with logger.error()
and user notifications. Codebase now production-ready without debugging noise.
Resolved issue where registration banner persisted despite successful API registration.
Root cause was loadSettings() being called after initializeIdentity(), overwriting
updated isRegistered value with stale database data.
Changes:
- Remove redundant loadSettings() call from mounted() lifecycle
- Add $nextTick() to force template re-render after registration updates
- Create isUserRegistered computed property for template reactivity
- Clean up debugging console.log statements for production readiness
- Simplify template logic to use standard v-if/v-else pattern
Registration banner now properly disappears when users are registered, and
"Record something given by:" section appears correctly. Fix maintains existing
functionality while ensuring proper Vue reactivity.
Resolved issue where registration banner persisted despite successful API registration.
Root cause was loadSettings() being called after initializeIdentity(), overwriting
updated isRegistered value with stale database data.
Changes:
- Remove redundant loadSettings() call from mounted() lifecycle
- Add $nextTick() to force template re-render after registration updates
- Create isUserRegistered computed property for template reactivity
- Clean up debugging console.log statements for production readiness
- Simplify template logic to use standard v-if/v-else pattern
Registration banner now properly disappears when users are registered, and
"Record something given by:" section appears correctly. Fix maintains existing
functionality while ensuring proper Vue reactivity.
- Restored proper section container with bg-slate-100 styling and accessibility attributes
- Added FontAwesome spinner with proper ARIA labels for loading state
- Restored detailed limits information showing claims/week, registrations/month, and images/week
- Added proper pluralization and date formatting for reset timers
- Enhanced button styling to match original design with slate gradient
- Added activeDid, endorserLimits, and imageLimits props to component
- Maintained comprehensive debugging for troubleshooting User #00 limits issue
- Added readableDate helper method for consistent date formatting
Fixes missing functionality that was lost during component extraction from AccountViewView.
- Restored proper section container with bg-slate-100 styling and accessibility attributes
- Added FontAwesome spinner with proper ARIA labels for loading state
- Restored detailed limits information showing claims/week, registrations/month, and images/week
- Added proper pluralization and date formatting for reset timers
- Enhanced button styling to match original design with slate gradient
- Added activeDid, endorserLimits, and imageLimits props to component
- Maintained comprehensive debugging for troubleshooting User #00 limits issue
- Added readableDate helper method for consistent date formatting
Fixes missing functionality that was lost during component extraction from AccountViewView.
- Remove duplicate NOTIFY_INVITE_MISSING and NOTIFY_INVITE_PROCESSING_ERROR exports
- Update InviteOneAcceptView.vue to use correct NOTIFY_INVITE_TRUNCATED_DATA constant
- Migrate ContactsView to PlatformServiceMixin and extract into modular sub-components
- Resolves TypeScript compilation errors preventing web build
- Remove duplicate NOTIFY_INVITE_MISSING and NOTIFY_INVITE_PROCESSING_ERROR exports
- Update InviteOneAcceptView.vue to use correct NOTIFY_INVITE_TRUNCATED_DATA constant
- Migrate ContactsView to PlatformServiceMixin and extract into modular sub-components
- Resolves TypeScript compilation errors preventing web build
Replace static databaseUtil import with dynamic import pattern for test context.
Add comprehensive JSDoc documentation and improve code formatting.
Maintains functionality while removing static dependency.
Replace static databaseUtil import with dynamic import pattern for test context.
Add comprehensive JSDoc documentation and improve code formatting.
Maintains functionality while removing static dependency.
- Refactor notify usage in GiftedDialog.vue, AccountViewView.vue, ClaimView.vue, and DataExportSection.vue:
• Use notify as a property initialized in created() with createNotifyHelpers(this.$notify)
• Remove getter-based notify patterns for consistency and lifecycle safety
• Fix linter/type errors related to notify property initialization
- Add mandatory per-file migration workflow to doc/migration-progress-tracker.md:
• For each file: (1) migrate to PlatformServiceMixin, (2) immediately standardize notify usage and fix linter/type errors
• Clarifies this two-step process is required for every file, not as a global sweep
All migrated files are now consistent, maintainable, and ready for further migration work.
- Refactor notify usage in GiftedDialog.vue, AccountViewView.vue, ClaimView.vue, and DataExportSection.vue:
• Use notify as a property initialized in created() with createNotifyHelpers(this.$notify)
• Remove getter-based notify patterns for consistency and lifecycle safety
• Fix linter/type errors related to notify property initialization
- Add mandatory per-file migration workflow to doc/migration-progress-tracker.md:
• For each file: (1) migrate to PlatformServiceMixin, (2) immediately standardize notify usage and fix linter/type errors
• Clarifies this two-step process is required for every file, not as a global sweep
All migrated files are now consistent, maintainable, and ready for further migration work.
- Added ref="userNameDialog" to UserNameDialog in AccountViewView.vue template
- Patched onEditName() to check for dialog ref and open() method before calling
- Improved error notification to use NotificationIface fields (group, type, title, text)
- Prevents "Cannot read properties of undefined (reading 'open')" error if dialog is missing
- Added ref="userNameDialog" to UserNameDialog in AccountViewView.vue template
- Patched onEditName() to check for dialog ref and open() method before calling
- Improved error notification to use NotificationIface fields (group, type, title, text)
- Prevents "Cannot read properties of undefined (reading 'open')" error if dialog is missing
- Replace 'as any' with 'InstanceType<typeof UserNameDialog>' for proper typing
- Update callback parameter to match component interface (name?: string)
- Eliminates TypeScript warning while maintaining type safety
- Replace 'as any' with 'InstanceType<typeof UserNameDialog>' for proper typing
- Update callback parameter to match component interface (name?: string)
- Eliminates TypeScript warning while maintaining type safety