Contacts are permanently deleted today, so a mistaken delete or a bad import cannot be undone without restoring from backups. Add a trash flow: deleting a contact moves it to a trash state (hidden from the main contacts list, search, and export) for 30 days, during which an admin can restore it with its related data intact; after 30 days, trashed contacts are purged automatically via a scheduled job. This should cover list/detail UI (trash view + restore), API changes (soft delete instead of hard delete, restore endpoint), query/index updates (exclude trashed by default), and clear rules for edge cases such as Brevo-synced contacts, linked tasks/comments, and who may restore or permanently delete. Companies intentionally use hard delete (spec 070); this issue applies to contacts only.
cc @hendrikebbers
Contacts are permanently deleted today, so a mistaken delete or a bad import cannot be undone without restoring from backups. Add a trash flow: deleting a contact moves it to a trash state (hidden from the main contacts list, search, and export) for 30 days, during which an admin can restore it with its related data intact; after 30 days, trashed contacts are purged automatically via a scheduled job. This should cover list/detail UI (trash view + restore), API changes (soft delete instead of hard delete, restore endpoint), query/index updates (exclude trashed by default), and clear rules for edge cases such as Brevo-synced contacts, linked tasks/comments, and who may restore or permanently delete. Companies intentionally use hard delete (spec 070); this issue applies to contacts only.
cc @hendrikebbers