Introduce an email field in the user profile, allowing users to input their email address. Implement email format validation on the server side to ensure proper formatting before saving. Update the profile form to include the email input, enhancing user experience and notification capabilities.
Made-with: Cursor
- Added a comprehensive implementation plan for comment email infrastructure, including SMTP configuration, guest email handling, and user notification preferences.
- Extended the config registry and admin UI to support new settings, ensuring a robust email notification system without blocking comment creation.
- Created necessary API endpoints and tests to validate the functionality of the new features.
This update enhances the comment system's email capabilities and user experience.
Expose login-state comment notify warnings in comment composer and show incomplete SMTP config status in admin settings to prevent misleading mail-send expectations.
Made-with: Cursor
Skip reply notification sending when receiver email format is invalid, while preserving best-effort behavior and adding test coverage for invalid receiver email.
Made-with: Cursor
Pass postId and commentId into reply notification flow and log structured failure context with receiverUserId and reason while keeping best-effort behavior unchanged.
Made-with: Cursor
Trigger reply notification email after comment creation for public and unlisted endpoints with gated checks for global switch, SMTP readiness, receiver preferences, and self-notify suppression.
Made-with: Cursor
Expose commentNotifyEnabled in profile page state, load it from /api/config/me with true fallback, and persist updates when saving profile settings.
Made-with: Cursor
Remove legacy guest compatibility fallback in service logic so undefined guestIsAnonymous is treated as false and guest email stays required by default. Update tests to assert missing anonymous flag without email now fails.
Made-with: Cursor
Keep guestIsAnonymous undefined when the field is omitted so legacy-client compatibility fallback can trigger. Explicit false remains strict and still requires guest email.
Made-with: Cursor
Add a temporary legacy fallback so guest payloads missing both guestEmail and guestIsAnonymous are treated as anonymous during rollout. Add service-level and API body parsing tests for guest email rules, logged-in ignore behavior, and public/unlisted passthrough.
Made-with: Cursor
Add guest email validation with anonymous-mode exceptions and persist guestEmail/guestIsAnonymous in comment creation. Update comment form to collect anonymous and email fields for guests and reset them after successful submit.
Made-with: Cursor
Refine the Task4 rollback plan with executable SQL, explicit schema restoration targets, and post-rollback validation checks so rollback readiness is auditable before Task5.
Made-with: Cursor
Document an actionable Task4 rollback plan for SQLite, including temp-table replacement steps, index/constraint rebuild, and maintenance-window backup prerequisites to remove quality gate blockers.
Made-with: Cursor
Extend post comment schema and sqlite migration metadata to persist optional guest email and an explicit anonymous flag for upcoming guest comment flows.
Made-with: Cursor
Add IP-based rate limiting for the admin test-email API and set SMTP connection/send timeouts to avoid long blocking requests, with extra admin email format validation.
Made-with: Cursor
Add an admin-only test email endpoint with SMTP config and admin email validation, plus a config-page action button to trigger test sends and minimal service tests for key 400 failure paths.
Made-with: Cursor
Restrict global config GET for non-admin users and always mask commentSmtpPass in responses, while preventing admin save from sending empty smtp passwords that would clear existing secrets.
Made-with: Cursor
Expose comment mail global config fields in the frontend composable and admin config page so admins can view and save notification mail settings.
Made-with: Cursor
Apply trim/blank-to-empty normalization for comment email/smtp global keys in setGlobalConfigValue, and replace registry test casts with KnownConfigKey-safe assertions plus normalization coverage.
Made-with: Cursor
- Updated package.json to specify exact versions for several dependencies and devDependencies, ensuring consistent installations across environments.
- Added log configuration options for maximum log size and backup retention in the logger module.
This update enhances dependency management and logging configuration.
- Revised the README to specify that the application currently only supports SQLite for the database.
- Removed the 'unlisted' option from the profile settings in the Vue component to streamline choices.
This update improves clarity in deployment instructions and user options.
- Added SCSS support with new global and common stylesheets.
- Introduced markdown styling for enhanced content presentation.
- Implemented a `usePageTitle` composable for dynamic document title management across various pages.
- Updated multiple pages to utilize the new title management system, improving SEO and user experience.
This update enhances the overall styling and usability of the application.
- Added constants for common cloud probe paths and prefixes.
- Introduced middleware to handle cloud probe requests with appropriate cache control headers.
- Updated Nuxt configuration to include route rules for cloud probe paths.
This enhances the application's ability to respond to health checks from various cloud platforms.
- Introduced user notes for media assets, allowing admins and users to add descriptions.
- Enhanced media asset listing with reference contexts, providing links to related content.
- Updated API endpoints to support note saving and retrieval.
- Modified database schema to include user notes and related fields.
- Improved search functionality to include user notes in media asset queries.
Made-with: Cursor
- Introduced new types for audit rows and reference details to improve data structure.
- Updated the media storage audit logic to include references for each asset, allowing for better tracking of media usage.
- Enhanced UI to display reference sources for media assets, clarifying the relationship between assets and their references.
- Improved cleanup descriptions and toast messages for better user understanding of actions taken.
Made-with: Cursor
- Added a custom JSON error handler to improve error responses in Nitro.
- Introduced utility functions to determine JSON request types and normalize error messages.
- Updated Nuxt configuration to utilize the new error handler.
Made-with: Cursor